
On Mon, Dec 17, 2018 at 2:35 PM Adam Ford aford173@gmail.com wrote:
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@gmail.com
With the merge window and the pending DM_USB requirements, is there anything I need to do differently to this series, or it is ok as-is?
adam
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