[U-Boot] [PATCH 1/2] USB: musb-new: omap2430: Prep driver for Peripheral support.
Adam Ford
aford173 at gmail.com
Mon Dec 17 20:34:51 UTC 2018
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 <aford173 at gmail.com>
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
More information about the U-Boot
mailing list