The select_dr_mode operation is executed when the glue driver is probed.
The role of this optional function is to configure the operating mode
of the controller at the glue level.

Signed-off-by: Jean-Jacques Hiblot <jjhib...@ti.com>

---

Changes in v2: None

 drivers/usb/dwc3/dwc3-generic.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index 2c27dbc..169188c 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -8,6 +8,7 @@
  */
 
 #include <common.h>
+#include <asm-generic/io.h>
 #include <dm.h>
 #include <dm/device-internal.h>
 #include <dm/lists.h>
@@ -111,6 +112,12 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = {
 struct dwc3_glue_data {
        struct clk_bulk         clks;
        struct reset_ctl_bulk   resets;
+       fdt_addr_t regs;
+};
+
+struct dwc3_glue_ops {
+       void (*select_dr_mode)(struct udevice *dev, int index,
+                              enum usb_dr_mode mode);
 };
 
 static int dwc3_glue_bind(struct udevice *parent)
@@ -206,9 +213,14 @@ static int dwc3_glue_clk_init(struct udevice *dev,
 
 static int dwc3_glue_probe(struct udevice *dev)
 {
+       struct dwc3_glue_ops *ops = (struct dwc3_glue_ops 
*)dev_get_driver_data(dev);
        struct dwc3_glue_data *glue = dev_get_platdata(dev);
+       struct udevice *child = NULL;
+       int index = 0;
        int ret;
 
+       glue->regs = dev_read_addr(dev);
+
        ret = dwc3_glue_clk_init(dev, glue);
        if (ret)
                return ret;
@@ -217,6 +229,20 @@ static int dwc3_glue_probe(struct udevice *dev)
        if (ret)
                return ret;
 
+       ret = device_find_first_child(dev, &child);
+       if (ret)
+               return ret;
+
+       while (child) {
+               enum usb_dr_mode dr_mode;
+
+               dr_mode = usb_get_dr_mode(dev_of_offset(child));
+               device_find_next_child(&child);
+               if (ops && ops->select_dr_mode)
+                       ops->select_dr_mode(dev, index, dr_mode);
+               index++;
+       }
+
        return 0;
 }
 
-- 
2.7.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to