Re: [PATCHv2 01/13] usb: dwc2: Update Kconfig to support dual-role

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

 




On 8/1/14, 4:41 PM, Dinh Nguyen wrote:
> On Fri, 2014-08-01 at 20:42 +0000, Paul Zimmerman wrote:
>>> From: linux-usb-owner@xxxxxxxxxxxxxxx [mailto:linux-usb-owner@xxxxxxxxxxxxxxx] On Behalf Of dinguyen@xxxxxxxxxx
>>> Sent: Wednesday, July 30, 2014 8:21 AM
>>>
>>> Update DWC2 kconfig and makefile to support dual-role mode. The platform
>>> file will always get compiled for the case where the controller is directly
>>> connected to the CPU. So for loadable modules, only dwc2.ko is needed.
>>>
>>> Signed-off-by: Dinh Nguyen <dinguyen@xxxxxxxxxx>
>>> ---
>>> v2: Remove reference to dwc2_gadget
>>> ---
>>>  drivers/usb/dwc2/Kconfig  |   59 +++++++++++++++++++++++++--------------------
>>>  drivers/usb/dwc2/Makefile |   21 ++++++++--------
>>>  2 files changed, 44 insertions(+), 36 deletions(-)
>>>
>>> diff --git a/drivers/usb/dwc2/Kconfig b/drivers/usb/dwc2/Kconfig
>>> index f93807b..3d69928 100644
>>> --- a/drivers/usb/dwc2/Kconfig
>>> +++ b/drivers/usb/dwc2/Kconfig
>>> @@ -1,40 +1,29 @@
>>>  config USB_DWC2
>>> -	bool "DesignWare USB2 DRD Core Support"
>>> +	tristate "DesignWare USB2 DRD Core Support"
>>>  	depends on USB
>>>  	help
>>>  	  Say Y here if your system has a Dual Role Hi-Speed USB
>>>  	  controller based on the DesignWare HSOTG IP Core.
>>>
>>> -	  For host mode, if you choose to build the driver as dynamically
>>> -	  linked modules, the core module will be called dwc2.ko, the PCI
>>> -	  bus interface module (if you have a PCI bus system) will be
>>> -	  called dwc2_pci.ko, and the platform interface module (for
>>> -	  controllers directly connected to the CPU) will be called
>>> -	  dwc2_platform.ko. For gadget mode, there will be a single
>>> -	  module called dwc2_gadget.ko.
>>> -
>>> -	  NOTE: The s3c-hsotg driver is now renamed to dwc2_gadget. The
>>> -	  host and gadget drivers are still currently separate drivers.
>>> -	  There are plans to merge the dwc2_gadget driver with the dwc2
>>> -	  host driver in the near future to create a dual-role driver.
>>> +	  If you choose to build the driver as dynamically
>>> +	  linked modules, a single dwc2.ko(regardless of mode of operation)
>>> +	  will get built for both platform IPs and PCI.
>>>
>>>  if USB_DWC2
>>>
>>> +choice
>>> +	bool "DWC2 Mode Selection"
>>> +	default USB_DWC2_DUAL_ROLE if (USB && USB_GADGET)
>>> +	default USB_DWC2_HOST if (USB && !USB_GADGET)
>>> +	default USB_DWC2_PERIPHERAL if (!USB && USB_GADGET)
>>> +
>>>  config USB_DWC2_HOST
>>> -	tristate "Host only mode"
>>> +	bool "Host only mode"
>>>  	depends on USB
>>>  	help
>>>  	  The Designware USB2.0 high-speed host controller
>>> -	  integrated into many SoCs.
>>> -
>>> -config USB_DWC2_PLATFORM
>>> -	bool "DWC2 Platform"
>>> -	depends on USB_DWC2_HOST
>>> -	default USB_DWC2_HOST
>>> -	help
>>> -	  The Designware USB2.0 platform interface module for
>>> -	  controllers directly connected to the CPU. This is only
>>> -	  used for host mode.
>>> +	  integrated into many SoCs. Select this option if you want the
>>> +	  driver to operate in Host-only mode.
>>>
>>>  config USB_DWC2_PCI
>>>  	bool "DWC2 PCI"
>>> @@ -47,11 +36,29 @@ config USB_DWC2_PCI
>>>  comment "Gadget mode requires USB Gadget support to be enabled"
>>>
>>>  config USB_DWC2_PERIPHERAL
>>> -	tristate "Gadget only mode"
>>> +	bool "Gadget only mode"
>>>  	depends on USB_GADGET
>>>  	help
>>>  	  The Designware USB2.0 high-speed gadget controller
>>> -	  integrated into many SoCs.
>>> +	  integrated into many SoCs. Select this option if you want the
>>> +	  driver to operate in Peripheral-only mode.
>>> +
>>> +config USB_DWC2_DUAL_ROLE
>>> +	bool "Dual Role mode"
>>> +	depends on ((USB=y || USB=USB_DWC2) && (USB_GADGET=y))
>>
>> Hi Dinh,
>>
>> I just noticed that for dual-role mode, you are not allowing USB_GADGET
>> to be modular. Is there a reason for that? If so, please mention it in
>> the commit message. It should also be explained in the help text. Or
>> maybe add another comment line saying "Dual-role mode requires USB Gadget
>>  = y" or something like that.
>>
> 
> I think it was an oversight on my part and there's not reason why
> USB_GADGET can't be modular.
> 

I went back to look this for v3 and it appears that I need USB_GADGET=y
to avoid a build error when building the new driver for Gadget or Dual-role.

drivers/built-in.o: In function `dwc2_gadget_init':
/home/dinguyen/linux_dev/linux-socfpga/drivers/usb/dwc2/gadget.c:3516:
undefined reference to `usb_add_gadget_udc'
drivers/built-in.o: In function `s3c_hsotg_remove':
/home/dinguyen/linux_dev/linux-socfpga/drivers/usb/dwc2/gadget.c:3543:
undefined reference to `usb_del_gadget_udc'
/home/dinguyen/linux_dev/linux-socfpga/drivers/usb/dwc2/gadget.c:3549:
undefined reference to `usb_gadget_unregister_driver'

So just like the DWC3 driver, I need to add a dependency on
USB_GADGET=y. I'll add a note to the help text.

Dinh

--
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