Re: usb: udc-core: Dual gadget issue in v3.1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Oct 19, 2011, at 5:06 AM, "Gupta, Ajay Kumar" <ajay.gupta@xxxxxx> wrote:

> Hi,
>> On Thu, Oct 13, 2011 at 12:50:55PM +0530, Gupta, Ajay Kumar wrote:
>>> We are facing an issue in AM335x based custom board which has two musb
>>> port.
>>> 
>>> a) musb0  ID pin is floating and have micro-B plug receptacle
>>> connector. [DEVICE ONLY]
>>> b) musb1  ID pin is grounded and have standard-A plug receptacle
>>> connector. [HOST ONLY]
>>> 
>>> We are using udc-core in linux v3.1-rc8 kernel. This kernel only
>>> provides option for selecting gadget driver for first instance only as
>>> builtin.
>> 
>> why don't you mark all gadget drivers as modules ? I do that all the
>> time:
> 
> This wouldn't help if we want to use musb1 (host only) port during bootup
> so that root file system on a pen drive connected to it can be mounted.

I don't think it hurts that use case as the host driver is enabled by the platform data without other sections of the kernel having it hard-coded to a port. 

> 
>> 
>> CONFIG_USB_GADGET=m
>> CONFIG_USB_GADGET_DEBUG=y
>> CONFIG_USB_GADGET_DEBUG_FILES=y
>> CONFIG_USB_GADGET_DEBUG_FS=y
>> CONFIG_USB_GADGET_VBUS_DRAW=2
>> CONFIG_USB_R8A66597=m
>> CONFIG_USB_M66592=m
>> CONFIG_USB_AMD5536UDC=m
>> CONFIG_USB_CI13XXX_PCI=m
>> CONFIG_USB_NET2272=m
>> CONFIG_USB_NET2272_DMA=y
>> CONFIG_USB_NET2280=m
>> CONFIG_USB_GOKU=m
>> CONFIG_USB_EG20T=m
>> CONFIG_USB_DUMMY_HCD=m
>> CONFIG_USB_GADGET_DUALSPEED=y
>> CONFIG_USB_GADGET_SUPERSPEED=y
>> CONFIG_USB_ZERO=m
>> CONFIG_USB_ZERO_HNPTEST=y
>> CONFIG_USB_AUDIO=m
>> CONFIG_USB_ETH=m
>> CONFIG_USB_ETH_RNDIS=y
>> CONFIG_USB_ETH_EEM=y
>> CONFIG_USB_G_NCM=m
>> CONFIG_USB_GADGETFS=m
>> CONFIG_USB_FUNCTIONFS=m
>> CONFIG_USB_FUNCTIONFS_ETH=y
>> CONFIG_USB_FUNCTIONFS_RNDIS=y
>> CONFIG_USB_FUNCTIONFS_GENERIC=y
>> CONFIG_USB_FILE_STORAGE=m
>> CONFIG_USB_FILE_STORAGE_TEST=y
>> CONFIG_USB_MASS_STORAGE=m
>> CONFIG_USB_G_SERIAL=m
>> CONFIG_USB_MIDI_GADGET=m
>> CONFIG_USB_G_PRINTER=m
>> CONFIG_USB_CDC_COMPOSITE=m
>> CONFIG_USB_G_NOKIA=m
>> CONFIG_USB_G_MULTI=m
>> CONFIG_USB_G_MULTI_RNDIS=y
>> CONFIG_USB_G_MULTI_CDC=y
>> CONFIG_USB_G_HID=m
>> CONFIG_USB_G_DBGP=m
>> # CONFIG_USB_G_DBGP_PRINTK is not set
>> CONFIG_USB_G_DBGP_SERIAL=y
>> CONFIG_USB_G_WEBCAM=m
>> 
>>> Current musb driver requires a gadget module to be inserted for a musb
>>> port to be usable in OTG mode which is the only mode available in
>>> v3.1-rc8 due to recent changes removing all HOST and GADGET only
>>> ifdeffery.
>> 
>> You can add runtime checks based on platform_data. Something like:
>> 
>> switch (pdata->mode) {
>> case MUSB_HOST:
>>    start_host();
>>    break;
>> case MUSB_PERIPHERAL:
>>    start_gadget();
>>    break;
>> case MUSB_OTG:
>>    start_gadget()
>>    start_host();
>>    break;
>> default:
>>    error();
>> }
>> 
>> which means that for a port which is host-only, it won't require a
>> gadget driver and for a port which is gadget-only, it won't start host
>> stack.
> 
> If so then how about the menuconfig option for gadget driver for such host
> only port? Shouldn't the gadget driver option be unavailable for such ports?

A menuconfig option would be taking things in the wrong direction as it would apply across platforms, which breaks the valid use-case of using the same kernel across multiple target systems. It seems to me what would block the loading of a gadget driver would be the fact that a valid host driver has been initialized for this port already. 

Felipe, can you give a bit of clarity where this platform code would go and if these are existing functions or pseudo-functions we would need to create?  How do we get the required code for start_host() to be there at boot time and how do we skip the initialization calls on ports that use gadget drivers?

> 
> 
>> 
>>> Now for the custom board's musb1 port to be usable we have two option:
>>> 1) After bootup insert a gadget module and then use host
>> functionality.
>>> 2) Change the menuconfig  logic and possibly udc-core layer so that it
>> provides option
>>> to select second gadget module as builtin.
>> 
>> why built-in ?
> 
> Already explained above.

It doesn't seem to be a good conclusion that it is a gadget driver that must be loaded and built-in for the host port. 

> 
>> 
>>> 3) Change musb driver so that there is no need for gadget driver for
>>> host only ports.  (may be based on musb->board_mode ?)
>> 
>> yes.
> 
> Doesn't seem to be a cleaner way as explained above the issue of gadget
> Driver coming in menuconfig for such ports.

Menuconfig is not a cleaner way relative to platform data. When FDT comes, this would be something expressed by platform data as well. 

> 
> Ajay
>> 
>>> In there any plan to support option 2) or 3) above?
>>> 
>>> Now the issue on our custom board is that we want root filesystem on
>>> MSC pen drive connected to musb1 port and this gadget limitation is
>>> stopping us to support this.
>> 
>> well, patches are welcome ;-)
>> 
>> --
>> balbi
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux