Subject: Re: fsl_udc_core not initializing properly?

From: Anatolij Gustschin <[email-masked]>
Date: Sat, 19 Feb 2011 09:52:53 +0100

Hi,

On Fri, 18 Feb 2011 17:03:12 -0500
"Matthew L. Creech" <[email-masked]> wrote:
...
> I'm upgrading from 2.6.36 to 2.6.37 on a MPC8313 ERDB-like board.  On
> the new kernel, it seems like the USB gadget driver (fsl_usb2_udc) is
> never initialized, so USB no longer works.
> 
> Adding some printks to the code shows that udc_init() is being run,
> which calls platform_driver_probe().  However, fsl_udc_probe() is
> never actually called afterward.  As a result, 'udc_controller' is
> left NULL, and the subsequent call to usb_gadget_probe_driver()
> returns -ENODEV.

Look at the USB node in the device tree for your board. Does it
contain the "dr_mode" property? For USB gadget the value of this
property should be "peripheral".
The device tree for MPC8313 ERDB in mainline tree doesn't specify
this property, so the host mode is the default operation mode here.
Therefore the platform device "fsl-usb2-udc" won't be created
while booting and since there is no appropriate platform device,
the probing is not done. This might be the case on your board,
too. Try with dr_mode = "peripheral"; in the usb node in your
device tree.

Anatolij