From e25e6df2cf38de386cc5d06ec9b1e33ab3bce638 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 28 Jan 2015 13:45:06 +0000 Subject: [PATCH] linux: add upstream patch to allow building dwc2 as module on 3.18 Also add the required config symbols to usb.mk Signed-off-by: Jo-Philipp Wich SVN-Revision: 44181 --- package/kernel/linux/modules/usb.mk | 2 + .../patches-3.18/821-usb-dwc2-dualrole.patch | 146 ++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 target/linux/generic/patches-3.18/821-usb-dwc2-dualrole.patch diff --git a/package/kernel/linux/modules/usb.mk b/package/kernel/linux/modules/usb.mk index 3db70f8951..2499af1007 100644 --- a/package/kernel/linux/modules/usb.mk +++ b/package/kernel/linux/modules/usb.mk @@ -438,6 +438,8 @@ define KernelPackage/usb-dwc2 DEPENDS:=@!LINUX_3_8 @!LINUX_3_10 KCONFIG:= \ CONFIG_USB_DWC2 \ + CONFIG_USB_DWC2_PCI \ + CONFIG_USB_DWC2_PLATFORM \ CONFIG_USB_DWC2_DEBUG=n \ CONFIG_USB_DWC2_VERBOSE=n \ CONFIG_USB_DWC2_TRACK_MISSED_SOFS=n diff --git a/target/linux/generic/patches-3.18/821-usb-dwc2-dualrole.patch b/target/linux/generic/patches-3.18/821-usb-dwc2-dualrole.patch new file mode 100644 index 0000000000..9e841cb642 --- /dev/null +++ b/target/linux/generic/patches-3.18/821-usb-dwc2-dualrole.patch @@ -0,0 +1,146 @@ +--- a/drivers/usb/dwc2/Kconfig ++++ b/drivers/usb/dwc2/Kconfig +@@ -1,6 +1,6 @@ + config USB_DWC2 +- bool "DesignWare USB2 DRD Core Support" +- depends on USB ++ tristate "DesignWare USB2 DRD Core Support" ++ depends on USB || USB_GADGET + help + Say Y here if your system has a Dual Role Hi-Speed USB + controller based on the DesignWare HSOTG IP Core. +@@ -10,49 +10,61 @@ 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 an additional module named 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. + +-config USB_DWC2_PLATFORM +- bool "DWC2 Platform" +- depends on USB_DWC2_HOST +- default USB_DWC2_HOST ++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 to be enabled. ++ ++config USB_DWC2_DUAL_ROLE ++ bool "Dual Role mode" ++ depends on (USB=y || USB=USB_DWC2) && (USB_GADGET=y || USB_GADGET=USB_DWC2) + help +- The Designware USB2.0 platform interface module for +- controllers directly connected to the CPU. This is only +- used for host mode. ++ 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 to be enabled. ++endchoice ++ ++config USB_DWC2_PLATFORM ++ tristate "DWC2 Platform" ++ default USB_DWC2_HOST || USB_DWC2_PERIPHERAL ++ help ++ The Designware USB2.0 platform interface module for ++ controllers directly connected to the CPU. + + config USB_DWC2_PCI +- bool "DWC2 PCI" ++ tristate "DWC2 PCI" + depends on USB_DWC2_HOST && PCI + default USB_DWC2_HOST + help + 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 +--- 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 += 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 dynamically linked +-# modules, dwc2_gadget.ko will get built for peripheral mode. For host mode, +-# the core module will be dwc2.ko, the PCI bus interface module will called +-# dwc2_pci.ko and the platform interface module will be called dwc2_platform.ko. +-# At present the host and gadget driver will be separate drivers, but there +-# are plans in the near future to create a dual-role driver. ++# modules, dwc2.ko will get built for host mode, peripheral mode, and dual-role ++# mode. The PCI bus interface module will called dwc2_pci.ko and the platform ++# interface module will be called dwc2_platform.ko. + + ifneq ($(CONFIG_USB_DWC2_PCI),) +- obj-$(CONFIG_USB_DWC2_HOST) += dwc2_pci.o ++ obj-$(CONFIG_USB_DWC2) += dwc2_pci.o + dwc2_pci-y := pci.o + endif + +-ifneq ($(CONFIG_USB_DWC2_PLATFORM),) +- obj-$(CONFIG_USB_DWC2_HOST) += dwc2_platform.o +- dwc2_platform-y := platform.o +-endif +- +-obj-$(CONFIG_USB_DWC2_PERIPHERAL) += dwc2_gadget.o +-dwc2_gadget-y := gadget.o ++obj-$(CONFIG_USB_DWC2_PLATFORM) += dwc2_platform.o ++dwc2_platform-y := platform.o -- 2.30.2