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-usbm=141392377124818w=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-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-usbm=141392377124818w=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 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 dingu...@opensource.altera.com
 
   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 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 dingu...@opensource.altera.com

  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-22 Thread Bartlomiej Zolnierkiewicz

Hi,

On Monday, October 20, 2014 01:52:06 PM dingu...@opensource.altera.com wrote:
 From: Dinh Nguyen dingu...@opensource.altera.com
 
 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 dingu...@opensource.altera.com
 Acked-by: Paul Zimmerman pa...@synopsys.com
 ---
 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
 -   The Designware USB2.0 high-speed gadget controller
 -   

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 RD 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 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 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-usbm=141392377124818w=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-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 dingu...@opensource.altera.com

 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 dingu...@opensource.altera.com
 Acked-by: Paul Zimmerman pa...@synopsys.com
 ---
 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-usbm=141392377124818w=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
 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 

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

2014-10-20 Thread dinguyen
From: Dinh Nguyen dingu...@opensource.altera.com

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 dingu...@opensource.altera.com
Acked-by: Paul Zimmerman pa...@synopsys.com
---
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 

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 dingu...@opensource.altera.com
 
 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 dingu...@opensource.altera.com
 Acked-by: Paul Zimmerman pa...@synopsys.com
 ---
 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
 @@ -44,15 +66,6 @@ config USB_DWC2_PCI
 The