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

2014-08-07 Thread Dinh Nguyen


On 8/1/14, 4:41 PM, Dinh Nguyen wrote:
 On Fri, 2014-08-01 at 20:42 +, Paul Zimmerman wrote:
 From: linux-usb-ow...@vger.kernel.org 
 [mailto:linux-usb-ow...@vger.kernel.org] On Behalf Of dingu...@altera.com
 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 dingu...@altera.com
 ---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


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

2014-08-07 Thread Paul Zimmerman
 From: Dinh Nguyen [mailto:dinh.li...@gmail.com]
 Sent: Thursday, August 07, 2014 5:12 AM
 
 On 8/1/14, 4:41 PM, Dinh Nguyen wrote:
  On Fri, 2014-08-01 at 20:42 +, Paul Zimmerman wrote:
  From: linux-usb-ow...@vger.kernel.org 
  [mailto:linux-usb-ow...@vger.kernel.org] On Behalf Of dingu...@altera.com
  Sent: Wednesday, July 30, 2014 8:21 AM

...

   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'

I don't see why that shouldn't work. usb_add_gadget_udc is defined in
udc-core.c, which gets built if CONFIG_USB_GADGET is set. What Kconfig
line did you use when you got this build error? I think it should be:

config USB_DWC2_DUAL_ROLE
bool Dual Role mode
depends on (USB=y || USB=USB_DWC2)  (USB_GADGET=y || 
USB_GADGET=USB_DWC2)

-- 
Paul



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

2014-08-07 Thread Dinh Nguyen
On Thu, Aug 7, 2014 at 3:55 PM, Paul Zimmerman
paul.zimmer...@synopsys.com wrote:
 From: Dinh Nguyen [mailto:dinh.li...@gmail.com]
 Sent: Thursday, August 07, 2014 5:12 AM

 On 8/1/14, 4:41 PM, Dinh Nguyen wrote:
  On Fri, 2014-08-01 at 20:42 +, Paul Zimmerman wrote:
  From: linux-usb-ow...@vger.kernel.org 
  [mailto:linux-usb-ow...@vger.kernel.org] On Behalf Of dingu...@altera.com
  Sent: Wednesday, July 30, 2014 8:21 AM

 ...

   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'

 I don't see why that shouldn't work. usb_add_gadget_udc is defined in
 udc-core.c, which gets built if CONFIG_USB_GADGET is set. What Kconfig
 line did you use when you got this build error? I think it should be:

 config USB_DWC2_DUAL_ROLE
 bool Dual Role mode
 depends on (USB=y || USB=USB_DWC2)  (USB_GADGET=y || 
 USB_GADGET=USB_DWC2)


Right, I think your original comment was why I had USB_GADGET=y as a
dependency for DWC2_DUAL_ROLE. If I replace USB_GADGET=y with just
USB_GADGET, and make USB_GADGET a module. This is fine if I build DWC
as module, but If I build DWC2 into the kernel, then the driver cannot
link those gadget functions in.

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: [PATCHv2 01/13] usb: dwc2: Update Kconfig to support dual-role

2014-08-07 Thread Paul Zimmerman
 From: Dinh Nguyen [mailto:dinh.li...@gmail.com]
 Sent: Thursday, August 07, 2014 2:01 PM
 
 On Thu, Aug 7, 2014 at 3:55 PM, Paul Zimmerman
 paul.zimmer...@synopsys.com wrote:
  From: Dinh Nguyen [mailto:dinh.li...@gmail.com]
  Sent: Thursday, August 07, 2014 5:12 AM
 
  On 8/1/14, 4:41 PM, Dinh Nguyen wrote:
   On Fri, 2014-08-01 at 20:42 +, Paul Zimmerman wrote:
   From: linux-usb-ow...@vger.kernel.org 
   [mailto:linux-usb-ow...@vger.kernel.org] On Behalf Of
 dingu...@altera.com
   Sent: Wednesday, July 30, 2014 8:21 AM
 
  ...
 
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'
 
  I don't see why that shouldn't work. usb_add_gadget_udc is defined in
  udc-core.c, which gets built if CONFIG_USB_GADGET is set. What Kconfig
  line did you use when you got this build error? I think it should be:
 
  config USB_DWC2_DUAL_ROLE
  bool Dual Role mode
  depends on (USB=y || USB=USB_DWC2)  (USB_GADGET=y || 
  USB_GADGET=USB_DWC2)
 
 
 Right, I think your original comment was why I had USB_GADGET=y as a
 dependency for DWC2_DUAL_ROLE. If I replace USB_GADGET=y with just
 USB_GADGET, and make USB_GADGET a module. This is fine if I build DWC
 as module, but If I build DWC2 into the kernel, then the driver cannot
 link those gadget functions in.

