aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kemnade <andreas@kemnade.info>2022-11-26 23:30:10 +0100
committerTom Rini <trini@konsulko.com>2022-12-12 11:53:24 -0500
commit03d2c3bd03710ceeccdea781dc6b736214f102cb (patch)
tree206ef19f32c8f2d34ebf8893a731211b1a1051e2
parent6e7b8805509301cec4d6d67149225a4aebb7e30f (diff)
downloadu-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.c42
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)