The omap2430 driver only currently supports host only.  In
preparation for supporting peripheral mode, this patch makes
the driver support only the host by creating a ofdata_to_platdata
function host/peripheral agnostic with a host helper version.

Signed-off-by: Adam Ford <aford...@gmail.com>
---
V2:  No Changes

diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c
index 32743aa72c..b6e1320538 100644
--- a/drivers/usb/musb-new/omap2430.c
+++ b/drivers/usb/musb-new/omap2430.c
@@ -137,6 +137,12 @@ const struct musb_platform_ops omap2430_ops = {
 
 #if CONFIG_IS_ENABLED(DM_USB)
 
+static const struct udevice_id omap2430_musb_ids[] = {
+       { .compatible = "ti,omap3-musb" },
+       { .compatible = "ti,omap4-musb" },
+       { }
+};
+
 struct omap2430_musb_platdata {
        void *base;
        void *ctrl_mod_base;
@@ -190,20 +196,6 @@ static int omap2430_musb_ofdata_to_platdata(struct udevice 
*dev)
                return -ENOENT;
        }
 
-#if 0 /* In a perfect world, mode would be set to OTG, mode 3 from DT */
-       platdata->plat.mode = fdtdec_get_int(fdt, node,
-                                                                               
"mode", -1);
-       if (platdata->plat.mode < 0) {
-               pr_err("MUSB mode DT entry missing\n");
-               return -ENOENT;
-       }
-#else /* MUSB_OTG, it doesn't work */
-#ifdef CONFIG_USB_MUSB_HOST /* Host seems to be the only option that works */
-       platdata->plat.mode = MUSB_HOST;
-#else /* For that matter, MUSB_PERIPHERAL doesn't either */
-       platdata->plat.mode = MUSB_PERIPHERAL;
-#endif
-#endif
        platdata->otg_board_data.dev = dev;
        platdata->plat.config = &platdata->musb_config;
        platdata->plat.platform_ops = &omap2430_ops;
@@ -211,11 +203,10 @@ static int omap2430_musb_ofdata_to_platdata(struct 
udevice *dev)
        return 0;
 }
 
+#ifdef CONFIG_USB_MUSB_HOST
 static int omap2430_musb_probe(struct udevice *dev)
 {
-#ifdef CONFIG_USB_MUSB_HOST
        struct musb_host_data *host = dev_get_priv(dev);
-#endif
        struct omap2430_musb_platdata *platdata = dev_get_platdata(dev);
        struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
        struct omap_musb_board_data *otg_board_data;
@@ -226,7 +217,6 @@ static int omap2430_musb_probe(struct udevice *dev)
 
        otg_board_data = &platdata->otg_board_data;
 
-#ifdef CONFIG_USB_MUSB_HOST
        host->host = musb_init_controller(&platdata->plat,
                                          (struct device *)otg_board_data,
                                          platdata->base);
@@ -235,11 +225,7 @@ static int omap2430_musb_probe(struct udevice *dev)
        }
 
        ret = musb_lowlevel_init(host);
-#else
-       ret = musb_register(&platdata->plat,
-                         (struct device *)otg_board_data,
-                         platdata->base);
-#endif
+
        return ret;
 }
 
@@ -252,28 +238,40 @@ static int omap2430_musb_remove(struct udevice *dev)
        return 0;
 }
 
-static const struct udevice_id omap2430_musb_ids[] = {
-       { .compatible = "ti,omap3-musb" },
-       { .compatible = "ti,omap4-musb" },
-       { }
-};
+#if CONFIG_IS_ENABLED(OF_CONTROL)
+static int omap2430_musb_host_ofdata_to_platdata(struct udevice *dev)
+{
+       struct ti_musb_platdata *platdata = dev_get_platdata(dev);
+       const void *fdt = gd->fdt_blob;
+       int node = dev_of_offset(dev);
+       int ret;
+
+       ret = omap2430_musb_ofdata_to_platdata(dev);
+       if (ret) {
+               pr_err("platdata dt parse error\n");
+               return ret;
+       }
+
+       platdata->plat.mode = MUSB_HOST;
+
+       return 0;
+}
+#endif
 
 U_BOOT_DRIVER(omap2430_musb) = {
        .name   = "omap2430-musb",
-#ifdef CONFIG_USB_MUSB_HOST
        .id             = UCLASS_USB,
-#else
-       .id             = UCLASS_USB_GADGET_GENERIC,
-#endif
        .of_match = omap2430_musb_ids,
-       .ofdata_to_platdata = omap2430_musb_ofdata_to_platdata,
+#if CONFIG_IS_ENABLED(OF_CONTROL)
+       .ofdata_to_platdata = omap2430_musb_host_ofdata_to_platdata,
+#endif
        .probe = omap2430_musb_probe,
        .remove = omap2430_musb_remove,
-#ifdef CONFIG_USB_MUSB_HOST
        .ops = &musb_usb_ops,
-#endif
        .platdata_auto_alloc_size = sizeof(struct omap2430_musb_platdata),
        .priv_auto_alloc_size = sizeof(struct musb_host_data),
 };
 
+#endif
+
 #endif /* CONFIG_IS_ENABLED(DM_USB) */
-- 
2.17.1

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

Reply via email to