serial: stm32f7: add device tree support
authorVikas Manocha <vikas.manocha@st.com>
Sun, 12 Feb 2017 18:25:44 +0000 (10:25 -0800)
committerTom Rini <trini@konsulko.com>
Fri, 17 Mar 2017 18:15:12 +0000 (14:15 -0400)
This patch adds device tree support for stm32f7 serial driver & removes serial
platform data structure.

Signed-off-by: Vikas Manocha <vikas.manocha@st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
board/st/stm32f746-disco/stm32f746-disco.c
drivers/serial/serial_stm32x7.c

index 7ed7bf7263a1fc1616336fc7297a4d5ea5c9e6b1..72212f4912667cfc1cbe302f665d9f843bc5208b 100644 (file)
@@ -267,16 +267,6 @@ out:
        return rv;
 }
 
-static const struct stm32x7_serial_platdata serial_platdata = {
-       .base = (struct stm32_usart *)USART1_BASE,
-       .clock = CONFIG_SYS_CLK_FREQ,
-};
-
-U_BOOT_DEVICE(stm32x7_serials) = {
-       .name = "serial_stm32x7",
-       .platdata = &serial_platdata,
-};
-
 #ifdef CONFIG_ETH_DESIGNWARE
 const struct stm32_gpio_ctl gpio_ctl_eth = {
        .mode = STM32_GPIO_MODE_AF,
index 592c0bde3680006786bafde2f8df8f4faf22298c..2e6c67688c83d96f9774bbb98b63c074556837b1 100644 (file)
@@ -81,6 +81,27 @@ static int stm32_serial_probe(struct udevice *dev)
        return 0;
 }
 
+#if CONFIG_IS_ENABLED(OF_CONTROL)
+static const struct udevice_id stm32_serial_id[] = {
+       {.compatible = "st,stm32-usart"},
+       {.compatible = "st,stm32-uart"},
+       {}
+};
+
+static int stm32_serial_ofdata_to_platdata(struct udevice *dev)
+{
+       struct stm32x7_serial_platdata *plat = dev_get_platdata(dev);
+       fdt_addr_t addr;
+
+       addr = dev_get_addr(dev);
+       if (addr == FDT_ADDR_T_NONE)
+               return -EINVAL;
+
+       plat->base = (struct stm32_usart *)addr;
+       return 0;
+}
+#endif
+
 static const struct dm_serial_ops stm32_serial_ops = {
        .putc = stm32_serial_putc,
        .pending = stm32_serial_pending,
@@ -91,6 +112,9 @@ static const struct dm_serial_ops stm32_serial_ops = {
 U_BOOT_DRIVER(serial_stm32) = {
        .name = "serial_stm32x7",
        .id = UCLASS_SERIAL,
+       .of_match = of_match_ptr(stm32_serial_id),
+       .ofdata_to_platdata = of_match_ptr(stm32_serial_ofdata_to_platdata),
+       .platdata_auto_alloc_size = sizeof(struct stm32x7_serial_platdata),
        .ops = &stm32_serial_ops,
        .probe = stm32_serial_probe,
        .flags = DM_FLAG_PRE_RELOC,