I don't think just USB_GADGET will work. Please try it with the line I
showed above.

-- 
Paul



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

2014-08-07 Thread Dinh Nguyen
On Thu, Aug 7, 2014 at 4:04 PM, Paul Zimmerman
paul.zimmer...@synopsys.com wrote:
 From: Dinh Nguyen [mailto:dinh.li...@gmail.com]
 Sent: Thursday, August 07, 2014 2:01 PM

 On Thu, Aug 7, 2014 at 3:55 PM, Paul Zimmerman
 paul.zimmer...@synopsys.com wrote:
  From: Dinh Nguyen [mailto:dinh.li...@gmail.com]
  Sent: Thursday, August 07, 2014 5:12 AM
 
  On 8/1/14, 4:41 PM, Dinh Nguyen wrote:
   On Fri, 2014-08-01 at 20:42 +, Paul Zimmerman wrote:
   From: linux-usb-ow...@vger.kernel.org 
   [mailto:linux-usb-ow...@vger.kernel.org] On Behalf Of
 dingu...@altera.com
   Sent: Wednesday, July 30, 2014 8:21 AM
 
  ...
 
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'
 
  I don't see why that shouldn't work. usb_add_gadget_udc is defined in
  udc-core.c, which gets built if CONFIG_USB_GADGET is set. What Kconfig
  line did you use when you got this build error? I think it should be:
 
  config USB_DWC2_DUAL_ROLE
  bool Dual Role mode
  depends on (USB=y || USB=USB_DWC2)  (USB_GADGET=y || 
  USB_GADGET=USB_DWC2)
 

 Right, I think your original comment was why I had USB_GADGET=y as a
 dependency for DWC2_DUAL_ROLE. If I replace USB_GADGET=y with just
 USB_GADGET, and make USB_GADGET a module. This is fine if I build DWC
 as module, but If I build DWC2 into the kernel, then the driver cannot
 link those gadget functions in.
 I don't think just USB_GADGET will work. Please try it with the line I
 showed above.


Yes, your suggestion works fine. It's an additional
USB_GADGET=USB_DWC2 from what I had in v2.

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: [PATCHv2 01/13] usb: dwc2: Update Kconfig to support dual-role

2014-08-01 Thread Paul Zimmerman
 From: linux-usb-ow...@vger.kernel.org 
 [mailto:linux-usb-ow...@vger.kernel.org] On Behalf Of dingu...@altera.com
 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 dingu...@altera.com
 ---
 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.

-- 
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: [PATCHv2 01/13] usb: dwc2: Update Kconfig to support dual-role

2014-08-01 Thread Dinh Nguyen
On Fri, 2014-08-01 at 20:42 +, Paul Zimmerman wrote:
  From: linux-usb-ow...@vger.kernel.org 
  [mailto:linux-usb-ow...@vger.kernel.org] On Behalf Of dingu...@altera.com
  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 dingu...@altera.com
  ---
  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.

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


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

2014-07-30 Thread dinguyen
From: Dinh Nguyen dingu...@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, only dwc2.ko is needed.

Signed-off-by: Dinh Nguyen dingu...@altera.com
---
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))
+   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.
+endchoice
+
+config USB_DWC2_PLATFORM
+   bool
+depends on !PCI
+default y
+help
+  The Designware USB2.0 platform interface module for
+  controllers directly connected to the CPU.
 
 config USB_DWC2_DEBUG
bool Enable Debugging Messages
diff --git a/drivers/usb/dwc2/Makefile b/drivers/usb/dwc2/Makefile
index b73d2a5..3026135 100644
--- a/drivers/usb/dwc2/Makefile
+++ b/drivers/usb/dwc2/Makefile
@@ -1,10 +1,17 @@
 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 += hcd.o hcd_intr.o
-dwc2-y += hcd_queue.o hcd_ddma.o
+
+ifneq ($(filter y,$(CONFIG_USB_DWC2_HOST) $(CONFIG_USB_DWC2_DUAL_ROLE)),)
+   dwc2-y  += hcd.o hcd_intr.o
+   dwc2-y  += hcd_queue.o hcd_ddma.o
+endif
+
+ifneq ($(filter y,$(CONFIG_USB_DWC2_PERIPHERAL) $(CONFIG_USB_DWC2_DUAL_ROLE)),)
+   dwc2-y  += gadget.o
+endif
 
 # NOTE: The previous s3c-hsotg peripheral mode only driver has been moved to
 # this location and renamed gadget.c. When building for