diff options
author | Andreas Kemnade <andreas@kemnade.info> | 2022-11-26 23:30:10 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-12-12 11:53:24 -0500 |
commit | 03d2c3bd03710ceeccdea781dc6b736214f102cb (patch) | |
tree | 206ef19f32c8f2d34ebf8893a731211b1a1051e2 | |
parent | 6e7b8805509301cec4d6d67149225a4aebb7e30f (diff) | |
download | u-boot-03d2c3bd03710ceeccdea781dc6b736214f102cb.zip u-boot-03d2c3bd03710ceeccdea781dc6b736214f102cb.tar.gz u-boot-03d2c3bd03710ceeccdea781dc6b736214f102cb.tar.bz2 |
musb-new: omap2430: fix musb probing in gadget mode
Host mode structures were accessed but not initialized
and gadget dm did not compile at all.
Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
-rw-r--r-- | drivers/usb/musb-new/omap2430.c | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c index 7d15b94..607592a 100644 --- a/drivers/usb/musb-new/omap2430.c +++ b/drivers/usb/musb-new/omap2430.c @@ -46,6 +46,13 @@ static inline void omap2430_low_level_init(struct musb *musb) musb_writel(musb->mregs, OTG_FORCESTDBY, l); } +int dm_usb_gadget_handle_interrupts(struct udevice *dev) +{ + struct musb_host_data *host = dev_get_priv(dev); + + host->host->isr(0, host->host); + return 0; +} static int omap2430_musb_init(struct musb *musb) { @@ -214,37 +221,38 @@ static int omap2430_musb_of_to_plat(struct udevice *dev) static int omap2430_musb_probe(struct udevice *dev) { -#ifdef CONFIG_USB_MUSB_HOST struct musb_host_data *host = dev_get_priv(dev); -#else - struct musb *musbp; -#endif + struct omap2430_musb_plat *plat = dev_get_plat(dev); - struct usb_bus_priv *priv = dev_get_uclass_priv(dev); struct omap_musb_board_data *otg_board_data; int ret = 0; void *base = dev_read_addr_ptr(dev); - priv->desc_before_addr = true; otg_board_data = &plat->otg_board_data; -#ifdef CONFIG_USB_MUSB_HOST + if (IS_ENABLED(CONFIG_USB_MUSB_HOST)) { + struct usb_bus_priv *priv = dev_get_uclass_priv(dev); + + priv->desc_before_addr = true; + host->host = musb_init_controller(&plat->plat, + (struct device *)otg_board_data, + plat->base); + if (!host->host) + return -EIO; + + return musb_lowlevel_init(host); + } + + /* OTG still not supported, so forcing peripheral */ + plat->plat.mode = MUSB_PERIPHERAL; host->host = musb_init_controller(&plat->plat, (struct device *)otg_board_data, plat->base); - if (!host->host) { + if (!host->host) return -EIO; - } - ret = musb_lowlevel_init(host); -#else - musbp = musb_register(&plat->plat, (struct device *)otg_board_data, - plat->base); - if (IS_ERR_OR_NULL(musbp)) - return -EINVAL; -#endif - return ret; + return usb_add_gadget_udc((struct device *)otg_board_data, &host->host->g); } static int omap2430_musb_remove(struct udevice *dev) |