Re: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-23 Thread Dinh Nguyen
On 10/23/2014 01:28 PM, Paul Zimmerman wrote:
>> From: Bartlomiej Zolnierkiewicz [mailto:b.zolnier...@samsung.com]
>> Sent: Wednesday, October 22, 2014 5:26 AM
>>
>> On Monday, October 20, 2014 01:52:06 PM dingu...@opensource.altera.com wrote:
>>> From: Dinh Nguyen 
>>>
>>>  config USB_DWC2_PLATFORM
>>> bool "DWC2 Platform"
>>> -   depends on USB_DWC2_HOST
>>> default USB_DWC2_HOST
>>
>> It should be "default USB_DWC2_HOST || USB_DWC2_PERIPHERAL" because
>> USB_DWC2_PLATFORM replaces current USB_DWC2_PERIPHERAL functionality.
>>
>> Additionaly USB_DWC2_PLATFORM should be changed to tristate
>> (USB_DWC2_PERIPHERAL was a tristeate before your changes).
> 
> Dinh, I think this is a good point. Is there any reason why
> USB_DWC2_PLATFORM (and USB_DWC2_PCI for that matter) can't be
> tristate? That's what DWC3 does.
> 

Yes, in my v6, I have made this change.

Thanks,
Dinh
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-23 Thread Paul Zimmerman
> From: Bartlomiej Zolnierkiewicz [mailto:b.zolnier...@samsung.com]
> Sent: Wednesday, October 22, 2014 5:26 AM
> 
> On Monday, October 20, 2014 01:52:06 PM dingu...@opensource.altera.com wrote:
> > From: Dinh Nguyen 
> >
> >  config USB_DWC2_PLATFORM
> > bool "DWC2 Platform"
> > -   depends on USB_DWC2_HOST
> > default USB_DWC2_HOST
> 
> It should be "default USB_DWC2_HOST || USB_DWC2_PERIPHERAL" because
> USB_DWC2_PLATFORM replaces current USB_DWC2_PERIPHERAL functionality.
> 
> Additionaly USB_DWC2_PLATFORM should be changed to tristate
> (USB_DWC2_PERIPHERAL was a tristeate before your changes).

Dinh, I think this is a good point. Is there any reason why
USB_DWC2_PLATFORM (and USB_DWC2_PCI for that matter) can't be
tristate? That's what DWC3 does.

-- 
Paul

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-23 Thread Paul Bolle
On Thu, 2014-10-23 at 10:05 -0500, Dinh Nguyen wrote:
> On 10/22/2014 03:27 PM, Paul Bolle wrote:
> > On Tue, 2014-10-21 at 15:47 -0500, Dinh Nguyen wrote:
> Well, CONFIG_USB enables the host stack that is needed by the DWC2
> driver, without CONFIG_USB, the DWC2 driver will not be able to build.
>
> >> In addition, thanks to your comment, I realized that DWC2 should also be
> >> available to build when USB_GADGET is enabled. A patch has been sent:
> >>
> >> http://marc.info/?l=linux-usb&m=141392377124818&w=2

Doesn't that patch contradict your statement? It allows USB_DWC2 to be
set even if USB is not set.

> > I haven't checked, but doesn't this mean USB_DWC2 could just depend on
> > USB_SUPPORT?
> > 
> I don't think so because USB_SUPPORT will not select USB or USB_GAGDGET,
> and the DWC2 driver will need either 1 or both for it to build correctly.

My comment was not well thought through. It was a waste of your time.


Paul Bolle

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-23 Thread Dinh Nguyen
On 10/22/2014 03:27 PM, Paul Bolle wrote:
> On Tue, 2014-10-21 at 15:47 -0500, Dinh Nguyen wrote:
>> On 10/20/2014 02:42 PM, Paul Bolle wrote:
>>> (Side note: drivers/usb/dwc2/Kconfig is sourced (in drivers/usb/Kconfig)
>>> even if USB is _not_ set. But USB_DCW2 still depends on USB. Why is
>>> that?)
>>
>> Because USB is for Host-Side support. DWC2 driver should only get built
>> for when USB is enabled. I think you're getting USB and USB_SUPPORT
>> mixed up.
> 
> No, I don't think I did. Because in drivers/usb/Kconfig we see  
> if USB
> 
> [...]
> 
> endif
> 
> [...]
> 
> source "drivers/usb/dwc2/Kconfig"
> 
> [...]

