Re: usb: gadget breakage on N900: bind UDC by name passed via usb_gadget_driver structure

From: Ruslan Bilovol
Date: Fri Mar 18 2016 - 03:48:11 EST

Hi Pavel

On Thu, Mar 17, 2016 at 11:26 PM, Pavel Machek <pavel@xxxxxx> wrote:
> Hi!
> USB gadget stops working for me on n900, if I merge

Could you please give us more details?
Which gadget driver do you use (g_nokia?)

> usb: gadget: bind UDC by name passed via usb_gadget_driver structure
> patch.
> commit 2284b29d3d9dd16490909962574d7f3fef83fd97
> Author: Ruslan Bilovol <ruslan.bilovol@xxxxxxxxx>
> Date: Mon Nov 23 09:56:35 2015 +0100
> usb: gadget: bind UDC by name passed via usb_gadget_driver
> structure
> Introduce new 'udc_name' member to usb_gadget_driver structure.
> The 'udc_name' is a name of UDC that usb_gadget_driver should
> be bound to. If udc_name is NULL, it will be bound to any
> available UDC.
> Tested-by: Maxime Ripard <maxime.ripard@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Ruslan Bilovol <ruslan.bilovol@xxxxxxxxx>
> Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> Tested-by: Peter Chen <peter.chen@xxxxxxxxxxxxx>
> Signed-off-by: Felipe Balbi <balbi@xxxxxx>
> Patch is obvious enough... if there's someone who sets udc_name to
> NULL. Who is supposed to do that?

That is done automatically if you use libcomposite.
There is a static usb_gadget_driver composite_driver_template structure in
composite.c that is used in usb_composite_probe later (used by libcomposite
based gadgets). Since it's statically declared, 'udc_name' member is set
to NULL automatically.

Other gadgets (not based on libcomposite) use same approach with
statically declared usb_gadget_driver structure.

> (I have patch in my tree to make USB gadget work when it is not
> modular).

So this can be reproduced only on builtin gadget, right?

BTW, I have N900 and can try to play with it this weekend if you'll
give us more details.

Best regards,

> Best regards,
> Pavel
> --
> (english)
> (cesky, pictures)