diff mbox series

[2/2] musb-new: omap2430: fix musb probing in gadget mode

Message ID 20221126223010.3319020-3-andreas@kemnade.info
State Changes Requested
Delegated to: Tom Rini
Headers show
Series musb-new: fix omap peripheral support | expand

Commit Message

Andreas Kemnade Nov. 26, 2022, 10:30 p.m. UTC
Host mode structures were accessed but not initialized
and gadget dm did not compile at all.

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
 drivers/usb/musb-new/omap2430.c | 42 ++++++++++++++++++++-------------
 1 file changed, 25 insertions(+), 17 deletions(-)

Comments

Tom Rini Dec. 12, 2022, 7 p.m. UTC | #1
On Sat, Nov 26, 2022 at 11:30:10PM +0100, Andreas Kemnade wrote:

> Host mode structures were accessed but not initialized
> and gadget dm did not compile at all.
> 
> Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
> ---
>  drivers/usb/musb-new/omap2430.c | 42 ++++++++++++++++++++-------------
>  1 file changed, 25 insertions(+), 17 deletions(-)

This breaks omap3_beagle and omap3_evm.
Andreas Kemnade Dec. 13, 2022, 8:30 a.m. UTC | #2
Hi,

On Mon, 12 Dec 2022 14:00:57 -0500
Tom Rini <trini@konsulko.com> wrote:

> On Sat, Nov 26, 2022 at 11:30:10PM +0100, Andreas Kemnade wrote:
> 
> > Host mode structures were accessed but not initialized
> > and gadget dm did not compile at all.
> > 
> > Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
> > ---
> >  drivers/usb/musb-new/omap2430.c | 42 ++++++++++++++++++++-------------
> >  1 file changed, 25 insertions(+), 17 deletions(-)  
> 
> This breaks omap3_beagle and omap3_evm.
> 
sorry, I will retest again. Probably best to add a CONFIG_DM_USB_GADGET
conditional there. That seems to be the problem there. I just thought
that nobody would care about non-CONFIG_DM_USB_GADGET and overlooked
the omap3 configs.

Regards,
Andreas
Andreas Kemnade Dec. 13, 2022, 8:32 p.m. UTC | #3
Hi,

just noticed I am doing two things in one patch.
better do it with just some patches

On Mon, 12 Dec 2022 14:00:57 -0500
Tom Rini <trini@konsulko.com> wrote:

> On Sat, Nov 26, 2022 at 11:30:10PM +0100, Andreas Kemnade wrote:
> 
> > Host mode structures were accessed but not initialized
first thing

->         struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
which will be zero if not in host mode (and later priv->something is
accessed unconditional.

> > and gadget dm did not compile at all.
> > 
preparing things for DM_USB_GADGET should probably better
a separate patch. I will send an update hopefully soon.

> > Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
> > ---
> >  drivers/usb/musb-new/omap2430.c | 42 ++++++++++++++++++++-------------
> >  1 file changed, 25 insertions(+), 17 deletions(-)  
> 
> This breaks omap3_beagle and omap3_evm.
> 

Regards,
Andreas
diff mbox series

Patch

diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c
index 7d15b94a6c..607592a1d0 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)