Well, CONFIG_USB enables the host stack that is needed by the DWC2
driver, without CONFIG_USB, the DWC2 driver will not be able to build.

> 
>> In addition, thanks to your comment, I realized that DWC2 should also be
>> available to build when USB_GADGET is enabled. A patch has been sent:
>>
>> http://marc.info/?l=linux-usb&m=141392377124818&w=2
> 
> I haven't checked, but doesn't this mean USB_DWC2 could just depend on
> USB_SUPPORT?
> 
I don't think so because USB_SUPPORT will not select USB or USB_GAGDGET,
and the DWC2 driver will need either 1 or both for it to build correctly.

Dinh

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-22 Thread Paul Bolle
On Tue, 2014-10-21 at 15:47 -0500, Dinh Nguyen wrote:
> On 10/20/2014 02:42 PM, Paul Bolle wrote:
> > (Side note: drivers/usb/dwc2/Kconfig is sourced (in drivers/usb/Kconfig)
> > even if USB is _not_ set. But USB_DCW2 still depends on USB. Why is
> > that?)
> 
> Because USB is for Host-Side support. DWC2 driver should only get built
> for when USB is enabled. I think you're getting USB and USB_SUPPORT
> mixed up.

No, I don't think I did. Because in drivers/usb/Kconfig we see  
if USB

[...]

endif

[...]

source "drivers/usb/dwc2/Kconfig"

[...]

> In addition, thanks to your comment, I realized that DWC2 should also be
> available to build when USB_GADGET is enabled. A patch has been sent:
> 
> http://marc.info/?l=linux-usb&m=141392377124818&w=2

I haven't checked, but doesn't this mean USB_DWC2 could just depend on
USB_SUPPORT?


Paul Bolle

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-22 Thread Paul Zimmerman
> From: Dinh Nguyen [mailto:dingu...@opensource.altera.com]
> Sent: Tuesday, October 21, 2014 1:48 PM
>
> diff --git a/drivers/usb/dwc2/Kconfig b/drivers/usb/dwc2/Kconfig
> index f93807b..1ea702e 100644
> --- a/drivers/usb/dwc2/Kconfig
> +++ b/drivers/usb/dwc2/Kconfig
> @@ -1,5 +1,5 @@
>  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
> @@ -10,31 +10,53 @@ config USB_DWC2
> 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.
> +   dwc2_platform.ko. For all modes(host, gadget and dual-role), there
> +   will be a single module called dwc2.ko.

Maybe "For all modes (host, gadget and dual-role), there will be an
additional module named dwc2.ko." That would be clearer.

>  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.
> +   integrated into many SoCs. Select this option if you want the
> +   driver to operate in Host-only mode.
> +
> +comment "Gadget/Dual-role mode requires USB Gadget support to be enabled"
> +
> +config USB_DWC2_PERIPHERAL
> + bool "Gadget only mode"
> + depends on USB_GADGET=y || USB_GADGET=USB_DWC2
> + help
> +   The Designware USB2.0 high-speed gadget controller
> +   integrated into many SoCs. Select this option if you want the
> +   driver to operate in Peripheral-only mode. This option requires
> +   USB_GADGET=y.

Shouldn't this be "This option requires USB_GADGET to be enabled"? It
doesn't have to be built-in.

> +config USB_DWC2_DUAL_ROLE
> + bool "Dual Role mode"
> + depends on (USB=y || USB=USB_DWC2) && (USB_GADGET=y || 
> USB_GADGET=USB_DWC2)
> + help
> +   Select this option if you want the driver to work in a dual-role
> +   mode. In this mode both host and gadget features are enabled, and
> +   the role will be determined by the cable that gets plugged-in. This
> +   option requires USB_GADGET=y.

Ditto.

Once you fix these, plus the extraneous "default y" that Paul Bolle
pointed out, you can add my acked-by.

-- 
Paul

