]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
serial_sh: Device Tree support
authorYoshinori Sato <ysato@users.sourceforge.jp>
Mon, 18 Apr 2016 07:51:04 +0000 (16:51 +0900)
committerNobuhiro Iwamatsu <iwamatsu@nigauri.org>
Fri, 8 Jul 2016 20:51:57 +0000 (05:51 +0900)
Add Device Tree bindings.

Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
doc/device-tree-bindings/serial/sh.txt [new file with mode: 0644]
drivers/serial/serial_sh.c

diff --git a/doc/device-tree-bindings/serial/sh.txt b/doc/device-tree-bindings/serial/sh.txt
new file mode 100644 (file)
index 0000000..b23b135
--- /dev/null
@@ -0,0 +1,6 @@
+* Renesas SCI serial interface
+
+Required properties:
+- compatible: must be "renesas,scif" or "renesas,scifa"
+- reg: exactly one register range with length
+- clock: input clock frequency for the SCI unit
index 8693c1ed140bedb5232038b9f1c332f21b5dcf8e..32b2bf082f70bc91a694274b6dfdb2e2dcb1339b 100644 (file)
@@ -17,6 +17,8 @@
 #include <dm/platform_data/serial_sh.h>
 #include "serial_sh.h"
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #if defined(CONFIG_CPU_SH7760) || \
        defined(CONFIG_CPU_SH7780) || \
        defined(CONFIG_CPU_SH7785) || \
@@ -201,9 +203,35 @@ static const struct dm_serial_ops sh_serial_ops = {
        .setbrg = sh_serial_setbrg,
 };
 
+#ifdef CONFIG_OF_CONTROL
+static const struct udevice_id sh_serial_id[] ={
+       {.compatible = "renesas,scif", .data = PORT_SCIF},
+       {.compatible = "renesas,scifa", .data = PORT_SCIFA},
+       {}
+};
+
+static int sh_serial_ofdata_to_platdata(struct udevice *dev)
+{
+       struct sh_serial_platdata *plat = dev_get_platdata(dev);
+       fdt_addr_t addr;
+
+       addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg");
+       if (addr == FDT_ADDR_T_NONE)
+               return -EINVAL;
+
+       plat->base = addr;
+       plat->clk = fdtdec_get_int(gd->fdt_blob, dev->of_offset, "clock", 1);
+       plat->type = dev_get_driver_data(dev);
+       return 0;
+}
+#endif
+
 U_BOOT_DRIVER(serial_sh) = {
        .name   = "serial_sh",
        .id     = UCLASS_SERIAL,
+       .of_match = of_match_ptr(sh_serial_id),
+       .ofdata_to_platdata = of_match_ptr(sh_serial_ofdata_to_platdata),
+       .platdata_auto_alloc_size = sizeof(struct sh_serial_platdata),
        .probe  = sh_serial_probe,
        .ops    = &sh_serial_ops,
        .flags  = DM_FLAG_PRE_RELOC,