video: stm32: remove the compatible "synopsys, dw-mipi-dsi" support
authorPatrick Delaunay <patrick.delaunay@st.com>
Tue, 12 Nov 2019 14:39:58 +0000 (15:39 +0100)
committerAnatolij Gustschin <agust@denx.de>
Tue, 12 Nov 2019 15:15:53 +0000 (16:15 +0100)
Remove the compatible "synopsys,dw-mipi-dsi" added in U-Boot
(it don't exist in Linux kernel binding); it is only used
to bind the generic synopsys UCLASS_DSI_HOST "dw_mipi_dsi" to
the driver "stm32-display-dsi" UCLASS_VIDEO_BRIDGE

This binding is done in Linux kernel drivers without compatible
(dw_mipi_dsi_bind() is called in bind of driver, for example in
drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c).

This patch does the same in U-Boot driver, the STM32 driver
calls during its bind the function device_bind_driver_to_node
to bind the generic driver "dw_mipi_dsi" at the same address.

This patch reduces the device tree differences
between Linux kernel and U-Boot for stm32mp1 platform.

Tested with v2020.01-rc1 on STM32MP157C-EV1 and STM32MP157C-DK2.

The dependency of driver is clearer and the probe order is guaranteed.

STM32MP> dm tree
 Class     Index  Probed  Driver                Name
-----------------------------------------------------------
 root          0  [ + ]   root_driver           root_driver
 sysreset      0  [   ]   syscon_reboot         |-- reboot
 simple_bus    0  [ + ]   generic_simple_bus    |-- soc
 serial        0  [ + ]   serial_stm32          |   |-- serial@40010000
...
 video_brid    0  [ + ]   stm32-display-dsi     |   |-- dsi@5a000000
 dsi_host      0  [ + ]   dw_mipi_dsi           |   |   |-- dsihost
 panel         0  [ + ]   rm68200_panel         |   |   `-- panel-dsi@0
...

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
arch/arm/dts/stm32mp157c-dk2-u-boot.dtsi
arch/arm/dts/stm32mp157c-ev1-u-boot.dtsi
drivers/video/dw_mipi_dsi.c
drivers/video/stm32/stm32_dsi.c

index cd9947f166ca4c5eccfe87e4467fac6cdf929d6b..18ac1e3cb2afe836a322cabb0a04d3cb4669acbf 100644 (file)
@@ -5,13 +5,6 @@
 
 #include "stm32mp157a-dk1-u-boot.dtsi"
 
-/ {
-       dsi_host: dsi_host {
-               compatible = "synopsys,dw-mipi-dsi";
-               status = "okay";
-       };
-};
-
 &i2c1 {
        hdmi-transmitter@39 {
                reset-gpios = <&gpioa 10 GPIO_ACTIVE_LOW>;
index af5945d20b4d08c5da75594e3c28c3d6106543de..ec60486f41e079d0c4e66fe75120b87818637a36 100644 (file)
                spi0 = &qspi;
                usb0 = &usbotg_hs;
        };
-
-       dsi_host: dsi_host {
-               compatible = "synopsys,dw-mipi-dsi";
-               status = "okay";
-       };
 };
 
 &flash0 {
index 04b07e3a2c765ae3cfbd85b30defd1b659376d60..83d7c7b2c0476692b36637536670eb449c25c58d 100644 (file)
@@ -816,15 +816,9 @@ static int dw_mipi_dsi_probe(struct udevice *dev)
        return 0;
 }
 
-static const struct udevice_id dw_mipi_dsi_ids[] = {
-       { .compatible = "synopsys,dw-mipi-dsi" },
-       { }
-};
-
 U_BOOT_DRIVER(dw_mipi_dsi) = {
        .name                   = "dw_mipi_dsi",
        .id                     = UCLASS_DSI_HOST,
-       .of_match               = dw_mipi_dsi_ids,
        .probe                  = dw_mipi_dsi_probe,
        .ops                    = &dw_mipi_dsi_ops,
        .priv_auto_alloc_size   = sizeof(struct dw_mipi_dsi),
index cb89576e1d650e1c569f3ba340022a6326f750d3..12895a8f5d8c5ff0918e02df543a5e9d73e5f49b 100644 (file)
@@ -20,6 +20,7 @@
 #include <asm/io.h>
 #include <asm/arch/gpio.h>
 #include <dm/device-internal.h>
+#include <dm/lists.h>
 #include <linux/iopoll.h>
 #include <power/regulator.h>
 
@@ -399,6 +400,18 @@ static int stm32_dsi_set_backlight(struct udevice *dev, int percent)
        return 0;
 }
 
+static int stm32_dsi_bind(struct udevice *dev)
+{
+       int ret;
+
+       ret = device_bind_driver_to_node(dev, "dw_mipi_dsi", "dsihost",
+                                        dev_ofnode(dev), NULL);
+       if (ret)
+               return ret;
+
+       return dm_scan_fdt_dev(dev);
+}
+
 static int stm32_dsi_probe(struct udevice *dev)
 {
        struct stm32_dsi_priv *priv = dev_get_priv(dev);
@@ -483,7 +496,7 @@ U_BOOT_DRIVER(stm32_dsi) = {
        .name                           = "stm32-display-dsi",
        .id                             = UCLASS_VIDEO_BRIDGE,
        .of_match                       = stm32_dsi_ids,
-       .bind                           = dm_scan_fdt_dev,
+       .bind                           = stm32_dsi_bind,
        .probe                          = stm32_dsi_probe,
        .ops                            = &stm32_dsi_ops,
        .priv_auto_alloc_size           = sizeof(struct stm32_dsi_priv),