N�r��yb�X��ǧv�^�)޺{.n�+{��^n�r���z���h�&���G���h�(�階�ݢj"���m��z�ޖ���f���h���~�m�

Re: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-22 Thread Bartlomiej Zolnierkiewicz
On Wednesday, October 22, 2014 02:25:46 PM Bartlomiej Zolnierkiewicz wrote:

> BTW It is a bit late but it would be great if you could split your
> patchset on two.  First one merging gadget functionality into
> core/platform code and the second one adding USB_DWC2_DUAL_ROLE
> functionality.

On the second thought I think that the dual-role is needed to preserve
existing functionality (available through separate gadget and host
drivers) so please scrap the above comment.

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-22 Thread Bartlomiej Zolnierkiewicz

Hi,

On Monday, October 20, 2014 01:52:06 PM dingu...@opensource.altera.com wrote:
> From: Dinh Nguyen 
> 
> 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, dwc2.ko is built for host,
> peripheral, and dual-role mode. The PCI bus interface will be called
> dwc2_pci.ko and the platform interface module will be called dwc2_platform.ko.
> 
> Signed-off-by: Dinh Nguyen 
> Acked-by: Paul Zimmerman 
> ---
> v5: dwc2.ko for all modes along with dwc2_platform.ko and dwc2_pci.ko will
> get built for kernel modules.
> v3: Add USB_GADGET=y and USB_GADGET=USB_DWC2 for peripheral and dual-role
> config options.
> v2: Remove reference to dwc2_gadget
> ---
>  drivers/usb/dwc2/Kconfig  | 61 
> ---
>  drivers/usb/dwc2/Makefile | 32 -
>  2 files changed, 53 insertions(+), 40 deletions(-)
> 
> diff --git a/drivers/usb/dwc2/Kconfig b/drivers/usb/dwc2/Kconfig
> index f93807b..1ea702e 100644
> --- a/drivers/usb/dwc2/Kconfig
> +++ b/drivers/usb/dwc2/Kconfig
> @@ -1,5 +1,5 @@
>  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
> @@ -10,31 +10,53 @@ config USB_DWC2
> 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.
> +   dwc2_platform.ko. For all modes(host, gadget and dual-role), there
> +   will be a single module called dwc2.ko.
>  
>  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.
> +   integrated into many SoCs. Select this option if you want the
> +   driver to operate in Host-only mode.
> +
> +comment "Gadget/Dual-role mode requires USB Gadget support to be enabled"
> +
> +config USB_DWC2_PERIPHERAL
> + bool "Gadget only mode"
> + depends on USB_GADGET=y || USB_GADGET=USB_DWC2
> + help
> +   The Designware USB2.0 high-speed gadget controller
> +   integrated into many SoCs. Select this option if you want the
> +   driver to operate in Peripheral-only mode. This option requires
> +   USB_GADGET=y.
> +
> +config USB_DWC2_DUAL_ROLE
> + bool "Dual Role mode"
> + depends on (USB=y || USB=USB_DWC2) && (USB_GADGET=y || 
> USB_GADGET=USB_DWC2)
> + help
> +   Select this option if you want the driver to work in a dual-role
> +   mode. In this mode both host and gadget features are enabled, and
> +   the role will be determined by the cable that gets plugged-in. This
> +   option requires USB_GADGET=y.
> +endchoice
>  
>  config USB_DWC2_PLATFORM
>   bool "DWC2 Platform"
> - depends on USB_DWC2_HOST
>   default USB_DWC2_HOST

It should be "default USB_DWC2_HOST || USB_DWC2_PERIPHERAL" because
USB_DWC2_PLATFORM replaces current USB_DWC2_PERIPHERAL functionality.

Additionaly USB_DWC2_PLATFORM should be changed to tristate
(USB_DWC2_PERIPHERAL was a tristeate before your changes).

BTW It is a bit late but it would be great if you could split your
patchset on two.  First one merging gadget functionality into
core/platform code and the second one adding USB_DWC2_DUAL_ROLE
functionality.

> - help
> -   The Designware USB2.0 platform interface module for
> -   controllers directly connected to the CPU. This is only
> -   used for host mode.
> +default y
> +help
> +  The Designware USB2.0 platform interface module for
> +  controllers directly connected to the CPU.
>  
>  config USB_DWC2_PCI
>   bool "DWC2 PCI"
> @@ -44,15 +66,6 @@ config USB_DWC2_PCI
> The Designware USB2.0 PCI interface module for controllers
> connected to a PCI bus. This is only used for host mode.
>  
> -comment "Gadget mode requires USB Gadget support to be enabled"
> -
> -config USB_DWC2_PERIPHERAL
> - tristate "Gadget only mode"
> - depends on USB_GADGET
> - help
> - 

Re: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-21 Thread Dinh Nguyen
On 10/20/2014 02:42 PM, Paul Bolle wrote:
> dingu...@opensource.altera.com schreef op ma 20-10-2014 om 13:52
> [-0500]:
>> From: Dinh Nguyen 
>>
>> 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, dwc2.ko is built for host,
>> peripheral, and dual-role mode. The PCI bus interface will be called
>> dwc2_pci.ko and the platform interface module will be called 
>> dwc2_platform.ko.
>>
>> Signed-off-by: Dinh Nguyen 
>> Acked-by: Paul Zimmerman 
>> ---
>> v5: dwc2.ko for all modes along with dwc2_platform.ko and dwc2_pci.ko will
>> get built for kernel modules.
>> v3: Add USB_GADGET=y and USB_GADGET=USB_DWC2 for peripheral and dual-role
>> config options.
>> v2: Remove reference to dwc2_gadget
>> ---
>>  drivers/usb/dwc2/Kconfig  | 61 
>> ---
>>  drivers/usb/dwc2/Makefile | 32 -
>>  2 files changed, 53 insertions(+), 40 deletions(-)
>>
>> diff --git a/drivers/usb/dwc2/Kconfig b/drivers/usb/dwc2/Kconfig
>> index f93807b..1ea702e 100644
>> --- a/drivers/usb/dwc2/Kconfig
>> +++ b/drivers/usb/dwc2/Kconfig
>> @@ -1,5 +1,5 @@
>>  config USB_DWC2
>> -bool "DesignWare USB2 DRD Core Support"
>> +tristate "DesignWare USB2 DRD Core Support"
>>  depends on USB
> 
> (Side note: drivers/usb/dwc2/Kconfig is sourced (in drivers/usb/Kconfig)
> even if USB is _not_ set. But USB_DCW2 still depends on USB. Why is
> that?)

Because USB is for Host-Side support. DWC2 driver should only get built
for when USB is enabled. I think you're getting USB and USB_SUPPORT
mixed up.

In addition, thanks to your comment, I realized that DWC2 should also be
available to build when USB_GADGET is enabled. A patch has been sent:

http://marc.info/?l=linux-usb&m=141392377124818&w=2

> 
>>  help
>>Say Y here if your system has a Dual Role Hi-Speed USB
>> @@ -10,31 +10,53 @@ config USB_DWC2
>>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.
>> +  dwc2_platform.ko. For all modes(host, gadget and dual-role), there
>> +  will be a single module called dwc2.ko.
>>  
>>  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)
>> +
> 
> Juggling kconfig tristate logic is still rather hard for me, but don't
> the above three "if" rules all evaluate to non-zero if both USB and
> USB_GADGET are 'm'? If that's correct perhaps USB_DWC2_DUAL_ROLE should
> be the last default (assuming the last default wins, that is).

As the way it is, the functionality is correct. As this is the same as
DWC3's Kconfig, perhaps Felipe can comment if something doesn't seem
correct.

> 
> Besides, will the default USB_DWC2_PERIPHERAL ever trigger as !USB can't
> be true at this point, can it?

Yes it can. USB is for Host-side support, so you can have a condition
where you just want to build for GADGET and !USB.

> 
>>  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.
>> +  integrated into many SoCs. Select this option if you want the
>> +  driver to operate in Host-only mode.
>> +
>> +comment "Gadget/Dual-role mode requires USB Gadget support to be enabled"
>> +
>> +config USB_DWC2_PERIPHERAL
>> +bool "Gadget only mode"
>> +depends on USB_GADGET=y || USB_GADGET=USB_DWC2
>> +help
>> +  The Designware USB2.0 high-speed gadget controller
>> +  integrated into many SoCs. Select this option if you want the
>> +  driver to operate in Peripheral-only mode. This option requires
>> +  USB_GADGET=y.
>> +
>> +config USB_DWC2_DUAL_ROLE
>> +bool "Dual Role mode"
>> +depends on (USB=y || USB=USB_DWC2) && (USB_GADGET=y || 
>> USB_GADGET=USB_DWC2)
>> +help
>> +  Select this option if you want the driver to work in a dual-role
>> +  mode. In this mode both host and gadget features are enabled, and
>> +  the role will be determined by the cable that gets plugged-in. This
>> +  option requires USB_GADGET=y.
>> +endchoice
> 
> (I wonder how the dependencies of these three config entries interact
>

Re: [PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-20 Thread Paul Bolle
dingu...@opensource.altera.com schreef op ma 20-10-2014 om 13:52
[-0500]:
> From: Dinh Nguyen 
> 
> 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, dwc2.ko is built for host,
> peripheral, and dual-role mode. The PCI bus interface will be called
> dwc2_pci.ko and the platform interface module will be called dwc2_platform.ko.
> 
> Signed-off-by: Dinh Nguyen 
> Acked-by: Paul Zimmerman 
> ---
> v5: dwc2.ko for all modes along with dwc2_platform.ko and dwc2_pci.ko will
> get built for kernel modules.
> v3: Add USB_GADGET=y and USB_GADGET=USB_DWC2 for peripheral and dual-role
> config options.
> v2: Remove reference to dwc2_gadget
> ---
>  drivers/usb/dwc2/Kconfig  | 61 
> ---
>  drivers/usb/dwc2/Makefile | 32 -
>  2 files changed, 53 insertions(+), 40 deletions(-)
> 
> diff --git a/drivers/usb/dwc2/Kconfig b/drivers/usb/dwc2/Kconfig
> index f93807b..1ea702e 100644
> --- a/drivers/usb/dwc2/Kconfig
> +++ b/drivers/usb/dwc2/Kconfig
> @@ -1,5 +1,5 @@
>  config USB_DWC2
> - bool "DesignWare USB2 DRD Core Support"
> + tristate "DesignWare USB2 DRD Core Support"
>   depends on USB

(Side note: drivers/usb/dwc2/Kconfig is sourced (in drivers/usb/Kconfig)
even if USB is _not_ set. But USB_DCW2 still depends on USB. Why is
that?)

>   help
> Say Y here if your system has a Dual Role Hi-Speed USB
> @@ -10,31 +10,53 @@ config USB_DWC2
> 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.
> +   dwc2_platform.ko. For all modes(host, gadget and dual-role), there
> +   will be a single module called dwc2.ko.
>  
>  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)
> +

Juggling kconfig tristate logic is still rather hard for me, but don't
the above three "if" rules all evaluate to non-zero if both USB and
USB_GADGET are 'm'? If that's correct perhaps USB_DWC2_DUAL_ROLE should
be the last default (assuming the last default wins, that is).

Besides, will the default USB_DWC2_PERIPHERAL ever trigger as !USB can't
be true at this point, can it?

>  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.
> +   integrated into many SoCs. Select this option if you want the
> +   driver to operate in Host-only mode.
> +
> +comment "Gadget/Dual-role mode requires USB Gadget support to be enabled"
> +
> +config USB_DWC2_PERIPHERAL
> + bool "Gadget only mode"
> + depends on USB_GADGET=y || USB_GADGET=USB_DWC2
> + help
> +   The Designware USB2.0 high-speed gadget controller
> +   integrated into many SoCs. Select this option if you want the
> +   driver to operate in Peripheral-only mode. This option requires
> +   USB_GADGET=y.
> +
> +config USB_DWC2_DUAL_ROLE
> + bool "Dual Role mode"
> + depends on (USB=y || USB=USB_DWC2) && (USB_GADGET=y || 
> USB_GADGET=USB_DWC2)
> + help
> +   Select this option if you want the driver to work in a dual-role
> +   mode. In this mode both host and gadget features are enabled, and
> +   the role will be determined by the cable that gets plugged-in. This
> +   option requires USB_GADGET=y.
> +endchoice

(I wonder how the dependencies of these three config entries interact
with the three defaults of this choice. Since we're dealing with three
options here this requires a piece of paper, a pencil, and clear mind to
figure out. Maybe I'll try that in a few days...)

>  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.
> +default y

You now have to default lines. Which one wins?

> +help
> +  The Designware USB2.0 platform interface module for
> +  controllers directly connected to the CPU.
>  
>  config USB_DWC2_PCI
>   bool "DWC2 PCI"
> 

[PATCHv5 7/7] usb: dwc2: Update Kconfig to support dual-role

2014-10-20 Thread dinguyen
From: Dinh Nguyen 

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, dwc2.ko is built for host,
peripheral, and dual-role mode. The PCI bus interface will be called
dwc2_pci.ko and the platform interface module will be called dwc2_platform.ko.

Signed-off-by: Dinh Nguyen 
Acked-by: Paul Zimmerman 
---
v5: dwc2.ko for all modes along with dwc2_platform.ko and dwc2_pci.ko will
get built for kernel modules.
v3: Add USB_GADGET=y and USB_GADGET=USB_DWC2 for peripheral and dual-role
config options.
v2: Remove reference to dwc2_gadget
---
 drivers/usb/dwc2/Kconfig  | 61 ---
 drivers/usb/dwc2/Makefile | 32 -
 2 files changed, 53 insertions(+), 40 deletions(-)

diff --git a/drivers/usb/dwc2/Kconfig b/drivers/usb/dwc2/Kconfig
index f93807b..1ea702e 100644
--- a/drivers/usb/dwc2/Kconfig
+++ b/drivers/usb/dwc2/Kconfig
@@ -1,5 +1,5 @@
 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
@@ -10,31 +10,53 @@ config USB_DWC2
  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.
+ dwc2_platform.ko. For all modes(host, gadget and dual-role), there
+ will be a single module called dwc2.ko.
 
 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.
+ integrated into many SoCs. Select this option if you want the
+ driver to operate in Host-only mode.
+
+comment "Gadget/Dual-role mode requires USB Gadget support to be enabled"
+
+config USB_DWC2_PERIPHERAL
+   bool "Gadget only mode"
+   depends on USB_GADGET=y || USB_GADGET=USB_DWC2
+   help
+ The Designware USB2.0 high-speed gadget controller
+ integrated into many SoCs. Select this option if you want the
+ driver to operate in Peripheral-only mode. This option requires
+ USB_GADGET=y.
+
+config USB_DWC2_DUAL_ROLE
+   bool "Dual Role mode"
+   depends on (USB=y || USB=USB_DWC2) && (USB_GADGET=y || 
USB_GADGET=USB_DWC2)
+   help
+ Select this option if you want the driver to work in a dual-role
+ mode. In this mode both host and gadget features are enabled, and
+ the role will be determined by the cable that gets plugged-in. This
+ option requires USB_GADGET=y.
+endchoice
 
 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.
+default y
+help
+  The Designware USB2.0 platform interface module for
+  controllers directly connected to the CPU.
 
 config USB_DWC2_PCI
bool "DWC2 PCI"
@@ -44,15 +66,6 @@ config USB_DWC2_PCI
  The Designware USB2.0 PCI interface module for controllers
  connected to a PCI bus. This is only used for host mode.
 
-comment "Gadget mode requires USB Gadget support to be enabled"
-
-config USB_DWC2_PERIPHERAL
-   tristate "Gadget only mode"
-   depends on USB_GADGET
-   help
- The Designware USB2.0 high-speed gadget controller
- integrated into many SoCs.
-
 config USB_DWC2_DEBUG
bool "Enable Debugging Messages"
help
diff --git a/drivers/usb/dwc2/Makefile b/drivers/usb/dwc2/Makefile
index b73d2a5..2175d93 100644
--- a/drivers/usb/dwc2/Makefile
+++ b/drivers/usb/dwc2/Makefile
@@ -1,28 +1,28 @@
 ccflags-$(CONFIG_USB_DWC2_DEBUG)   += -DDEBUG
 ccflags-$(CONFIG_USB_DWC2_VERBOSE) += -DVERBOSE_DEBUG
 
-obj-$(CONFIG_USB_DWC2_HOST)+= dwc2.o
+obj-$(CONFIG_USB_DWC2) += dwc2.o
 dwc2-y := core.o core_intr.o
-dwc2-y +=