aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/ABI/stable/sysfs-class-udc93
-rw-r--r--Documentation/ABI/testing/configfs-usb-gadget-hid11
-rw-r--r--Documentation/ABI/testing/configfs-usb-gadget-midi12
-rw-r--r--Documentation/devicetree/bindings/usb/dwc3.txt23
-rw-r--r--Documentation/devicetree/bindings/usb/exynos-usb.txt6
-rw-r--r--Documentation/devicetree/bindings/usb/pxa-usb.txt22
-rw-r--r--Documentation/usb/gadget_hid.txt7
-rw-r--r--arch/arm/boot/dts/am4372.dtsi4
-rw-r--r--drivers/pci/quirks.c20
-rw-r--r--drivers/phy/phy-omap-usb2.c14
-rw-r--r--drivers/phy/phy-twl4030-usb.c6
-rw-r--r--drivers/usb/chipidea/ci.h8
-rw-r--r--drivers/usb/chipidea/ci_hdrc_imx.c2
-rw-r--r--drivers/usb/chipidea/ci_hdrc_msm.c8
-rw-r--r--drivers/usb/chipidea/core.c89
-rw-r--r--drivers/usb/chipidea/debug.c2
-rw-r--r--drivers/usb/chipidea/host.c10
-rw-r--r--drivers/usb/chipidea/otg_fsm.c27
-rw-r--r--drivers/usb/chipidea/udc.c18
-rw-r--r--drivers/usb/common/usb-otg-fsm.c8
-rw-r--r--drivers/usb/core/hcd.c7
-rw-r--r--drivers/usb/dwc2/Kconfig68
-rw-r--r--drivers/usb/dwc2/Makefile32
-rw-r--r--drivers/usb/dwc2/core.c10
-rw-r--r--drivers/usb/dwc2/core.h197
-rw-r--r--drivers/usb/dwc2/core_intr.c17
-rw-r--r--drivers/usb/dwc2/gadget.c387
-rw-r--r--drivers/usb/dwc2/hcd.c94
-rw-r--r--drivers/usb/dwc2/hcd.h10
-rw-r--r--drivers/usb/dwc2/pci.c7
-rw-r--r--drivers/usb/dwc2/platform.c44
-rw-r--r--drivers/usb/dwc3/Kconfig2
-rw-r--r--drivers/usb/dwc3/core.c251
-rw-r--r--drivers/usb/dwc3/core.h89
-rw-r--r--drivers/usb/dwc3/dwc3-exynos.c44
-rw-r--r--drivers/usb/dwc3/dwc3-keystone.c1
-rw-r--r--drivers/usb/dwc3/dwc3-omap.c20
-rw-r--r--drivers/usb/dwc3/dwc3-pci.c35
-rw-r--r--drivers/usb/dwc3/dwc3-st.c2
-rw-r--r--drivers/usb/dwc3/ep0.c26
-rw-r--r--drivers/usb/dwc3/gadget.c68
-rw-r--r--drivers/usb/dwc3/platform_data.h20
-rw-r--r--drivers/usb/dwc3/trace.h20
-rw-r--r--drivers/usb/gadget/Kconfig61
-rw-r--r--drivers/usb/gadget/composite.c64
-rw-r--r--drivers/usb/gadget/configfs.c5
-rw-r--r--drivers/usb/gadget/function/Makefile4
-rw-r--r--drivers/usb/gadget/function/f_hid.c374
-rw-r--r--drivers/usb/gadget/function/f_midi.c364
-rw-r--r--drivers/usb/gadget/function/f_ncm.c3
-rw-r--r--drivers/usb/gadget/function/f_rndis.c3
-rw-r--r--drivers/usb/gadget/function/u_hid.h42
-rw-r--r--drivers/usb/gadget/function/u_midi.h40
-rw-r--r--drivers/usb/gadget/function/u_uac1.c3
-rw-r--r--drivers/usb/gadget/legacy/Kconfig2
-rw-r--r--drivers/usb/gadget/legacy/dbgp.c26
-rw-r--r--drivers/usb/gadget/legacy/gmidi.c43
-rw-r--r--drivers/usb/gadget/legacy/hid.c79
-rw-r--r--drivers/usb/gadget/legacy/printer.c65
-rw-r--r--drivers/usb/gadget/udc/Kconfig2
-rw-r--r--drivers/usb/gadget/udc/Makefile1
-rw-r--r--drivers/usb/gadget/udc/amd5536udc.c12
-rw-r--r--drivers/usb/gadget/udc/at91_udc.c89
-rw-r--r--drivers/usb/gadget/udc/atmel_usba_udc.c25
-rw-r--r--drivers/usb/gadget/udc/bcm63xx_udc.c13
-rw-r--r--drivers/usb/gadget/udc/bdc/Kconfig21
-rw-r--r--drivers/usb/gadget/udc/bdc/Makefile8
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc.h490
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc_cmd.c376
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc_cmd.h29
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc_core.c533
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc_dbg.c123
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc_dbg.h37
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc_ep.c2023
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc_ep.h22
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc_pci.c132
-rw-r--r--drivers/usb/gadget/udc/bdc/bdc_udc.c587
-rw-r--r--drivers/usb/gadget/udc/dummy_hcd.c36
-rw-r--r--drivers/usb/gadget/udc/fotg210-udc.c3
-rw-r--r--drivers/usb/gadget/udc/fsl_qe_udc.c13
-rw-r--r--drivers/usb/gadget/udc/fsl_udc_core.c19
-rw-r--r--drivers/usb/gadget/udc/fusb300_udc.c3
-rw-r--r--drivers/usb/gadget/udc/goku_udc.c6
-rw-r--r--drivers/usb/gadget/udc/gr_udc.c8
-rw-r--r--drivers/usb/gadget/udc/lpc32xx_udc.c11
-rw-r--r--drivers/usb/gadget/udc/m66592-udc.c5
-rw-r--r--drivers/usb/gadget/udc/mv_u3d_core.c5
-rw-r--r--drivers/usb/gadget/udc/mv_udc_core.c32
-rw-r--r--drivers/usb/gadget/udc/net2272.c66
-rw-r--r--drivers/usb/gadget/udc/net2280.c65
-rw-r--r--drivers/usb/gadget/udc/omap_udc.c6
-rw-r--r--drivers/usb/gadget/udc/pch_udc.c11
-rw-r--r--drivers/usb/gadget/udc/pxa25x_udc.c43
-rw-r--r--drivers/usb/gadget/udc/pxa27x_udc.c152
-rw-r--r--drivers/usb/gadget/udc/pxa27x_udc.h6
-rw-r--r--drivers/usb/gadget/udc/r8a66597-udc.c10
-rw-r--r--drivers/usb/gadget/udc/s3c-hsudc.c16
-rw-r--r--drivers/usb/gadget/udc/s3c2410_udc.c6
-rw-r--r--drivers/usb/gadget/udc/udc-core.c28
-rw-r--r--drivers/usb/gadget/udc/udc-xilinx.c3
-rw-r--r--drivers/usb/host/ohci-omap.c2
-rw-r--r--drivers/usb/musb/Kconfig5
-rw-r--r--drivers/usb/musb/am35x.c32
-rw-r--r--drivers/usb/musb/blackfin.c74
-rw-r--r--drivers/usb/musb/da8xx.c30
-rw-r--r--drivers/usb/musb/davinci.c22
-rw-r--r--drivers/usb/musb/jz4740.c2
-rw-r--r--drivers/usb/musb/musb_core.c331
-rw-r--r--drivers/usb/musb/musb_core.h87
-rw-r--r--drivers/usb/musb/musb_cppi41.c10
-rw-r--r--drivers/usb/musb/musb_debugfs.c57
-rw-r--r--drivers/usb/musb/musb_dsps.c34
-rw-r--r--drivers/usb/musb/musb_gadget.c58
-rw-r--r--drivers/usb/musb/musb_host.c8
-rw-r--r--drivers/usb/musb/musb_io.h106
-rw-r--r--drivers/usb/musb/musb_regs.h26
-rw-r--r--drivers/usb/musb/musb_virthub.c23
-rw-r--r--drivers/usb/musb/musbhsdma.c7
-rw-r--r--drivers/usb/musb/omap2430.c52
-rw-r--r--drivers/usb/musb/tusb6010.c102
-rw-r--r--drivers/usb/musb/ux500.c16
-rw-r--r--drivers/usb/musb/ux500_dma.c11
-rw-r--r--drivers/usb/phy/phy-ab8500-usb.c33
-rw-r--r--drivers/usb/phy/phy-am335x-control.c4
-rw-r--r--drivers/usb/phy/phy-fsl-usb.c27
-rw-r--r--drivers/usb/phy/phy-fsl-usb.h2
-rw-r--r--drivers/usb/phy/phy-generic.c8
-rw-r--r--drivers/usb/phy/phy-gpio-vbus-usb.c16
-rw-r--r--drivers/usb/phy/phy-isp1301-omap.c104
-rw-r--r--drivers/usb/phy/phy-msm-usb.c107
-rw-r--r--drivers/usb/phy/phy-mv-usb.c56
-rw-r--r--drivers/usb/phy/phy-mxs-usb.c4
-rw-r--r--drivers/usb/phy/phy-rcar-gen2-usb.c4
-rw-r--r--drivers/usb/phy/phy-rcar-usb.c4
-rw-r--r--drivers/usb/phy/phy-tahvo.c34
-rw-r--r--drivers/usb/phy/phy-tegra-usb.c9
-rw-r--r--drivers/usb/phy/phy-ulpi.c6
-rw-r--r--drivers/usb/phy/phy.c16
-rw-r--r--drivers/usb/renesas_usbhs/common.c6
-rw-r--r--drivers/usb/renesas_usbhs/common.h7
-rw-r--r--drivers/usb/renesas_usbhs/fifo.c111
-rw-r--r--drivers/usb/renesas_usbhs/fifo.h10
-rw-r--r--drivers/usb/renesas_usbhs/mod_gadget.c41
-rw-r--r--drivers/usb/renesas_usbhs/mod_host.c2
-rw-r--r--drivers/usb/renesas_usbhs/pipe.c8
-rw-r--r--drivers/usb/renesas_usbhs/rcar2.c73
-rw-r--r--include/linux/pci_ids.h1
-rw-r--r--include/linux/platform_data/dwc3-exynos.h24
-rw-r--r--include/linux/usb/chipidea.h4
-rw-r--r--include/linux/usb/composite.h7
-rw-r--r--include/linux/usb/gadget.h5
-rw-r--r--include/linux/usb/otg.h7
-rw-r--r--include/linux/usb/phy.h6
-rw-r--r--include/linux/usb/renesas_usbhs.h4
154 files changed, 7983 insertions, 1957 deletions
diff --git a/Documentation/ABI/stable/sysfs-class-udc b/Documentation/ABI/stable/sysfs-class-udc
new file mode 100644
index 000000000000..85d3dac2e204
--- /dev/null
+++ b/Documentation/ABI/stable/sysfs-class-udc
@@ -0,0 +1,93 @@
1What: /sys/class/udc/<udc>/a_alt_hnp_support
2Date: June 2011
3KernelVersion: 3.1
4Contact: Felipe Balbi <balbi@kernel.org>
5Description:
6 Indicates if an OTG A-Host supports HNP at an alternate port.
7Users:
8
9What: /sys/class/udc/<udc>/a_hnp_support
10Date: June 2011
11KernelVersion: 3.1
12Contact: Felipe Balbi <balbi@kernel.org>
13Description:
14 Indicates if an OTG A-Host supports HNP at this port.
15Users:
16
17What: /sys/class/udc/<udc>/b_hnp_enable
18Date: June 2011
19KernelVersion: 3.1
20Contact: Felipe Balbi <balbi@kernel.org>
21Description:
22 Indicates if an OTG A-Host enabled HNP support.
23Users:
24
25What: /sys/class/udc/<udc>/current_speed
26Date: June 2011
27KernelVersion: 3.1
28Contact: Felipe Balbi <balbi@kernel.org>
29Description:
30 Indicates the current negotiated speed at this port.
31Users:
32
33What: /sys/class/udc/<udc>/is_a_peripheral
34Date: June 2011
35KernelVersion: 3.1
36Contact: Felipe Balbi <balbi@kernel.org>
37Description:
38 Indicates that this port is the default Host on an OTG session
39 but HNP was used to switch roles.
40Users:
41
42What: /sys/class/udc/<udc>/is_otg
43Date: June 2011
44KernelVersion: 3.1
45Contact: Felipe Balbi <balbi@kernel.org>
46Description:
47 Indicates that this port support OTG.
48Users:
49
50What: /sys/class/udc/<udc>/maximum_speed
51Date: June 2011
52KernelVersion: 3.1
53Contact: Felipe Balbi <balbi@kernel.org>
54Description:
55 Indicates the maximum USB speed supported by this port.
56Users:
57
58What: /sys/class/udc/<udc>/maximum_speed
59Date: June 2011
60KernelVersion: 3.1
61Contact: Felipe Balbi <balbi@kernel.org>
62Description:
63 Indicates the maximum USB speed supported by this port.
64Users:
65
66What: /sys/class/udc/<udc>/soft_connect
67Date: June 2011
68KernelVersion: 3.1
69Contact: Felipe Balbi <balbi@kernel.org>
70Description:
71 Allows users to disconnect data pullup resistors thus causing a
72 logical disconnection from the USB Host.
73Users:
74
75What: /sys/class/udc/<udc>/srp
76Date: June 2011
77KernelVersion: 3.1
78Contact: Felipe Balbi <balbi@kernel.org>
79Description:
80 Allows users to manually start Session Request Protocol.
81Users:
82
83What: /sys/class/udc/<udc>/state
84Date: June 2011
85KernelVersion: 3.1
86Contact: Felipe Balbi <balbi@kernel.org>
87Description:
88 Indicates current state of the USB Device Controller. Valid
89 states are: 'not-attached', 'attached', 'powered',
90 'reconnecting', 'unauthenticated', 'default', 'addressed',
91 'configured', and 'suspended'; however not all USB Device
92 Controllers support reporting all states.
93Users:
diff --git a/Documentation/ABI/testing/configfs-usb-gadget-hid b/Documentation/ABI/testing/configfs-usb-gadget-hid
new file mode 100644
index 000000000000..f12e00e6baa3
--- /dev/null
+++ b/Documentation/ABI/testing/configfs-usb-gadget-hid
@@ -0,0 +1,11 @@
1What: /config/usb-gadget/gadget/functions/hid.name
2Date: Nov 2014
3KernelVersion: 3.19
4Description:
5 The attributes:
6
7 protocol - HID protocol to use
8 report_desc - blob corresponding to HID report descriptors
9 except the data passed through /dev/hidg<N>
10 report_length - HID report length
11 subclass - HID device subclass to use
diff --git a/Documentation/ABI/testing/configfs-usb-gadget-midi b/Documentation/ABI/testing/configfs-usb-gadget-midi
new file mode 100644
index 000000000000..6b341df7249c
--- /dev/null
+++ b/Documentation/ABI/testing/configfs-usb-gadget-midi
@@ -0,0 +1,12 @@
1What: /config/usb-gadget/gadget/functions/midi.name
2Date: Nov 2014
3KernelVersion: 3.19
4Description:
5 The attributes:
6
7 index - index value for the USB MIDI adapter
8 id - ID string for the USB MIDI adapter
9 buflen - MIDI buffer length
10 qlen - USB read request queue length
11 in_ports - number of MIDI input ports
12 out_ports - number of MIDI output ports
diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
index 471366d6a129..cd7f0454e13a 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -14,6 +14,29 @@ Optional properties:
14 - phys: from the *Generic PHY* bindings 14 - phys: from the *Generic PHY* bindings
15 - phy-names: from the *Generic PHY* bindings 15 - phy-names: from the *Generic PHY* bindings
16 - tx-fifo-resize: determines if the FIFO *has* to be reallocated. 16 - tx-fifo-resize: determines if the FIFO *has* to be reallocated.
17 - snps,disable_scramble_quirk: true when SW should disable data scrambling.
18 Only really useful for FPGA builds.
19 - snps,has-lpm-erratum: true when DWC3 was configured with LPM Erratum enabled
20 - snps,lpm-nyet-threshold: LPM NYET threshold
21 - snps,u2exit_lfps_quirk: set if we want to enable u2exit lfps quirk
22 - snps,u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
23 - snps,req_p1p2p3_quirk: when set, the core will always request for
24 P1/P2/P3 transition sequence.
25 - snps,del_p1p2p3_quirk: when set core will delay P1/P2/P3 until a certain
26 amount of 8B10B errors occur.
27 - snps,del_phy_power_chg_quirk: when set core will delay PHY power change
28 from P0 to P1/P2/P3.
29 - snps,lfps_filter_quirk: when set core will filter LFPS reception.
30 - snps,rx_detect_poll_quirk: when set core will disable a 400us delay to start
31 Polling LFPS after RX.Detect.
32 - snps,tx_de_emphasis_quirk: when set core will set Tx de-emphasis value.
33 - snps,tx_de_emphasis: the value driven to the PHY is controlled by the
34 LTSSM during USB3 Compliance mode.
35 - snps,dis_u3_susphy_quirk: when set core will disable USB3 suspend phy.
36 - snps,dis_u2_susphy_quirk: when set core will disable USB2 suspend phy.
37 - snps,is-utmi-l1-suspend: true when DWC3 asserts output signal
38 utmi_l1_suspend_n, false when asserts utmi_sleep_n
39 - snps,hird-threshold: HIRD threshold
17 40
18This is usually a subnode to DWC3 glue to which it is connected. 41This is usually a subnode to DWC3 glue to which it is connected.
19 42
diff --git a/Documentation/devicetree/bindings/usb/exynos-usb.txt b/Documentation/devicetree/bindings/usb/exynos-usb.txt
index a3b5990d0f2c..9b4dbe3b2acc 100644
--- a/Documentation/devicetree/bindings/usb/exynos-usb.txt
+++ b/Documentation/devicetree/bindings/usb/exynos-usb.txt
@@ -82,8 +82,10 @@ Example:
82 82
83DWC3 83DWC3
84Required properties: 84Required properties:
85 - compatible: should be "samsung,exynos5250-dwusb3" for USB 3.0 DWC3 85 - compatible: should be one of the following -
86 controller. 86 "samsung,exynos5250-dwusb3": for USB 3.0 DWC3 controller on
87 Exynos5250/5420.
88 "samsung,exynos7-dwusb3": for USB 3.0 DWC3 controller on Exynos7.
87 - #address-cells, #size-cells : should be '1' if the device has sub-nodes 89 - #address-cells, #size-cells : should be '1' if the device has sub-nodes
88 with 'reg' property. 90 with 'reg' property.
89 - ranges: allows valid 1:1 translation between child's address space and 91 - ranges: allows valid 1:1 translation between child's address space and
diff --git a/Documentation/devicetree/bindings/usb/pxa-usb.txt b/Documentation/devicetree/bindings/usb/pxa-usb.txt
index 79729a948d5a..9c331799b87c 100644
--- a/Documentation/devicetree/bindings/usb/pxa-usb.txt
+++ b/Documentation/devicetree/bindings/usb/pxa-usb.txt
@@ -29,3 +29,25 @@ Example:
29 marvell,port-mode = <2>; /* PMM_GLOBAL_MODE */ 29 marvell,port-mode = <2>; /* PMM_GLOBAL_MODE */
30 }; 30 };
31 31
32UDC
33
34Required properties:
35 - compatible: Should be "marvell,pxa270-udc" for USB controllers
36 used in device mode.
37 - reg: usb device MMIO address space
38 - interrupts: single interrupt generated by the UDC IP
39 - clocks: input clock of the UDC IP (see clock-bindings.txt)
40
41Optional properties:
42 - gpios:
43 - gpio activated to control the USB D+ pullup (see gpio.txt)
44
45Example:
46
47 pxa27x_udc: udc@40600000 {
48 compatible = "marvell,pxa270-udc";
49 reg = <0x40600000 0x10000>;
50 interrupts = <11>;
51 clocks = <&pxa2xx_clks 11>;
52 gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
53 };
diff --git a/Documentation/usb/gadget_hid.txt b/Documentation/usb/gadget_hid.txt
index 12696c2e43fb..7a0fb8e16e27 100644
--- a/Documentation/usb/gadget_hid.txt
+++ b/Documentation/usb/gadget_hid.txt
@@ -74,6 +74,13 @@ static struct platform_device my_hid = {
74 You can add as many HID functions as you want, only limited by 74 You can add as many HID functions as you want, only limited by
75 the amount of interrupt endpoints your gadget driver supports. 75 the amount of interrupt endpoints your gadget driver supports.
76 76
77Configuration with configfs
78
79 Instead of adding fake platform devices and drivers in order to pass
80 some data to the kernel, if HID is a part of a gadget composed with
81 configfs the hidg_func_descriptor.report_desc is passed to the kernel
82 by writing the appropriate stream of bytes to a configfs attribute.
83
77Send and receive HID reports 84Send and receive HID reports
78 85
79 HID reports can be sent/received using read/write on the 86 HID reports can be sent/received using read/write on the
diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi
index 46660ffd2b65..e19068d24737 100644
--- a/arch/arm/boot/dts/am4372.dtsi
+++ b/arch/arm/boot/dts/am4372.dtsi
@@ -817,6 +817,8 @@
817 maximum-speed = "high-speed"; 817 maximum-speed = "high-speed";
818 dr_mode = "otg"; 818 dr_mode = "otg";
819 status = "disabled"; 819 status = "disabled";
820 snps,dis_u3_susphy_quirk;
821 snps,dis_u2_susphy_quirk;
820 }; 822 };
821 }; 823 };
822 824
@@ -839,6 +841,8 @@
839 maximum-speed = "high-speed"; 841 maximum-speed = "high-speed";
840 dr_mode = "otg"; 842 dr_mode = "otg";
841 status = "disabled"; 843 status = "disabled";
844 snps,dis_u3_susphy_quirk;
845 snps,dis_u2_susphy_quirk;
842 }; 846 };
843 }; 847 };
844 848
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 90acb32c85b1..ed6f89b6efe5 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -379,6 +379,26 @@ static void quirk_ati_exploding_mce(struct pci_dev *dev)
379DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100, quirk_ati_exploding_mce); 379DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100, quirk_ati_exploding_mce);
380 380
381/* 381/*
382 * In the AMD NL platform, this device ([1022:7912]) has a class code of
383 * PCI_CLASS_SERIAL_USB_XHCI (0x0c0330), which means the xhci driver will
384 * claim it.
385 * But the dwc3 driver is a more specific driver for this device, and we'd
386 * prefer to use it instead of xhci. To prevent xhci from claiming the
387 * device, change the class code to 0x0c03fe, which the PCI r3.0 spec
388 * defines as "USB device (not host controller)". The dwc3 driver can then
389 * claim it based on its Vendor and Device ID.
390 */
391static void quirk_amd_nl_class(struct pci_dev *pdev)
392{
393 /*
394 * Use 'USB Device' (0x0c03fe) instead of PCI header provided
395 */
396 pdev->class = 0x0c03fe;
397}
398DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB,
399 quirk_amd_nl_class);
400
401/*
382 * Let's make the southbridge information explicit instead 402 * Let's make the southbridge information explicit instead
383 * of having to worry about people probing the ACPI areas, 403 * of having to worry about people probing the ACPI areas,
384 * for example.. (Yes, it happens, and if you read the wrong 404 * for example.. (Yes, it happens, and if you read the wrong
diff --git a/drivers/phy/phy-omap-usb2.c b/drivers/phy/phy-omap-usb2.c
index f091576b6449..08f2da270837 100644
--- a/drivers/phy/phy-omap-usb2.c
+++ b/drivers/phy/phy-omap-usb2.c
@@ -60,7 +60,7 @@ EXPORT_SYMBOL_GPL(omap_usb2_set_comparator);
60 60
61static int omap_usb_set_vbus(struct usb_otg *otg, bool enabled) 61static int omap_usb_set_vbus(struct usb_otg *otg, bool enabled)
62{ 62{
63 struct omap_usb *phy = phy_to_omapusb(otg->phy); 63 struct omap_usb *phy = phy_to_omapusb(otg->usb_phy);
64 64
65 if (!phy->comparator) 65 if (!phy->comparator)
66 return -ENODEV; 66 return -ENODEV;
@@ -70,7 +70,7 @@ static int omap_usb_set_vbus(struct usb_otg *otg, bool enabled)
70 70
71static int omap_usb_start_srp(struct usb_otg *otg) 71static int omap_usb_start_srp(struct usb_otg *otg)
72{ 72{
73 struct omap_usb *phy = phy_to_omapusb(otg->phy); 73 struct omap_usb *phy = phy_to_omapusb(otg->usb_phy);
74 74
75 if (!phy->comparator) 75 if (!phy->comparator)
76 return -ENODEV; 76 return -ENODEV;
@@ -80,11 +80,9 @@ static int omap_usb_start_srp(struct usb_otg *otg)
80 80
81static int omap_usb_set_host(struct usb_otg *otg, struct usb_bus *host) 81static int omap_usb_set_host(struct usb_otg *otg, struct usb_bus *host)
82{ 82{
83 struct usb_phy *phy = otg->phy;
84
85 otg->host = host; 83 otg->host = host;
86 if (!host) 84 if (!host)
87 phy->state = OTG_STATE_UNDEFINED; 85 otg->state = OTG_STATE_UNDEFINED;
88 86
89 return 0; 87 return 0;
90} 88}
@@ -92,11 +90,9 @@ static int omap_usb_set_host(struct usb_otg *otg, struct usb_bus *host)
92static int omap_usb_set_peripheral(struct usb_otg *otg, 90static int omap_usb_set_peripheral(struct usb_otg *otg,
93 struct usb_gadget *gadget) 91 struct usb_gadget *gadget)
94{ 92{
95 struct usb_phy *phy = otg->phy;
96
97 otg->gadget = gadget; 93 otg->gadget = gadget;
98 if (!gadget) 94 if (!gadget)
99 phy->state = OTG_STATE_UNDEFINED; 95 otg->state = OTG_STATE_UNDEFINED;
100 96
101 return 0; 97 return 0;
102} 98}
@@ -255,7 +251,7 @@ static int omap_usb2_probe(struct platform_device *pdev)
255 otg->set_vbus = omap_usb_set_vbus; 251 otg->set_vbus = omap_usb_set_vbus;
256 if (phy_data->flags & OMAP_USB2_HAS_START_SRP) 252 if (phy_data->flags & OMAP_USB2_HAS_START_SRP)
257 otg->start_srp = omap_usb_start_srp; 253 otg->start_srp = omap_usb_start_srp;
258 otg->phy = &phy->phy; 254 otg->usb_phy = &phy->phy;
259 255
260 platform_set_drvdata(pdev, phy); 256 platform_set_drvdata(pdev, phy);
261 pm_runtime_enable(phy->dev); 257 pm_runtime_enable(phy->dev);
diff --git a/drivers/phy/phy-twl4030-usb.c b/drivers/phy/phy-twl4030-usb.c
index 7b04befd5271..e2698d29f436 100644
--- a/drivers/phy/phy-twl4030-usb.c
+++ b/drivers/phy/phy-twl4030-usb.c
@@ -606,7 +606,7 @@ static int twl4030_set_peripheral(struct usb_otg *otg,
606 606
607 otg->gadget = gadget; 607 otg->gadget = gadget;
608 if (!gadget) 608 if (!gadget)
609 otg->phy->state = OTG_STATE_UNDEFINED; 609 otg->state = OTG_STATE_UNDEFINED;
610 610
611 return 0; 611 return 0;
612} 612}
@@ -618,7 +618,7 @@ static int twl4030_set_host(struct usb_otg *otg, struct usb_bus *host)
618 618
619 otg->host = host; 619 otg->host = host;
620 if (!host) 620 if (!host)
621 otg->phy->state = OTG_STATE_UNDEFINED; 621 otg->state = OTG_STATE_UNDEFINED;
622 622
623 return 0; 623 return 0;
624} 624}
@@ -676,7 +676,7 @@ static int twl4030_usb_probe(struct platform_device *pdev)
676 twl->phy.otg = otg; 676 twl->phy.otg = otg;
677 twl->phy.type = USB_PHY_TYPE_USB2; 677 twl->phy.type = USB_PHY_TYPE_USB2;
678 678
679 otg->phy = &twl->phy; 679 otg->usb_phy = &twl->phy;
680 otg->set_host = twl4030_set_host; 680 otg->set_host = twl4030_set_host;
681 otg->set_peripheral = twl4030_set_peripheral; 681 otg->set_peripheral = twl4030_set_peripheral;
682 682
diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
index ea40626e0246..5bbfcc73cf70 100644
--- a/drivers/usb/chipidea/ci.h
+++ b/drivers/usb/chipidea/ci.h
@@ -161,7 +161,8 @@ struct hw_bank {
161 * @test_mode: the selected test mode 161 * @test_mode: the selected test mode
162 * @platdata: platform specific information supplied by parent device 162 * @platdata: platform specific information supplied by parent device
163 * @vbus_active: is VBUS active 163 * @vbus_active: is VBUS active
164 * @transceiver: pointer to USB PHY, if any 164 * @phy: pointer to PHY, if any
165 * @usb_phy: pointer to USB PHY, if any and if using the USB PHY framework
165 * @hcd: pointer to usb_hcd for ehci host driver 166 * @hcd: pointer to usb_hcd for ehci host driver
166 * @debugfs: root dentry for this controller in debugfs 167 * @debugfs: root dentry for this controller in debugfs
167 * @id_event: indicates there is an id event, and handled at ci_otg_work 168 * @id_event: indicates there is an id event, and handled at ci_otg_work
@@ -177,6 +178,7 @@ struct ci_hdrc {
177 struct ci_role_driver *roles[CI_ROLE_END]; 178 struct ci_role_driver *roles[CI_ROLE_END];
178 enum ci_role role; 179 enum ci_role role;
179 bool is_otg; 180 bool is_otg;
181 struct usb_otg otg;
180 struct otg_fsm fsm; 182 struct otg_fsm fsm;
181 struct ci_otg_fsm_timer_list *fsm_timer; 183 struct ci_otg_fsm_timer_list *fsm_timer;
182 struct work_struct work; 184 struct work_struct work;
@@ -201,7 +203,9 @@ struct ci_hdrc {
201 203
202 struct ci_hdrc_platform_data *platdata; 204 struct ci_hdrc_platform_data *platdata;
203 int vbus_active; 205 int vbus_active;
204 struct usb_phy *transceiver; 206 struct phy *phy;
207 /* old usb_phy interface */
208 struct usb_phy *usb_phy;
205 struct usb_hcd *hcd; 209 struct usb_hcd *hcd;
206 struct dentry *debugfs; 210 struct dentry *debugfs;
207 bool id_event; 211 bool id_event;
diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
index a7ab0f15926e..6f8b1b1045b5 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -147,7 +147,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
147 goto err_clk; 147 goto err_clk;
148 } 148 }
149 149
150 pdata.phy = data->phy; 150 pdata.usb_phy = data->phy;
151 151
152 if (imx_platform_flag->flags & CI_HDRC_IMX_IMX28_WRITE_FIX) 152 if (imx_platform_flag->flags & CI_HDRC_IMX_IMX28_WRITE_FIX)
153 pdata.flags |= CI_HDRC_IMX28_WRITE_FIX; 153 pdata.flags |= CI_HDRC_IMX28_WRITE_FIX;
diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c
index 4935ac38fd00..3edf969ed797 100644
--- a/drivers/usb/chipidea/ci_hdrc_msm.c
+++ b/drivers/usb/chipidea/ci_hdrc_msm.c
@@ -26,15 +26,15 @@ static void ci_hdrc_msm_notify_event(struct ci_hdrc *ci, unsigned event)
26 dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n"); 26 dev_dbg(dev, "CI_HDRC_CONTROLLER_RESET_EVENT received\n");
27 writel(0, USB_AHBBURST); 27 writel(0, USB_AHBBURST);
28 writel(0, USB_AHBMODE); 28 writel(0, USB_AHBMODE);
29 usb_phy_init(ci->transceiver); 29 usb_phy_init(ci->usb_phy);
30 break; 30 break;
31 case CI_HDRC_CONTROLLER_STOPPED_EVENT: 31 case CI_HDRC_CONTROLLER_STOPPED_EVENT:
32 dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n"); 32 dev_dbg(dev, "CI_HDRC_CONTROLLER_STOPPED_EVENT received\n");
33 /* 33 /*
34 * Put the transceiver in non-driving mode. Otherwise host 34 * Put the phy in non-driving mode. Otherwise host
35 * may not detect soft-disconnection. 35 * may not detect soft-disconnection.
36 */ 36 */
37 usb_phy_notify_disconnect(ci->transceiver, USB_SPEED_UNKNOWN); 37 usb_phy_notify_disconnect(ci->usb_phy, USB_SPEED_UNKNOWN);
38 break; 38 break;
39 default: 39 default:
40 dev_dbg(dev, "unknown ci_hdrc event\n"); 40 dev_dbg(dev, "unknown ci_hdrc event\n");
@@ -68,7 +68,7 @@ static int ci_hdrc_msm_probe(struct platform_device *pdev)
68 if (IS_ERR(phy)) 68 if (IS_ERR(phy))
69 return PTR_ERR(phy); 69 return PTR_ERR(phy);
70 70
71 ci_hdrc_msm_platdata.phy = phy; 71 ci_hdrc_msm_platdata.usb_phy = phy;
72 72
73 plat_ci = ci_hdrc_add_device(&pdev->dev, 73 plat_ci = ci_hdrc_add_device(&pdev->dev,
74 pdev->resource, pdev->num_resources, 74 pdev->resource, pdev->num_resources,
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 9bdc6bd73432..60578d9c896d 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -47,6 +47,7 @@
47#include <linux/delay.h> 47#include <linux/delay.h>
48#include <linux/device.h> 48#include <linux/device.h>
49#include <linux/dma-mapping.h> 49#include <linux/dma-mapping.h>
50#include <linux/phy/phy.h>
50#include <linux/platform_device.h> 51#include <linux/platform_device.h>
51#include <linux/module.h> 52#include <linux/module.h>
52#include <linux/idr.h> 53#include <linux/idr.h>
@@ -299,6 +300,49 @@ static void hw_phymode_configure(struct ci_hdrc *ci)
299} 300}
300 301
301/** 302/**
303 * _ci_usb_phy_init: initialize phy taking in account both phy and usb_phy
304 * interfaces
305 * @ci: the controller
306 *
307 * This function returns an error code if the phy failed to init
308 */
309static int _ci_usb_phy_init(struct ci_hdrc *ci)
310{
311 int ret;
312
313 if (ci->phy) {
314 ret = phy_init(ci->phy);
315 if (ret)
316 return ret;
317
318 ret = phy_power_on(ci->phy);
319 if (ret) {
320 phy_exit(ci->phy);
321 return ret;
322 }
323 } else {
324 ret = usb_phy_init(ci->usb_phy);
325 }
326
327 return ret;
328}
329
330/**
331 * _ci_usb_phy_exit: deinitialize phy taking in account both phy and usb_phy
332 * interfaces
333 * @ci: the controller
334 */
335static void ci_usb_phy_exit(struct ci_hdrc *ci)
336{
337 if (ci->phy) {
338 phy_power_off(ci->phy);
339 phy_exit(ci->phy);
340 } else {
341 usb_phy_shutdown(ci->usb_phy);
342 }
343}
344
345/**
302 * ci_usb_phy_init: initialize phy according to different phy type 346 * ci_usb_phy_init: initialize phy according to different phy type
303 * @ci: the controller 347 * @ci: the controller
304 * 348 *
@@ -312,7 +356,7 @@ static int ci_usb_phy_init(struct ci_hdrc *ci)
312 case USBPHY_INTERFACE_MODE_UTMI: 356 case USBPHY_INTERFACE_MODE_UTMI:
313 case USBPHY_INTERFACE_MODE_UTMIW: 357 case USBPHY_INTERFACE_MODE_UTMIW:
314 case USBPHY_INTERFACE_MODE_HSIC: 358 case USBPHY_INTERFACE_MODE_HSIC:
315 ret = usb_phy_init(ci->transceiver); 359 ret = _ci_usb_phy_init(ci);
316 if (ret) 360 if (ret)
317 return ret; 361 return ret;
318 hw_phymode_configure(ci); 362 hw_phymode_configure(ci);
@@ -320,12 +364,12 @@ static int ci_usb_phy_init(struct ci_hdrc *ci)
320 case USBPHY_INTERFACE_MODE_ULPI: 364 case USBPHY_INTERFACE_MODE_ULPI:
321 case USBPHY_INTERFACE_MODE_SERIAL: 365 case USBPHY_INTERFACE_MODE_SERIAL:
322 hw_phymode_configure(ci); 366 hw_phymode_configure(ci);
323 ret = usb_phy_init(ci->transceiver); 367 ret = _ci_usb_phy_init(ci);
324 if (ret) 368 if (ret)
325 return ret; 369 return ret;
326 break; 370 break;
327 default: 371 default:
328 ret = usb_phy_init(ci->transceiver); 372 ret = _ci_usb_phy_init(ci);
329 } 373 }
330 374
331 return ret; 375 return ret;
@@ -605,23 +649,26 @@ static int ci_hdrc_probe(struct platform_device *pdev)
605 return -ENODEV; 649 return -ENODEV;
606 } 650 }
607 651
608 if (ci->platdata->phy) 652 if (ci->platdata->phy) {
609 ci->transceiver = ci->platdata->phy; 653 ci->phy = ci->platdata->phy;
610 else 654 } else if (ci->platdata->usb_phy) {
611 ci->transceiver = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); 655 ci->usb_phy = ci->platdata->usb_phy;
612 656 } else {
613 if (IS_ERR(ci->transceiver)) { 657 ci->phy = devm_phy_get(dev, "usb-phy");
614 ret = PTR_ERR(ci->transceiver); 658 ci->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
615 /* 659
616 * if -ENXIO is returned, it means PHY layer wasn't 660 /* if both generic PHY and USB PHY layers aren't enabled */
617 * enabled, so it makes no sense to return -EPROBE_DEFER 661 if (PTR_ERR(ci->phy) == -ENOSYS &&
618 * in that case, since no PHY driver will ever probe. 662 PTR_ERR(ci->usb_phy) == -ENXIO)
619 */ 663 return -ENXIO;
620 if (ret == -ENXIO) 664
621 return ret; 665 if (IS_ERR(ci->phy) && IS_ERR(ci->usb_phy))
666 return -EPROBE_DEFER;
622 667
623 dev_err(dev, "no usb2 phy configured\n"); 668 if (IS_ERR(ci->phy))
624 return -EPROBE_DEFER; 669 ci->phy = NULL;
670 else if (IS_ERR(ci->usb_phy))
671 ci->usb_phy = NULL;
625 } 672 }
626 673
627 ret = ci_usb_phy_init(ci); 674 ret = ci_usb_phy_init(ci);
@@ -728,7 +775,7 @@ static int ci_hdrc_probe(struct platform_device *pdev)
728stop: 775stop:
729 ci_role_destroy(ci); 776 ci_role_destroy(ci);
730deinit_phy: 777deinit_phy:
731 usb_phy_shutdown(ci->transceiver); 778 ci_usb_phy_exit(ci);
732 779
733 return ret; 780 return ret;
734} 781}
@@ -741,7 +788,7 @@ static int ci_hdrc_remove(struct platform_device *pdev)
741 free_irq(ci->irq, ci); 788 free_irq(ci->irq, ci);
742 ci_role_destroy(ci); 789 ci_role_destroy(ci);
743 ci_hdrc_enter_lpm(ci, true); 790 ci_hdrc_enter_lpm(ci, true);
744 usb_phy_shutdown(ci->transceiver); 791 ci_usb_phy_exit(ci);
745 792
746 return 0; 793 return 0;
747} 794}
diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
index 795d6538d630..268e4236e84c 100644
--- a/drivers/usb/chipidea/debug.c
+++ b/drivers/usb/chipidea/debug.c
@@ -220,7 +220,7 @@ static int ci_otg_show(struct seq_file *s, void *unused)
220 220
221 /* ------ State ----- */ 221 /* ------ State ----- */
222 seq_printf(s, "OTG state: %s\n\n", 222 seq_printf(s, "OTG state: %s\n\n",
223 usb_otg_state_string(ci->transceiver->state)); 223 usb_otg_state_string(ci->otg.state));
224 224
225 /* ------ State Machine Variables ----- */ 225 /* ------ State Machine Variables ----- */
226 seq_printf(s, "a_bus_drop: %d\n", fsm->a_bus_drop); 226 seq_printf(s, "a_bus_drop: %d\n", fsm->a_bus_drop);
diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
index 33027abb5349..48731d0bab35 100644
--- a/drivers/usb/chipidea/host.c
+++ b/drivers/usb/chipidea/host.c
@@ -98,8 +98,11 @@ static int host_start(struct ci_hdrc *ci)
98 hcd->has_tt = 1; 98 hcd->has_tt = 1;
99 99
100 hcd->power_budget = ci->platdata->power_budget; 100 hcd->power_budget = ci->platdata->power_budget;
101 hcd->usb_phy = ci->transceiver;
102 hcd->tpl_support = ci->platdata->tpl_support; 101 hcd->tpl_support = ci->platdata->tpl_support;
102 if (ci->phy)
103 hcd->phy = ci->phy;
104 else
105 hcd->usb_phy = ci->usb_phy;
103 106
104 ehci = hcd_to_ehci(hcd); 107 ehci = hcd_to_ehci(hcd);
105 ehci->caps = ci->hw_bank.cap; 108 ehci->caps = ci->hw_bank.cap;
@@ -117,10 +120,11 @@ static int host_start(struct ci_hdrc *ci)
117 if (ret) { 120 if (ret) {
118 goto put_hcd; 121 goto put_hcd;
119 } else { 122 } else {
120 struct usb_otg *otg = ci->transceiver->otg; 123 struct usb_otg *otg = &ci->otg;
121 124
122 ci->hcd = hcd; 125 ci->hcd = hcd;
123 if (otg) { 126
127 if (ci_otg_is_fsm_mode(ci)) {
124 otg->host = &hcd->self; 128 otg->host = &hcd->self;
125 hcd->self.otg_port = 1; 129 hcd->self.otg_port = 1;
126 } 130 }
diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
index e683595f9e69..368cc8e94fd6 100644
--- a/drivers/usb/chipidea/otg_fsm.c
+++ b/drivers/usb/chipidea/otg_fsm.c
@@ -328,7 +328,7 @@ static void b_ssend_srp_tmout_func(void *ptr, unsigned long indicator)
328 set_tmout(ci, indicator); 328 set_tmout(ci, indicator);
329 329
330 /* only vbus fall below B_sess_vld in b_idle state */ 330 /* only vbus fall below B_sess_vld in b_idle state */
331 if (ci->transceiver->state == OTG_STATE_B_IDLE) 331 if (ci->fsm.otg->state == OTG_STATE_B_IDLE)
332 ci_otg_queue_work(ci); 332 ci_otg_queue_work(ci);
333} 333}
334 334
@@ -582,11 +582,11 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
582 * when there is no gadget class driver 582 * when there is no gadget class driver
583 */ 583 */
584 if (ci->fsm.id && !(ci->driver) && 584 if (ci->fsm.id && !(ci->driver) &&
585 ci->transceiver->state < OTG_STATE_A_IDLE) 585 ci->fsm.otg->state < OTG_STATE_A_IDLE)
586 return 0; 586 return 0;
587 587
588 if (otg_statemachine(&ci->fsm)) { 588 if (otg_statemachine(&ci->fsm)) {
589 if (ci->transceiver->state == OTG_STATE_A_IDLE) { 589 if (ci->fsm.otg->state == OTG_STATE_A_IDLE) {
590 /* 590 /*
591 * Further state change for cases: 591 * Further state change for cases:
592 * a_idle to b_idle; or 592 * a_idle to b_idle; or
@@ -600,7 +600,7 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
600 ci_otg_queue_work(ci); 600 ci_otg_queue_work(ci);
601 if (ci->id_event) 601 if (ci->id_event)
602 ci->id_event = false; 602 ci->id_event = false;
603 } else if (ci->transceiver->state == OTG_STATE_B_IDLE) { 603 } else if (ci->fsm.otg->state == OTG_STATE_B_IDLE) {
604 if (ci->fsm.b_sess_vld) { 604 if (ci->fsm.b_sess_vld) {
605 ci->fsm.power_up = 0; 605 ci->fsm.power_up = 0;
606 /* 606 /*
@@ -627,7 +627,7 @@ static void ci_otg_fsm_event(struct ci_hdrc *ci)
627 otg_bsess_vld = hw_read_otgsc(ci, OTGSC_BSV); 627 otg_bsess_vld = hw_read_otgsc(ci, OTGSC_BSV);
628 port_conn = hw_read(ci, OP_PORTSC, PORTSC_CCS); 628 port_conn = hw_read(ci, OP_PORTSC, PORTSC_CCS);
629 629
630 switch (ci->transceiver->state) { 630 switch (ci->fsm.otg->state) {
631 case OTG_STATE_A_WAIT_BCON: 631 case OTG_STATE_A_WAIT_BCON:
632 if (port_conn) { 632 if (port_conn) {
633 fsm->b_conn = 1; 633 fsm->b_conn = 1;
@@ -778,20 +778,17 @@ void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci)
778int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci) 778int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci)
779{ 779{
780 int retval = 0; 780 int retval = 0;
781 struct usb_otg *otg;
782 781
783 otg = devm_kzalloc(ci->dev, 782 if (ci->phy)
784 sizeof(struct usb_otg), GFP_KERNEL); 783 ci->otg.phy = ci->phy;
785 if (!otg) 784 else
786 return -ENOMEM; 785 ci->otg.usb_phy = ci->usb_phy;
787 786
788 otg->phy = ci->transceiver; 787 ci->otg.gadget = &ci->gadget;
789 otg->gadget = &ci->gadget; 788 ci->fsm.otg = &ci->otg;
790 ci->fsm.otg = otg;
791 ci->transceiver->otg = ci->fsm.otg;
792 ci->fsm.power_up = 1; 789 ci->fsm.power_up = 1;
793 ci->fsm.id = hw_read_otgsc(ci, OTGSC_ID) ? 1 : 0; 790 ci->fsm.id = hw_read_otgsc(ci, OTGSC_ID) ? 1 : 0;
794 ci->transceiver->state = OTG_STATE_UNDEFINED; 791 ci->fsm.otg->state = OTG_STATE_UNDEFINED;
795 ci->fsm.ops = &ci_otg_ops; 792 ci->fsm.ops = &ci_otg_ops;
796 793
797 mutex_init(&ci->fsm.lock); 794 mutex_init(&ci->fsm.lock);
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 0444d3f8971a..bdaa7bac6f4a 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -692,10 +692,8 @@ __acquires(ci->lock)
692 int retval; 692 int retval;
693 693
694 spin_unlock(&ci->lock); 694 spin_unlock(&ci->lock);
695 if (ci->gadget.speed != USB_SPEED_UNKNOWN) { 695 if (ci->gadget.speed != USB_SPEED_UNKNOWN)
696 if (ci->driver) 696 usb_gadget_udc_reset(&ci->gadget, ci->driver);
697 ci->driver->disconnect(&ci->gadget);
698 }
699 697
700 retval = _gadget_stop_activity(&ci->gadget); 698 retval = _gadget_stop_activity(&ci->gadget);
701 if (retval) 699 if (retval)
@@ -709,8 +707,6 @@ __acquires(ci->lock)
709 if (ci->status == NULL) 707 if (ci->status == NULL)
710 retval = -ENOMEM; 708 retval = -ENOMEM;
711 709
712 usb_gadget_set_state(&ci->gadget, USB_STATE_DEFAULT);
713
714done: 710done:
715 spin_lock(&ci->lock); 711 spin_lock(&ci->lock);
716 712
@@ -1519,8 +1515,8 @@ static int ci_udc_vbus_draw(struct usb_gadget *_gadget, unsigned ma)
1519{ 1515{
1520 struct ci_hdrc *ci = container_of(_gadget, struct ci_hdrc, gadget); 1516 struct ci_hdrc *ci = container_of(_gadget, struct ci_hdrc, gadget);
1521 1517
1522 if (ci->transceiver) 1518 if (ci->usb_phy)
1523 return usb_phy_set_power(ci->transceiver, ma); 1519 return usb_phy_set_power(ci->usb_phy, ma);
1524 return -ENOTSUPP; 1520 return -ENOTSUPP;
1525} 1521}
1526 1522
@@ -1544,8 +1540,7 @@ static int ci_udc_pullup(struct usb_gadget *_gadget, int is_on)
1544 1540
1545static int ci_udc_start(struct usb_gadget *gadget, 1541static int ci_udc_start(struct usb_gadget *gadget,
1546 struct usb_gadget_driver *driver); 1542 struct usb_gadget_driver *driver);
1547static int ci_udc_stop(struct usb_gadget *gadget, 1543static int ci_udc_stop(struct usb_gadget *gadget);
1548 struct usb_gadget_driver *driver);
1549/** 1544/**
1550 * Device operations part of the API to the USB controller hardware, 1545 * Device operations part of the API to the USB controller hardware,
1551 * which don't involve endpoints (or i/o) 1546 * which don't involve endpoints (or i/o)
@@ -1682,8 +1677,7 @@ static int ci_udc_start(struct usb_gadget *gadget,
1682/** 1677/**
1683 * ci_udc_stop: unregister a gadget driver 1678 * ci_udc_stop: unregister a gadget driver
1684 */ 1679 */
1685static int ci_udc_stop(struct usb_gadget *gadget, 1680static int ci_udc_stop(struct usb_gadget *gadget)
1686 struct usb_gadget_driver *driver)
1687{ 1681{
1688 struct ci_hdrc *ci = container_of(gadget, struct ci_hdrc, gadget); 1682 struct ci_hdrc *ci = container_of(gadget, struct ci_hdrc, gadget);
1689 unsigned long flags; 1683 unsigned long flags;
diff --git a/drivers/usb/common/usb-otg-fsm.c b/drivers/usb/common/usb-otg-fsm.c
index 98e8340a5bb1..c6b35b77dab7 100644
--- a/drivers/usb/common/usb-otg-fsm.c
+++ b/drivers/usb/common/usb-otg-fsm.c
@@ -124,10 +124,10 @@ static void otg_leave_state(struct otg_fsm *fsm, enum usb_otg_state old_state)
124static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state) 124static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state)
125{ 125{
126 state_changed = 1; 126 state_changed = 1;
127 if (fsm->otg->phy->state == new_state) 127 if (fsm->otg->state == new_state)
128 return 0; 128 return 0;
129 VDBG("Set state: %s\n", usb_otg_state_string(new_state)); 129 VDBG("Set state: %s\n", usb_otg_state_string(new_state));
130 otg_leave_state(fsm, fsm->otg->phy->state); 130 otg_leave_state(fsm, fsm->otg->state);
131 switch (new_state) { 131 switch (new_state) {
132 case OTG_STATE_B_IDLE: 132 case OTG_STATE_B_IDLE:
133 otg_drv_vbus(fsm, 0); 133 otg_drv_vbus(fsm, 0);
@@ -236,7 +236,7 @@ static int otg_set_state(struct otg_fsm *fsm, enum usb_otg_state new_state)
236 break; 236 break;
237 } 237 }
238 238
239 fsm->otg->phy->state = new_state; 239 fsm->otg->state = new_state;
240 return 0; 240 return 0;
241} 241}
242 242
@@ -247,7 +247,7 @@ int otg_statemachine(struct otg_fsm *fsm)
247 247
248 mutex_lock(&fsm->lock); 248 mutex_lock(&fsm->lock);
249 249
250 state = fsm->otg->phy->state; 250 state = fsm->otg->state;
251 state_changed = 0; 251 state_changed = 0;
252 /* State machine state change judgement */ 252 /* State machine state change judgement */
253 253
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index a6efb4184f2b..2f2118fa36a8 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -2650,7 +2650,7 @@ int usb_add_hcd(struct usb_hcd *hcd,
2650 } 2650 }
2651 } 2651 }
2652 2652
2653 if (IS_ENABLED(CONFIG_GENERIC_PHY)) { 2653 if (IS_ENABLED(CONFIG_GENERIC_PHY) && !hcd->phy) {
2654 struct phy *phy = phy_get(hcd->self.controller, "usb"); 2654 struct phy *phy = phy_get(hcd->self.controller, "usb");
2655 2655
2656 if (IS_ERR(phy)) { 2656 if (IS_ERR(phy)) {
@@ -2670,6 +2670,7 @@ int usb_add_hcd(struct usb_hcd *hcd,
2670 goto err_phy; 2670 goto err_phy;
2671 } 2671 }
2672 hcd->phy = phy; 2672 hcd->phy = phy;
2673 hcd->remove_phy = 1;
2673 } 2674 }
2674 } 2675 }
2675 2676
@@ -2816,7 +2817,7 @@ err_allocate_root_hub:
2816err_register_bus: 2817err_register_bus:
2817 hcd_buffer_destroy(hcd); 2818 hcd_buffer_destroy(hcd);
2818err_create_buf: 2819err_create_buf:
2819 if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->phy) { 2820 if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->remove_phy && hcd->phy) {
2820 phy_power_off(hcd->phy); 2821 phy_power_off(hcd->phy);
2821 phy_exit(hcd->phy); 2822 phy_exit(hcd->phy);
2822 phy_put(hcd->phy); 2823 phy_put(hcd->phy);
@@ -2900,7 +2901,7 @@ void usb_remove_hcd(struct usb_hcd *hcd)
2900 usb_deregister_bus(&hcd->self); 2901 usb_deregister_bus(&hcd->self);
2901 hcd_buffer_destroy(hcd); 2902 hcd_buffer_destroy(hcd);
2902 2903
2903 if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->phy) { 2904 if (IS_ENABLED(CONFIG_GENERIC_PHY) && hcd->remove_phy && hcd->phy) {
2904 phy_power_off(hcd->phy); 2905 phy_power_off(hcd->phy);
2905 phy_exit(hcd->phy); 2906 phy_exit(hcd->phy);
2906 phy_put(hcd->phy); 2907 phy_put(hcd->phy);
diff --git a/drivers/usb/dwc2/Kconfig b/drivers/usb/dwc2/Kconfig
index f93807b3631a..b323c4c11b0a 100644
--- a/drivers/usb/dwc2/Kconfig
+++ b/drivers/usb/dwc2/Kconfig
@@ -1,6 +1,6 @@
1config USB_DWC2 1config USB_DWC2
2 bool "DesignWare USB2 DRD Core Support" 2 tristate "DesignWare USB2 DRD Core Support"
3 depends on USB 3 depends on USB || USB_GADGET
4 help 4 help
5 Say Y here if your system has a Dual Role Hi-Speed USB 5 Say Y here if your system has a Dual Role Hi-Speed USB
6 controller based on the DesignWare HSOTG IP Core. 6 controller based on the DesignWare HSOTG IP Core.
@@ -10,49 +10,61 @@ config USB_DWC2
10 bus interface module (if you have a PCI bus system) will be 10 bus interface module (if you have a PCI bus system) will be
11 called dwc2_pci.ko, and the platform interface module (for 11 called dwc2_pci.ko, and the platform interface module (for
12 controllers directly connected to the CPU) will be called 12 controllers directly connected to the CPU) will be called
13 dwc2_platform.ko. For gadget mode, there will be a single 13 dwc2_platform.ko. For all modes(host, gadget and dual-role), there
14 module called dwc2_gadget.ko. 14 will be an additional module named dwc2.ko.
15
16 NOTE: The s3c-hsotg driver is now renamed to dwc2_gadget. The
17 host and gadget drivers are still currently separate drivers.
18 There are plans to merge the dwc2_gadget driver with the dwc2
19 host driver in the near future to create a dual-role driver.
20 15
21if USB_DWC2 16if USB_DWC2
22 17
18choice
19 bool "DWC2 Mode Selection"
20 default USB_DWC2_DUAL_ROLE if (USB && USB_GADGET)
21 default USB_DWC2_HOST if (USB && !USB_GADGET)
22 default USB_DWC2_PERIPHERAL if (!USB && USB_GADGET)
23
23config USB_DWC2_HOST 24config USB_DWC2_HOST
24 tristate "Host only mode" 25 bool "Host only mode"
25 depends on USB 26 depends on USB
26 help 27 help
27 The Designware USB2.0 high-speed host controller 28 The Designware USB2.0 high-speed host controller
28 integrated into many SoCs. 29 integrated into many SoCs. Select this option if you want the
30 driver to operate in Host-only mode.
29 31
30config USB_DWC2_PLATFORM 32comment "Gadget/Dual-role mode requires USB Gadget support to be enabled"
31 bool "DWC2 Platform" 33
32 depends on USB_DWC2_HOST 34config USB_DWC2_PERIPHERAL
33 default USB_DWC2_HOST 35 bool "Gadget only mode"
36 depends on USB_GADGET=y || USB_GADGET=USB_DWC2
34 help 37 help
35 The Designware USB2.0 platform interface module for 38 The Designware USB2.0 high-speed gadget controller
36 controllers directly connected to the CPU. This is only 39 integrated into many SoCs. Select this option if you want the
37 used for host mode. 40 driver to operate in Peripheral-only mode. This option requires
41 USB_GADGET to be enabled.
42
43config USB_DWC2_DUAL_ROLE
44 bool "Dual Role mode"
45 depends on (USB=y || USB=USB_DWC2) && (USB_GADGET=y || USB_GADGET=USB_DWC2)
46 help
47 Select this option if you want the driver to work in a dual-role
48 mode. In this mode both host and gadget features are enabled, and
49 the role will be determined by the cable that gets plugged-in. This
50 option requires USB_GADGET to be enabled.
51endchoice
52
53config USB_DWC2_PLATFORM
54 tristate "DWC2 Platform"
55 default USB_DWC2_HOST || USB_DWC2_PERIPHERAL
56 help
57 The Designware USB2.0 platform interface module for
58 controllers directly connected to the CPU.
38 59
39config USB_DWC2_PCI 60config USB_DWC2_PCI
40 bool "DWC2 PCI" 61 tristate "DWC2 PCI"
41 depends on USB_DWC2_HOST && PCI 62 depends on USB_DWC2_HOST && PCI
42 default USB_DWC2_HOST 63 default USB_DWC2_HOST
43 help 64 help
44 The Designware USB2.0 PCI interface module for controllers 65 The Designware USB2.0 PCI interface module for controllers
45 connected to a PCI bus. This is only used for host mode. 66 connected to a PCI bus. This is only used for host mode.
46 67
47comment "Gadget mode requires USB Gadget support to be enabled"
48
49config USB_DWC2_PERIPHERAL
50 tristate "Gadget only mode"
51 depends on USB_GADGET
52 help
53 The Designware USB2.0 high-speed gadget controller
54 integrated into many SoCs.
55
56config USB_DWC2_DEBUG 68config USB_DWC2_DEBUG
57 bool "Enable Debugging Messages" 69 bool "Enable Debugging Messages"
58 help 70 help
diff --git a/drivers/usb/dwc2/Makefile b/drivers/usb/dwc2/Makefile
index b73d2a527970..8f752679752a 100644
--- a/drivers/usb/dwc2/Makefile
+++ b/drivers/usb/dwc2/Makefile
@@ -1,28 +1,28 @@
1ccflags-$(CONFIG_USB_DWC2_DEBUG) += -DDEBUG 1ccflags-$(CONFIG_USB_DWC2_DEBUG) += -DDEBUG
2ccflags-$(CONFIG_USB_DWC2_VERBOSE) += -DVERBOSE_DEBUG 2ccflags-$(CONFIG_USB_DWC2_VERBOSE) += -DVERBOSE_DEBUG
3 3
4obj-$(CONFIG_USB_DWC2_HOST) += dwc2.o 4obj-$(CONFIG_USB_DWC2) += dwc2.o
5dwc2-y := core.o core_intr.o 5dwc2-y := core.o core_intr.o
6dwc2-y += hcd.o hcd_intr.o 6
7dwc2-y += hcd_queue.o hcd_ddma.o 7ifneq ($(filter y,$(CONFIG_USB_DWC2_HOST) $(CONFIG_USB_DWC2_DUAL_ROLE)),)
8 dwc2-y += hcd.o hcd_intr.o
9 dwc2-y += hcd_queue.o hcd_ddma.o
10endif
11
12ifneq ($(filter y,$(CONFIG_USB_DWC2_PERIPHERAL) $(CONFIG_USB_DWC2_DUAL_ROLE)),)
13 dwc2-y += gadget.o
14endif
8 15
9# NOTE: The previous s3c-hsotg peripheral mode only driver has been moved to 16# NOTE: The previous s3c-hsotg peripheral mode only driver has been moved to
10# this location and renamed gadget.c. When building for dynamically linked 17# this location and renamed gadget.c. When building for dynamically linked
11# modules, dwc2_gadget.ko will get built for peripheral mode. For host mode, 18# modules, dwc2.ko will get built for host mode, peripheral mode, and dual-role
12# the core module will be dwc2.ko, the PCI bus interface module will called 19# mode. The PCI bus interface module will called dwc2_pci.ko and the platform
13# dwc2_pci.ko and the platform interface module will be called dwc2_platform.ko. 20# interface module will be called dwc2_platform.ko.
14# At present the host and gadget driver will be separate drivers, but there
15# are plans in the near future to create a dual-role driver.
16 21
17ifneq ($(CONFIG_USB_DWC2_PCI),) 22ifneq ($(CONFIG_USB_DWC2_PCI),)
18 obj-$(CONFIG_USB_DWC2_HOST) += dwc2_pci.o 23 obj-$(CONFIG_USB_DWC2) += dwc2_pci.o
19 dwc2_pci-y := pci.o 24 dwc2_pci-y := pci.o
20endif 25endif
21 26
22ifneq ($(CONFIG_USB_DWC2_PLATFORM),) 27obj-$(CONFIG_USB_DWC2_PLATFORM) += dwc2_platform.o
23 obj-$(CONFIG_USB_DWC2_HOST) += dwc2_platform.o 28dwc2_platform-y := platform.o
24 dwc2_platform-y := platform.o
25endif
26
27obj-$(CONFIG_USB_DWC2_PERIPHERAL) += dwc2_gadget.o
28dwc2_gadget-y := gadget.o
diff --git a/drivers/usb/dwc2/core.c b/drivers/usb/dwc2/core.c
index d9269459d481..7605850b7a9c 100644
--- a/drivers/usb/dwc2/core.c
+++ b/drivers/usb/dwc2/core.c
@@ -458,16 +458,6 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool select_phy, int irq)
458 /* Clear the SRP success bit for FS-I2c */ 458 /* Clear the SRP success bit for FS-I2c */
459 hsotg->srp_success = 0; 459 hsotg->srp_success = 0;
460 460
461 if (irq >= 0) {
462 dev_dbg(hsotg->dev, "registering common handler for irq%d\n",
463 irq);
464 retval = devm_request_irq(hsotg->dev, irq,
465 dwc2_handle_common_intr, IRQF_SHARED,
466 dev_name(hsotg->dev), hsotg);
467 if (retval)
468 return retval;
469 }
470
471 /* Enable common interrupts */ 461 /* Enable common interrupts */
472 dwc2_enable_common_interrupts(hsotg); 462 dwc2_enable_common_interrupts(hsotg);
473 463
diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
index 55c90c53f2d6..7a70a1349334 100644
--- a/drivers/usb/dwc2/core.h
+++ b/drivers/usb/dwc2/core.h
@@ -84,7 +84,7 @@ static const char * const s3c_hsotg_supply_names[] = {
84 */ 84 */
85#define EP0_MPS_LIMIT 64 85#define EP0_MPS_LIMIT 64
86 86
87struct s3c_hsotg; 87struct dwc2_hsotg;
88struct s3c_hsotg_req; 88struct s3c_hsotg_req;
89 89
90/** 90/**
@@ -130,7 +130,7 @@ struct s3c_hsotg_req;
130struct s3c_hsotg_ep { 130struct s3c_hsotg_ep {
131 struct usb_ep ep; 131 struct usb_ep ep;
132 struct list_head queue; 132 struct list_head queue;
133 struct s3c_hsotg *parent; 133 struct dwc2_hsotg *parent;
134 struct s3c_hsotg_req *req; 134 struct s3c_hsotg_req *req;
135 struct dentry *debugfs; 135 struct dentry *debugfs;
136 136
@@ -155,67 +155,6 @@ struct s3c_hsotg_ep {
155}; 155};
156 156
157/** 157/**
158 * struct s3c_hsotg - driver state.
159 * @dev: The parent device supplied to the probe function
160 * @driver: USB gadget driver
161 * @phy: The otg phy transceiver structure for phy control.
162 * @uphy: The otg phy transceiver structure for old USB phy control.
163 * @plat: The platform specific configuration data. This can be removed once
164 * all SoCs support usb transceiver.
165 * @regs: The memory area mapped for accessing registers.
166 * @irq: The IRQ number we are using
167 * @supplies: Definition of USB power supplies
168 * @phyif: PHY interface width
169 * @dedicated_fifos: Set if the hardware has dedicated IN-EP fifos.
170 * @num_of_eps: Number of available EPs (excluding EP0)
171 * @debug_root: root directrory for debugfs.
172 * @debug_file: main status file for debugfs.
173 * @debug_fifo: FIFO status file for debugfs.
174 * @ep0_reply: Request used for ep0 reply.
175 * @ep0_buff: Buffer for EP0 reply data, if needed.
176 * @ctrl_buff: Buffer for EP0 control requests.
177 * @ctrl_req: Request for EP0 control packets.
178 * @setup: NAK management for EP0 SETUP
179 * @last_rst: Time of last reset
180 * @eps: The endpoints being supplied to the gadget framework
181 */
182struct s3c_hsotg {
183 struct device *dev;
184 struct usb_gadget_driver *driver;
185 struct phy *phy;
186 struct usb_phy *uphy;
187 struct s3c_hsotg_plat *plat;
188
189 spinlock_t lock;
190
191 void __iomem *regs;
192 int irq;
193 struct clk *clk;
194
195 struct regulator_bulk_data supplies[ARRAY_SIZE(s3c_hsotg_supply_names)];
196
197 u32 phyif;
198 int fifo_mem;
199 unsigned int dedicated_fifos:1;
200 unsigned char num_of_eps;
201 u32 fifo_map;
202
203 struct dentry *debug_root;
204 struct dentry *debug_file;
205 struct dentry *debug_fifo;
206
207 struct usb_request *ep0_reply;
208 struct usb_request *ctrl_req;
209 u8 ep0_buff[8];
210 u8 ctrl_buff[8];
211
212 struct usb_gadget gadget;
213 unsigned int setup;
214 unsigned long last_rst;
215 struct s3c_hsotg_ep *eps;
216};
217
218/**
219 * struct s3c_hsotg_req - data transfer request 158 * struct s3c_hsotg_req - data transfer request
220 * @req: The USB gadget request 159 * @req: The USB gadget request
221 * @queue: The list of requests for the endpoint this is queued for. 160 * @queue: The list of requests for the endpoint this is queued for.
@@ -229,6 +168,7 @@ struct s3c_hsotg_req {
229 unsigned char mapped; 168 unsigned char mapped;
230}; 169};
231 170
171#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
232#define call_gadget(_hs, _entry) \ 172#define call_gadget(_hs, _entry) \
233do { \ 173do { \
234 if ((_hs)->gadget.speed != USB_SPEED_UNKNOWN && \ 174 if ((_hs)->gadget.speed != USB_SPEED_UNKNOWN && \
@@ -238,6 +178,9 @@ do { \
238 spin_lock(&_hs->lock); \ 178 spin_lock(&_hs->lock); \
239 } \ 179 } \
240} while (0) 180} while (0)
181#else
182#define call_gadget(_hs, _entry) do {} while (0)
183#endif
241 184
242struct dwc2_hsotg; 185struct dwc2_hsotg;
243struct dwc2_host_chan; 186struct dwc2_host_chan;
@@ -495,11 +438,13 @@ struct dwc2_hw_params {
495 * struct dwc2_hsotg - Holds the state of the driver, including the non-periodic 438 * struct dwc2_hsotg - Holds the state of the driver, including the non-periodic
496 * and periodic schedules 439 * and periodic schedules
497 * 440 *
441 * These are common for both host and peripheral modes:
442 *
498 * @dev: The struct device pointer 443 * @dev: The struct device pointer
499 * @regs: Pointer to controller regs 444 * @regs: Pointer to controller regs
500 * @core_params: Parameters that define how the core should be configured
501 * @hw_params: Parameters that were autodetected from the 445 * @hw_params: Parameters that were autodetected from the
502 * hardware registers 446 * hardware registers
447 * @core_params: Parameters that define how the core should be configured
503 * @op_state: The operational State, during transitions (a_host=> 448 * @op_state: The operational State, during transitions (a_host=>
504 * a_peripheral and b_device=>b_host) this may not match 449 * a_peripheral and b_device=>b_host) this may not match
505 * the core, but allows the software to determine 450 * the core, but allows the software to determine
@@ -508,6 +453,8 @@ struct dwc2_hw_params {
508 * - USB_DR_MODE_PERIPHERAL 453 * - USB_DR_MODE_PERIPHERAL
509 * - USB_DR_MODE_HOST 454 * - USB_DR_MODE_HOST
510 * - USB_DR_MODE_OTG 455 * - USB_DR_MODE_OTG
456 * @lock: Spinlock that protects all the driver data structures
457 * @priv: Stores a pointer to the struct usb_hcd
511 * @queuing_high_bandwidth: True if multiple packets of a high-bandwidth 458 * @queuing_high_bandwidth: True if multiple packets of a high-bandwidth
512 * transfer are in process of being queued 459 * transfer are in process of being queued
513 * @srp_success: Stores status of SRP request in the case of a FS PHY 460 * @srp_success: Stores status of SRP request in the case of a FS PHY
@@ -517,6 +464,9 @@ struct dwc2_hw_params {
517 * interrupt 464 * interrupt
518 * @wkp_timer: Timer object for handling Wakeup Detected interrupt 465 * @wkp_timer: Timer object for handling Wakeup Detected interrupt
519 * @lx_state: Lx state of connected device 466 * @lx_state: Lx state of connected device
467 *
468 * These are for host mode:
469 *
520 * @flags: Flags for handling root port state changes 470 * @flags: Flags for handling root port state changes
521 * @non_periodic_sched_inactive: Inactive QHs in the non-periodic schedule. 471 * @non_periodic_sched_inactive: Inactive QHs in the non-periodic schedule.
522 * Transfers associated with these QHs are not currently 472 * Transfers associated with these QHs are not currently
@@ -585,11 +535,31 @@ struct dwc2_hw_params {
585 * @status_buf_dma: DMA address for status_buf 535 * @status_buf_dma: DMA address for status_buf
586 * @start_work: Delayed work for handling host A-cable connection 536 * @start_work: Delayed work for handling host A-cable connection
587 * @reset_work: Delayed work for handling a port reset 537 * @reset_work: Delayed work for handling a port reset
588 * @lock: Spinlock that protects all the driver data structures
589 * @priv: Stores a pointer to the struct usb_hcd
590 * @otg_port: OTG port number 538 * @otg_port: OTG port number
591 * @frame_list: Frame list 539 * @frame_list: Frame list
592 * @frame_list_dma: Frame list DMA address 540 * @frame_list_dma: Frame list DMA address
541 *
542 * These are for peripheral mode:
543 *
544 * @driver: USB gadget driver
545 * @phy: The otg phy transceiver structure for phy control.
546 * @uphy: The otg phy transceiver structure for old USB phy control.
547 * @plat: The platform specific configuration data. This can be removed once
548 * all SoCs support usb transceiver.
549 * @supplies: Definition of USB power supplies
550 * @phyif: PHY interface width
551 * @dedicated_fifos: Set if the hardware has dedicated IN-EP fifos.
552 * @num_of_eps: Number of available EPs (excluding EP0)
553 * @debug_root: Root directrory for debugfs.
554 * @debug_file: Main status file for debugfs.
555 * @debug_fifo: FIFO status file for debugfs.
556 * @ep0_reply: Request used for ep0 reply.
557 * @ep0_buff: Buffer for EP0 reply data, if needed.
558 * @ctrl_buff: Buffer for EP0 control requests.
559 * @ctrl_req: Request for EP0 control packets.
560 * @setup: NAK management for EP0 SETUP
561 * @last_rst: Time of last reset
562 * @eps: The endpoints being supplied to the gadget framework
593 */ 563 */
594struct dwc2_hsotg { 564struct dwc2_hsotg {
595 struct device *dev; 565 struct device *dev;
@@ -601,6 +571,16 @@ struct dwc2_hsotg {
601 enum usb_otg_state op_state; 571 enum usb_otg_state op_state;
602 enum usb_dr_mode dr_mode; 572 enum usb_dr_mode dr_mode;
603 573
574 struct phy *phy;
575 struct usb_phy *uphy;
576 struct regulator_bulk_data supplies[ARRAY_SIZE(s3c_hsotg_supply_names)];
577
578 spinlock_t lock;
579 struct mutex init_mutex;
580 void *priv;
581 int irq;
582 struct clk *clk;
583
604 unsigned int queuing_high_bandwidth:1; 584 unsigned int queuing_high_bandwidth:1;
605 unsigned int srp_success:1; 585 unsigned int srp_success:1;
606 586
@@ -609,6 +589,18 @@ struct dwc2_hsotg {
609 struct timer_list wkp_timer; 589 struct timer_list wkp_timer;
610 enum dwc2_lx_state lx_state; 590 enum dwc2_lx_state lx_state;
611 591
592 struct dentry *debug_root;
593 struct dentry *debug_file;
594 struct dentry *debug_fifo;
595
596 /* DWC OTG HW Release versions */
597#define DWC2_CORE_REV_2_71a 0x4f54271a
598#define DWC2_CORE_REV_2_90a 0x4f54290a
599#define DWC2_CORE_REV_2_92a 0x4f54292a
600#define DWC2_CORE_REV_2_94a 0x4f54294a
601#define DWC2_CORE_REV_3_00a 0x4f54300a
602
603#if IS_ENABLED(CONFIG_USB_DWC2_HOST) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
612 union dwc2_hcd_internal_flags { 604 union dwc2_hcd_internal_flags {
613 u32 d32; 605 u32 d32;
614 struct { 606 struct {
@@ -655,19 +647,10 @@ struct dwc2_hsotg {
655 647
656 struct delayed_work start_work; 648 struct delayed_work start_work;
657 struct delayed_work reset_work; 649 struct delayed_work reset_work;
658 spinlock_t lock;
659 void *priv;
660 u8 otg_port; 650 u8 otg_port;
661 u32 *frame_list; 651 u32 *frame_list;
662 dma_addr_t frame_list_dma; 652 dma_addr_t frame_list_dma;
663 653
664 /* DWC OTG HW Release versions */
665#define DWC2_CORE_REV_2_71a 0x4f54271a
666#define DWC2_CORE_REV_2_90a 0x4f54290a
667#define DWC2_CORE_REV_2_92a 0x4f54292a
668#define DWC2_CORE_REV_2_94a 0x4f54294a
669#define DWC2_CORE_REV_3_00a 0x4f54300a
670
671#ifdef DEBUG 654#ifdef DEBUG
672 u32 frrem_samples; 655 u32 frrem_samples;
673 u64 frrem_accum; 656 u64 frrem_accum;
@@ -686,6 +669,31 @@ struct dwc2_hsotg {
686 u32 hfnum_other_samples_b; 669 u32 hfnum_other_samples_b;
687 u64 hfnum_other_frrem_accum_b; 670 u64 hfnum_other_frrem_accum_b;
688#endif 671#endif
672#endif /* CONFIG_USB_DWC2_HOST || CONFIG_USB_DWC2_DUAL_ROLE */
673
674#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
675 /* Gadget structures */
676 struct usb_gadget_driver *driver;
677 struct s3c_hsotg_plat *plat;
678
679 u32 phyif;
680 int fifo_mem;
681 unsigned int dedicated_fifos:1;
682 unsigned char num_of_eps;
683 u32 fifo_map;
684
685 struct usb_request *ep0_reply;
686 struct usb_request *ctrl_req;
687 u8 ep0_buff[8];
688 u8 ctrl_buff[8];
689
690 struct usb_gadget gadget;
691 unsigned int enabled:1;
692 unsigned int connected:1;
693 unsigned int setup:1;
694 unsigned long last_rst;
695 struct s3c_hsotg_ep *eps;
696#endif /* CONFIG_USB_DWC2_PERIPHERAL || CONFIG_USB_DWC2_DUAL_ROLE */
689}; 697};
690 698
691/* Reasons for halting a host channel */ 699/* Reasons for halting a host channel */
@@ -955,4 +963,43 @@ extern void dwc2_dump_global_registers(struct dwc2_hsotg *hsotg);
955 */ 963 */
956extern u16 dwc2_get_otg_version(struct dwc2_hsotg *hsotg); 964extern u16 dwc2_get_otg_version(struct dwc2_hsotg *hsotg);
957 965
966/* Gadget defines */
967#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
968extern int s3c_hsotg_remove(struct dwc2_hsotg *hsotg);
969extern int s3c_hsotg_suspend(struct dwc2_hsotg *dwc2);
970extern int s3c_hsotg_resume(struct dwc2_hsotg *dwc2);
971extern int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq);
972extern void s3c_hsotg_core_init_disconnected(struct dwc2_hsotg *dwc2);
973extern void s3c_hsotg_core_connect(struct dwc2_hsotg *hsotg);
974extern void s3c_hsotg_disconnect(struct dwc2_hsotg *dwc2);
975#else
976static inline int s3c_hsotg_remove(struct dwc2_hsotg *dwc2)
977{ return 0; }
978static inline int s3c_hsotg_suspend(struct dwc2_hsotg *dwc2)
979{ return 0; }
980static inline int s3c_hsotg_resume(struct dwc2_hsotg *dwc2)
981{ return 0; }
982static inline int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq)
983{ return 0; }
984static inline void s3c_hsotg_core_init_disconnected(struct dwc2_hsotg *dwc2) {}
985static inline void s3c_hsotg_core_connect(struct dwc2_hsotg *hsotg) {}
986static inline void s3c_hsotg_disconnect(struct dwc2_hsotg *dwc2) {}
987#endif
988
989#if IS_ENABLED(CONFIG_USB_DWC2_HOST) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
990extern int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg);
991extern void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg);
992extern void dwc2_hcd_start(struct dwc2_hsotg *hsotg);
993#else
994static inline void dwc2_set_all_params(struct dwc2_core_params *params, int value) {}
995static inline int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg)
996{ return 0; }
997static inline void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg) {}
998static inline void dwc2_hcd_start(struct dwc2_hsotg *hsotg) {}
999static inline void dwc2_hcd_remove(struct dwc2_hsotg *hsotg) {}
1000static inline int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
1001 const struct dwc2_core_params *params)
1002{ return 0; }
1003#endif
1004
958#endif /* __DWC2_CORE_H__ */ 1005#endif /* __DWC2_CORE_H__ */
diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c
index c93918b70d03..ad43c5bc1ef1 100644
--- a/drivers/usb/dwc2/core_intr.c
+++ b/drivers/usb/dwc2/core_intr.c
@@ -128,6 +128,9 @@ static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg)
128 dwc2_op_state_str(hsotg)); 128 dwc2_op_state_str(hsotg));
129 gotgctl = readl(hsotg->regs + GOTGCTL); 129 gotgctl = readl(hsotg->regs + GOTGCTL);
130 130
131 if (dwc2_is_device_mode(hsotg))
132 s3c_hsotg_disconnect(hsotg);
133
131 if (hsotg->op_state == OTG_STATE_B_HOST) { 134 if (hsotg->op_state == OTG_STATE_B_HOST) {
132 hsotg->op_state = OTG_STATE_B_PERIPHERAL; 135 hsotg->op_state = OTG_STATE_B_PERIPHERAL;
133 } else { 136 } else {
@@ -287,9 +290,11 @@ static void dwc2_handle_conn_id_status_change_intr(struct dwc2_hsotg *hsotg)
287 * Release lock before scheduling workq as it holds spinlock during 290 * Release lock before scheduling workq as it holds spinlock during
288 * scheduling. 291 * scheduling.
289 */ 292 */
290 spin_unlock(&hsotg->lock); 293 if (hsotg->wq_otg) {
291 queue_work(hsotg->wq_otg, &hsotg->wf_otg); 294 spin_unlock(&hsotg->lock);
292 spin_lock(&hsotg->lock); 295 queue_work(hsotg->wq_otg, &hsotg->wf_otg);
296 spin_lock(&hsotg->lock);
297 }
293 298
294 /* Clear interrupt */ 299 /* Clear interrupt */
295 writel(GINTSTS_CONIDSTSCHNG, hsotg->regs + GINTSTS); 300 writel(GINTSTS_CONIDSTSCHNG, hsotg->regs + GINTSTS);
@@ -312,6 +317,12 @@ static void dwc2_handle_session_req_intr(struct dwc2_hsotg *hsotg)
312 317
313 /* Clear interrupt */ 318 /* Clear interrupt */
314 writel(GINTSTS_SESSREQINT, hsotg->regs + GINTSTS); 319 writel(GINTSTS_SESSREQINT, hsotg->regs + GINTSTS);
320
321 /*
322 * Report disconnect if there is any previous session established
323 */
324 if (dwc2_is_device_mode(hsotg))
325 s3c_hsotg_disconnect(hsotg);
315} 326}
316 327
317/* 328/*
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
index 8b5c079c7b7d..200168ec2d75 100644
--- a/drivers/usb/dwc2/gadget.c
+++ b/drivers/usb/dwc2/gadget.c
@@ -21,6 +21,7 @@
21#include <linux/platform_device.h> 21#include <linux/platform_device.h>
22#include <linux/dma-mapping.h> 22#include <linux/dma-mapping.h>
23#include <linux/debugfs.h> 23#include <linux/debugfs.h>
24#include <linux/mutex.h>
24#include <linux/seq_file.h> 25#include <linux/seq_file.h>
25#include <linux/delay.h> 26#include <linux/delay.h>
26#include <linux/io.h> 27#include <linux/io.h>
@@ -36,6 +37,7 @@
36#include <linux/platform_data/s3c-hsotg.h> 37#include <linux/platform_data/s3c-hsotg.h>
37 38
38#include "core.h" 39#include "core.h"
40#include "hw.h"
39 41
40/* conversion functions */ 42/* conversion functions */
41static inline struct s3c_hsotg_req *our_req(struct usb_request *req) 43static inline struct s3c_hsotg_req *our_req(struct usb_request *req)
@@ -48,9 +50,9 @@ static inline struct s3c_hsotg_ep *our_ep(struct usb_ep *ep)
48 return container_of(ep, struct s3c_hsotg_ep, ep); 50 return container_of(ep, struct s3c_hsotg_ep, ep);
49} 51}
50 52
51static inline struct s3c_hsotg *to_hsotg(struct usb_gadget *gadget) 53static inline struct dwc2_hsotg *to_hsotg(struct usb_gadget *gadget)
52{ 54{
53 return container_of(gadget, struct s3c_hsotg, gadget); 55 return container_of(gadget, struct dwc2_hsotg, gadget);
54} 56}
55 57
56static inline void __orr32(void __iomem *ptr, u32 val) 58static inline void __orr32(void __iomem *ptr, u32 val)
@@ -64,7 +66,7 @@ static inline void __bic32(void __iomem *ptr, u32 val)
64} 66}
65 67
66/* forward decleration of functions */ 68/* forward decleration of functions */
67static void s3c_hsotg_dump(struct s3c_hsotg *hsotg); 69static void s3c_hsotg_dump(struct dwc2_hsotg *hsotg);
68 70
69/** 71/**
70 * using_dma - return the DMA status of the driver. 72 * using_dma - return the DMA status of the driver.
@@ -85,7 +87,7 @@ static void s3c_hsotg_dump(struct s3c_hsotg *hsotg);
85 * 87 *
86 * Until this issue is sorted out, we always return 'false'. 88 * Until this issue is sorted out, we always return 'false'.
87 */ 89 */
88static inline bool using_dma(struct s3c_hsotg *hsotg) 90static inline bool using_dma(struct dwc2_hsotg *hsotg)
89{ 91{
90 return false; /* support is not complete */ 92 return false; /* support is not complete */
91} 93}
@@ -95,7 +97,7 @@ static inline bool using_dma(struct s3c_hsotg *hsotg)
95 * @hsotg: The device state 97 * @hsotg: The device state
96 * @ints: A bitmask of the interrupts to enable 98 * @ints: A bitmask of the interrupts to enable
97 */ 99 */
98static void s3c_hsotg_en_gsint(struct s3c_hsotg *hsotg, u32 ints) 100static void s3c_hsotg_en_gsint(struct dwc2_hsotg *hsotg, u32 ints)
99{ 101{
100 u32 gsintmsk = readl(hsotg->regs + GINTMSK); 102 u32 gsintmsk = readl(hsotg->regs + GINTMSK);
101 u32 new_gsintmsk; 103 u32 new_gsintmsk;
@@ -113,7 +115,7 @@ static void s3c_hsotg_en_gsint(struct s3c_hsotg *hsotg, u32 ints)
113 * @hsotg: The device state 115 * @hsotg: The device state
114 * @ints: A bitmask of the interrupts to enable 116 * @ints: A bitmask of the interrupts to enable
115 */ 117 */
116static void s3c_hsotg_disable_gsint(struct s3c_hsotg *hsotg, u32 ints) 118static void s3c_hsotg_disable_gsint(struct dwc2_hsotg *hsotg, u32 ints)
117{ 119{
118 u32 gsintmsk = readl(hsotg->regs + GINTMSK); 120 u32 gsintmsk = readl(hsotg->regs + GINTMSK);
119 u32 new_gsintmsk; 121 u32 new_gsintmsk;
@@ -134,7 +136,7 @@ static void s3c_hsotg_disable_gsint(struct s3c_hsotg *hsotg, u32 ints)
134 * Set or clear the mask for an individual endpoint's interrupt 136 * Set or clear the mask for an individual endpoint's interrupt
135 * request. 137 * request.
136 */ 138 */
137static void s3c_hsotg_ctrl_epint(struct s3c_hsotg *hsotg, 139static void s3c_hsotg_ctrl_epint(struct dwc2_hsotg *hsotg,
138 unsigned int ep, unsigned int dir_in, 140 unsigned int ep, unsigned int dir_in,
139 unsigned int en) 141 unsigned int en)
140{ 142{
@@ -159,7 +161,7 @@ static void s3c_hsotg_ctrl_epint(struct s3c_hsotg *hsotg,
159 * s3c_hsotg_init_fifo - initialise non-periodic FIFOs 161 * s3c_hsotg_init_fifo - initialise non-periodic FIFOs
160 * @hsotg: The device instance. 162 * @hsotg: The device instance.
161 */ 163 */
162static void s3c_hsotg_init_fifo(struct s3c_hsotg *hsotg) 164static void s3c_hsotg_init_fifo(struct dwc2_hsotg *hsotg)
163{ 165{
164 unsigned int ep; 166 unsigned int ep;
165 unsigned int addr; 167 unsigned int addr;
@@ -283,7 +285,7 @@ static inline int is_ep_periodic(struct s3c_hsotg_ep *hs_ep)
283 * This is the reverse of s3c_hsotg_map_dma(), called for the completion 285 * This is the reverse of s3c_hsotg_map_dma(), called for the completion
284 * of a request to ensure the buffer is ready for access by the caller. 286 * of a request to ensure the buffer is ready for access by the caller.
285 */ 287 */
286static void s3c_hsotg_unmap_dma(struct s3c_hsotg *hsotg, 288static void s3c_hsotg_unmap_dma(struct dwc2_hsotg *hsotg,
287 struct s3c_hsotg_ep *hs_ep, 289 struct s3c_hsotg_ep *hs_ep,
288 struct s3c_hsotg_req *hs_req) 290 struct s3c_hsotg_req *hs_req)
289{ 291{
@@ -312,7 +314,7 @@ static void s3c_hsotg_unmap_dma(struct s3c_hsotg *hsotg,
312 * 314 *
313 * This routine is only needed for PIO 315 * This routine is only needed for PIO
314 */ 316 */
315static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg, 317static int s3c_hsotg_write_fifo(struct dwc2_hsotg *hsotg,
316 struct s3c_hsotg_ep *hs_ep, 318 struct s3c_hsotg_ep *hs_ep,
317 struct s3c_hsotg_req *hs_req) 319 struct s3c_hsotg_req *hs_req)
318{ 320{
@@ -517,7 +519,7 @@ static unsigned get_ep_limit(struct s3c_hsotg_ep *hs_ep)
517 * Start the given request running by setting the endpoint registers 519 * Start the given request running by setting the endpoint registers
518 * appropriately, and writing any data to the FIFOs. 520 * appropriately, and writing any data to the FIFOs.
519 */ 521 */
520static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg, 522static void s3c_hsotg_start_req(struct dwc2_hsotg *hsotg,
521 struct s3c_hsotg_ep *hs_ep, 523 struct s3c_hsotg_ep *hs_ep,
522 struct s3c_hsotg_req *hs_req, 524 struct s3c_hsotg_req *hs_req,
523 bool continuing) 525 bool continuing)
@@ -707,7 +709,7 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
707 * DMA memory, then we map the memory and mark our request to allow us to 709 * DMA memory, then we map the memory and mark our request to allow us to
708 * cleanup on completion. 710 * cleanup on completion.
709 */ 711 */
710static int s3c_hsotg_map_dma(struct s3c_hsotg *hsotg, 712static int s3c_hsotg_map_dma(struct dwc2_hsotg *hsotg,
711 struct s3c_hsotg_ep *hs_ep, 713 struct s3c_hsotg_ep *hs_ep,
712 struct usb_request *req) 714 struct usb_request *req)
713{ 715{
@@ -736,7 +738,7 @@ static int s3c_hsotg_ep_queue(struct usb_ep *ep, struct usb_request *req,
736{ 738{
737 struct s3c_hsotg_req *hs_req = our_req(req); 739 struct s3c_hsotg_req *hs_req = our_req(req);
738 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 740 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
739 struct s3c_hsotg *hs = hs_ep->parent; 741 struct dwc2_hsotg *hs = hs_ep->parent;
740 bool first; 742 bool first;
741 743
742 dev_dbg(hs->dev, "%s: req %p: %d@%p, noi=%d, zero=%d, snok=%d\n", 744 dev_dbg(hs->dev, "%s: req %p: %d@%p, noi=%d, zero=%d, snok=%d\n",
@@ -768,7 +770,7 @@ static int s3c_hsotg_ep_queue_lock(struct usb_ep *ep, struct usb_request *req,
768 gfp_t gfp_flags) 770 gfp_t gfp_flags)
769{ 771{
770 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 772 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
771 struct s3c_hsotg *hs = hs_ep->parent; 773 struct dwc2_hsotg *hs = hs_ep->parent;
772 unsigned long flags = 0; 774 unsigned long flags = 0;
773 int ret = 0; 775 int ret = 0;
774 776
@@ -799,7 +801,7 @@ static void s3c_hsotg_complete_oursetup(struct usb_ep *ep,
799 struct usb_request *req) 801 struct usb_request *req)
800{ 802{
801 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 803 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
802 struct s3c_hsotg *hsotg = hs_ep->parent; 804 struct dwc2_hsotg *hsotg = hs_ep->parent;
803 805
804 dev_dbg(hsotg->dev, "%s: ep %p, req %p\n", __func__, ep, req); 806 dev_dbg(hsotg->dev, "%s: ep %p, req %p\n", __func__, ep, req);
805 807
@@ -814,7 +816,7 @@ static void s3c_hsotg_complete_oursetup(struct usb_ep *ep,
814 * Convert the given wIndex into a pointer to an driver endpoint 816 * Convert the given wIndex into a pointer to an driver endpoint
815 * structure, or return NULL if it is not a valid endpoint. 817 * structure, or return NULL if it is not a valid endpoint.
816 */ 818 */
817static struct s3c_hsotg_ep *ep_from_windex(struct s3c_hsotg *hsotg, 819static struct s3c_hsotg_ep *ep_from_windex(struct dwc2_hsotg *hsotg,
818 u32 windex) 820 u32 windex)
819{ 821{
820 struct s3c_hsotg_ep *ep = &hsotg->eps[windex & 0x7F]; 822 struct s3c_hsotg_ep *ep = &hsotg->eps[windex & 0x7F];
@@ -843,7 +845,7 @@ static struct s3c_hsotg_ep *ep_from_windex(struct s3c_hsotg *hsotg,
843 * Create a request and queue it on the given endpoint. This is useful as 845 * Create a request and queue it on the given endpoint. This is useful as
844 * an internal method of sending replies to certain control requests, etc. 846 * an internal method of sending replies to certain control requests, etc.
845 */ 847 */
846static int s3c_hsotg_send_reply(struct s3c_hsotg *hsotg, 848static int s3c_hsotg_send_reply(struct dwc2_hsotg *hsotg,
847 struct s3c_hsotg_ep *ep, 849 struct s3c_hsotg_ep *ep,
848 void *buff, 850 void *buff,
849 int length) 851 int length)
@@ -884,7 +886,7 @@ static int s3c_hsotg_send_reply(struct s3c_hsotg *hsotg,
884 * @hsotg: The device state 886 * @hsotg: The device state
885 * @ctrl: USB control request 887 * @ctrl: USB control request
886 */ 888 */
887static int s3c_hsotg_process_req_status(struct s3c_hsotg *hsotg, 889static int s3c_hsotg_process_req_status(struct dwc2_hsotg *hsotg,
888 struct usb_ctrlrequest *ctrl) 890 struct usb_ctrlrequest *ctrl)
889{ 891{
890 struct s3c_hsotg_ep *ep0 = &hsotg->eps[0]; 892 struct s3c_hsotg_ep *ep0 = &hsotg->eps[0];
@@ -955,7 +957,7 @@ static struct s3c_hsotg_req *get_ep_head(struct s3c_hsotg_ep *hs_ep)
955 * @hsotg: The device state 957 * @hsotg: The device state
956 * @ctrl: USB control request 958 * @ctrl: USB control request
957 */ 959 */
958static int s3c_hsotg_process_req_feature(struct s3c_hsotg *hsotg, 960static int s3c_hsotg_process_req_feature(struct dwc2_hsotg *hsotg,
959 struct usb_ctrlrequest *ctrl) 961 struct usb_ctrlrequest *ctrl)
960{ 962{
961 struct s3c_hsotg_ep *ep0 = &hsotg->eps[0]; 963 struct s3c_hsotg_ep *ep0 = &hsotg->eps[0];
@@ -1028,8 +1030,7 @@ static int s3c_hsotg_process_req_feature(struct s3c_hsotg *hsotg,
1028 return 1; 1030 return 1;
1029} 1031}
1030 1032
1031static void s3c_hsotg_enqueue_setup(struct s3c_hsotg *hsotg); 1033static void s3c_hsotg_enqueue_setup(struct dwc2_hsotg *hsotg);
1032static void s3c_hsotg_disconnect(struct s3c_hsotg *hsotg);
1033 1034
1034/** 1035/**
1035 * s3c_hsotg_stall_ep0 - stall ep0 1036 * s3c_hsotg_stall_ep0 - stall ep0
@@ -1037,7 +1038,7 @@ static void s3c_hsotg_disconnect(struct s3c_hsotg *hsotg);
1037 * 1038 *
1038 * Set stall for ep0 as response for setup request. 1039 * Set stall for ep0 as response for setup request.
1039 */ 1040 */
1040static void s3c_hsotg_stall_ep0(struct s3c_hsotg *hsotg) 1041static void s3c_hsotg_stall_ep0(struct dwc2_hsotg *hsotg)
1041{ 1042{
1042 struct s3c_hsotg_ep *ep0 = &hsotg->eps[0]; 1043 struct s3c_hsotg_ep *ep0 = &hsotg->eps[0];
1043 u32 reg; 1044 u32 reg;
@@ -1076,7 +1077,7 @@ static void s3c_hsotg_stall_ep0(struct s3c_hsotg *hsotg)
1076 * needs to work out what to do next (and whether to pass it on to the 1077 * needs to work out what to do next (and whether to pass it on to the
1077 * gadget driver). 1078 * gadget driver).
1078 */ 1079 */
1079static void s3c_hsotg_process_control(struct s3c_hsotg *hsotg, 1080static void s3c_hsotg_process_control(struct dwc2_hsotg *hsotg,
1080 struct usb_ctrlrequest *ctrl) 1081 struct usb_ctrlrequest *ctrl)
1081{ 1082{
1082 struct s3c_hsotg_ep *ep0 = &hsotg->eps[0]; 1083 struct s3c_hsotg_ep *ep0 = &hsotg->eps[0];
@@ -1107,7 +1108,6 @@ static void s3c_hsotg_process_control(struct s3c_hsotg *hsotg,
1107 if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) { 1108 if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
1108 switch (ctrl->bRequest) { 1109 switch (ctrl->bRequest) {
1109 case USB_REQ_SET_ADDRESS: 1110 case USB_REQ_SET_ADDRESS:
1110 s3c_hsotg_disconnect(hsotg);
1111 dcfg = readl(hsotg->regs + DCFG); 1111 dcfg = readl(hsotg->regs + DCFG);
1112 dcfg &= ~DCFG_DEVADDR_MASK; 1112 dcfg &= ~DCFG_DEVADDR_MASK;
1113 dcfg |= (le16_to_cpu(ctrl->wValue) << 1113 dcfg |= (le16_to_cpu(ctrl->wValue) <<
@@ -1161,7 +1161,7 @@ static void s3c_hsotg_complete_setup(struct usb_ep *ep,
1161 struct usb_request *req) 1161 struct usb_request *req)
1162{ 1162{
1163 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 1163 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
1164 struct s3c_hsotg *hsotg = hs_ep->parent; 1164 struct dwc2_hsotg *hsotg = hs_ep->parent;
1165 1165
1166 if (req->status < 0) { 1166 if (req->status < 0) {
1167 dev_dbg(hsotg->dev, "%s: failed %d\n", __func__, req->status); 1167 dev_dbg(hsotg->dev, "%s: failed %d\n", __func__, req->status);
@@ -1183,7 +1183,7 @@ static void s3c_hsotg_complete_setup(struct usb_ep *ep,
1183 * Enqueue a request on EP0 if necessary to received any SETUP packets 1183 * Enqueue a request on EP0 if necessary to received any SETUP packets
1184 * received from the host. 1184 * received from the host.
1185 */ 1185 */
1186static void s3c_hsotg_enqueue_setup(struct s3c_hsotg *hsotg) 1186static void s3c_hsotg_enqueue_setup(struct dwc2_hsotg *hsotg)
1187{ 1187{
1188 struct usb_request *req = hsotg->ctrl_req; 1188 struct usb_request *req = hsotg->ctrl_req;
1189 struct s3c_hsotg_req *hs_req = our_req(req); 1189 struct s3c_hsotg_req *hs_req = our_req(req);
@@ -1226,7 +1226,7 @@ static void s3c_hsotg_enqueue_setup(struct s3c_hsotg *hsotg)
1226 * 1226 *
1227 * Note, expects the ep to already be locked as appropriate. 1227 * Note, expects the ep to already be locked as appropriate.
1228 */ 1228 */
1229static void s3c_hsotg_complete_request(struct s3c_hsotg *hsotg, 1229static void s3c_hsotg_complete_request(struct dwc2_hsotg *hsotg,
1230 struct s3c_hsotg_ep *hs_ep, 1230 struct s3c_hsotg_ep *hs_ep,
1231 struct s3c_hsotg_req *hs_req, 1231 struct s3c_hsotg_req *hs_req,
1232 int result) 1232 int result)
@@ -1291,7 +1291,7 @@ static void s3c_hsotg_complete_request(struct s3c_hsotg *hsotg,
1291 * endpoint, so sort out whether we need to read the data into a request 1291 * endpoint, so sort out whether we need to read the data into a request
1292 * that has been made for that endpoint. 1292 * that has been made for that endpoint.
1293 */ 1293 */
1294static void s3c_hsotg_rx_data(struct s3c_hsotg *hsotg, int ep_idx, int size) 1294static void s3c_hsotg_rx_data(struct dwc2_hsotg *hsotg, int ep_idx, int size)
1295{ 1295{
1296 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[ep_idx]; 1296 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[ep_idx];
1297 struct s3c_hsotg_req *hs_req = hs_ep->req; 1297 struct s3c_hsotg_req *hs_req = hs_ep->req;
@@ -1356,7 +1356,7 @@ static void s3c_hsotg_rx_data(struct s3c_hsotg *hsotg, int ep_idx, int size)
1356 * currently believed that we do not need to wait for any space in 1356 * currently believed that we do not need to wait for any space in
1357 * the TxFIFO. 1357 * the TxFIFO.
1358 */ 1358 */
1359static void s3c_hsotg_send_zlp(struct s3c_hsotg *hsotg, 1359static void s3c_hsotg_send_zlp(struct dwc2_hsotg *hsotg,
1360 struct s3c_hsotg_req *req) 1360 struct s3c_hsotg_req *req)
1361{ 1361{
1362 u32 ctrl; 1362 u32 ctrl;
@@ -1398,7 +1398,7 @@ static void s3c_hsotg_send_zlp(struct s3c_hsotg *hsotg,
1398 * transfer for an OUT endpoint has been completed, either by a short 1398 * transfer for an OUT endpoint has been completed, either by a short
1399 * packet or by the finish of a transfer. 1399 * packet or by the finish of a transfer.
1400 */ 1400 */
1401static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg, 1401static void s3c_hsotg_handle_outdone(struct dwc2_hsotg *hsotg,
1402 int epnum, bool was_setup) 1402 int epnum, bool was_setup)
1403{ 1403{
1404 u32 epsize = readl(hsotg->regs + DOEPTSIZ(epnum)); 1404 u32 epsize = readl(hsotg->regs + DOEPTSIZ(epnum));
@@ -1471,7 +1471,7 @@ static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
1471 * 1471 *
1472 * Return the current frame number 1472 * Return the current frame number
1473 */ 1473 */
1474static u32 s3c_hsotg_read_frameno(struct s3c_hsotg *hsotg) 1474static u32 s3c_hsotg_read_frameno(struct dwc2_hsotg *hsotg)
1475{ 1475{
1476 u32 dsts; 1476 u32 dsts;
1477 1477
@@ -1498,7 +1498,7 @@ static u32 s3c_hsotg_read_frameno(struct s3c_hsotg *hsotg)
1498 * as the actual data should be sent to the memory directly and we turn 1498 * as the actual data should be sent to the memory directly and we turn
1499 * on the completion interrupts to get notifications of transfer completion. 1499 * on the completion interrupts to get notifications of transfer completion.
1500 */ 1500 */
1501static void s3c_hsotg_handle_rx(struct s3c_hsotg *hsotg) 1501static void s3c_hsotg_handle_rx(struct dwc2_hsotg *hsotg)
1502{ 1502{
1503 u32 grxstsr = readl(hsotg->regs + GRXSTSP); 1503 u32 grxstsr = readl(hsotg->regs + GRXSTSP);
1504 u32 epnum, status, size; 1504 u32 epnum, status, size;
@@ -1590,7 +1590,7 @@ static u32 s3c_hsotg_ep0_mps(unsigned int mps)
1590 * Configure the maximum packet size for the given endpoint, updating 1590 * Configure the maximum packet size for the given endpoint, updating
1591 * the hardware control registers to reflect this. 1591 * the hardware control registers to reflect this.
1592 */ 1592 */
1593static void s3c_hsotg_set_ep_maxpacket(struct s3c_hsotg *hsotg, 1593static void s3c_hsotg_set_ep_maxpacket(struct dwc2_hsotg *hsotg,
1594 unsigned int ep, unsigned int mps) 1594 unsigned int ep, unsigned int mps)
1595{ 1595{
1596 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[ep]; 1596 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[ep];
@@ -1645,7 +1645,7 @@ bad_mps:
1645 * @hsotg: The driver state 1645 * @hsotg: The driver state
1646 * @idx: The index for the endpoint (0..15) 1646 * @idx: The index for the endpoint (0..15)
1647 */ 1647 */
1648static void s3c_hsotg_txfifo_flush(struct s3c_hsotg *hsotg, unsigned int idx) 1648static void s3c_hsotg_txfifo_flush(struct dwc2_hsotg *hsotg, unsigned int idx)
1649{ 1649{
1650 int timeout; 1650 int timeout;
1651 int val; 1651 int val;
@@ -1681,7 +1681,7 @@ static void s3c_hsotg_txfifo_flush(struct s3c_hsotg *hsotg, unsigned int idx)
1681 * Check to see if there is a request that has data to send, and if so 1681 * Check to see if there is a request that has data to send, and if so
1682 * make an attempt to write data into the FIFO. 1682 * make an attempt to write data into the FIFO.
1683 */ 1683 */
1684static int s3c_hsotg_trytx(struct s3c_hsotg *hsotg, 1684static int s3c_hsotg_trytx(struct dwc2_hsotg *hsotg,
1685 struct s3c_hsotg_ep *hs_ep) 1685 struct s3c_hsotg_ep *hs_ep)
1686{ 1686{
1687 struct s3c_hsotg_req *hs_req = hs_ep->req; 1687 struct s3c_hsotg_req *hs_req = hs_ep->req;
@@ -1714,7 +1714,7 @@ static int s3c_hsotg_trytx(struct s3c_hsotg *hsotg,
1714 * An IN transfer has been completed, update the transfer's state and then 1714 * An IN transfer has been completed, update the transfer's state and then
1715 * call the relevant completion routines. 1715 * call the relevant completion routines.
1716 */ 1716 */
1717static void s3c_hsotg_complete_in(struct s3c_hsotg *hsotg, 1717static void s3c_hsotg_complete_in(struct dwc2_hsotg *hsotg,
1718 struct s3c_hsotg_ep *hs_ep) 1718 struct s3c_hsotg_ep *hs_ep)
1719{ 1719{
1720 struct s3c_hsotg_req *hs_req = hs_ep->req; 1720 struct s3c_hsotg_req *hs_req = hs_ep->req;
@@ -1791,7 +1791,7 @@ static void s3c_hsotg_complete_in(struct s3c_hsotg *hsotg,
1791 * 1791 *
1792 * Process and clear any interrupt pending for an individual endpoint 1792 * Process and clear any interrupt pending for an individual endpoint
1793 */ 1793 */
1794static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx, 1794static void s3c_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
1795 int dir_in) 1795 int dir_in)
1796{ 1796{
1797 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[idx]; 1797 struct s3c_hsotg_ep *hs_ep = &hsotg->eps[idx];
@@ -1916,7 +1916,7 @@ static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx,
1916 * Handle updating the device settings after the enumeration phase has 1916 * Handle updating the device settings after the enumeration phase has
1917 * been completed. 1917 * been completed.
1918 */ 1918 */
1919static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg) 1919static void s3c_hsotg_irq_enumdone(struct dwc2_hsotg *hsotg)
1920{ 1920{
1921 u32 dsts = readl(hsotg->regs + DSTS); 1921 u32 dsts = readl(hsotg->regs + DSTS);
1922 int ep0_mps = 0, ep_mps = 8; 1922 int ep0_mps = 0, ep_mps = 8;
@@ -1993,7 +1993,7 @@ static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg)
1993 * Go through the requests on the given endpoint and mark them 1993 * Go through the requests on the given endpoint and mark them
1994 * completed with the given result code. 1994 * completed with the given result code.
1995 */ 1995 */
1996static void kill_all_requests(struct s3c_hsotg *hsotg, 1996static void kill_all_requests(struct dwc2_hsotg *hsotg,
1997 struct s3c_hsotg_ep *ep, 1997 struct s3c_hsotg_ep *ep,
1998 int result, bool force) 1998 int result, bool force)
1999{ 1999{
@@ -2027,22 +2027,27 @@ static void kill_all_requests(struct s3c_hsotg *hsotg,
2027 * transactions and signal the gadget driver that this 2027 * transactions and signal the gadget driver that this
2028 * has happened. 2028 * has happened.
2029 */ 2029 */
2030static void s3c_hsotg_disconnect(struct s3c_hsotg *hsotg) 2030void s3c_hsotg_disconnect(struct dwc2_hsotg *hsotg)
2031{ 2031{
2032 unsigned ep; 2032 unsigned ep;
2033 2033
2034 if (!hsotg->connected)
2035 return;
2036
2037 hsotg->connected = 0;
2034 for (ep = 0; ep < hsotg->num_of_eps; ep++) 2038 for (ep = 0; ep < hsotg->num_of_eps; ep++)
2035 kill_all_requests(hsotg, &hsotg->eps[ep], -ESHUTDOWN, true); 2039 kill_all_requests(hsotg, &hsotg->eps[ep], -ESHUTDOWN, true);
2036 2040
2037 call_gadget(hsotg, disconnect); 2041 call_gadget(hsotg, disconnect);
2038} 2042}
2043EXPORT_SYMBOL_GPL(s3c_hsotg_disconnect);
2039 2044
2040/** 2045/**
2041 * s3c_hsotg_irq_fifoempty - TX FIFO empty interrupt handler 2046 * s3c_hsotg_irq_fifoempty - TX FIFO empty interrupt handler
2042 * @hsotg: The device state: 2047 * @hsotg: The device state:
2043 * @periodic: True if this is a periodic FIFO interrupt 2048 * @periodic: True if this is a periodic FIFO interrupt
2044 */ 2049 */
2045static void s3c_hsotg_irq_fifoempty(struct s3c_hsotg *hsotg, bool periodic) 2050static void s3c_hsotg_irq_fifoempty(struct dwc2_hsotg *hsotg, bool periodic)
2046{ 2051{
2047 struct s3c_hsotg_ep *ep; 2052 struct s3c_hsotg_ep *ep;
2048 int epno, ret; 2053 int epno, ret;
@@ -2076,7 +2081,7 @@ static void s3c_hsotg_irq_fifoempty(struct s3c_hsotg *hsotg, bool periodic)
2076 * 2081 *
2077 * Issue a soft reset to the core, and await the core finishing it. 2082 * Issue a soft reset to the core, and await the core finishing it.
2078 */ 2083 */
2079static int s3c_hsotg_corereset(struct s3c_hsotg *hsotg) 2084static int s3c_hsotg_corereset(struct dwc2_hsotg *hsotg)
2080{ 2085{
2081 int timeout; 2086 int timeout;
2082 u32 grstctl; 2087 u32 grstctl;
@@ -2124,7 +2129,7 @@ static int s3c_hsotg_corereset(struct s3c_hsotg *hsotg)
2124 * 2129 *
2125 * Issue a soft reset to the core, and await the core finishing it. 2130 * Issue a soft reset to the core, and await the core finishing it.
2126 */ 2131 */
2127static void s3c_hsotg_core_init(struct s3c_hsotg *hsotg) 2132void s3c_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg)
2128{ 2133{
2129 s3c_hsotg_corereset(hsotg); 2134 s3c_hsotg_corereset(hsotg);
2130 2135
@@ -2241,12 +2246,23 @@ static void s3c_hsotg_core_init(struct s3c_hsotg *hsotg)
2241 readl(hsotg->regs + DOEPCTL0)); 2246 readl(hsotg->regs + DOEPCTL0));
2242 2247
2243 /* clear global NAKs */ 2248 /* clear global NAKs */
2244 writel(DCTL_CGOUTNAK | DCTL_CGNPINNAK, 2249 writel(DCTL_CGOUTNAK | DCTL_CGNPINNAK | DCTL_SFTDISCON,
2245 hsotg->regs + DCTL); 2250 hsotg->regs + DCTL);
2246 2251
2247 /* must be at-least 3ms to allow bus to see disconnect */ 2252 /* must be at-least 3ms to allow bus to see disconnect */
2248 mdelay(3); 2253 mdelay(3);
2249 2254
2255 hsotg->last_rst = jiffies;
2256}
2257
2258static void s3c_hsotg_core_disconnect(struct dwc2_hsotg *hsotg)
2259{
2260 /* set the soft-disconnect bit */
2261 __orr32(hsotg->regs + DCTL, DCTL_SFTDISCON);
2262}
2263
2264void s3c_hsotg_core_connect(struct dwc2_hsotg *hsotg)
2265{
2250 /* remove the soft-disconnect and let's go */ 2266 /* remove the soft-disconnect and let's go */
2251 __bic32(hsotg->regs + DCTL, DCTL_SFTDISCON); 2267 __bic32(hsotg->regs + DCTL, DCTL_SFTDISCON);
2252} 2268}
@@ -2258,7 +2274,7 @@ static void s3c_hsotg_core_init(struct s3c_hsotg *hsotg)
2258 */ 2274 */
2259static irqreturn_t s3c_hsotg_irq(int irq, void *pw) 2275static irqreturn_t s3c_hsotg_irq(int irq, void *pw)
2260{ 2276{
2261 struct s3c_hsotg *hsotg = pw; 2277 struct dwc2_hsotg *hsotg = pw;
2262 int retry_count = 8; 2278 int retry_count = 8;
2263 u32 gintsts; 2279 u32 gintsts;
2264 u32 gintmsk; 2280 u32 gintmsk;
@@ -2273,31 +2289,11 @@ irq_retry:
2273 2289
2274 gintsts &= gintmsk; 2290 gintsts &= gintmsk;
2275 2291
2276 if (gintsts & GINTSTS_OTGINT) {
2277 u32 otgint = readl(hsotg->regs + GOTGINT);
2278
2279 dev_info(hsotg->dev, "OTGInt: %08x\n", otgint);
2280
2281 writel(otgint, hsotg->regs + GOTGINT);
2282 }
2283
2284 if (gintsts & GINTSTS_SESSREQINT) {
2285 dev_dbg(hsotg->dev, "%s: SessReqInt\n", __func__);
2286 writel(GINTSTS_SESSREQINT, hsotg->regs + GINTSTS);
2287 }
2288
2289 if (gintsts & GINTSTS_ENUMDONE) { 2292 if (gintsts & GINTSTS_ENUMDONE) {
2290 writel(GINTSTS_ENUMDONE, hsotg->regs + GINTSTS); 2293 writel(GINTSTS_ENUMDONE, hsotg->regs + GINTSTS);
2291 2294
2292 s3c_hsotg_irq_enumdone(hsotg); 2295 s3c_hsotg_irq_enumdone(hsotg);
2293 } 2296 hsotg->connected = 1;
2294
2295 if (gintsts & GINTSTS_CONIDSTSCHNG) {
2296 dev_dbg(hsotg->dev, "ConIDStsChg (DSTS=0x%08x, GOTCTL=%08x)\n",
2297 readl(hsotg->regs + DSTS),
2298 readl(hsotg->regs + GOTGCTL));
2299
2300 writel(GINTSTS_CONIDSTSCHNG, hsotg->regs + GINTSTS);
2301 } 2297 }
2302 2298
2303 if (gintsts & (GINTSTS_OEPINT | GINTSTS_IEPINT)) { 2299 if (gintsts & (GINTSTS_OEPINT | GINTSTS_IEPINT)) {
@@ -2340,8 +2336,8 @@ irq_retry:
2340 kill_all_requests(hsotg, &hsotg->eps[0], 2336 kill_all_requests(hsotg, &hsotg->eps[0],
2341 -ECONNRESET, true); 2337 -ECONNRESET, true);
2342 2338
2343 s3c_hsotg_core_init(hsotg); 2339 s3c_hsotg_core_init_disconnected(hsotg);
2344 hsotg->last_rst = jiffies; 2340 s3c_hsotg_core_connect(hsotg);
2345 } 2341 }
2346 } 2342 }
2347 } 2343 }
@@ -2380,25 +2376,6 @@ irq_retry:
2380 s3c_hsotg_handle_rx(hsotg); 2376 s3c_hsotg_handle_rx(hsotg);
2381 } 2377 }
2382 2378
2383 if (gintsts & GINTSTS_MODEMIS) {
2384 dev_warn(hsotg->dev, "warning, mode mismatch triggered\n");
2385 writel(GINTSTS_MODEMIS, hsotg->regs + GINTSTS);
2386 }
2387
2388 if (gintsts & GINTSTS_USBSUSP) {
2389 dev_info(hsotg->dev, "GINTSTS_USBSusp\n");
2390 writel(GINTSTS_USBSUSP, hsotg->regs + GINTSTS);
2391
2392 call_gadget(hsotg, suspend);
2393 }
2394
2395 if (gintsts & GINTSTS_WKUPINT) {
2396 dev_info(hsotg->dev, "GINTSTS_WkUpIn\n");
2397 writel(GINTSTS_WKUPINT, hsotg->regs + GINTSTS);
2398
2399 call_gadget(hsotg, resume);
2400 }
2401
2402 if (gintsts & GINTSTS_ERLYSUSP) { 2379 if (gintsts & GINTSTS_ERLYSUSP) {
2403 dev_dbg(hsotg->dev, "GINTSTS_ErlySusp\n"); 2380 dev_dbg(hsotg->dev, "GINTSTS_ErlySusp\n");
2404 writel(GINTSTS_ERLYSUSP, hsotg->regs + GINTSTS); 2381 writel(GINTSTS_ERLYSUSP, hsotg->regs + GINTSTS);
@@ -2450,7 +2427,7 @@ static int s3c_hsotg_ep_enable(struct usb_ep *ep,
2450 const struct usb_endpoint_descriptor *desc) 2427 const struct usb_endpoint_descriptor *desc)
2451{ 2428{
2452 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 2429 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
2453 struct s3c_hsotg *hsotg = hs_ep->parent; 2430 struct dwc2_hsotg *hsotg = hs_ep->parent;
2454 unsigned long flags; 2431 unsigned long flags;
2455 int index = hs_ep->index; 2432 int index = hs_ep->index;
2456 u32 epctrl_reg; 2433 u32 epctrl_reg;
@@ -2593,7 +2570,7 @@ error:
2593static int s3c_hsotg_ep_disable(struct usb_ep *ep) 2570static int s3c_hsotg_ep_disable(struct usb_ep *ep)
2594{ 2571{
2595 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 2572 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
2596 struct s3c_hsotg *hsotg = hs_ep->parent; 2573 struct dwc2_hsotg *hsotg = hs_ep->parent;
2597 int dir_in = hs_ep->dir_in; 2574 int dir_in = hs_ep->dir_in;
2598 int index = hs_ep->index; 2575 int index = hs_ep->index;
2599 unsigned long flags; 2576 unsigned long flags;
@@ -2658,7 +2635,7 @@ static int s3c_hsotg_ep_dequeue(struct usb_ep *ep, struct usb_request *req)
2658{ 2635{
2659 struct s3c_hsotg_req *hs_req = our_req(req); 2636 struct s3c_hsotg_req *hs_req = our_req(req);
2660 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 2637 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
2661 struct s3c_hsotg *hs = hs_ep->parent; 2638 struct dwc2_hsotg *hs = hs_ep->parent;
2662 unsigned long flags; 2639 unsigned long flags;
2663 2640
2664 dev_dbg(hs->dev, "ep_dequeue(%p,%p)\n", ep, req); 2641 dev_dbg(hs->dev, "ep_dequeue(%p,%p)\n", ep, req);
@@ -2684,7 +2661,7 @@ static int s3c_hsotg_ep_dequeue(struct usb_ep *ep, struct usb_request *req)
2684static int s3c_hsotg_ep_sethalt(struct usb_ep *ep, int value) 2661static int s3c_hsotg_ep_sethalt(struct usb_ep *ep, int value)
2685{ 2662{
2686 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 2663 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
2687 struct s3c_hsotg *hs = hs_ep->parent; 2664 struct dwc2_hsotg *hs = hs_ep->parent;
2688 int index = hs_ep->index; 2665 int index = hs_ep->index;
2689 u32 epreg; 2666 u32 epreg;
2690 u32 epctl; 2667 u32 epctl;
@@ -2748,7 +2725,7 @@ static int s3c_hsotg_ep_sethalt(struct usb_ep *ep, int value)
2748static int s3c_hsotg_ep_sethalt_lock(struct usb_ep *ep, int value) 2725static int s3c_hsotg_ep_sethalt_lock(struct usb_ep *ep, int value)
2749{ 2726{
2750 struct s3c_hsotg_ep *hs_ep = our_ep(ep); 2727 struct s3c_hsotg_ep *hs_ep = our_ep(ep);
2751 struct s3c_hsotg *hs = hs_ep->parent; 2728 struct dwc2_hsotg *hs = hs_ep->parent;
2752 unsigned long flags = 0; 2729 unsigned long flags = 0;
2753 int ret = 0; 2730 int ret = 0;
2754 2731
@@ -2777,7 +2754,7 @@ static struct usb_ep_ops s3c_hsotg_ep_ops = {
2777 * A wrapper for platform code responsible for controlling 2754 * A wrapper for platform code responsible for controlling
2778 * low-level USB code 2755 * low-level USB code
2779 */ 2756 */
2780static void s3c_hsotg_phy_enable(struct s3c_hsotg *hsotg) 2757static void s3c_hsotg_phy_enable(struct dwc2_hsotg *hsotg)
2781{ 2758{
2782 struct platform_device *pdev = to_platform_device(hsotg->dev); 2759 struct platform_device *pdev = to_platform_device(hsotg->dev);
2783 2760
@@ -2800,7 +2777,7 @@ static void s3c_hsotg_phy_enable(struct s3c_hsotg *hsotg)
2800 * A wrapper for platform code responsible for controlling 2777 * A wrapper for platform code responsible for controlling
2801 * low-level USB code 2778 * low-level USB code
2802 */ 2779 */
2803static void s3c_hsotg_phy_disable(struct s3c_hsotg *hsotg) 2780static void s3c_hsotg_phy_disable(struct dwc2_hsotg *hsotg)
2804{ 2781{
2805 struct platform_device *pdev = to_platform_device(hsotg->dev); 2782 struct platform_device *pdev = to_platform_device(hsotg->dev);
2806 2783
@@ -2818,7 +2795,7 @@ static void s3c_hsotg_phy_disable(struct s3c_hsotg *hsotg)
2818 * s3c_hsotg_init - initalize the usb core 2795 * s3c_hsotg_init - initalize the usb core
2819 * @hsotg: The driver state 2796 * @hsotg: The driver state
2820 */ 2797 */
2821static void s3c_hsotg_init(struct s3c_hsotg *hsotg) 2798static void s3c_hsotg_init(struct dwc2_hsotg *hsotg)
2822{ 2799{
2823 /* unmask subset of endpoint interrupts */ 2800 /* unmask subset of endpoint interrupts */
2824 2801
@@ -2868,7 +2845,8 @@ static void s3c_hsotg_init(struct s3c_hsotg *hsotg)
2868static int s3c_hsotg_udc_start(struct usb_gadget *gadget, 2845static int s3c_hsotg_udc_start(struct usb_gadget *gadget,
2869 struct usb_gadget_driver *driver) 2846 struct usb_gadget_driver *driver)
2870{ 2847{
2871 struct s3c_hsotg *hsotg = to_hsotg(gadget); 2848 struct dwc2_hsotg *hsotg = to_hsotg(gadget);
2849 unsigned long flags;
2872 int ret; 2850 int ret;
2873 2851
2874 if (!hsotg) { 2852 if (!hsotg) {
@@ -2889,6 +2867,7 @@ static int s3c_hsotg_udc_start(struct usb_gadget *gadget,
2889 return -EINVAL; 2867 return -EINVAL;
2890 } 2868 }
2891 2869
2870 mutex_lock(&hsotg->init_mutex);
2892 WARN_ON(hsotg->driver); 2871 WARN_ON(hsotg->driver);
2893 2872
2894 driver->driver.bus = NULL; 2873 driver->driver.bus = NULL;
@@ -2905,11 +2884,22 @@ static int s3c_hsotg_udc_start(struct usb_gadget *gadget,
2905 goto err; 2884 goto err;
2906 } 2885 }
2907 2886
2908 hsotg->last_rst = jiffies; 2887 s3c_hsotg_phy_enable(hsotg);
2888
2889 spin_lock_irqsave(&hsotg->lock, flags);
2890 s3c_hsotg_init(hsotg);
2891 s3c_hsotg_core_init_disconnected(hsotg);
2892 hsotg->enabled = 0;
2893 spin_unlock_irqrestore(&hsotg->lock, flags);
2894
2909 dev_info(hsotg->dev, "bound driver %s\n", driver->driver.name); 2895 dev_info(hsotg->dev, "bound driver %s\n", driver->driver.name);
2896
2897 mutex_unlock(&hsotg->init_mutex);
2898
2910 return 0; 2899 return 0;
2911 2900
2912err: 2901err:
2902 mutex_unlock(&hsotg->init_mutex);
2913 hsotg->driver = NULL; 2903 hsotg->driver = NULL;
2914 return ret; 2904 return ret;
2915} 2905}
@@ -2921,16 +2911,17 @@ err:
2921 * 2911 *
2922 * Stop udc hw block and stay tunned for future transmissions 2912 * Stop udc hw block and stay tunned for future transmissions
2923 */ 2913 */
2924static int s3c_hsotg_udc_stop(struct usb_gadget *gadget, 2914static int s3c_hsotg_udc_stop(struct usb_gadget *gadget)
2925 struct usb_gadget_driver *driver)
2926{ 2915{
2927 struct s3c_hsotg *hsotg = to_hsotg(gadget); 2916 struct dwc2_hsotg *hsotg = to_hsotg(gadget);
2928 unsigned long flags = 0; 2917 unsigned long flags = 0;
2929 int ep; 2918 int ep;
2930 2919
2931 if (!hsotg) 2920 if (!hsotg)
2932 return -ENODEV; 2921 return -ENODEV;
2933 2922
2923 mutex_lock(&hsotg->init_mutex);
2924
2934 /* all endpoints should be shutdown */ 2925 /* all endpoints should be shutdown */
2935 for (ep = 1; ep < hsotg->num_of_eps; ep++) 2926 for (ep = 1; ep < hsotg->num_of_eps; ep++)
2936 s3c_hsotg_ep_disable(&hsotg->eps[ep].ep); 2927 s3c_hsotg_ep_disable(&hsotg->eps[ep].ep);
@@ -2939,13 +2930,18 @@ static int s3c_hsotg_udc_stop(struct usb_gadget *gadget,
2939 2930
2940 hsotg->driver = NULL; 2931 hsotg->driver = NULL;
2941 hsotg->gadget.speed = USB_SPEED_UNKNOWN; 2932 hsotg->gadget.speed = USB_SPEED_UNKNOWN;
2933 hsotg->enabled = 0;
2942 2934
2943 spin_unlock_irqrestore(&hsotg->lock, flags); 2935 spin_unlock_irqrestore(&hsotg->lock, flags);
2944 2936
2937 s3c_hsotg_phy_disable(hsotg);
2938
2945 regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), hsotg->supplies); 2939 regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), hsotg->supplies);
2946 2940
2947 clk_disable(hsotg->clk); 2941 clk_disable(hsotg->clk);
2948 2942
2943 mutex_unlock(&hsotg->init_mutex);
2944
2949 return 0; 2945 return 0;
2950} 2946}
2951 2947
@@ -2969,23 +2965,26 @@ static int s3c_hsotg_gadget_getframe(struct usb_gadget *gadget)
2969 */ 2965 */
2970static int s3c_hsotg_pullup(struct usb_gadget *gadget, int is_on) 2966static int s3c_hsotg_pullup(struct usb_gadget *gadget, int is_on)
2971{ 2967{
2972 struct s3c_hsotg *hsotg = to_hsotg(gadget); 2968 struct dwc2_hsotg *hsotg = to_hsotg(gadget);
2973 unsigned long flags = 0; 2969 unsigned long flags = 0;
2974 2970
2975 dev_dbg(hsotg->dev, "%s: is_on: %d\n", __func__, is_on); 2971 dev_dbg(hsotg->dev, "%s: is_on: %d\n", __func__, is_on);
2976 2972
2973 mutex_lock(&hsotg->init_mutex);
2977 spin_lock_irqsave(&hsotg->lock, flags); 2974 spin_lock_irqsave(&hsotg->lock, flags);
2978 if (is_on) { 2975 if (is_on) {
2979 s3c_hsotg_phy_enable(hsotg);
2980 clk_enable(hsotg->clk); 2976 clk_enable(hsotg->clk);
2981 s3c_hsotg_core_init(hsotg); 2977 hsotg->enabled = 1;
2978 s3c_hsotg_core_connect(hsotg);
2982 } else { 2979 } else {
2980 s3c_hsotg_core_disconnect(hsotg);
2981 hsotg->enabled = 0;
2983 clk_disable(hsotg->clk); 2982 clk_disable(hsotg->clk);
2984 s3c_hsotg_phy_disable(hsotg);
2985 } 2983 }
2986 2984
2987 hsotg->gadget.speed = USB_SPEED_UNKNOWN; 2985 hsotg->gadget.speed = USB_SPEED_UNKNOWN;
2988 spin_unlock_irqrestore(&hsotg->lock, flags); 2986 spin_unlock_irqrestore(&hsotg->lock, flags);
2987 mutex_unlock(&hsotg->init_mutex);
2989 2988
2990 return 0; 2989 return 0;
2991} 2990}
@@ -3007,7 +3006,7 @@ static const struct usb_gadget_ops s3c_hsotg_gadget_ops = {
3007 * creation) to give to the gadget driver. Setup the endpoint name, any 3006 * creation) to give to the gadget driver. Setup the endpoint name, any
3008 * direction information and other state that may be required. 3007 * direction information and other state that may be required.
3009 */ 3008 */
3010static void s3c_hsotg_initep(struct s3c_hsotg *hsotg, 3009static void s3c_hsotg_initep(struct dwc2_hsotg *hsotg,
3011 struct s3c_hsotg_ep *hs_ep, 3010 struct s3c_hsotg_ep *hs_ep,
3012 int epnum) 3011 int epnum)
3013{ 3012{
@@ -3056,7 +3055,7 @@ static void s3c_hsotg_initep(struct s3c_hsotg *hsotg,
3056 * 3055 *
3057 * Read the USB core HW configuration registers 3056 * Read the USB core HW configuration registers
3058 */ 3057 */
3059static void s3c_hsotg_hw_cfg(struct s3c_hsotg *hsotg) 3058static void s3c_hsotg_hw_cfg(struct dwc2_hsotg *hsotg)
3060{ 3059{
3061 u32 cfg2, cfg3, cfg4; 3060 u32 cfg2, cfg3, cfg4;
3062 /* check hardware configuration */ 3061 /* check hardware configuration */
@@ -3080,7 +3079,7 @@ static void s3c_hsotg_hw_cfg(struct s3c_hsotg *hsotg)
3080 * s3c_hsotg_dump - dump state of the udc 3079 * s3c_hsotg_dump - dump state of the udc
3081 * @param: The device state 3080 * @param: The device state
3082 */ 3081 */
3083static void s3c_hsotg_dump(struct s3c_hsotg *hsotg) 3082static void s3c_hsotg_dump(struct dwc2_hsotg *hsotg)
3084{ 3083{
3085#ifdef DEBUG 3084#ifdef DEBUG
3086 struct device *dev = hsotg->dev; 3085 struct device *dev = hsotg->dev;
@@ -3139,7 +3138,7 @@ static void s3c_hsotg_dump(struct s3c_hsotg *hsotg)
3139 */ 3138 */
3140static int state_show(struct seq_file *seq, void *v) 3139static int state_show(struct seq_file *seq, void *v)
3141{ 3140{
3142 struct s3c_hsotg *hsotg = seq->private; 3141 struct dwc2_hsotg *hsotg = seq->private;
3143 void __iomem *regs = hsotg->regs; 3142 void __iomem *regs = hsotg->regs;
3144 int idx; 3143 int idx;
3145 3144
@@ -3209,7 +3208,7 @@ static const struct file_operations state_fops = {
3209 */ 3208 */
3210static int fifo_show(struct seq_file *seq, void *v) 3209static int fifo_show(struct seq_file *seq, void *v)
3211{ 3210{
3212 struct s3c_hsotg *hsotg = seq->private; 3211 struct dwc2_hsotg *hsotg = seq->private;
3213 void __iomem *regs = hsotg->regs; 3212 void __iomem *regs = hsotg->regs;
3214 u32 val; 3213 u32 val;
3215 int idx; 3214 int idx;
@@ -3265,7 +3264,7 @@ static const char *decode_direction(int is_in)
3265static int ep_show(struct seq_file *seq, void *v) 3264static int ep_show(struct seq_file *seq, void *v)
3266{ 3265{
3267 struct s3c_hsotg_ep *ep = seq->private; 3266 struct s3c_hsotg_ep *ep = seq->private;
3268 struct s3c_hsotg *hsotg = ep->parent; 3267 struct dwc2_hsotg *hsotg = ep->parent;
3269 struct s3c_hsotg_req *req; 3268 struct s3c_hsotg_req *req;
3270 void __iomem *regs = hsotg->regs; 3269 void __iomem *regs = hsotg->regs;
3271 int index = ep->index; 3270 int index = ep->index;
@@ -3342,7 +3341,7 @@ static const struct file_operations ep_fops = {
3342 * with the same name as the device itself, in case we end up 3341 * with the same name as the device itself, in case we end up
3343 * with multiple blocks in future systems. 3342 * with multiple blocks in future systems.
3344 */ 3343 */
3345static void s3c_hsotg_create_debug(struct s3c_hsotg *hsotg) 3344static void s3c_hsotg_create_debug(struct dwc2_hsotg *hsotg)
3346{ 3345{
3347 struct dentry *root; 3346 struct dentry *root;
3348 unsigned epidx; 3347 unsigned epidx;
@@ -3388,7 +3387,7 @@ static void s3c_hsotg_create_debug(struct s3c_hsotg *hsotg)
3388 * 3387 *
3389 * Cleanup (remove) the debugfs files for use on module exit. 3388 * Cleanup (remove) the debugfs files for use on module exit.
3390 */ 3389 */
3391static void s3c_hsotg_delete_debug(struct s3c_hsotg *hsotg) 3390static void s3c_hsotg_delete_debug(struct dwc2_hsotg *hsotg)
3392{ 3391{
3393 unsigned epidx; 3392 unsigned epidx;
3394 3393
@@ -3403,27 +3402,21 @@ static void s3c_hsotg_delete_debug(struct s3c_hsotg *hsotg)
3403} 3402}
3404 3403
3405/** 3404/**
3406 * s3c_hsotg_probe - probe function for hsotg driver 3405 * dwc2_gadget_init - init function for gadget
3407 * @pdev: The platform information for the driver 3406 * @dwc2: The data structure for the DWC2 driver.
3407 * @irq: The IRQ number for the controller.
3408 */ 3408 */
3409 3409int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq)
3410static int s3c_hsotg_probe(struct platform_device *pdev)
3411{ 3410{
3412 struct s3c_hsotg_plat *plat = dev_get_platdata(&pdev->dev); 3411 struct device *dev = hsotg->dev;
3412 struct s3c_hsotg_plat *plat = dev->platform_data;
3413 struct phy *phy; 3413 struct phy *phy;
3414 struct usb_phy *uphy; 3414 struct usb_phy *uphy;
3415 struct device *dev = &pdev->dev;
3416 struct s3c_hsotg_ep *eps; 3415 struct s3c_hsotg_ep *eps;
3417 struct s3c_hsotg *hsotg;
3418 struct resource *res;
3419 int epnum; 3416 int epnum;
3420 int ret; 3417 int ret;
3421 int i; 3418 int i;
3422 3419
3423 hsotg = devm_kzalloc(&pdev->dev, sizeof(struct s3c_hsotg), GFP_KERNEL);
3424 if (!hsotg)
3425 return -ENOMEM;
3426
3427 /* Set default UTMI width */ 3420 /* Set default UTMI width */
3428 hsotg->phyif = GUSBCFG_PHYIF16; 3421 hsotg->phyif = GUSBCFG_PHYIF16;
3429 3422
@@ -3431,14 +3424,14 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
3431 * Attempt to find a generic PHY, then look for an old style 3424 * Attempt to find a generic PHY, then look for an old style
3432 * USB PHY, finally fall back to pdata 3425 * USB PHY, finally fall back to pdata
3433 */ 3426 */
3434 phy = devm_phy_get(&pdev->dev, "usb2-phy"); 3427 phy = devm_phy_get(dev, "usb2-phy");
3435 if (IS_ERR(phy)) { 3428 if (IS_ERR(phy)) {
3436 uphy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); 3429 uphy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
3437 if (IS_ERR(uphy)) { 3430 if (IS_ERR(uphy)) {
3438 /* Fallback for pdata */ 3431 /* Fallback for pdata */
3439 plat = dev_get_platdata(&pdev->dev); 3432 plat = dev_get_platdata(dev);
3440 if (!plat) { 3433 if (!plat) {
3441 dev_err(&pdev->dev, 3434 dev_err(dev,
3442 "no platform data or transceiver defined\n"); 3435 "no platform data or transceiver defined\n");
3443 return -EPROBE_DEFER; 3436 return -EPROBE_DEFER;
3444 } 3437 }
@@ -3455,43 +3448,24 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
3455 hsotg->phyif = GUSBCFG_PHYIF8; 3448 hsotg->phyif = GUSBCFG_PHYIF8;
3456 } 3449 }
3457 3450
3458 hsotg->dev = dev; 3451 hsotg->clk = devm_clk_get(dev, "otg");
3459
3460 hsotg->clk = devm_clk_get(&pdev->dev, "otg");
3461 if (IS_ERR(hsotg->clk)) { 3452 if (IS_ERR(hsotg->clk)) {
3462 dev_err(dev, "cannot get otg clock\n"); 3453 hsotg->clk = NULL;
3463 return PTR_ERR(hsotg->clk); 3454 dev_dbg(dev, "cannot get otg clock\n");
3464 }
3465
3466 platform_set_drvdata(pdev, hsotg);
3467
3468 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3469
3470 hsotg->regs = devm_ioremap_resource(&pdev->dev, res);
3471 if (IS_ERR(hsotg->regs)) {
3472 ret = PTR_ERR(hsotg->regs);
3473 goto err_clk;
3474 } 3455 }
3475 3456
3476 ret = platform_get_irq(pdev, 0);
3477 if (ret < 0) {
3478 dev_err(dev, "cannot find IRQ\n");
3479 goto err_clk;
3480 }
3481
3482 spin_lock_init(&hsotg->lock);
3483
3484 hsotg->irq = ret;
3485
3486 dev_info(dev, "regs %p, irq %d\n", hsotg->regs, hsotg->irq);
3487
3488 hsotg->gadget.max_speed = USB_SPEED_HIGH; 3457 hsotg->gadget.max_speed = USB_SPEED_HIGH;
3489 hsotg->gadget.ops = &s3c_hsotg_gadget_ops; 3458 hsotg->gadget.ops = &s3c_hsotg_gadget_ops;
3490 hsotg->gadget.name = dev_name(dev); 3459 hsotg->gadget.name = dev_name(dev);
3491 3460
3492 /* reset the system */ 3461 /* reset the system */
3493 3462
3494 clk_prepare_enable(hsotg->clk); 3463 ret = clk_prepare_enable(hsotg->clk);
3464 if (ret) {
3465 dev_err(dev, "failed to enable otg clk\n");
3466 goto err_clk;
3467 }
3468
3495 3469
3496 /* regulators */ 3470 /* regulators */
3497 3471
@@ -3509,7 +3483,7 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
3509 hsotg->supplies); 3483 hsotg->supplies);
3510 3484
3511 if (ret) { 3485 if (ret) {
3512 dev_err(hsotg->dev, "failed to enable supplies: %d\n", ret); 3486 dev_err(dev, "failed to enable supplies: %d\n", ret);
3513 goto err_supplies; 3487 goto err_supplies;
3514 } 3488 }
3515 3489
@@ -3520,14 +3494,14 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
3520 s3c_hsotg_hw_cfg(hsotg); 3494 s3c_hsotg_hw_cfg(hsotg);
3521 s3c_hsotg_init(hsotg); 3495 s3c_hsotg_init(hsotg);
3522 3496
3523 ret = devm_request_irq(&pdev->dev, hsotg->irq, s3c_hsotg_irq, 0, 3497 ret = devm_request_irq(hsotg->dev, irq, s3c_hsotg_irq, IRQF_SHARED,
3524 dev_name(dev), hsotg); 3498 dev_name(hsotg->dev), hsotg);
3525 if (ret < 0) { 3499 if (ret < 0) {
3526 s3c_hsotg_phy_disable(hsotg); 3500 s3c_hsotg_phy_disable(hsotg);
3527 clk_disable_unprepare(hsotg->clk); 3501 clk_disable_unprepare(hsotg->clk);
3528 regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), 3502 regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies),
3529 hsotg->supplies); 3503 hsotg->supplies);
3530 dev_err(dev, "cannot claim IRQ\n"); 3504 dev_err(dev, "cannot claim IRQ for gadget\n");
3531 goto err_clk; 3505 goto err_clk;
3532 } 3506 }
3533 3507
@@ -3573,11 +3547,11 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
3573 ret = regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), 3547 ret = regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies),
3574 hsotg->supplies); 3548 hsotg->supplies);
3575 if (ret) { 3549 if (ret) {
3576 dev_err(hsotg->dev, "failed to disable supplies: %d\n", ret); 3550 dev_err(dev, "failed to disable supplies: %d\n", ret);
3577 goto err_ep_mem; 3551 goto err_ep_mem;
3578 } 3552 }
3579 3553
3580 ret = usb_add_gadget_udc(&pdev->dev, &hsotg->gadget); 3554 ret = usb_add_gadget_udc(dev, &hsotg->gadget);
3581 if (ret) 3555 if (ret)
3582 goto err_ep_mem; 3556 goto err_ep_mem;
3583 3557
@@ -3596,47 +3570,44 @@ err_clk:
3596 3570
3597 return ret; 3571 return ret;
3598} 3572}
3573EXPORT_SYMBOL_GPL(dwc2_gadget_init);
3599 3574
3600/** 3575/**
3601 * s3c_hsotg_remove - remove function for hsotg driver 3576 * s3c_hsotg_remove - remove function for hsotg driver
3602 * @pdev: The platform information for the driver 3577 * @pdev: The platform information for the driver
3603 */ 3578 */
3604static int s3c_hsotg_remove(struct platform_device *pdev) 3579int s3c_hsotg_remove(struct dwc2_hsotg *hsotg)
3605{ 3580{
3606 struct s3c_hsotg *hsotg = platform_get_drvdata(pdev);
3607
3608 usb_del_gadget_udc(&hsotg->gadget); 3581 usb_del_gadget_udc(&hsotg->gadget);
3609
3610 s3c_hsotg_delete_debug(hsotg); 3582 s3c_hsotg_delete_debug(hsotg);
3611
3612 if (hsotg->driver) {
3613 /* should have been done already by driver model core */
3614 usb_gadget_unregister_driver(hsotg->driver);
3615 }
3616
3617 clk_disable_unprepare(hsotg->clk); 3583 clk_disable_unprepare(hsotg->clk);
3618 3584
3619 return 0; 3585 return 0;
3620} 3586}
3587EXPORT_SYMBOL_GPL(s3c_hsotg_remove);
3621 3588
3622static int s3c_hsotg_suspend(struct platform_device *pdev, pm_message_t state) 3589int s3c_hsotg_suspend(struct dwc2_hsotg *hsotg)
3623{ 3590{
3624 struct s3c_hsotg *hsotg = platform_get_drvdata(pdev);
3625 unsigned long flags; 3591 unsigned long flags;
3626 int ret = 0; 3592 int ret = 0;
3627 3593
3628 if (hsotg->driver) 3594 mutex_lock(&hsotg->init_mutex);
3595
3596 if (hsotg->driver) {
3597 int ep;
3598
3629 dev_info(hsotg->dev, "suspending usb gadget %s\n", 3599 dev_info(hsotg->dev, "suspending usb gadget %s\n",
3630 hsotg->driver->driver.name); 3600 hsotg->driver->driver.name);
3631 3601
3632 spin_lock_irqsave(&hsotg->lock, flags); 3602 spin_lock_irqsave(&hsotg->lock, flags);
3633 s3c_hsotg_disconnect(hsotg); 3603 if (hsotg->enabled)
3634 s3c_hsotg_phy_disable(hsotg); 3604 s3c_hsotg_core_disconnect(hsotg);
3635 hsotg->gadget.speed = USB_SPEED_UNKNOWN; 3605 s3c_hsotg_disconnect(hsotg);
3636 spin_unlock_irqrestore(&hsotg->lock, flags); 3606 hsotg->gadget.speed = USB_SPEED_UNKNOWN;
3607 spin_unlock_irqrestore(&hsotg->lock, flags);
3608
3609 s3c_hsotg_phy_disable(hsotg);
3637 3610
3638 if (hsotg->driver) {
3639 int ep;
3640 for (ep = 0; ep < hsotg->num_of_eps; ep++) 3611 for (ep = 0; ep < hsotg->num_of_eps; ep++)
3641 s3c_hsotg_ep_disable(&hsotg->eps[ep].ep); 3612 s3c_hsotg_ep_disable(&hsotg->eps[ep].ep);
3642 3613
@@ -3645,57 +3616,37 @@ static int s3c_hsotg_suspend(struct platform_device *pdev, pm_message_t state)
3645 clk_disable(hsotg->clk); 3616 clk_disable(hsotg->clk);
3646 } 3617 }
3647 3618
3619 mutex_unlock(&hsotg->init_mutex);
3620
3648 return ret; 3621 return ret;
3649} 3622}
3623EXPORT_SYMBOL_GPL(s3c_hsotg_suspend);
3650 3624
3651static int s3c_hsotg_resume(struct platform_device *pdev) 3625int s3c_hsotg_resume(struct dwc2_hsotg *hsotg)
3652{ 3626{
3653 struct s3c_hsotg *hsotg = platform_get_drvdata(pdev);
3654 unsigned long flags; 3627 unsigned long flags;
3655 int ret = 0; 3628 int ret = 0;
3656 3629
3630 mutex_lock(&hsotg->init_mutex);
3631
3657 if (hsotg->driver) { 3632 if (hsotg->driver) {
3658 dev_info(hsotg->dev, "resuming usb gadget %s\n", 3633 dev_info(hsotg->dev, "resuming usb gadget %s\n",
3659 hsotg->driver->driver.name); 3634 hsotg->driver->driver.name);
3660 3635
3661 clk_enable(hsotg->clk); 3636 clk_enable(hsotg->clk);
3662 ret = regulator_bulk_enable(ARRAY_SIZE(hsotg->supplies), 3637 ret = regulator_bulk_enable(ARRAY_SIZE(hsotg->supplies),
3663 hsotg->supplies); 3638 hsotg->supplies);
3664 }
3665 3639
3666 spin_lock_irqsave(&hsotg->lock, flags); 3640 s3c_hsotg_phy_enable(hsotg);
3667 hsotg->last_rst = jiffies; 3641
3668 s3c_hsotg_phy_enable(hsotg); 3642 spin_lock_irqsave(&hsotg->lock, flags);
3669 s3c_hsotg_core_init(hsotg); 3643 s3c_hsotg_core_init_disconnected(hsotg);
3670 spin_unlock_irqrestore(&hsotg->lock, flags); 3644 if (hsotg->enabled)
3645 s3c_hsotg_core_connect(hsotg);
3646 spin_unlock_irqrestore(&hsotg->lock, flags);
3647 }
3648 mutex_unlock(&hsotg->init_mutex);
3671 3649
3672 return ret; 3650 return ret;
3673} 3651}
3674 3652EXPORT_SYMBOL_GPL(s3c_hsotg_resume);
3675#ifdef CONFIG_OF
3676static const struct of_device_id s3c_hsotg_of_ids[] = {
3677 { .compatible = "samsung,s3c6400-hsotg", },
3678 { .compatible = "snps,dwc2", },
3679 { /* sentinel */ }
3680};
3681MODULE_DEVICE_TABLE(of, s3c_hsotg_of_ids);
3682#endif
3683
3684static struct platform_driver s3c_hsotg_driver = {
3685 .driver = {
3686 .name = "s3c-hsotg",
3687 .owner = THIS_MODULE,
3688 .of_match_table = of_match_ptr(s3c_hsotg_of_ids),
3689 },
3690 .probe = s3c_hsotg_probe,
3691 .remove = s3c_hsotg_remove,
3692 .suspend = s3c_hsotg_suspend,
3693 .resume = s3c_hsotg_resume,
3694};
3695
3696module_platform_driver(s3c_hsotg_driver);
3697
3698MODULE_DESCRIPTION("Samsung S3C USB High-speed/OtG device");
3699MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
3700MODULE_LICENSE("GPL");
3701MODULE_ALIAS("platform:s3c-hsotg");
diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
index 0a0e6f0ad15f..a0cd9db6f4cd 100644
--- a/drivers/usb/dwc2/hcd.c
+++ b/drivers/usb/dwc2/hcd.c
@@ -1371,6 +1371,8 @@ static void dwc2_conn_id_status_change(struct work_struct *work)
1371 hsotg->op_state = OTG_STATE_B_PERIPHERAL; 1371 hsotg->op_state = OTG_STATE_B_PERIPHERAL;
1372 dwc2_core_init(hsotg, false, -1); 1372 dwc2_core_init(hsotg, false, -1);
1373 dwc2_enable_global_interrupts(hsotg); 1373 dwc2_enable_global_interrupts(hsotg);
1374 s3c_hsotg_core_init_disconnected(hsotg);
1375 s3c_hsotg_core_connect(hsotg);
1374 } else { 1376 } else {
1375 /* A-Device connector (Host Mode) */ 1377 /* A-Device connector (Host Mode) */
1376 dev_dbg(hsotg->dev, "connId A\n"); 1378 dev_dbg(hsotg->dev, "connId A\n");
@@ -1471,6 +1473,30 @@ static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex)
1471 } 1473 }
1472} 1474}
1473 1475
1476static void dwc2_port_resume(struct dwc2_hsotg *hsotg)
1477{
1478 u32 hprt0;
1479
1480 /* After clear the Stop PHY clock bit, we should wait for a moment
1481 * for PLL work stable with clock output.
1482 */
1483 writel(0, hsotg->regs + PCGCTL);
1484 usleep_range(2000, 4000);
1485
1486 hprt0 = dwc2_read_hprt0(hsotg);
1487 hprt0 |= HPRT0_RES;
1488 writel(hprt0, hsotg->regs + HPRT0);
1489 hprt0 &= ~HPRT0_SUSP;
1490 /* according to USB2.0 Spec 7.1.7.7, the host must send the resume
1491 * signal for at least 20ms
1492 */
1493 usleep_range(20000, 25000);
1494
1495 hprt0 &= ~HPRT0_RES;
1496 writel(hprt0, hsotg->regs + HPRT0);
1497 hsotg->lx_state = DWC2_L0;
1498}
1499
1474/* Handles hub class-specific requests */ 1500/* Handles hub class-specific requests */
1475static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, 1501static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
1476 u16 wvalue, u16 windex, char *buf, u16 wlength) 1502 u16 wvalue, u16 windex, char *buf, u16 wlength)
@@ -1516,17 +1542,7 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
1516 case USB_PORT_FEAT_SUSPEND: 1542 case USB_PORT_FEAT_SUSPEND:
1517 dev_dbg(hsotg->dev, 1543 dev_dbg(hsotg->dev,
1518 "ClearPortFeature USB_PORT_FEAT_SUSPEND\n"); 1544 "ClearPortFeature USB_PORT_FEAT_SUSPEND\n");
1519 writel(0, hsotg->regs + PCGCTL); 1545 dwc2_port_resume(hsotg);
1520 usleep_range(20000, 40000);
1521
1522 hprt0 = dwc2_read_hprt0(hsotg);
1523 hprt0 |= HPRT0_RES;
1524 writel(hprt0, hsotg->regs + HPRT0);
1525 hprt0 &= ~HPRT0_SUSP;
1526 usleep_range(100000, 150000);
1527
1528 hprt0 &= ~HPRT0_RES;
1529 writel(hprt0, hsotg->regs + HPRT0);
1530 break; 1546 break;
1531 1547
1532 case USB_PORT_FEAT_POWER: 1548 case USB_PORT_FEAT_POWER:
@@ -2299,6 +2315,55 @@ static void _dwc2_hcd_stop(struct usb_hcd *hcd)
2299 usleep_range(1000, 3000); 2315 usleep_range(1000, 3000);
2300} 2316}
2301 2317
2318static int _dwc2_hcd_suspend(struct usb_hcd *hcd)
2319{
2320 struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2321 u32 hprt0;
2322
2323 if (!((hsotg->op_state == OTG_STATE_B_HOST) ||
2324 (hsotg->op_state == OTG_STATE_A_HOST)))
2325 return 0;
2326
2327 /* TODO: We get into suspend from 'on' state, maybe we need to do
2328 * something if we get here from DWC2_L1(LPM sleep) state one day.
2329 */
2330 if (hsotg->lx_state != DWC2_L0)
2331 return 0;
2332
2333 hprt0 = dwc2_read_hprt0(hsotg);
2334 if (hprt0 & HPRT0_CONNSTS) {
2335 dwc2_port_suspend(hsotg, 1);
2336 } else {
2337 u32 pcgctl = readl(hsotg->regs + PCGCTL);
2338
2339 pcgctl |= PCGCTL_STOPPCLK;
2340 writel(pcgctl, hsotg->regs + PCGCTL);
2341 }
2342
2343 return 0;
2344}
2345
2346static int _dwc2_hcd_resume(struct usb_hcd *hcd)
2347{
2348 struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2349 u32 hprt0;
2350
2351 if (!((hsotg->op_state == OTG_STATE_B_HOST) ||
2352 (hsotg->op_state == OTG_STATE_A_HOST)))
2353 return 0;
2354
2355 if (hsotg->lx_state != DWC2_L2)
2356 return 0;
2357
2358 hprt0 = dwc2_read_hprt0(hsotg);
2359 if ((hprt0 & HPRT0_CONNSTS) && (hprt0 & HPRT0_SUSP))
2360 dwc2_port_resume(hsotg);
2361 else
2362 writel(0, hsotg->regs + PCGCTL);
2363
2364 return 0;
2365}
2366
2302/* Returns the current frame number */ 2367/* Returns the current frame number */
2303static int _dwc2_hcd_get_frame_number(struct usb_hcd *hcd) 2368static int _dwc2_hcd_get_frame_number(struct usb_hcd *hcd)
2304{ 2369{
@@ -2669,6 +2734,9 @@ static struct hc_driver dwc2_hc_driver = {
2669 .hub_status_data = _dwc2_hcd_hub_status_data, 2734 .hub_status_data = _dwc2_hcd_hub_status_data,
2670 .hub_control = _dwc2_hcd_hub_control, 2735 .hub_control = _dwc2_hcd_hub_control,
2671 .clear_tt_buffer_complete = _dwc2_hcd_clear_tt_buffer_complete, 2736 .clear_tt_buffer_complete = _dwc2_hcd_clear_tt_buffer_complete,
2737
2738 .bus_suspend = _dwc2_hcd_suspend,
2739 .bus_resume = _dwc2_hcd_resume,
2672}; 2740};
2673 2741
2674/* 2742/*
@@ -2778,6 +2846,9 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
2778 int i, num_channels; 2846 int i, num_channels;
2779 int retval; 2847 int retval;
2780 2848
2849 if (usb_disabled())
2850 return -ENODEV;
2851
2781 dev_dbg(hsotg->dev, "DWC OTG HCD INIT\n"); 2852 dev_dbg(hsotg->dev, "DWC OTG HCD INIT\n");
2782 2853
2783 /* Detect config values from hardware */ 2854 /* Detect config values from hardware */
@@ -2839,7 +2910,6 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
2839 2910
2840 hcd->has_tt = 1; 2911 hcd->has_tt = 1;
2841 2912
2842 spin_lock_init(&hsotg->lock);
2843 ((struct wrapper_priv_data *) &hcd->hcd_priv)->hsotg = hsotg; 2913 ((struct wrapper_priv_data *) &hcd->hcd_priv)->hsotg = hsotg;
2844 hsotg->priv = hcd; 2914 hsotg->priv = hcd;
2845 2915
diff --git a/drivers/usb/dwc2/hcd.h b/drivers/usb/dwc2/hcd.h
index a12bb1538666..e69a843d8928 100644
--- a/drivers/usb/dwc2/hcd.h
+++ b/drivers/usb/dwc2/hcd.h
@@ -668,9 +668,6 @@ extern irqreturn_t dwc2_handle_hcd_intr(struct dwc2_hsotg *hsotg);
668 */ 668 */
669extern void dwc2_hcd_stop(struct dwc2_hsotg *hsotg); 669extern void dwc2_hcd_stop(struct dwc2_hsotg *hsotg);
670 670
671extern void dwc2_hcd_start(struct dwc2_hsotg *hsotg);
672extern void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg);
673
674/** 671/**
675 * dwc2_hcd_is_b_host() - Returns 1 if core currently is acting as B host, 672 * dwc2_hcd_is_b_host() - Returns 1 if core currently is acting as B host,
676 * and 0 otherwise 673 * and 0 otherwise
@@ -680,13 +677,6 @@ extern void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg);
680extern int dwc2_hcd_is_b_host(struct dwc2_hsotg *hsotg); 677extern int dwc2_hcd_is_b_host(struct dwc2_hsotg *hsotg);
681 678
682/** 679/**
683 * dwc2_hcd_get_frame_number() - Returns current frame number
684 *
685 * @hsotg: The DWC2 HCD
686 */
687extern int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg);
688
689/**
690 * dwc2_hcd_dump_state() - Dumps hsotg state 680 * dwc2_hcd_dump_state() - Dumps hsotg state
691 * 681 *
692 * @hsotg: The DWC2 HCD 682 * @hsotg: The DWC2 HCD
diff --git a/drivers/usb/dwc2/pci.c b/drivers/usb/dwc2/pci.c
index c291fca5d21f..a4e724b0a62e 100644
--- a/drivers/usb/dwc2/pci.c
+++ b/drivers/usb/dwc2/pci.c
@@ -141,6 +141,13 @@ static int dwc2_driver_probe(struct pci_dev *dev,
141 141
142 pci_set_master(dev); 142 pci_set_master(dev);
143 143
144 retval = devm_request_irq(hsotg->dev, dev->irq,
145 dwc2_handle_common_intr, IRQF_SHARED,
146 dev_name(hsotg->dev), hsotg);
147 if (retval)
148 return retval;
149
150 spin_lock_init(&hsotg->lock);
144 retval = dwc2_hcd_init(hsotg, dev->irq, &dwc2_module_params); 151 retval = dwc2_hcd_init(hsotg, dev->irq, &dwc2_module_params);
145 if (retval) { 152 if (retval) {
146 pci_disable_device(dev); 153 pci_disable_device(dev);
diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
index 121dbdafc06b..6a795aa2ff05 100644
--- a/drivers/usb/dwc2/platform.c
+++ b/drivers/usb/dwc2/platform.c
@@ -40,6 +40,7 @@
40#include <linux/device.h> 40#include <linux/device.h>
41#include <linux/dma-mapping.h> 41#include <linux/dma-mapping.h>
42#include <linux/of_device.h> 42#include <linux/of_device.h>
43#include <linux/mutex.h>
43#include <linux/platform_device.h> 44#include <linux/platform_device.h>
44 45
45#include <linux/usb/of.h> 46#include <linux/usb/of.h>
@@ -121,6 +122,7 @@ static int dwc2_driver_remove(struct platform_device *dev)
121 struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); 122 struct dwc2_hsotg *hsotg = platform_get_drvdata(dev);
122 123
123 dwc2_hcd_remove(hsotg); 124 dwc2_hcd_remove(hsotg);
125 s3c_hsotg_remove(hsotg);
124 126
125 return 0; 127 return 0;
126} 128}
@@ -129,6 +131,7 @@ static const struct of_device_id dwc2_of_match_table[] = {
129 { .compatible = "brcm,bcm2835-usb", .data = &params_bcm2835 }, 131 { .compatible = "brcm,bcm2835-usb", .data = &params_bcm2835 },
130 { .compatible = "rockchip,rk3066-usb", .data = &params_rk3066 }, 132 { .compatible = "rockchip,rk3066-usb", .data = &params_rk3066 },
131 { .compatible = "snps,dwc2", .data = NULL }, 133 { .compatible = "snps,dwc2", .data = NULL },
134 { .compatible = "samsung,s3c6400-hsotg", .data = NULL},
132 {}, 135 {},
133}; 136};
134MODULE_DEVICE_TABLE(of, dwc2_of_match_table); 137MODULE_DEVICE_TABLE(of, dwc2_of_match_table);
@@ -155,9 +158,6 @@ static int dwc2_driver_probe(struct platform_device *dev)
155 int retval; 158 int retval;
156 int irq; 159 int irq;
157 160
158 if (usb_disabled())
159 return -ENODEV;
160
161 match = of_match_device(dwc2_of_match_table, &dev->dev); 161 match = of_match_device(dwc2_of_match_table, &dev->dev);
162 if (match && match->data) { 162 if (match && match->data) {
163 params = match->data; 163 params = match->data;
@@ -194,6 +194,14 @@ static int dwc2_driver_probe(struct platform_device *dev)
194 return irq; 194 return irq;
195 } 195 }
196 196
197 dev_dbg(hsotg->dev, "registering common handler for irq%d\n",
198 irq);
199 retval = devm_request_irq(hsotg->dev, irq,
200 dwc2_handle_common_intr, IRQF_SHARED,
201 dev_name(hsotg->dev), hsotg);
202 if (retval)
203 return retval;
204
197 res = platform_get_resource(dev, IORESOURCE_MEM, 0); 205 res = platform_get_resource(dev, IORESOURCE_MEM, 0);
198 hsotg->regs = devm_ioremap_resource(&dev->dev, res); 206 hsotg->regs = devm_ioremap_resource(&dev->dev, res);
199 if (IS_ERR(hsotg->regs)) 207 if (IS_ERR(hsotg->regs))
@@ -204,6 +212,11 @@ static int dwc2_driver_probe(struct platform_device *dev)
204 212
205 hsotg->dr_mode = of_usb_get_dr_mode(dev->dev.of_node); 213 hsotg->dr_mode = of_usb_get_dr_mode(dev->dev.of_node);
206 214
215 spin_lock_init(&hsotg->lock);
216 mutex_init(&hsotg->init_mutex);
217 retval = dwc2_gadget_init(hsotg, irq);
218 if (retval)
219 return retval;
207 retval = dwc2_hcd_init(hsotg, irq, params); 220 retval = dwc2_hcd_init(hsotg, irq, params);
208 if (retval) 221 if (retval)
209 return retval; 222 return retval;
@@ -213,10 +226,35 @@ static int dwc2_driver_probe(struct platform_device *dev)
213 return retval; 226 return retval;
214} 227}
215 228
229static int __maybe_unused dwc2_suspend(struct device *dev)
230{
231 struct dwc2_hsotg *dwc2 = dev_get_drvdata(dev);
232 int ret = 0;
233
234 if (dwc2_is_device_mode(dwc2))
235 ret = s3c_hsotg_suspend(dwc2);
236 return ret;
237}
238
239static int __maybe_unused dwc2_resume(struct device *dev)
240{
241 struct dwc2_hsotg *dwc2 = dev_get_drvdata(dev);
242 int ret = 0;
243
244 if (dwc2_is_device_mode(dwc2))
245 ret = s3c_hsotg_resume(dwc2);
246 return ret;
247}
248
249static const struct dev_pm_ops dwc2_dev_pm_ops = {
250 SET_SYSTEM_SLEEP_PM_OPS(dwc2_suspend, dwc2_resume)
251};
252
216static struct platform_driver dwc2_platform_driver = { 253static struct platform_driver dwc2_platform_driver = {
217 .driver = { 254 .driver = {
218 .name = dwc2_driver_name, 255 .name = dwc2_driver_name,
219 .of_match_table = dwc2_of_match_table, 256 .of_match_table = dwc2_of_match_table,
257 .pm = &dwc2_dev_pm_ops,
220 }, 258 },
221 .probe = dwc2_driver_probe, 259 .probe = dwc2_driver_probe,
222 .remove = dwc2_driver_remove, 260 .remove = dwc2_driver_remove,
diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
index f4e5cc60db0b..58b5b2cde4c5 100644
--- a/drivers/usb/dwc3/Kconfig
+++ b/drivers/usb/dwc3/Kconfig
@@ -55,7 +55,7 @@ config USB_DWC3_OMAP
55 55
56config USB_DWC3_EXYNOS 56config USB_DWC3_EXYNOS
57 tristate "Samsung Exynos Platform" 57 tristate "Samsung Exynos Platform"
58 depends on ARCH_EXYNOS || COMPILE_TEST 58 depends on ARCH_EXYNOS && OF || COMPILE_TEST
59 default USB_DWC3 59 default USB_DWC3
60 help 60 help
61 Recent Exynos5 SoCs ship with one DesignWare Core USB3 IP inside, 61 Recent Exynos5 SoCs ship with one DesignWare Core USB3 IP inside,
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index b0f4d52b7f04..25ddc39efad8 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -19,6 +19,7 @@
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. 19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */ 20 */
21 21
22#include <linux/version.h>
22#include <linux/module.h> 23#include <linux/module.h>
23#include <linux/kernel.h> 24#include <linux/kernel.h>
24#include <linux/slab.h> 25#include <linux/slab.h>
@@ -32,6 +33,7 @@
32#include <linux/delay.h> 33#include <linux/delay.h>
33#include <linux/dma-mapping.h> 34#include <linux/dma-mapping.h>
34#include <linux/of.h> 35#include <linux/of.h>
36#include <linux/acpi.h>
35 37
36#include <linux/usb/ch9.h> 38#include <linux/usb/ch9.h>
37#include <linux/usb/gadget.h> 39#include <linux/usb/gadget.h>
@@ -363,6 +365,72 @@ static void dwc3_cache_hwparams(struct dwc3 *dwc)
363} 365}
364 366
365/** 367/**
368 * dwc3_phy_setup - Configure USB PHY Interface of DWC3 Core
369 * @dwc: Pointer to our controller context structure
370 */
371static void dwc3_phy_setup(struct dwc3 *dwc)
372{
373 u32 reg;
374
375 reg = dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0));
376
377 /*
378 * Above 1.94a, it is recommended to set DWC3_GUSB3PIPECTL_SUSPHY
379 * to '0' during coreConsultant configuration. So default value
380 * will be '0' when the core is reset. Application needs to set it
381 * to '1' after the core initialization is completed.
382 */
383 if (dwc->revision > DWC3_REVISION_194A)
384 reg |= DWC3_GUSB3PIPECTL_SUSPHY;
385
386 if (dwc->u2ss_inp3_quirk)
387 reg |= DWC3_GUSB3PIPECTL_U2SSINP3OK;
388
389 if (dwc->req_p1p2p3_quirk)
390 reg |= DWC3_GUSB3PIPECTL_REQP1P2P3;
391
392 if (dwc->del_p1p2p3_quirk)
393 reg |= DWC3_GUSB3PIPECTL_DEP1P2P3_EN;
394
395 if (dwc->del_phy_power_chg_quirk)
396 reg |= DWC3_GUSB3PIPECTL_DEPOCHANGE;
397
398 if (dwc->lfps_filter_quirk)
399 reg |= DWC3_GUSB3PIPECTL_LFPSFILT;
400
401 if (dwc->rx_detect_poll_quirk)
402 reg |= DWC3_GUSB3PIPECTL_RX_DETOPOLL;
403
404 if (dwc->tx_de_emphasis_quirk)
405 reg |= DWC3_GUSB3PIPECTL_TX_DEEPH(dwc->tx_de_emphasis);
406
407 if (dwc->dis_u3_susphy_quirk)
408 reg &= ~DWC3_GUSB3PIPECTL_SUSPHY;
409
410 dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
411
412 mdelay(100);
413
414 reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
415
416 /*
417 * Above 1.94a, it is recommended to set DWC3_GUSB2PHYCFG_SUSPHY to
418 * '0' during coreConsultant configuration. So default value will
419 * be '0' when the core is reset. Application needs to set it to
420 * '1' after the core initialization is completed.
421 */
422 if (dwc->revision > DWC3_REVISION_194A)
423 reg |= DWC3_GUSB2PHYCFG_SUSPHY;
424
425 if (dwc->dis_u2_susphy_quirk)
426 reg &= ~DWC3_GUSB2PHYCFG_SUSPHY;
427
428 dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
429
430 mdelay(100);
431}
432
433/**
366 * dwc3_core_init - Low-level initialization of DWC3 Core 434 * dwc3_core_init - Low-level initialization of DWC3 Core
367 * @dwc: Pointer to our controller context structure 435 * @dwc: Pointer to our controller context structure
368 * 436 *
@@ -384,6 +452,12 @@ static int dwc3_core_init(struct dwc3 *dwc)
384 } 452 }
385 dwc->revision = reg; 453 dwc->revision = reg;
386 454
455 /*
456 * Write Linux Version Code to our GUID register so it's easy to figure
457 * out which kernel version a bug was found.
458 */
459 dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE);
460
387 /* Handle USB2.0-only core configuration */ 461 /* Handle USB2.0-only core configuration */
388 if (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) == 462 if (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
389 DWC3_GHWPARAMS3_SSPHY_IFC_DIS) { 463 DWC3_GHWPARAMS3_SSPHY_IFC_DIS) {
@@ -414,7 +488,6 @@ static int dwc3_core_init(struct dwc3 *dwc)
414 488
415 reg = dwc3_readl(dwc->regs, DWC3_GCTL); 489 reg = dwc3_readl(dwc->regs, DWC3_GCTL);
416 reg &= ~DWC3_GCTL_SCALEDOWN_MASK; 490 reg &= ~DWC3_GCTL_SCALEDOWN_MASK;
417 reg &= ~DWC3_GCTL_DISSCRAMBLE;
418 491
419 switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1)) { 492 switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1)) {
420 case DWC3_GHWPARAMS1_EN_PWROPT_CLK: 493 case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
@@ -441,11 +514,34 @@ static int dwc3_core_init(struct dwc3 *dwc)
441 case DWC3_GHWPARAMS1_EN_PWROPT_HIB: 514 case DWC3_GHWPARAMS1_EN_PWROPT_HIB:
442 /* enable hibernation here */ 515 /* enable hibernation here */
443 dwc->nr_scratch = DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(hwparams4); 516 dwc->nr_scratch = DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(hwparams4);
517
518 /*
519 * REVISIT Enabling this bit so that host-mode hibernation
520 * will work. Device-mode hibernation is not yet implemented.
521 */
522 reg |= DWC3_GCTL_GBLHIBERNATIONEN;
444 break; 523 break;
445 default: 524 default:
446 dev_dbg(dwc->dev, "No power optimization available\n"); 525 dev_dbg(dwc->dev, "No power optimization available\n");
447 } 526 }
448 527
528 /* check if current dwc3 is on simulation board */
529 if (dwc->hwparams.hwparams6 & DWC3_GHWPARAMS6_EN_FPGA) {
530 dev_dbg(dwc->dev, "it is on FPGA board\n");
531 dwc->is_fpga = true;
532 }
533
534 WARN_ONCE(dwc->disable_scramble_quirk && !dwc->is_fpga,
535 "disable_scramble cannot be used on non-FPGA builds\n");
536
537 if (dwc->disable_scramble_quirk && dwc->is_fpga)
538 reg |= DWC3_GCTL_DISSCRAMBLE;
539 else
540 reg &= ~DWC3_GCTL_DISSCRAMBLE;
541
542 if (dwc->u2exit_lfps_quirk)
543 reg |= DWC3_GCTL_U2EXIT_LFPS;
544
449 /* 545 /*
450 * WORKAROUND: DWC3 revisions <1.90a have a bug 546 * WORKAROUND: DWC3 revisions <1.90a have a bug
451 * where the device can fail to connect at SuperSpeed 547 * where the device can fail to connect at SuperSpeed
@@ -459,6 +555,8 @@ static int dwc3_core_init(struct dwc3 *dwc)
459 555
460 dwc3_writel(dwc->regs, DWC3_GCTL, reg); 556 dwc3_writel(dwc->regs, DWC3_GCTL, reg);
461 557
558 dwc3_phy_setup(dwc);
559
462 ret = dwc3_alloc_scratch_buffers(dwc); 560 ret = dwc3_alloc_scratch_buffers(dwc);
463 if (ret) 561 if (ret)
464 goto err1; 562 goto err1;
@@ -630,6 +728,9 @@ static int dwc3_probe(struct platform_device *pdev)
630 struct device_node *node = dev->of_node; 728 struct device_node *node = dev->of_node;
631 struct resource *res; 729 struct resource *res;
632 struct dwc3 *dwc; 730 struct dwc3 *dwc;
731 u8 lpm_nyet_threshold;
732 u8 tx_de_emphasis;
733 u8 hird_threshold;
633 734
634 int ret; 735 int ret;
635 736
@@ -685,22 +786,96 @@ static int dwc3_probe(struct platform_device *pdev)
685 */ 786 */
686 res->start -= DWC3_GLOBALS_REGS_START; 787 res->start -= DWC3_GLOBALS_REGS_START;
687 788
789 /* default to highest possible threshold */
790 lpm_nyet_threshold = 0xff;
791
792 /* default to -3.5dB de-emphasis */
793 tx_de_emphasis = 1;
794
795 /*
796 * default to assert utmi_sleep_n and use maximum allowed HIRD
797 * threshold value of 0b1100
798 */
799 hird_threshold = 12;
800
688 if (node) { 801 if (node) {
689 dwc->maximum_speed = of_usb_get_maximum_speed(node); 802 dwc->maximum_speed = of_usb_get_maximum_speed(node);
690 803 dwc->has_lpm_erratum = of_property_read_bool(node,
691 dwc->needs_fifo_resize = of_property_read_bool(node, "tx-fifo-resize"); 804 "snps,has-lpm-erratum");
805 of_property_read_u8(node, "snps,lpm-nyet-threshold",
806 &lpm_nyet_threshold);
807 dwc->is_utmi_l1_suspend = of_property_read_bool(node,
808 "snps,is-utmi-l1-suspend");
809 of_property_read_u8(node, "snps,hird-threshold",
810 &hird_threshold);
811
812 dwc->needs_fifo_resize = of_property_read_bool(node,
813 "tx-fifo-resize");
692 dwc->dr_mode = of_usb_get_dr_mode(node); 814 dwc->dr_mode = of_usb_get_dr_mode(node);
815
816 dwc->disable_scramble_quirk = of_property_read_bool(node,
817 "snps,disable_scramble_quirk");
818 dwc->u2exit_lfps_quirk = of_property_read_bool(node,
819 "snps,u2exit_lfps_quirk");
820 dwc->u2ss_inp3_quirk = of_property_read_bool(node,
821 "snps,u2ss_inp3_quirk");
822 dwc->req_p1p2p3_quirk = of_property_read_bool(node,
823 "snps,req_p1p2p3_quirk");
824 dwc->del_p1p2p3_quirk = of_property_read_bool(node,
825 "snps,del_p1p2p3_quirk");
826 dwc->del_phy_power_chg_quirk = of_property_read_bool(node,
827 "snps,del_phy_power_chg_quirk");
828 dwc->lfps_filter_quirk = of_property_read_bool(node,
829 "snps,lfps_filter_quirk");
830 dwc->rx_detect_poll_quirk = of_property_read_bool(node,
831 "snps,rx_detect_poll_quirk");
832 dwc->dis_u3_susphy_quirk = of_property_read_bool(node,
833 "snps,dis_u3_susphy_quirk");
834 dwc->dis_u2_susphy_quirk = of_property_read_bool(node,
835 "snps,dis_u2_susphy_quirk");
836
837 dwc->tx_de_emphasis_quirk = of_property_read_bool(node,
838 "snps,tx_de_emphasis_quirk");
839 of_property_read_u8(node, "snps,tx_de_emphasis",
840 &tx_de_emphasis);
693 } else if (pdata) { 841 } else if (pdata) {
694 dwc->maximum_speed = pdata->maximum_speed; 842 dwc->maximum_speed = pdata->maximum_speed;
843 dwc->has_lpm_erratum = pdata->has_lpm_erratum;
844 if (pdata->lpm_nyet_threshold)
845 lpm_nyet_threshold = pdata->lpm_nyet_threshold;
846 dwc->is_utmi_l1_suspend = pdata->is_utmi_l1_suspend;
847 if (pdata->hird_threshold)
848 hird_threshold = pdata->hird_threshold;
695 849
696 dwc->needs_fifo_resize = pdata->tx_fifo_resize; 850 dwc->needs_fifo_resize = pdata->tx_fifo_resize;
697 dwc->dr_mode = pdata->dr_mode; 851 dwc->dr_mode = pdata->dr_mode;
852
853 dwc->disable_scramble_quirk = pdata->disable_scramble_quirk;
854 dwc->u2exit_lfps_quirk = pdata->u2exit_lfps_quirk;
855 dwc->u2ss_inp3_quirk = pdata->u2ss_inp3_quirk;
856 dwc->req_p1p2p3_quirk = pdata->req_p1p2p3_quirk;
857 dwc->del_p1p2p3_quirk = pdata->del_p1p2p3_quirk;
858 dwc->del_phy_power_chg_quirk = pdata->del_phy_power_chg_quirk;
859 dwc->lfps_filter_quirk = pdata->lfps_filter_quirk;
860 dwc->rx_detect_poll_quirk = pdata->rx_detect_poll_quirk;
861 dwc->dis_u3_susphy_quirk = pdata->dis_u3_susphy_quirk;
862 dwc->dis_u2_susphy_quirk = pdata->dis_u2_susphy_quirk;
863
864 dwc->tx_de_emphasis_quirk = pdata->tx_de_emphasis_quirk;
865 if (pdata->tx_de_emphasis)
866 tx_de_emphasis = pdata->tx_de_emphasis;
698 } 867 }
699 868
700 /* default to superspeed if no maximum_speed passed */ 869 /* default to superspeed if no maximum_speed passed */
701 if (dwc->maximum_speed == USB_SPEED_UNKNOWN) 870 if (dwc->maximum_speed == USB_SPEED_UNKNOWN)
702 dwc->maximum_speed = USB_SPEED_SUPER; 871 dwc->maximum_speed = USB_SPEED_SUPER;
703 872
873 dwc->lpm_nyet_threshold = lpm_nyet_threshold;
874 dwc->tx_de_emphasis = tx_de_emphasis;
875
876 dwc->hird_threshold = hird_threshold
877 | (dwc->is_utmi_l1_suspend << 4);
878
704 ret = dwc3_core_get_phy(dwc); 879 ret = dwc3_core_get_phy(dwc);
705 if (ret) 880 if (ret)
706 return ret; 881 return ret;
@@ -708,9 +883,11 @@ static int dwc3_probe(struct platform_device *pdev)
708 spin_lock_init(&dwc->lock); 883 spin_lock_init(&dwc->lock);
709 platform_set_drvdata(pdev, dwc); 884 platform_set_drvdata(pdev, dwc);
710 885
711 dev->dma_mask = dev->parent->dma_mask; 886 if (!dev->dma_mask) {
712 dev->dma_parms = dev->parent->dma_parms; 887 dev->dma_mask = dev->parent->dma_mask;
713 dma_set_coherent_mask(dev, dev->parent->coherent_dma_mask); 888 dev->dma_parms = dev->parent->dma_parms;
889 dma_set_coherent_mask(dev, dev->parent->coherent_dma_mask);
890 }
714 891
715 pm_runtime_enable(dev); 892 pm_runtime_enable(dev);
716 pm_runtime_get_sync(dev); 893 pm_runtime_get_sync(dev);
@@ -815,50 +992,6 @@ static int dwc3_remove(struct platform_device *pdev)
815} 992}
816 993
817#ifdef CONFIG_PM_SLEEP 994#ifdef CONFIG_PM_SLEEP
818static int dwc3_prepare(struct device *dev)
819{
820 struct dwc3 *dwc = dev_get_drvdata(dev);
821 unsigned long flags;
822
823 spin_lock_irqsave(&dwc->lock, flags);
824
825 switch (dwc->dr_mode) {
826 case USB_DR_MODE_PERIPHERAL:
827 case USB_DR_MODE_OTG:
828 dwc3_gadget_prepare(dwc);
829 /* FALLTHROUGH */
830 case USB_DR_MODE_HOST:
831 default:
832 dwc3_event_buffers_cleanup(dwc);
833 break;
834 }
835
836 spin_unlock_irqrestore(&dwc->lock, flags);
837
838 return 0;
839}
840
841static void dwc3_complete(struct device *dev)
842{
843 struct dwc3 *dwc = dev_get_drvdata(dev);
844 unsigned long flags;
845
846 spin_lock_irqsave(&dwc->lock, flags);
847
848 dwc3_event_buffers_setup(dwc);
849 switch (dwc->dr_mode) {
850 case USB_DR_MODE_PERIPHERAL:
851 case USB_DR_MODE_OTG:
852 dwc3_gadget_complete(dwc);
853 /* FALLTHROUGH */
854 case USB_DR_MODE_HOST:
855 default:
856 break;
857 }
858
859 spin_unlock_irqrestore(&dwc->lock, flags);
860}
861
862static int dwc3_suspend(struct device *dev) 995static int dwc3_suspend(struct device *dev)
863{ 996{
864 struct dwc3 *dwc = dev_get_drvdata(dev); 997 struct dwc3 *dwc = dev_get_drvdata(dev);
@@ -873,7 +1006,7 @@ static int dwc3_suspend(struct device *dev)
873 /* FALLTHROUGH */ 1006 /* FALLTHROUGH */
874 case USB_DR_MODE_HOST: 1007 case USB_DR_MODE_HOST:
875 default: 1008 default:
876 /* do nothing */ 1009 dwc3_event_buffers_cleanup(dwc);
877 break; 1010 break;
878 } 1011 }
879 1012
@@ -906,6 +1039,7 @@ static int dwc3_resume(struct device *dev)
906 1039
907 spin_lock_irqsave(&dwc->lock, flags); 1040 spin_lock_irqsave(&dwc->lock, flags);
908 1041
1042 dwc3_event_buffers_setup(dwc);
909 dwc3_writel(dwc->regs, DWC3_GCTL, dwc->gctl); 1043 dwc3_writel(dwc->regs, DWC3_GCTL, dwc->gctl);
910 1044
911 switch (dwc->dr_mode) { 1045 switch (dwc->dr_mode) {
@@ -934,9 +1068,6 @@ err_usb2phy_init:
934} 1068}
935 1069
936static const struct dev_pm_ops dwc3_dev_pm_ops = { 1070static const struct dev_pm_ops dwc3_dev_pm_ops = {
937 .prepare = dwc3_prepare,
938 .complete = dwc3_complete,
939
940 SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend, dwc3_resume) 1071 SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend, dwc3_resume)
941}; 1072};
942 1073
@@ -958,12 +1089,24 @@ static const struct of_device_id of_dwc3_match[] = {
958MODULE_DEVICE_TABLE(of, of_dwc3_match); 1089MODULE_DEVICE_TABLE(of, of_dwc3_match);
959#endif 1090#endif
960 1091
1092#ifdef CONFIG_ACPI
1093
1094#define ACPI_ID_INTEL_BSW "808622B7"
1095
1096static const struct acpi_device_id dwc3_acpi_match[] = {
1097 { ACPI_ID_INTEL_BSW, 0 },
1098 { },
1099};
1100MODULE_DEVICE_TABLE(acpi, dwc3_acpi_match);
1101#endif
1102
961static struct platform_driver dwc3_driver = { 1103static struct platform_driver dwc3_driver = {
962 .probe = dwc3_probe, 1104 .probe = dwc3_probe,
963 .remove = dwc3_remove, 1105 .remove = dwc3_remove,
964 .driver = { 1106 .driver = {
965 .name = "dwc3", 1107 .name = "dwc3",
966 .of_match_table = of_match_ptr(of_dwc3_match), 1108 .of_match_table = of_match_ptr(of_dwc3_match),
1109 .acpi_match_table = ACPI_PTR(dwc3_acpi_match),
967 .pm = DWC3_PM_OPS, 1110 .pm = DWC3_PM_OPS,
968 }, 1111 },
969}; 1112};
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 66f62563bcf9..4bb9aa696ede 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -166,6 +166,7 @@
166#define DWC3_GCTL_SCALEDOWN(n) ((n) << 4) 166#define DWC3_GCTL_SCALEDOWN(n) ((n) << 4)
167#define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3) 167#define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3)
168#define DWC3_GCTL_DISSCRAMBLE (1 << 3) 168#define DWC3_GCTL_DISSCRAMBLE (1 << 3)
169#define DWC3_GCTL_U2EXIT_LFPS (1 << 2)
169#define DWC3_GCTL_GBLHIBERNATIONEN (1 << 1) 170#define DWC3_GCTL_GBLHIBERNATIONEN (1 << 1)
170#define DWC3_GCTL_DSBLCLKGTNG (1 << 0) 171#define DWC3_GCTL_DSBLCLKGTNG (1 << 0)
171 172
@@ -175,7 +176,17 @@
175 176
176/* Global USB3 PIPE Control Register */ 177/* Global USB3 PIPE Control Register */
177#define DWC3_GUSB3PIPECTL_PHYSOFTRST (1 << 31) 178#define DWC3_GUSB3PIPECTL_PHYSOFTRST (1 << 31)
179#define DWC3_GUSB3PIPECTL_U2SSINP3OK (1 << 29)
180#define DWC3_GUSB3PIPECTL_REQP1P2P3 (1 << 24)
181#define DWC3_GUSB3PIPECTL_DEP1P2P3(n) ((n) << 19)
182#define DWC3_GUSB3PIPECTL_DEP1P2P3_MASK DWC3_GUSB3PIPECTL_DEP1P2P3(7)
183#define DWC3_GUSB3PIPECTL_DEP1P2P3_EN DWC3_GUSB3PIPECTL_DEP1P2P3(1)
184#define DWC3_GUSB3PIPECTL_DEPOCHANGE (1 << 18)
178#define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17) 185#define DWC3_GUSB3PIPECTL_SUSPHY (1 << 17)
186#define DWC3_GUSB3PIPECTL_LFPSFILT (1 << 9)
187#define DWC3_GUSB3PIPECTL_RX_DETOPOLL (1 << 8)
188#define DWC3_GUSB3PIPECTL_TX_DEEPH_MASK DWC3_GUSB3PIPECTL_TX_DEEPH(3)
189#define DWC3_GUSB3PIPECTL_TX_DEEPH(n) ((n) << 1)
179 190
180/* Global TX Fifo Size Register */ 191/* Global TX Fifo Size Register */
181#define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff) 192#define DWC3_GTXFIFOSIZ_TXFDEF(n) ((n) & 0xffff)
@@ -210,6 +221,9 @@
210#define DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(n) (((n) & (0x0f << 13)) >> 13) 221#define DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(n) (((n) & (0x0f << 13)) >> 13)
211#define DWC3_MAX_HIBER_SCRATCHBUFS 15 222#define DWC3_MAX_HIBER_SCRATCHBUFS 15
212 223
224/* Global HWPARAMS6 Register */
225#define DWC3_GHWPARAMS6_EN_FPGA (1 << 7)
226
213/* Device Configuration Register */ 227/* Device Configuration Register */
214#define DWC3_DCFG_DEVADDR(addr) ((addr) << 3) 228#define DWC3_DCFG_DEVADDR(addr) ((addr) << 3)
215#define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f) 229#define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f)
@@ -243,16 +257,19 @@
243#define DWC3_DCTL_TRGTULST_SS_INACT (DWC3_DCTL_TRGTULST(6)) 257#define DWC3_DCTL_TRGTULST_SS_INACT (DWC3_DCTL_TRGTULST(6))
244 258
245/* These apply for core versions 1.94a and later */ 259/* These apply for core versions 1.94a and later */
246#define DWC3_DCTL_KEEP_CONNECT (1 << 19) 260#define DWC3_DCTL_LPM_ERRATA_MASK DWC3_DCTL_LPM_ERRATA(0xf)
247#define DWC3_DCTL_L1_HIBER_EN (1 << 18) 261#define DWC3_DCTL_LPM_ERRATA(n) ((n) << 20)
248#define DWC3_DCTL_CRS (1 << 17) 262
249#define DWC3_DCTL_CSS (1 << 16) 263#define DWC3_DCTL_KEEP_CONNECT (1 << 19)
264#define DWC3_DCTL_L1_HIBER_EN (1 << 18)
265#define DWC3_DCTL_CRS (1 << 17)
266#define DWC3_DCTL_CSS (1 << 16)
250 267
251#define DWC3_DCTL_INITU2ENA (1 << 12) 268#define DWC3_DCTL_INITU2ENA (1 << 12)
252#define DWC3_DCTL_ACCEPTU2ENA (1 << 11) 269#define DWC3_DCTL_ACCEPTU2ENA (1 << 11)
253#define DWC3_DCTL_INITU1ENA (1 << 10) 270#define DWC3_DCTL_INITU1ENA (1 << 10)
254#define DWC3_DCTL_ACCEPTU1ENA (1 << 9) 271#define DWC3_DCTL_ACCEPTU1ENA (1 << 9)
255#define DWC3_DCTL_TSTCTRL_MASK (0xf << 1) 272#define DWC3_DCTL_TSTCTRL_MASK (0xf << 1)
256 273
257#define DWC3_DCTL_ULSTCHNGREQ_MASK (0x0f << 5) 274#define DWC3_DCTL_ULSTCHNGREQ_MASK (0x0f << 5)
258#define DWC3_DCTL_ULSTCHNGREQ(n) (((n) << 5) & DWC3_DCTL_ULSTCHNGREQ_MASK) 275#define DWC3_DCTL_ULSTCHNGREQ(n) (((n) << 5) & DWC3_DCTL_ULSTCHNGREQ_MASK)
@@ -657,17 +674,41 @@ struct dwc3_scratchpad_array {
657 * @regset: debugfs pointer to regdump file 674 * @regset: debugfs pointer to regdump file
658 * @test_mode: true when we're entering a USB test mode 675 * @test_mode: true when we're entering a USB test mode
659 * @test_mode_nr: test feature selector 676 * @test_mode_nr: test feature selector
677 * @lpm_nyet_threshold: LPM NYET response threshold
678 * @hird_threshold: HIRD threshold
660 * @delayed_status: true when gadget driver asks for delayed status 679 * @delayed_status: true when gadget driver asks for delayed status
661 * @ep0_bounced: true when we used bounce buffer 680 * @ep0_bounced: true when we used bounce buffer
662 * @ep0_expect_in: true when we expect a DATA IN transfer 681 * @ep0_expect_in: true when we expect a DATA IN transfer
663 * @has_hibernation: true when dwc3 was configured with Hibernation 682 * @has_hibernation: true when dwc3 was configured with Hibernation
683 * @has_lpm_erratum: true when core was configured with LPM Erratum. Note that
684 * there's now way for software to detect this in runtime.
685 * @is_utmi_l1_suspend: the core asserts output signal
686 * 0 - utmi_sleep_n
687 * 1 - utmi_l1_suspend_n
664 * @is_selfpowered: true when we are selfpowered 688 * @is_selfpowered: true when we are selfpowered
689 * @is_fpga: true when we are using the FPGA board
665 * @needs_fifo_resize: not all users might want fifo resizing, flag it 690 * @needs_fifo_resize: not all users might want fifo resizing, flag it
666 * @pullups_connected: true when Run/Stop bit is set 691 * @pullups_connected: true when Run/Stop bit is set
667 * @resize_fifos: tells us it's ok to reconfigure our TxFIFO sizes. 692 * @resize_fifos: tells us it's ok to reconfigure our TxFIFO sizes.
668 * @setup_packet_pending: true when there's a Setup Packet in FIFO. Workaround 693 * @setup_packet_pending: true when there's a Setup Packet in FIFO. Workaround
669 * @start_config_issued: true when StartConfig command has been issued 694 * @start_config_issued: true when StartConfig command has been issued
670 * @three_stage_setup: set if we perform a three phase setup 695 * @three_stage_setup: set if we perform a three phase setup
696 * @disable_scramble_quirk: set if we enable the disable scramble quirk
697 * @u2exit_lfps_quirk: set if we enable u2exit lfps quirk
698 * @u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
699 * @req_p1p2p3_quirk: set if we enable request p1p2p3 quirk
700 * @del_p1p2p3_quirk: set if we enable delay p1p2p3 quirk
701 * @del_phy_power_chg_quirk: set if we enable delay phy power change quirk
702 * @lfps_filter_quirk: set if we enable LFPS filter quirk
703 * @rx_detect_poll_quirk: set if we enable rx_detect to polling lfps quirk
704 * @dis_u3_susphy_quirk: set if we disable usb3 suspend phy
705 * @dis_u2_susphy_quirk: set if we disable usb2 suspend phy
706 * @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk
707 * @tx_de_emphasis: Tx de-emphasis value
708 * 0 - -6dB de-emphasis
709 * 1 - -3.5dB de-emphasis
710 * 2 - No de-emphasis
711 * 3 - Reserved
671 */ 712 */
672struct dwc3 { 713struct dwc3 {
673 struct usb_ctrlrequest *ctrl_req; 714 struct usb_ctrlrequest *ctrl_req;
@@ -759,18 +800,37 @@ struct dwc3 {
759 800
760 u8 test_mode; 801 u8 test_mode;
761 u8 test_mode_nr; 802 u8 test_mode_nr;
803 u8 lpm_nyet_threshold;
804 u8 hird_threshold;
762 805
763 unsigned delayed_status:1; 806 unsigned delayed_status:1;
764 unsigned ep0_bounced:1; 807 unsigned ep0_bounced:1;
765 unsigned ep0_expect_in:1; 808 unsigned ep0_expect_in:1;
766 unsigned has_hibernation:1; 809 unsigned has_hibernation:1;
810 unsigned has_lpm_erratum:1;
811 unsigned is_utmi_l1_suspend:1;
767 unsigned is_selfpowered:1; 812 unsigned is_selfpowered:1;
813 unsigned is_fpga:1;
768 unsigned needs_fifo_resize:1; 814 unsigned needs_fifo_resize:1;
769 unsigned pullups_connected:1; 815 unsigned pullups_connected:1;
770 unsigned resize_fifos:1; 816 unsigned resize_fifos:1;
771 unsigned setup_packet_pending:1; 817 unsigned setup_packet_pending:1;
772 unsigned start_config_issued:1; 818 unsigned start_config_issued:1;
773 unsigned three_stage_setup:1; 819 unsigned three_stage_setup:1;
820
821 unsigned disable_scramble_quirk:1;
822 unsigned u2exit_lfps_quirk:1;
823 unsigned u2ss_inp3_quirk:1;
824 unsigned req_p1p2p3_quirk:1;
825 unsigned del_p1p2p3_quirk:1;
826 unsigned del_phy_power_chg_quirk:1;
827 unsigned lfps_filter_quirk:1;
828 unsigned rx_detect_poll_quirk:1;
829 unsigned dis_u3_susphy_quirk:1;
830 unsigned dis_u2_susphy_quirk:1;
831
832 unsigned tx_de_emphasis_quirk:1;
833 unsigned tx_de_emphasis:2;
774}; 834};
775 835
776/* -------------------------------------------------------------------------- */ 836/* -------------------------------------------------------------------------- */
@@ -964,20 +1024,9 @@ static inline int dwc3_send_gadget_generic_command(struct dwc3 *dwc,
964 1024
965/* power management interface */ 1025/* power management interface */
966#if !IS_ENABLED(CONFIG_USB_DWC3_HOST) 1026#if !IS_ENABLED(CONFIG_USB_DWC3_HOST)
967int dwc3_gadget_prepare(struct dwc3 *dwc);
968void dwc3_gadget_complete(struct dwc3 *dwc);
969int dwc3_gadget_suspend(struct dwc3 *dwc); 1027int dwc3_gadget_suspend(struct dwc3 *dwc);
970int dwc3_gadget_resume(struct dwc3 *dwc); 1028int dwc3_gadget_resume(struct dwc3 *dwc);
971#else 1029#else
972static inline int dwc3_gadget_prepare(struct dwc3 *dwc)
973{
974 return 0;
975}
976
977static inline void dwc3_gadget_complete(struct dwc3 *dwc)
978{
979}
980
981static inline int dwc3_gadget_suspend(struct dwc3 *dwc) 1030static inline int dwc3_gadget_suspend(struct dwc3 *dwc)
982{ 1031{
983 return 0; 1032 return 0;
diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c
index 3951a65fea04..7bd0a95b2815 100644
--- a/drivers/usb/dwc3/dwc3-exynos.c
+++ b/drivers/usb/dwc3/dwc3-exynos.c
@@ -20,7 +20,6 @@
20#include <linux/kernel.h> 20#include <linux/kernel.h>
21#include <linux/slab.h> 21#include <linux/slab.h>
22#include <linux/platform_device.h> 22#include <linux/platform_device.h>
23#include <linux/platform_data/dwc3-exynos.h>
24#include <linux/dma-mapping.h> 23#include <linux/dma-mapping.h>
25#include <linux/clk.h> 24#include <linux/clk.h>
26#include <linux/usb/otg.h> 25#include <linux/usb/otg.h>
@@ -35,6 +34,9 @@ struct dwc3_exynos {
35 struct device *dev; 34 struct device *dev;
36 35
37 struct clk *clk; 36 struct clk *clk;
37 struct clk *susp_clk;
38 struct clk *axius_clk;
39
38 struct regulator *vdd33; 40 struct regulator *vdd33;
39 struct regulator *vdd10; 41 struct regulator *vdd10;
40}; 42};
@@ -106,7 +108,6 @@ static int dwc3_exynos_remove_child(struct device *dev, void *unused)
106static int dwc3_exynos_probe(struct platform_device *pdev) 108static int dwc3_exynos_probe(struct platform_device *pdev)
107{ 109{
108 struct dwc3_exynos *exynos; 110 struct dwc3_exynos *exynos;
109 struct clk *clk;
110 struct device *dev = &pdev->dev; 111 struct device *dev = &pdev->dev;
111 struct device_node *node = dev->of_node; 112 struct device_node *node = dev->of_node;
112 113
@@ -133,16 +134,32 @@ static int dwc3_exynos_probe(struct platform_device *pdev)
133 return ret; 134 return ret;
134 } 135 }
135 136
136 clk = devm_clk_get(dev, "usbdrd30"); 137 exynos->dev = dev;
137 if (IS_ERR(clk)) { 138
139 exynos->clk = devm_clk_get(dev, "usbdrd30");
140 if (IS_ERR(exynos->clk)) {
138 dev_err(dev, "couldn't get clock\n"); 141 dev_err(dev, "couldn't get clock\n");
139 return -EINVAL; 142 return -EINVAL;
140 } 143 }
144 clk_prepare_enable(exynos->clk);
141 145
142 exynos->dev = dev; 146 exynos->susp_clk = devm_clk_get(dev, "usbdrd30_susp_clk");
143 exynos->clk = clk; 147 if (IS_ERR(exynos->susp_clk)) {
148 dev_dbg(dev, "no suspend clk specified\n");
149 exynos->susp_clk = NULL;
150 }
151 clk_prepare_enable(exynos->susp_clk);
144 152
145 clk_prepare_enable(exynos->clk); 153 if (of_device_is_compatible(node, "samsung,exynos7-dwusb3")) {
154 exynos->axius_clk = devm_clk_get(dev, "usbdrd30_axius_clk");
155 if (IS_ERR(exynos->axius_clk)) {
156 dev_err(dev, "no AXI UpScaler clk specified\n");
157 return -ENODEV;
158 }
159 clk_prepare_enable(exynos->axius_clk);
160 } else {
161 exynos->axius_clk = NULL;
162 }
146 163
147 exynos->vdd33 = devm_regulator_get(dev, "vdd33"); 164 exynos->vdd33 = devm_regulator_get(dev, "vdd33");
148 if (IS_ERR(exynos->vdd33)) { 165 if (IS_ERR(exynos->vdd33)) {
@@ -185,7 +202,9 @@ err4:
185err3: 202err3:
186 regulator_disable(exynos->vdd33); 203 regulator_disable(exynos->vdd33);
187err2: 204err2:
188 clk_disable_unprepare(clk); 205 clk_disable_unprepare(exynos->axius_clk);
206 clk_disable_unprepare(exynos->susp_clk);
207 clk_disable_unprepare(exynos->clk);
189 return ret; 208 return ret;
190} 209}
191 210
@@ -197,6 +216,8 @@ static int dwc3_exynos_remove(struct platform_device *pdev)
197 platform_device_unregister(exynos->usb2_phy); 216 platform_device_unregister(exynos->usb2_phy);
198 platform_device_unregister(exynos->usb3_phy); 217 platform_device_unregister(exynos->usb3_phy);
199 218
219 clk_disable_unprepare(exynos->axius_clk);
220 clk_disable_unprepare(exynos->susp_clk);
200 clk_disable_unprepare(exynos->clk); 221 clk_disable_unprepare(exynos->clk);
201 222
202 regulator_disable(exynos->vdd33); 223 regulator_disable(exynos->vdd33);
@@ -205,19 +226,19 @@ static int dwc3_exynos_remove(struct platform_device *pdev)
205 return 0; 226 return 0;
206} 227}
207 228
208#ifdef CONFIG_OF
209static const struct of_device_id exynos_dwc3_match[] = { 229static const struct of_device_id exynos_dwc3_match[] = {
210 { .compatible = "samsung,exynos5250-dwusb3" }, 230 { .compatible = "samsung,exynos5250-dwusb3" },
231 { .compatible = "samsung,exynos7-dwusb3" },
211 {}, 232 {},
212}; 233};
213MODULE_DEVICE_TABLE(of, exynos_dwc3_match); 234MODULE_DEVICE_TABLE(of, exynos_dwc3_match);
214#endif
215 235
216#ifdef CONFIG_PM_SLEEP 236#ifdef CONFIG_PM_SLEEP
217static int dwc3_exynos_suspend(struct device *dev) 237static int dwc3_exynos_suspend(struct device *dev)
218{ 238{
219 struct dwc3_exynos *exynos = dev_get_drvdata(dev); 239 struct dwc3_exynos *exynos = dev_get_drvdata(dev);
220 240
241 clk_disable(exynos->axius_clk);
221 clk_disable(exynos->clk); 242 clk_disable(exynos->clk);
222 243
223 regulator_disable(exynos->vdd33); 244 regulator_disable(exynos->vdd33);
@@ -243,6 +264,7 @@ static int dwc3_exynos_resume(struct device *dev)
243 } 264 }
244 265
245 clk_enable(exynos->clk); 266 clk_enable(exynos->clk);
267 clk_enable(exynos->axius_clk);
246 268
247 /* runtime set active to reflect active state. */ 269 /* runtime set active to reflect active state. */
248 pm_runtime_disable(dev); 270 pm_runtime_disable(dev);
@@ -266,7 +288,7 @@ static struct platform_driver dwc3_exynos_driver = {
266 .remove = dwc3_exynos_remove, 288 .remove = dwc3_exynos_remove,
267 .driver = { 289 .driver = {
268 .name = "exynos-dwc3", 290 .name = "exynos-dwc3",
269 .of_match_table = of_match_ptr(exynos_dwc3_match), 291 .of_match_table = exynos_dwc3_match,
270 .pm = DEV_PM_OPS, 292 .pm = DEV_PM_OPS,
271 }, 293 },
272}; 294};
diff --git a/drivers/usb/dwc3/dwc3-keystone.c b/drivers/usb/dwc3/dwc3-keystone.c
index dd8d2df6db31..fe3b9335a74e 100644
--- a/drivers/usb/dwc3/dwc3-keystone.c
+++ b/drivers/usb/dwc3/dwc3-keystone.c
@@ -123,6 +123,7 @@ static int kdwc3_probe(struct platform_device *pdev)
123 irq = platform_get_irq(pdev, 0); 123 irq = platform_get_irq(pdev, 0);
124 if (irq < 0) { 124 if (irq < 0) {
125 dev_err(&pdev->dev, "missing irq\n"); 125 dev_err(&pdev->dev, "missing irq\n");
126 error = irq;
126 goto err_irq; 127 goto err_irq;
127 } 128 }
128 129
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index a0aa9f3da441..172d64e585b6 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -593,27 +593,12 @@ static const struct of_device_id of_dwc3_match[] = {
593MODULE_DEVICE_TABLE(of, of_dwc3_match); 593MODULE_DEVICE_TABLE(of, of_dwc3_match);
594 594
595#ifdef CONFIG_PM_SLEEP 595#ifdef CONFIG_PM_SLEEP
596static int dwc3_omap_prepare(struct device *dev)
597{
598 struct dwc3_omap *omap = dev_get_drvdata(dev);
599
600 dwc3_omap_disable_irqs(omap);
601
602 return 0;
603}
604
605static void dwc3_omap_complete(struct device *dev)
606{
607 struct dwc3_omap *omap = dev_get_drvdata(dev);
608
609 dwc3_omap_enable_irqs(omap);
610}
611
612static int dwc3_omap_suspend(struct device *dev) 596static int dwc3_omap_suspend(struct device *dev)
613{ 597{
614 struct dwc3_omap *omap = dev_get_drvdata(dev); 598 struct dwc3_omap *omap = dev_get_drvdata(dev);
615 599
616 omap->utmi_otg_status = dwc3_omap_read_utmi_status(omap); 600 omap->utmi_otg_status = dwc3_omap_read_utmi_status(omap);
601 dwc3_omap_disable_irqs(omap);
617 602
618 return 0; 603 return 0;
619} 604}
@@ -623,6 +608,7 @@ static int dwc3_omap_resume(struct device *dev)
623 struct dwc3_omap *omap = dev_get_drvdata(dev); 608 struct dwc3_omap *omap = dev_get_drvdata(dev);
624 609
625 dwc3_omap_write_utmi_status(omap, omap->utmi_otg_status); 610 dwc3_omap_write_utmi_status(omap, omap->utmi_otg_status);
611 dwc3_omap_enable_irqs(omap);
626 612
627 pm_runtime_disable(dev); 613 pm_runtime_disable(dev);
628 pm_runtime_set_active(dev); 614 pm_runtime_set_active(dev);
@@ -632,8 +618,6 @@ static int dwc3_omap_resume(struct device *dev)
632} 618}
633 619
634static const struct dev_pm_ops dwc3_omap_dev_pm_ops = { 620static const struct dev_pm_ops dwc3_omap_dev_pm_ops = {
635 .prepare = dwc3_omap_prepare,
636 .complete = dwc3_omap_complete,
637 621
638 SET_SYSTEM_SLEEP_PM_OPS(dwc3_omap_suspend, dwc3_omap_resume) 622 SET_SYSTEM_SLEEP_PM_OPS(dwc3_omap_suspend, dwc3_omap_resume)
639}; 623};
diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index a36cf66302fb..7c4faf738747 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -25,6 +25,8 @@
25#include <linux/usb/otg.h> 25#include <linux/usb/otg.h>
26#include <linux/usb/usb_phy_generic.h> 26#include <linux/usb/usb_phy_generic.h>
27 27
28#include "platform_data.h"
29
28/* FIXME define these in <linux/pci_ids.h> */ 30/* FIXME define these in <linux/pci_ids.h> */
29#define PCI_VENDOR_ID_SYNOPSYS 0x16c3 31#define PCI_VENDOR_ID_SYNOPSYS 0x16c3
30#define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 0xabcd 32#define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 0xabcd
@@ -102,6 +104,9 @@ static int dwc3_pci_probe(struct pci_dev *pci,
102 struct dwc3_pci *glue; 104 struct dwc3_pci *glue;
103 int ret; 105 int ret;
104 struct device *dev = &pci->dev; 106 struct device *dev = &pci->dev;
107 struct dwc3_platform_data dwc3_pdata;
108
109 memset(&dwc3_pdata, 0x00, sizeof(dwc3_pdata));
105 110
106 glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL); 111 glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL);
107 if (!glue) 112 if (!glue)
@@ -140,6 +145,31 @@ static int dwc3_pci_probe(struct pci_dev *pci,
140 res[1].name = "dwc_usb3"; 145 res[1].name = "dwc_usb3";
141 res[1].flags = IORESOURCE_IRQ; 146 res[1].flags = IORESOURCE_IRQ;
142 147
148 if (pci->vendor == PCI_VENDOR_ID_AMD &&
149 pci->device == PCI_DEVICE_ID_AMD_NL_USB) {
150 dwc3_pdata.has_lpm_erratum = true;
151 dwc3_pdata.lpm_nyet_threshold = 0xf;
152
153 dwc3_pdata.u2exit_lfps_quirk = true;
154 dwc3_pdata.u2ss_inp3_quirk = true;
155 dwc3_pdata.req_p1p2p3_quirk = true;
156 dwc3_pdata.del_p1p2p3_quirk = true;
157 dwc3_pdata.del_phy_power_chg_quirk = true;
158 dwc3_pdata.lfps_filter_quirk = true;
159 dwc3_pdata.rx_detect_poll_quirk = true;
160
161 dwc3_pdata.tx_de_emphasis_quirk = true;
162 dwc3_pdata.tx_de_emphasis = 1;
163
164 /*
165 * FIXME these quirks should be removed when AMD NL
166 * taps out
167 */
168 dwc3_pdata.disable_scramble_quirk = true;
169 dwc3_pdata.dis_u3_susphy_quirk = true;
170 dwc3_pdata.dis_u2_susphy_quirk = true;
171 }
172
143 ret = platform_device_add_resources(dwc3, res, ARRAY_SIZE(res)); 173 ret = platform_device_add_resources(dwc3, res, ARRAY_SIZE(res));
144 if (ret) { 174 if (ret) {
145 dev_err(dev, "couldn't add resources to dwc3 device\n"); 175 dev_err(dev, "couldn't add resources to dwc3 device\n");
@@ -148,6 +178,10 @@ static int dwc3_pci_probe(struct pci_dev *pci,
148 178
149 pci_set_drvdata(pci, glue); 179 pci_set_drvdata(pci, glue);
150 180
181 ret = platform_device_add_data(dwc3, &dwc3_pdata, sizeof(dwc3_pdata));
182 if (ret)
183 goto err3;
184
151 dma_set_coherent_mask(&dwc3->dev, dev->coherent_dma_mask); 185 dma_set_coherent_mask(&dwc3->dev, dev->coherent_dma_mask);
152 186
153 dwc3->dev.dma_mask = dev->dma_mask; 187 dwc3->dev.dma_mask = dev->dma_mask;
@@ -185,6 +219,7 @@ static const struct pci_device_id dwc3_pci_id_table[] = {
185 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BSW), }, 219 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BSW), },
186 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT), }, 220 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT), },
187 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MRFLD), }, 221 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MRFLD), },
222 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB), },
188 { } /* Terminating Entry */ 223 { } /* Terminating Entry */
189}; 224};
190MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table); 225MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table);
diff --git a/drivers/usb/dwc3/dwc3-st.c b/drivers/usb/dwc3/dwc3-st.c
index c7602b5362ad..4a1a543deeda 100644
--- a/drivers/usb/dwc3/dwc3-st.c
+++ b/drivers/usb/dwc3/dwc3-st.c
@@ -243,7 +243,7 @@ static int st_dwc3_probe(struct platform_device *pdev)
243 dwc3_data->rstc_rst = devm_reset_control_get(dev, "softreset"); 243 dwc3_data->rstc_rst = devm_reset_control_get(dev, "softreset");
244 if (IS_ERR(dwc3_data->rstc_rst)) { 244 if (IS_ERR(dwc3_data->rstc_rst)) {
245 dev_err(&pdev->dev, "could not get reset controller\n"); 245 dev_err(&pdev->dev, "could not get reset controller\n");
246 ret = PTR_ERR(dwc3_data->rstc_pwrdn); 246 ret = PTR_ERR(dwc3_data->rstc_rst);
247 goto undo_powerdown; 247 goto undo_powerdown;
248 } 248 }
249 249
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
index 711b23019d54..baeedbd67f77 100644
--- a/drivers/usb/dwc3/ep0.c
+++ b/drivers/usb/dwc3/ep0.c
@@ -86,6 +86,8 @@ static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
86 params.param0 = upper_32_bits(dwc->ep0_trb_addr); 86 params.param0 = upper_32_bits(dwc->ep0_trb_addr);
87 params.param1 = lower_32_bits(dwc->ep0_trb_addr); 87 params.param1 = lower_32_bits(dwc->ep0_trb_addr);
88 88
89 trace_dwc3_prepare_trb(dep, trb);
90
89 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, 91 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
90 DWC3_DEPCMD_STARTTRANSFER, &params); 92 DWC3_DEPCMD_STARTTRANSFER, &params);
91 if (ret < 0) { 93 if (ret < 0) {
@@ -441,7 +443,6 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
441 443
442 case USB_DEVICE_LTM_ENABLE: 444 case USB_DEVICE_LTM_ENABLE:
443 return -EINVAL; 445 return -EINVAL;
444 break;
445 446
446 case USB_DEVICE_TEST_MODE: 447 case USB_DEVICE_TEST_MODE:
447 if ((wIndex & 0xff) != 0) 448 if ((wIndex & 0xff) != 0)
@@ -550,7 +551,6 @@ static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
550 switch (state) { 551 switch (state) {
551 case USB_STATE_DEFAULT: 552 case USB_STATE_DEFAULT:
552 return -EINVAL; 553 return -EINVAL;
553 break;
554 554
555 case USB_STATE_ADDRESS: 555 case USB_STATE_ADDRESS:
556 ret = dwc3_ep0_delegate_req(dwc, ctrl); 556 ret = dwc3_ep0_delegate_req(dwc, ctrl);
@@ -700,35 +700,35 @@ static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
700 700
701 switch (ctrl->bRequest) { 701 switch (ctrl->bRequest) {
702 case USB_REQ_GET_STATUS: 702 case USB_REQ_GET_STATUS:
703 dwc3_trace(trace_dwc3_ep0, "USB_REQ_GET_STATUS\n"); 703 dwc3_trace(trace_dwc3_ep0, "USB_REQ_GET_STATUS");
704 ret = dwc3_ep0_handle_status(dwc, ctrl); 704 ret = dwc3_ep0_handle_status(dwc, ctrl);
705 break; 705 break;
706 case USB_REQ_CLEAR_FEATURE: 706 case USB_REQ_CLEAR_FEATURE:
707 dwc3_trace(trace_dwc3_ep0, "USB_REQ_CLEAR_FEATURE\n"); 707 dwc3_trace(trace_dwc3_ep0, "USB_REQ_CLEAR_FEATURE");
708 ret = dwc3_ep0_handle_feature(dwc, ctrl, 0); 708 ret = dwc3_ep0_handle_feature(dwc, ctrl, 0);
709 break; 709 break;
710 case USB_REQ_SET_FEATURE: 710 case USB_REQ_SET_FEATURE:
711 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_FEATURE\n"); 711 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_FEATURE");
712 ret = dwc3_ep0_handle_feature(dwc, ctrl, 1); 712 ret = dwc3_ep0_handle_feature(dwc, ctrl, 1);
713 break; 713 break;
714 case USB_REQ_SET_ADDRESS: 714 case USB_REQ_SET_ADDRESS:
715 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ADDRESS\n"); 715 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ADDRESS");
716 ret = dwc3_ep0_set_address(dwc, ctrl); 716 ret = dwc3_ep0_set_address(dwc, ctrl);
717 break; 717 break;
718 case USB_REQ_SET_CONFIGURATION: 718 case USB_REQ_SET_CONFIGURATION:
719 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_CONFIGURATION\n"); 719 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_CONFIGURATION");
720 ret = dwc3_ep0_set_config(dwc, ctrl); 720 ret = dwc3_ep0_set_config(dwc, ctrl);
721 break; 721 break;
722 case USB_REQ_SET_SEL: 722 case USB_REQ_SET_SEL:
723 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_SEL\n"); 723 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_SEL");
724 ret = dwc3_ep0_set_sel(dwc, ctrl); 724 ret = dwc3_ep0_set_sel(dwc, ctrl);
725 break; 725 break;
726 case USB_REQ_SET_ISOCH_DELAY: 726 case USB_REQ_SET_ISOCH_DELAY:
727 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ISOCH_DELAY\n"); 727 dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ISOCH_DELAY");
728 ret = dwc3_ep0_set_isoch_delay(dwc, ctrl); 728 ret = dwc3_ep0_set_isoch_delay(dwc, ctrl);
729 break; 729 break;
730 default: 730 default:
731 dwc3_trace(trace_dwc3_ep0, "Forwarding to gadget driver\n"); 731 dwc3_trace(trace_dwc3_ep0, "Forwarding to gadget driver");
732 ret = dwc3_ep0_delegate_req(dwc, ctrl); 732 ret = dwc3_ep0_delegate_req(dwc, ctrl);
733 break; 733 break;
734 } 734 }
@@ -791,6 +791,8 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
791 791
792 trb = dwc->ep0_trb; 792 trb = dwc->ep0_trb;
793 793
794 trace_dwc3_complete_trb(ep0, trb);
795
794 status = DWC3_TRB_SIZE_TRBSTS(trb->size); 796 status = DWC3_TRB_SIZE_TRBSTS(trb->size);
795 if (status == DWC3_TRBSTS_SETUP_PENDING) { 797 if (status == DWC3_TRBSTS_SETUP_PENDING) {
796 dwc3_trace(trace_dwc3_ep0, "Setup Pending received"); 798 dwc3_trace(trace_dwc3_ep0, "Setup Pending received");
@@ -855,6 +857,8 @@ static void dwc3_ep0_complete_status(struct dwc3 *dwc,
855 dep = dwc->eps[0]; 857 dep = dwc->eps[0];
856 trb = dwc->ep0_trb; 858 trb = dwc->ep0_trb;
857 859
860 trace_dwc3_complete_trb(dep, trb);
861
858 if (!list_empty(&dep->request_list)) { 862 if (!list_empty(&dep->request_list)) {
859 r = next_request(&dep->request_list); 863 r = next_request(&dep->request_list);
860 864
@@ -875,7 +879,7 @@ static void dwc3_ep0_complete_status(struct dwc3 *dwc,
875 879
876 status = DWC3_TRB_SIZE_TRBSTS(trb->size); 880 status = DWC3_TRB_SIZE_TRBSTS(trb->size);
877 if (status == DWC3_TRBSTS_SETUP_PENDING) 881 if (status == DWC3_TRBSTS_SETUP_PENDING)
878 dwc3_trace(trace_dwc3_ep0, "Setup Pending received\n"); 882 dwc3_trace(trace_dwc3_ep0, "Setup Pending received");
879 883
880 dwc->ep0state = EP0_SETUP_PHASE; 884 dwc->ep0state = EP0_SETUP_PHASE;
881 dwc3_ep0_out_start(dwc); 885 dwc3_ep0_out_start(dwc);
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 546ea5431b8c..f03b136ecfce 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1140,8 +1140,14 @@ static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request,
1140 if (!dep->endpoint.desc) { 1140 if (!dep->endpoint.desc) {
1141 dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n", 1141 dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n",
1142 request, ep->name); 1142 request, ep->name);
1143 spin_unlock_irqrestore(&dwc->lock, flags); 1143 ret = -ESHUTDOWN;
1144 return -ESHUTDOWN; 1144 goto out;
1145 }
1146
1147 if (WARN(req->dep != dep, "request %p belongs to '%s'\n",
1148 request, req->dep->name)) {
1149 ret = -EINVAL;
1150 goto out;
1145 } 1151 }
1146 1152
1147 dev_vdbg(dwc->dev, "queing request %p to %s length %d\n", 1153 dev_vdbg(dwc->dev, "queing request %p to %s length %d\n",
@@ -1149,6 +1155,8 @@ static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request,
1149 trace_dwc3_ep_queue(req); 1155 trace_dwc3_ep_queue(req);
1150 1156
1151 ret = __dwc3_gadget_ep_queue(dep, req); 1157 ret = __dwc3_gadget_ep_queue(dep, req);
1158
1159out:
1152 spin_unlock_irqrestore(&dwc->lock, flags); 1160 spin_unlock_irqrestore(&dwc->lock, flags);
1153 1161
1154 return ret; 1162 return ret;
@@ -1622,8 +1630,7 @@ err0:
1622 return ret; 1630 return ret;
1623} 1631}
1624 1632
1625static int dwc3_gadget_stop(struct usb_gadget *g, 1633static int dwc3_gadget_stop(struct usb_gadget *g)
1626 struct usb_gadget_driver *driver)
1627{ 1634{
1628 struct dwc3 *dwc = gadget_to_dwc(g); 1635 struct dwc3 *dwc = gadget_to_dwc(g);
1629 unsigned long flags; 1636 unsigned long flags;
@@ -2034,6 +2041,17 @@ static void dwc3_resume_gadget(struct dwc3 *dwc)
2034 if (dwc->gadget_driver && dwc->gadget_driver->resume) { 2041 if (dwc->gadget_driver && dwc->gadget_driver->resume) {
2035 spin_unlock(&dwc->lock); 2042 spin_unlock(&dwc->lock);
2036 dwc->gadget_driver->resume(&dwc->gadget); 2043 dwc->gadget_driver->resume(&dwc->gadget);
2044 }
2045}
2046
2047static void dwc3_reset_gadget(struct dwc3 *dwc)
2048{
2049 if (!dwc->gadget_driver)
2050 return;
2051
2052 if (dwc->gadget.speed != USB_SPEED_UNKNOWN) {
2053 spin_unlock(&dwc->lock);
2054 usb_gadget_udc_reset(&dwc->gadget, dwc->gadget_driver);
2037 spin_lock(&dwc->lock); 2055 spin_lock(&dwc->lock);
2038 } 2056 }
2039} 2057}
@@ -2140,6 +2158,7 @@ static void dwc3_gadget_disconnect_interrupt(struct dwc3 *dwc)
2140 2158
2141 dwc->gadget.speed = USB_SPEED_UNKNOWN; 2159 dwc->gadget.speed = USB_SPEED_UNKNOWN;
2142 dwc->setup_packet_pending = false; 2160 dwc->setup_packet_pending = false;
2161 usb_gadget_set_state(&dwc->gadget, USB_STATE_NOTATTACHED);
2143} 2162}
2144 2163
2145static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) 2164static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
@@ -2177,11 +2196,7 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
2177 dwc3_gadget_disconnect_interrupt(dwc); 2196 dwc3_gadget_disconnect_interrupt(dwc);
2178 } 2197 }
2179 2198
2180 /* after reset -> Default State */ 2199 dwc3_reset_gadget(dwc);
2181 usb_gadget_set_state(&dwc->gadget, USB_STATE_DEFAULT);
2182
2183 if (dwc->gadget.speed != USB_SPEED_UNKNOWN)
2184 dwc3_disconnect_gadget(dwc);
2185 2200
2186 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 2201 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
2187 reg &= ~DWC3_DCTL_TSTCTRL_MASK; 2202 reg &= ~DWC3_DCTL_TSTCTRL_MASK;
@@ -2287,11 +2302,20 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
2287 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 2302 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
2288 reg &= ~(DWC3_DCTL_HIRD_THRES_MASK | DWC3_DCTL_L1_HIBER_EN); 2303 reg &= ~(DWC3_DCTL_HIRD_THRES_MASK | DWC3_DCTL_L1_HIBER_EN);
2289 2304
2305 reg |= DWC3_DCTL_HIRD_THRES(dwc->hird_threshold);
2306
2290 /* 2307 /*
2291 * TODO: This should be configurable. For now using 2308 * When dwc3 revisions >= 2.40a, LPM Erratum is enabled and
2292 * maximum allowed HIRD threshold value of 0b1100 2309 * DCFG.LPMCap is set, core responses with an ACK and the
2310 * BESL value in the LPM token is less than or equal to LPM
2311 * NYET threshold.
2293 */ 2312 */
2294 reg |= DWC3_DCTL_HIRD_THRES(12); 2313 WARN_ONCE(dwc->revision < DWC3_REVISION_240A
2314 && dwc->has_lpm_erratum,
2315 "LPM Erratum not available on dwc3 revisisions < 2.40a\n");
2316
2317 if (dwc->has_lpm_erratum && dwc->revision >= DWC3_REVISION_240A)
2318 reg |= DWC3_DCTL_LPM_ERRATA(dwc->lpm_nyet_threshold);
2295 2319
2296 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 2320 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
2297 } else { 2321 } else {
@@ -2744,26 +2768,13 @@ void dwc3_gadget_exit(struct dwc3 *dwc)
2744 dwc->ctrl_req, dwc->ctrl_req_addr); 2768 dwc->ctrl_req, dwc->ctrl_req_addr);
2745} 2769}
2746 2770
2747int dwc3_gadget_prepare(struct dwc3 *dwc) 2771int dwc3_gadget_suspend(struct dwc3 *dwc)
2748{ 2772{
2749 if (dwc->pullups_connected) { 2773 if (dwc->pullups_connected) {
2750 dwc3_gadget_disable_irq(dwc); 2774 dwc3_gadget_disable_irq(dwc);
2751 dwc3_gadget_run_stop(dwc, true, true); 2775 dwc3_gadget_run_stop(dwc, true, true);
2752 } 2776 }
2753 2777
2754 return 0;
2755}
2756
2757void dwc3_gadget_complete(struct dwc3 *dwc)
2758{
2759 if (dwc->pullups_connected) {
2760 dwc3_gadget_enable_irq(dwc);
2761 dwc3_gadget_run_stop(dwc, true, false);
2762 }
2763}
2764
2765int dwc3_gadget_suspend(struct dwc3 *dwc)
2766{
2767 __dwc3_gadget_ep_disable(dwc->eps[0]); 2778 __dwc3_gadget_ep_disable(dwc->eps[0]);
2768 __dwc3_gadget_ep_disable(dwc->eps[1]); 2779 __dwc3_gadget_ep_disable(dwc->eps[1]);
2769 2780
@@ -2798,6 +2809,11 @@ int dwc3_gadget_resume(struct dwc3 *dwc)
2798 2809
2799 dwc3_writel(dwc->regs, DWC3_DCFG, dwc->dcfg); 2810 dwc3_writel(dwc->regs, DWC3_DCFG, dwc->dcfg);
2800 2811
2812 if (dwc->pullups_connected) {
2813 dwc3_gadget_enable_irq(dwc);
2814 dwc3_gadget_run_stop(dwc, true, false);
2815 }
2816
2801 return 0; 2817 return 0;
2802 2818
2803err1: 2819err1:
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index 7db34f00b89a..a3a3b6d5668c 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -24,4 +24,24 @@ struct dwc3_platform_data {
24 enum usb_device_speed maximum_speed; 24 enum usb_device_speed maximum_speed;
25 enum usb_dr_mode dr_mode; 25 enum usb_dr_mode dr_mode;
26 bool tx_fifo_resize; 26 bool tx_fifo_resize;
27
28 unsigned is_utmi_l1_suspend:1;
29 u8 hird_threshold;
30
31 u8 lpm_nyet_threshold;
32
33 unsigned disable_scramble_quirk:1;
34 unsigned has_lpm_erratum:1;
35 unsigned u2exit_lfps_quirk:1;
36 unsigned u2ss_inp3_quirk:1;
37 unsigned req_p1p2p3_quirk:1;
38 unsigned del_p1p2p3_quirk:1;
39 unsigned del_phy_power_chg_quirk:1;
40 unsigned lfps_filter_quirk:1;
41 unsigned rx_detect_poll_quirk:1;
42 unsigned dis_u3_susphy_quirk:1;
43 unsigned dis_u2_susphy_quirk:1;
44
45 unsigned tx_de_emphasis_quirk:1;
46 unsigned tx_de_emphasis:2;
27}; 47};
diff --git a/drivers/usb/dwc3/trace.h b/drivers/usb/dwc3/trace.h
index 60b0f41eafc4..9fc20b33dd8e 100644
--- a/drivers/usb/dwc3/trace.h
+++ b/drivers/usb/dwc3/trace.h
@@ -61,7 +61,7 @@ DECLARE_EVENT_CLASS(dwc3_log_event,
61 TP_fast_assign( 61 TP_fast_assign(
62 __entry->event = event; 62 __entry->event = event;
63 ), 63 ),
64 TP_printk("event %08x\n", __entry->event) 64 TP_printk("event %08x", __entry->event)
65); 65);
66 66
67DEFINE_EVENT(dwc3_log_event, dwc3_event, 67DEFINE_EVENT(dwc3_log_event, dwc3_event,
@@ -157,7 +157,7 @@ DECLARE_EVENT_CLASS(dwc3_log_generic_cmd,
157 __entry->cmd = cmd; 157 __entry->cmd = cmd;
158 __entry->param = param; 158 __entry->param = param;
159 ), 159 ),
160 TP_printk("cmd '%s' [%d] param %08x\n", 160 TP_printk("cmd '%s' [%d] param %08x",
161 dwc3_gadget_generic_cmd_string(__entry->cmd), 161 dwc3_gadget_generic_cmd_string(__entry->cmd),
162 __entry->cmd, __entry->param 162 __entry->cmd, __entry->param
163 ) 163 )
@@ -175,17 +175,21 @@ DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd,
175 TP_STRUCT__entry( 175 TP_STRUCT__entry(
176 __dynamic_array(char, name, DWC3_MSG_MAX) 176 __dynamic_array(char, name, DWC3_MSG_MAX)
177 __field(unsigned int, cmd) 177 __field(unsigned int, cmd)
178 __field(struct dwc3_gadget_ep_cmd_params *, params) 178 __field(u32, param0)
179 __field(u32, param1)
180 __field(u32, param2)
179 ), 181 ),
180 TP_fast_assign( 182 TP_fast_assign(
181 snprintf(__get_str(name), DWC3_MSG_MAX, "%s", dep->name); 183 snprintf(__get_str(name), DWC3_MSG_MAX, "%s", dep->name);
182 __entry->cmd = cmd; 184 __entry->cmd = cmd;
183 __entry->params = params; 185 __entry->param0 = params->param0;
186 __entry->param1 = params->param1;
187 __entry->param2 = params->param2;
184 ), 188 ),
185 TP_printk("%s: cmd '%s' [%d] params %08x %08x %08x\n", 189 TP_printk("%s: cmd '%s' [%d] params %08x %08x %08x",
186 __get_str(name), dwc3_gadget_ep_cmd_string(__entry->cmd), 190 __get_str(name), dwc3_gadget_ep_cmd_string(__entry->cmd),
187 __entry->cmd, __entry->params->param0, 191 __entry->cmd, __entry->param0,
188 __entry->params->param1, __entry->params->param2 192 __entry->param1, __entry->param2
189 ) 193 )
190); 194);
191 195
@@ -214,7 +218,7 @@ DECLARE_EVENT_CLASS(dwc3_log_trb,
214 __entry->size = trb->size; 218 __entry->size = trb->size;
215 __entry->ctrl = trb->ctrl; 219 __entry->ctrl = trb->ctrl;
216 ), 220 ),
217 TP_printk("%s: trb %p bph %08x bpl %08x size %08x ctrl %08x\n", 221 TP_printk("%s: trb %p bph %08x bpl %08x size %08x ctrl %08x",
218 __get_str(name), __entry->trb, __entry->bph, __entry->bpl, 222 __get_str(name), __entry->trb, __entry->bph, __entry->bpl,
219 __entry->size, __entry->ctrl 223 __entry->size, __entry->ctrl
220 ) 224 )
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index c4880fc0d86e..747ef53bda14 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -190,6 +190,12 @@ config USB_F_UAC2
190config USB_F_UVC 190config USB_F_UVC
191 tristate 191 tristate
192 192
193config USB_F_MIDI
194 tristate
195
196config USB_F_HID
197 tristate
198
193choice 199choice
194 tristate "USB Gadget Drivers" 200 tristate "USB Gadget Drivers"
195 default USB_ETH 201 default USB_ETH
@@ -362,6 +368,61 @@ config USB_CONFIGFS_F_FS
362 implemented in kernel space (for instance Ethernet, serial or 368 implemented in kernel space (for instance Ethernet, serial or
363 mass storage) and other are implemented in user space. 369 mass storage) and other are implemented in user space.
364 370
371config USB_CONFIGFS_F_UAC1
372 boolean "Audio Class 1.0"
373 depends on USB_CONFIGFS
374 depends on SND
375 select USB_LIBCOMPOSITE
376 select SND_PCM
377 select USB_F_UAC1
378 help
379 This Audio function implements 1 AudioControl interface,
380 1 AudioStreaming Interface each for USB-OUT and USB-IN.
381 This driver requires a real Audio codec to be present
382 on the device.
383
384config USB_CONFIGFS_F_UAC2
385 boolean "Audio Class 2.0"
386 depends on USB_CONFIGFS
387 depends on SND
388 select USB_LIBCOMPOSITE
389 select SND_PCM
390 select USB_F_UAC2
391 help
392 This Audio function is compatible with USB Audio Class
393 specification 2.0. It implements 1 AudioControl interface,
394 1 AudioStreaming Interface each for USB-OUT and USB-IN.
395 This driver doesn't expect any real Audio codec to be present
396 on the device - the audio streams are simply sinked to and
397 sourced from a virtual ALSA sound card created. The user-space
398 application may choose to do whatever it wants with the data
399 received from the USB Host and choose to provide whatever it
400 wants as audio data to the USB Host.
401
402config USB_CONFIGFS_F_MIDI
403 boolean "MIDI function"
404 depends on USB_CONFIGFS
405 depends on SND
406 select USB_LIBCOMPOSITE
407 select SND_RAWMIDI
408 select USB_F_MIDI
409 help
410 The MIDI Function acts as a USB Audio device, with one MIDI
411 input and one MIDI output. These MIDI jacks appear as
412 a sound "card" in the ALSA sound system. Other MIDI
413 connections can then be made on the gadget system, using
414 ALSA's aconnect utility etc.
415
416config USB_CONFIGFS_F_HID
417 boolean "HID function"
418 depends on USB_CONFIGFS
419 select USB_F_HID
420 help
421 The HID function driver provides generic emulation of USB
422 Human Interface Devices (HID).
423
424 For more information, see Documentation/usb/gadget_hid.txt.
425
365source "drivers/usb/gadget/legacy/Kconfig" 426source "drivers/usb/gadget/legacy/Kconfig"
366 427
367endchoice 428endchoice
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index f6a51fddd5b5..617835348569 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -1246,10 +1246,49 @@ EXPORT_SYMBOL_GPL(usb_string_ids_n);
1246 1246
1247static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req) 1247static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req)
1248{ 1248{
1249 struct usb_composite_dev *cdev;
1250
1249 if (req->status || req->actual != req->length) 1251 if (req->status || req->actual != req->length)
1250 DBG((struct usb_composite_dev *) ep->driver_data, 1252 DBG((struct usb_composite_dev *) ep->driver_data,
1251 "setup complete --> %d, %d/%d\n", 1253 "setup complete --> %d, %d/%d\n",
1252 req->status, req->actual, req->length); 1254 req->status, req->actual, req->length);
1255
1256 /*
1257 * REVIST The same ep0 requests are shared with function drivers
1258 * so they don't have to maintain the same ->complete() stubs.
1259 *
1260 * Because of that, we need to check for the validity of ->context
1261 * here, even though we know we've set it to something useful.
1262 */
1263 if (!req->context)
1264 return;
1265
1266 cdev = req->context;
1267
1268 if (cdev->req == req)
1269 cdev->setup_pending = false;
1270 else if (cdev->os_desc_req == req)
1271 cdev->os_desc_pending = false;
1272 else
1273 WARN(1, "unknown request %p\n", req);
1274}
1275
1276static int composite_ep0_queue(struct usb_composite_dev *cdev,
1277 struct usb_request *req, gfp_t gfp_flags)
1278{
1279 int ret;
1280
1281 ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags);
1282 if (ret == 0) {
1283 if (cdev->req == req)
1284 cdev->setup_pending = true;
1285 else if (cdev->os_desc_req == req)
1286 cdev->os_desc_pending = true;
1287 else
1288 WARN(1, "unknown request %p\n", req);
1289 }
1290
1291 return ret;
1253} 1292}
1254 1293
1255static int count_ext_compat(struct usb_configuration *c) 1294static int count_ext_compat(struct usb_configuration *c)
@@ -1428,6 +1467,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1428 * when we delegate to it. 1467 * when we delegate to it.
1429 */ 1468 */
1430 req->zero = 0; 1469 req->zero = 0;
1470 req->context = cdev;
1431 req->complete = composite_setup_complete; 1471 req->complete = composite_setup_complete;
1432 req->length = 0; 1472 req->length = 0;
1433 gadget->ep0->driver_data = cdev; 1473 gadget->ep0->driver_data = cdev;
@@ -1624,6 +1664,7 @@ unknown:
1624 int count = 0; 1664 int count = 0;
1625 1665
1626 req = cdev->os_desc_req; 1666 req = cdev->os_desc_req;
1667 req->context = cdev;
1627 req->complete = composite_setup_complete; 1668 req->complete = composite_setup_complete;
1628 buf = req->buf; 1669 buf = req->buf;
1629 os_desc_cfg = cdev->os_desc_config; 1670 os_desc_cfg = cdev->os_desc_config;
@@ -1686,8 +1727,9 @@ unknown:
1686 break; 1727 break;
1687 } 1728 }
1688 req->length = value; 1729 req->length = value;
1730 req->context = cdev;
1689 req->zero = value < w_length; 1731 req->zero = value < w_length;
1690 value = usb_ep_queue(gadget->ep0, req, GFP_ATOMIC); 1732 value = composite_ep0_queue(cdev, req, GFP_ATOMIC);
1691 if (value < 0) { 1733 if (value < 0) {
1692 DBG(cdev, "ep_queue --> %d\n", value); 1734 DBG(cdev, "ep_queue --> %d\n", value);
1693 req->status = 0; 1735 req->status = 0;
@@ -1757,8 +1799,9 @@ unknown:
1757 /* respond with data transfer before status phase? */ 1799 /* respond with data transfer before status phase? */
1758 if (value >= 0 && value != USB_GADGET_DELAYED_STATUS) { 1800 if (value >= 0 && value != USB_GADGET_DELAYED_STATUS) {
1759 req->length = value; 1801 req->length = value;
1802 req->context = cdev;
1760 req->zero = value < w_length; 1803 req->zero = value < w_length;
1761 value = usb_ep_queue(gadget->ep0, req, GFP_ATOMIC); 1804 value = composite_ep0_queue(cdev, req, GFP_ATOMIC);
1762 if (value < 0) { 1805 if (value < 0) {
1763 DBG(cdev, "ep_queue --> %d\n", value); 1806 DBG(cdev, "ep_queue --> %d\n", value);
1764 req->status = 0; 1807 req->status = 0;
@@ -1893,6 +1936,7 @@ int composite_dev_prepare(struct usb_composite_driver *composite,
1893 goto fail_dev; 1936 goto fail_dev;
1894 1937
1895 cdev->req->complete = composite_setup_complete; 1938 cdev->req->complete = composite_setup_complete;
1939 cdev->req->context = cdev;
1896 gadget->ep0->driver_data = cdev; 1940 gadget->ep0->driver_data = cdev;
1897 1941
1898 cdev->driver = composite; 1942 cdev->driver = composite;
@@ -1937,6 +1981,7 @@ int composite_os_desc_req_prepare(struct usb_composite_dev *cdev,
1937 kfree(cdev->os_desc_req); 1981 kfree(cdev->os_desc_req);
1938 goto end; 1982 goto end;
1939 } 1983 }
1984 cdev->os_desc_req->context = cdev;
1940 cdev->os_desc_req->complete = composite_setup_complete; 1985 cdev->os_desc_req->complete = composite_setup_complete;
1941end: 1986end:
1942 return ret; 1987 return ret;
@@ -1951,10 +1996,16 @@ void composite_dev_cleanup(struct usb_composite_dev *cdev)
1951 kfree(uc); 1996 kfree(uc);
1952 } 1997 }
1953 if (cdev->os_desc_req) { 1998 if (cdev->os_desc_req) {
1999 if (cdev->os_desc_pending)
2000 usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req);
2001
1954 kfree(cdev->os_desc_req->buf); 2002 kfree(cdev->os_desc_req->buf);
1955 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req); 2003 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req);
1956 } 2004 }
1957 if (cdev->req) { 2005 if (cdev->req) {
2006 if (cdev->setup_pending)
2007 usb_ep_dequeue(cdev->gadget->ep0, cdev->req);
2008
1958 kfree(cdev->req->buf); 2009 kfree(cdev->req->buf);
1959 usb_ep_free_request(cdev->gadget->ep0, cdev->req); 2010 usb_ep_free_request(cdev->gadget->ep0, cdev->req);
1960 } 2011 }
@@ -2013,8 +2064,7 @@ fail:
2013 2064
2014/*-------------------------------------------------------------------------*/ 2065/*-------------------------------------------------------------------------*/
2015 2066
2016static void 2067void composite_suspend(struct usb_gadget *gadget)
2017composite_suspend(struct usb_gadget *gadget)
2018{ 2068{
2019 struct usb_composite_dev *cdev = get_gadget_data(gadget); 2069 struct usb_composite_dev *cdev = get_gadget_data(gadget);
2020 struct usb_function *f; 2070 struct usb_function *f;
@@ -2037,8 +2087,7 @@ composite_suspend(struct usb_gadget *gadget)
2037 usb_gadget_vbus_draw(gadget, 2); 2087 usb_gadget_vbus_draw(gadget, 2);
2038} 2088}
2039 2089
2040static void 2090void composite_resume(struct usb_gadget *gadget)
2041composite_resume(struct usb_gadget *gadget)
2042{ 2091{
2043 struct usb_composite_dev *cdev = get_gadget_data(gadget); 2092 struct usb_composite_dev *cdev = get_gadget_data(gadget);
2044 struct usb_function *f; 2093 struct usb_function *f;
@@ -2158,7 +2207,8 @@ void usb_composite_setup_continue(struct usb_composite_dev *cdev)
2158 } else if (--cdev->delayed_status == 0) { 2207 } else if (--cdev->delayed_status == 0) {
2159 DBG(cdev, "%s: Completing delayed status\n", __func__); 2208 DBG(cdev, "%s: Completing delayed status\n", __func__);
2160 req->length = 0; 2209 req->length = 0;
2161 value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC); 2210 req->context = cdev;
2211 value = composite_ep0_queue(cdev, req, GFP_ATOMIC);
2162 if (value < 0) { 2212 if (value < 0) {
2163 DBG(cdev, "ep_queue --> %d\n", value); 2213 DBG(cdev, "ep_queue --> %d\n", value);
2164 req->status = 0; 2214 req->status = 0;
diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 34034333f7f6..75648145dc1b 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -271,7 +271,7 @@ static ssize_t gadget_dev_desc_UDC_store(struct gadget_info *gi,
271 ret = -EBUSY; 271 ret = -EBUSY;
272 goto err; 272 goto err;
273 } 273 }
274 ret = udc_attach_driver(name, &gi->composite.gadget_driver); 274 ret = usb_udc_attach_driver(name, &gi->composite.gadget_driver);
275 if (ret) 275 if (ret)
276 goto err; 276 goto err;
277 gi->udc_name = name; 277 gi->udc_name = name;
@@ -1453,6 +1453,9 @@ static const struct usb_gadget_driver configfs_driver_template = {
1453 .reset = composite_disconnect, 1453 .reset = composite_disconnect,
1454 .disconnect = composite_disconnect, 1454 .disconnect = composite_disconnect,
1455 1455
1456 .suspend = composite_suspend,
1457 .resume = composite_resume,
1458
1456 .max_speed = USB_SPEED_SUPER, 1459 .max_speed = USB_SPEED_SUPER,
1457 .driver = { 1460 .driver = {
1458 .owner = THIS_MODULE, 1461 .owner = THIS_MODULE,
diff --git a/drivers/usb/gadget/function/Makefile b/drivers/usb/gadget/function/Makefile
index 90701aa5a826..dd68091d92f0 100644
--- a/drivers/usb/gadget/function/Makefile
+++ b/drivers/usb/gadget/function/Makefile
@@ -38,3 +38,7 @@ usb_f_uac2-y := f_uac2.o
38obj-$(CONFIG_USB_F_UAC2) += usb_f_uac2.o 38obj-$(CONFIG_USB_F_UAC2) += usb_f_uac2.o
39usb_f_uvc-y := f_uvc.o uvc_queue.o uvc_v4l2.o uvc_video.o 39usb_f_uvc-y := f_uvc.o uvc_queue.o uvc_v4l2.o uvc_video.o
40obj-$(CONFIG_USB_F_UVC) += usb_f_uvc.o 40obj-$(CONFIG_USB_F_UVC) += usb_f_uvc.o
41usb_f_midi-y := f_midi.o
42obj-$(CONFIG_USB_F_MIDI) += usb_f_midi.o
43usb_f_hid-y := f_hid.o
44obj-$(CONFIG_USB_F_HID) += usb_f_hid.o
diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c
index 59ab62c92b66..488ac66aae9e 100644
--- a/drivers/usb/gadget/function/f_hid.c
+++ b/drivers/usb/gadget/function/f_hid.c
@@ -12,6 +12,7 @@
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/module.h> 13#include <linux/module.h>
14#include <linux/hid.h> 14#include <linux/hid.h>
15#include <linux/idr.h>
15#include <linux/cdev.h> 16#include <linux/cdev.h>
16#include <linux/mutex.h> 17#include <linux/mutex.h>
17#include <linux/poll.h> 18#include <linux/poll.h>
@@ -21,9 +22,14 @@
21#include <linux/usb/g_hid.h> 22#include <linux/usb/g_hid.h>
22 23
23#include "u_f.h" 24#include "u_f.h"
25#include "u_hid.h"
26
27#define HIDG_MINORS 4
24 28
25static int major, minors; 29static int major, minors;
26static struct class *hidg_class; 30static struct class *hidg_class;
31static DEFINE_IDA(hidg_ida);
32static DEFINE_MUTEX(hidg_ida_lock); /* protects access to hidg_ida */
27 33
28/*-------------------------------------------------------------------------*/ 34/*-------------------------------------------------------------------------*/
29/* HID gadget struct */ 35/* HID gadget struct */
@@ -161,6 +167,26 @@ static struct usb_descriptor_header *hidg_fs_descriptors[] = {
161}; 167};
162 168
163/*-------------------------------------------------------------------------*/ 169/*-------------------------------------------------------------------------*/
170/* Strings */
171
172#define CT_FUNC_HID_IDX 0
173
174static struct usb_string ct_func_string_defs[] = {
175 [CT_FUNC_HID_IDX].s = "HID Interface",
176 {}, /* end of list */
177};
178
179static struct usb_gadget_strings ct_func_string_table = {
180 .language = 0x0409, /* en-US */
181 .strings = ct_func_string_defs,
182};
183
184static struct usb_gadget_strings *ct_func_strings[] = {
185 &ct_func_string_table,
186 NULL,
187};
188
189/*-------------------------------------------------------------------------*/
164/* Char Device */ 190/* Char Device */
165 191
166static ssize_t f_hidg_read(struct file *file, char __user *buffer, 192static ssize_t f_hidg_read(struct file *file, char __user *buffer,
@@ -552,13 +578,22 @@ const struct file_operations f_hidg_fops = {
552 .llseek = noop_llseek, 578 .llseek = noop_llseek,
553}; 579};
554 580
555static int __init hidg_bind(struct usb_configuration *c, struct usb_function *f) 581static int hidg_bind(struct usb_configuration *c, struct usb_function *f)
556{ 582{
557 struct usb_ep *ep; 583 struct usb_ep *ep;
558 struct f_hidg *hidg = func_to_hidg(f); 584 struct f_hidg *hidg = func_to_hidg(f);
585 struct usb_string *us;
586 struct device *device;
559 int status; 587 int status;
560 dev_t dev; 588 dev_t dev;
561 589
590 /* maybe allocate device-global string IDs, and patch descriptors */
591 us = usb_gstrings_attach(c->cdev, ct_func_strings,
592 ARRAY_SIZE(ct_func_string_defs));
593 if (IS_ERR(us))
594 return PTR_ERR(us);
595 hidg_interface_desc.iInterface = us[CT_FUNC_HID_IDX].id;
596
562 /* allocate instance-specific interface IDs, and patch descriptors */ 597 /* allocate instance-specific interface IDs, and patch descriptors */
563 status = usb_interface_id(c, f); 598 status = usb_interface_id(c, f);
564 if (status < 0) 599 if (status < 0)
@@ -623,10 +658,16 @@ static int __init hidg_bind(struct usb_configuration *c, struct usb_function *f)
623 if (status) 658 if (status)
624 goto fail_free_descs; 659 goto fail_free_descs;
625 660
626 device_create(hidg_class, NULL, dev, NULL, "%s%d", "hidg", hidg->minor); 661 device = device_create(hidg_class, NULL, dev, NULL,
662 "%s%d", "hidg", hidg->minor);
663 if (IS_ERR(device)) {
664 status = PTR_ERR(device);
665 goto del;
666 }
627 667
628 return 0; 668 return 0;
629 669del:
670 cdev_del(&hidg->cdev);
630fail_free_descs: 671fail_free_descs:
631 usb_free_all_descriptors(f); 672 usb_free_all_descriptors(f);
632fail: 673fail:
@@ -640,116 +681,313 @@ fail:
640 return status; 681 return status;
641} 682}
642 683
643static void hidg_unbind(struct usb_configuration *c, struct usb_function *f) 684static inline int hidg_get_minor(void)
644{ 685{
645 struct f_hidg *hidg = func_to_hidg(f); 686 int ret;
646 687
647 device_destroy(hidg_class, MKDEV(major, hidg->minor)); 688 ret = ida_simple_get(&hidg_ida, 0, 0, GFP_KERNEL);
648 cdev_del(&hidg->cdev);
649 689
650 /* disable/free request and end point */ 690 return ret;
651 usb_ep_disable(hidg->in_ep); 691}
652 usb_ep_dequeue(hidg->in_ep, hidg->req);
653 kfree(hidg->req->buf);
654 usb_ep_free_request(hidg->in_ep, hidg->req);
655
656 usb_free_all_descriptors(f);
657 692
658 kfree(hidg->report_desc); 693static inline struct f_hid_opts *to_f_hid_opts(struct config_item *item)
659 kfree(hidg); 694{
695 return container_of(to_config_group(item), struct f_hid_opts,
696 func_inst.group);
660} 697}
661 698
662/*-------------------------------------------------------------------------*/ 699CONFIGFS_ATTR_STRUCT(f_hid_opts);
663/* Strings */ 700CONFIGFS_ATTR_OPS(f_hid_opts);
664 701
665#define CT_FUNC_HID_IDX 0 702static void hid_attr_release(struct config_item *item)
703{
704 struct f_hid_opts *opts = to_f_hid_opts(item);
666 705
667static struct usb_string ct_func_string_defs[] = { 706 usb_put_function_instance(&opts->func_inst);
668 [CT_FUNC_HID_IDX].s = "HID Interface", 707}
669 {}, /* end of list */
670};
671 708
672static struct usb_gadget_strings ct_func_string_table = { 709static struct configfs_item_operations hidg_item_ops = {
673 .language = 0x0409, /* en-US */ 710 .release = hid_attr_release,
674 .strings = ct_func_string_defs, 711 .show_attribute = f_hid_opts_attr_show,
712 .store_attribute = f_hid_opts_attr_store,
675}; 713};
676 714
677static struct usb_gadget_strings *ct_func_strings[] = { 715#define F_HID_OPT(name, prec, limit) \
678 &ct_func_string_table, 716static ssize_t f_hid_opts_##name##_show(struct f_hid_opts *opts, char *page)\
717{ \
718 int result; \
719 \
720 mutex_lock(&opts->lock); \
721 result = sprintf(page, "%d\n", opts->name); \
722 mutex_unlock(&opts->lock); \
723 \
724 return result; \
725} \
726 \
727static ssize_t f_hid_opts_##name##_store(struct f_hid_opts *opts, \
728 const char *page, size_t len) \
729{ \
730 int ret; \
731 u##prec num; \
732 \
733 mutex_lock(&opts->lock); \
734 if (opts->refcnt) { \
735 ret = -EBUSY; \
736 goto end; \
737 } \
738 \
739 ret = kstrtou##prec(page, 0, &num); \
740 if (ret) \
741 goto end; \
742 \
743 if (num > limit) { \
744 ret = -EINVAL; \
745 goto end; \
746 } \
747 opts->name = num; \
748 ret = len; \
749 \
750end: \
751 mutex_unlock(&opts->lock); \
752 return ret; \
753} \
754 \
755static struct f_hid_opts_attribute f_hid_opts_##name = \
756 __CONFIGFS_ATTR(name, S_IRUGO | S_IWUSR, f_hid_opts_##name##_show,\
757 f_hid_opts_##name##_store)
758
759F_HID_OPT(subclass, 8, 255);
760F_HID_OPT(protocol, 8, 255);
761F_HID_OPT(report_length, 16, 65536);
762
763static ssize_t f_hid_opts_report_desc_show(struct f_hid_opts *opts, char *page)
764{
765 int result;
766
767 mutex_lock(&opts->lock);
768 result = opts->report_desc_length;
769 memcpy(page, opts->report_desc, opts->report_desc_length);
770 mutex_unlock(&opts->lock);
771
772 return result;
773}
774
775static ssize_t f_hid_opts_report_desc_store(struct f_hid_opts *opts,
776 const char *page, size_t len)
777{
778 int ret = -EBUSY;
779 char *d;
780
781 mutex_lock(&opts->lock);
782
783 if (opts->refcnt)
784 goto end;
785 if (len > PAGE_SIZE) {
786 ret = -ENOSPC;
787 goto end;
788 }
789 d = kmemdup(page, len, GFP_KERNEL);
790 if (!d) {
791 ret = -ENOMEM;
792 goto end;
793 }
794 kfree(opts->report_desc);
795 opts->report_desc = d;
796 opts->report_desc_length = len;
797 opts->report_desc_alloc = true;
798 ret = len;
799end:
800 mutex_unlock(&opts->lock);
801 return ret;
802}
803
804static struct f_hid_opts_attribute f_hid_opts_report_desc =
805 __CONFIGFS_ATTR(report_desc, S_IRUGO | S_IWUSR,
806 f_hid_opts_report_desc_show,
807 f_hid_opts_report_desc_store);
808
809static struct configfs_attribute *hid_attrs[] = {
810 &f_hid_opts_subclass.attr,
811 &f_hid_opts_protocol.attr,
812 &f_hid_opts_report_length.attr,
813 &f_hid_opts_report_desc.attr,
679 NULL, 814 NULL,
680}; 815};
681 816
682/*-------------------------------------------------------------------------*/ 817static struct config_item_type hid_func_type = {
683/* usb_configuration */ 818 .ct_item_ops = &hidg_item_ops,
819 .ct_attrs = hid_attrs,
820 .ct_owner = THIS_MODULE,
821};
684 822
685int __init hidg_bind_config(struct usb_configuration *c, 823static inline void hidg_put_minor(int minor)
686 struct hidg_func_descriptor *fdesc, int index)
687{ 824{
688 struct f_hidg *hidg; 825 ida_simple_remove(&hidg_ida, minor);
689 int status; 826}
690 827
691 if (index >= minors) 828static void hidg_free_inst(struct usb_function_instance *f)
692 return -ENOENT; 829{
830 struct f_hid_opts *opts;
693 831
694 /* maybe allocate device-global string IDs, and patch descriptors */ 832 opts = container_of(f, struct f_hid_opts, func_inst);
695 if (ct_func_string_defs[CT_FUNC_HID_IDX].id == 0) { 833
696 status = usb_string_id(c->cdev); 834 mutex_lock(&hidg_ida_lock);
697 if (status < 0) 835
698 return status; 836 hidg_put_minor(opts->minor);
699 ct_func_string_defs[CT_FUNC_HID_IDX].id = status; 837 if (idr_is_empty(&hidg_ida.idr))
700 hidg_interface_desc.iInterface = status; 838 ghid_cleanup();
839
840 mutex_unlock(&hidg_ida_lock);
841
842 if (opts->report_desc_alloc)
843 kfree(opts->report_desc);
844
845 kfree(opts);
846}
847
848static struct usb_function_instance *hidg_alloc_inst(void)
849{
850 struct f_hid_opts *opts;
851 struct usb_function_instance *ret;
852 int status = 0;
853
854 opts = kzalloc(sizeof(*opts), GFP_KERNEL);
855 if (!opts)
856 return ERR_PTR(-ENOMEM);
857 mutex_init(&opts->lock);
858 opts->func_inst.free_func_inst = hidg_free_inst;
859 ret = &opts->func_inst;
860
861 mutex_lock(&hidg_ida_lock);
862
863 if (idr_is_empty(&hidg_ida.idr)) {
864 status = ghid_setup(NULL, HIDG_MINORS);
865 if (status) {
866 ret = ERR_PTR(status);
867 kfree(opts);
868 goto unlock;
869 }
870 }
871
872 opts->minor = hidg_get_minor();
873 if (opts->minor < 0) {
874 ret = ERR_PTR(opts->minor);
875 kfree(opts);
876 if (idr_is_empty(&hidg_ida.idr))
877 ghid_cleanup();
878 goto unlock;
701 } 879 }
880 config_group_init_type_name(&opts->func_inst.group, "", &hid_func_type);
881
882unlock:
883 mutex_unlock(&hidg_ida_lock);
884 return ret;
885}
886
887static void hidg_free(struct usb_function *f)
888{
889 struct f_hidg *hidg;
890 struct f_hid_opts *opts;
891
892 hidg = func_to_hidg(f);
893 opts = container_of(f->fi, struct f_hid_opts, func_inst);
894 kfree(hidg->report_desc);
895 kfree(hidg);
896 mutex_lock(&opts->lock);
897 --opts->refcnt;
898 mutex_unlock(&opts->lock);
899}
900
901static void hidg_unbind(struct usb_configuration *c, struct usb_function *f)
902{
903 struct f_hidg *hidg = func_to_hidg(f);
904
905 device_destroy(hidg_class, MKDEV(major, hidg->minor));
906 cdev_del(&hidg->cdev);
907
908 /* disable/free request and end point */
909 usb_ep_disable(hidg->in_ep);
910 usb_ep_dequeue(hidg->in_ep, hidg->req);
911 kfree(hidg->req->buf);
912 usb_ep_free_request(hidg->in_ep, hidg->req);
913
914 usb_free_all_descriptors(f);
915}
916
917static struct usb_function *hidg_alloc(struct usb_function_instance *fi)
918{
919 struct f_hidg *hidg;
920 struct f_hid_opts *opts;
702 921
703 /* allocate and initialize one new instance */ 922 /* allocate and initialize one new instance */
704 hidg = kzalloc(sizeof *hidg, GFP_KERNEL); 923 hidg = kzalloc(sizeof(*hidg), GFP_KERNEL);
705 if (!hidg) 924 if (!hidg)
706 return -ENOMEM; 925 return ERR_PTR(-ENOMEM);
707 926
708 hidg->minor = index; 927 opts = container_of(fi, struct f_hid_opts, func_inst);
709 hidg->bInterfaceSubClass = fdesc->subclass; 928
710 hidg->bInterfaceProtocol = fdesc->protocol; 929 mutex_lock(&opts->lock);
711 hidg->report_length = fdesc->report_length; 930 ++opts->refcnt;
712 hidg->report_desc_length = fdesc->report_desc_length; 931
713 hidg->report_desc = kmemdup(fdesc->report_desc, 932 hidg->minor = opts->minor;
714 fdesc->report_desc_length, 933 hidg->bInterfaceSubClass = opts->subclass;
715 GFP_KERNEL); 934 hidg->bInterfaceProtocol = opts->protocol;
716 if (!hidg->report_desc) { 935 hidg->report_length = opts->report_length;
717 kfree(hidg); 936 hidg->report_desc_length = opts->report_desc_length;
718 return -ENOMEM; 937 if (opts->report_desc) {
938 hidg->report_desc = kmemdup(opts->report_desc,
939 opts->report_desc_length,
940 GFP_KERNEL);
941 if (!hidg->report_desc) {
942 kfree(hidg);
943 mutex_unlock(&opts->lock);
944 return ERR_PTR(-ENOMEM);
945 }
719 } 946 }
720 947
948 mutex_unlock(&opts->lock);
949
721 hidg->func.name = "hid"; 950 hidg->func.name = "hid";
722 hidg->func.strings = ct_func_strings;
723 hidg->func.bind = hidg_bind; 951 hidg->func.bind = hidg_bind;
724 hidg->func.unbind = hidg_unbind; 952 hidg->func.unbind = hidg_unbind;
725 hidg->func.set_alt = hidg_set_alt; 953 hidg->func.set_alt = hidg_set_alt;
726 hidg->func.disable = hidg_disable; 954 hidg->func.disable = hidg_disable;
727 hidg->func.setup = hidg_setup; 955 hidg->func.setup = hidg_setup;
956 hidg->func.free_func = hidg_free;
728 957
729 /* this could me made configurable at some point */ 958 /* this could me made configurable at some point */
730 hidg->qlen = 4; 959 hidg->qlen = 4;
731 960
732 status = usb_add_function(c, &hidg->func); 961 return &hidg->func;
733 if (status)
734 kfree(hidg);
735
736 return status;
737} 962}
738 963
739int __init ghid_setup(struct usb_gadget *g, int count) 964DECLARE_USB_FUNCTION_INIT(hid, hidg_alloc_inst, hidg_alloc);
965MODULE_LICENSE("GPL");
966MODULE_AUTHOR("Fabien Chouteau");
967
968int ghid_setup(struct usb_gadget *g, int count)
740{ 969{
741 int status; 970 int status;
742 dev_t dev; 971 dev_t dev;
743 972
744 hidg_class = class_create(THIS_MODULE, "hidg"); 973 hidg_class = class_create(THIS_MODULE, "hidg");
974 if (IS_ERR(hidg_class)) {
975 status = PTR_ERR(hidg_class);
976 hidg_class = NULL;
977 return status;
978 }
745 979
746 status = alloc_chrdev_region(&dev, 0, count, "hidg"); 980 status = alloc_chrdev_region(&dev, 0, count, "hidg");
747 if (!status) { 981 if (status) {
748 major = MAJOR(dev); 982 class_destroy(hidg_class);
749 minors = count; 983 hidg_class = NULL;
984 return status;
750 } 985 }
751 986
752 return status; 987 major = MAJOR(dev);
988 minors = count;
989
990 return 0;
753} 991}
754 992
755void ghid_cleanup(void) 993void ghid_cleanup(void)
diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
index 807b31c0edc3..a90440300735 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -20,6 +20,7 @@
20 */ 20 */
21 21
22#include <linux/kernel.h> 22#include <linux/kernel.h>
23#include <linux/module.h>
23#include <linux/slab.h> 24#include <linux/slab.h>
24#include <linux/device.h> 25#include <linux/device.h>
25 26
@@ -33,6 +34,7 @@
33#include <linux/usb/midi.h> 34#include <linux/usb/midi.h>
34 35
35#include "u_f.h" 36#include "u_f.h"
37#include "u_midi.h"
36 38
37MODULE_AUTHOR("Ben Williamson"); 39MODULE_AUTHOR("Ben Williamson");
38MODULE_LICENSE("GPL v2"); 40MODULE_LICENSE("GPL v2");
@@ -99,7 +101,7 @@ DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(1);
99DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(16); 101DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(16);
100 102
101/* B.3.1 Standard AC Interface Descriptor */ 103/* B.3.1 Standard AC Interface Descriptor */
102static struct usb_interface_descriptor ac_interface_desc __initdata = { 104static struct usb_interface_descriptor ac_interface_desc = {
103 .bLength = USB_DT_INTERFACE_SIZE, 105 .bLength = USB_DT_INTERFACE_SIZE,
104 .bDescriptorType = USB_DT_INTERFACE, 106 .bDescriptorType = USB_DT_INTERFACE,
105 /* .bInterfaceNumber = DYNAMIC */ 107 /* .bInterfaceNumber = DYNAMIC */
@@ -110,7 +112,7 @@ static struct usb_interface_descriptor ac_interface_desc __initdata = {
110}; 112};
111 113
112/* B.3.2 Class-Specific AC Interface Descriptor */ 114/* B.3.2 Class-Specific AC Interface Descriptor */
113static struct uac1_ac_header_descriptor_1 ac_header_desc __initdata = { 115static struct uac1_ac_header_descriptor_1 ac_header_desc = {
114 .bLength = UAC_DT_AC_HEADER_SIZE(1), 116 .bLength = UAC_DT_AC_HEADER_SIZE(1),
115 .bDescriptorType = USB_DT_CS_INTERFACE, 117 .bDescriptorType = USB_DT_CS_INTERFACE,
116 .bDescriptorSubtype = USB_MS_HEADER, 118 .bDescriptorSubtype = USB_MS_HEADER,
@@ -121,7 +123,7 @@ static struct uac1_ac_header_descriptor_1 ac_header_desc __initdata = {
121}; 123};
122 124
123/* B.4.1 Standard MS Interface Descriptor */ 125/* B.4.1 Standard MS Interface Descriptor */
124static struct usb_interface_descriptor ms_interface_desc __initdata = { 126static struct usb_interface_descriptor ms_interface_desc = {
125 .bLength = USB_DT_INTERFACE_SIZE, 127 .bLength = USB_DT_INTERFACE_SIZE,
126 .bDescriptorType = USB_DT_INTERFACE, 128 .bDescriptorType = USB_DT_INTERFACE,
127 /* .bInterfaceNumber = DYNAMIC */ 129 /* .bInterfaceNumber = DYNAMIC */
@@ -132,7 +134,7 @@ static struct usb_interface_descriptor ms_interface_desc __initdata = {
132}; 134};
133 135
134/* B.4.2 Class-Specific MS Interface Descriptor */ 136/* B.4.2 Class-Specific MS Interface Descriptor */
135static struct usb_ms_header_descriptor ms_header_desc __initdata = { 137static struct usb_ms_header_descriptor ms_header_desc = {
136 .bLength = USB_DT_MS_HEADER_SIZE, 138 .bLength = USB_DT_MS_HEADER_SIZE,
137 .bDescriptorType = USB_DT_CS_INTERFACE, 139 .bDescriptorType = USB_DT_CS_INTERFACE,
138 .bDescriptorSubtype = USB_MS_HEADER, 140 .bDescriptorSubtype = USB_MS_HEADER,
@@ -387,29 +389,6 @@ static void f_midi_disable(struct usb_function *f)
387 usb_ep_disable(midi->out_ep); 389 usb_ep_disable(midi->out_ep);
388} 390}
389 391
390static void f_midi_unbind(struct usb_configuration *c, struct usb_function *f)
391{
392 struct usb_composite_dev *cdev = f->config->cdev;
393 struct f_midi *midi = func_to_midi(f);
394 struct snd_card *card;
395
396 DBG(cdev, "unbind\n");
397
398 /* just to be sure */
399 f_midi_disable(f);
400
401 card = midi->card;
402 midi->card = NULL;
403 if (card)
404 snd_card_free(card);
405
406 kfree(midi->id);
407 midi->id = NULL;
408
409 usb_free_all_descriptors(f);
410 kfree(midi);
411}
412
413static int f_midi_snd_free(struct snd_device *device) 392static int f_midi_snd_free(struct snd_device *device)
414{ 393{
415 return 0; 394 return 0;
@@ -654,6 +633,14 @@ static struct snd_rawmidi_ops gmidi_out_ops = {
654 .trigger = f_midi_out_trigger 633 .trigger = f_midi_out_trigger
655}; 634};
656 635
636static inline void f_midi_unregister_card(struct f_midi *midi)
637{
638 if (midi->card) {
639 snd_card_free(midi->card);
640 midi->card = NULL;
641 }
642}
643
657/* register as a sound "card" */ 644/* register as a sound "card" */
658static int f_midi_register_card(struct f_midi *midi) 645static int f_midi_register_card(struct f_midi *midi)
659{ 646{
@@ -715,17 +702,13 @@ static int f_midi_register_card(struct f_midi *midi)
715 return 0; 702 return 0;
716 703
717fail: 704fail:
718 if (midi->card) { 705 f_midi_unregister_card(midi);
719 snd_card_free(midi->card);
720 midi->card = NULL;
721 }
722 return err; 706 return err;
723} 707}
724 708
725/* MIDI function driver setup/binding */ 709/* MIDI function driver setup/binding */
726 710
727static int __init 711static int f_midi_bind(struct usb_configuration *c, struct usb_function *f)
728f_midi_bind(struct usb_configuration *c, struct usb_function *f)
729{ 712{
730 struct usb_descriptor_header **midi_function; 713 struct usb_descriptor_header **midi_function;
731 struct usb_midi_in_jack_descriptor jack_in_ext_desc[MAX_PORTS]; 714 struct usb_midi_in_jack_descriptor jack_in_ext_desc[MAX_PORTS];
@@ -734,15 +717,23 @@ f_midi_bind(struct usb_configuration *c, struct usb_function *f)
734 struct usb_midi_out_jack_descriptor_1 jack_out_emb_desc[MAX_PORTS]; 717 struct usb_midi_out_jack_descriptor_1 jack_out_emb_desc[MAX_PORTS];
735 struct usb_composite_dev *cdev = c->cdev; 718 struct usb_composite_dev *cdev = c->cdev;
736 struct f_midi *midi = func_to_midi(f); 719 struct f_midi *midi = func_to_midi(f);
720 struct usb_string *us;
737 int status, n, jack = 1, i = 0; 721 int status, n, jack = 1, i = 0;
738 722
723 midi->gadget = cdev->gadget;
724 tasklet_init(&midi->tasklet, f_midi_in_tasklet, (unsigned long) midi);
725 status = f_midi_register_card(midi);
726 if (status < 0)
727 goto fail_register;
728
739 /* maybe allocate device-global string ID */ 729 /* maybe allocate device-global string ID */
740 if (midi_string_defs[0].id == 0) { 730 us = usb_gstrings_attach(c->cdev, midi_strings,
741 status = usb_string_id(c->cdev); 731 ARRAY_SIZE(midi_string_defs));
742 if (status < 0) 732 if (IS_ERR(us)) {
743 goto fail; 733 status = PTR_ERR(us);
744 midi_string_defs[0].id = status; 734 goto fail;
745 } 735 }
736 ac_interface_desc.iInterface = us[STRING_FUNC_IDX].id;
746 737
747 /* We have two interfaces, AudioControl and MIDIStreaming */ 738 /* We have two interfaces, AudioControl and MIDIStreaming */
748 status = usb_interface_id(c, f); 739 status = usb_interface_id(c, f);
@@ -892,6 +883,8 @@ fail_f_midi:
892 kfree(midi_function); 883 kfree(midi_function);
893 usb_free_descriptors(f->hs_descriptors); 884 usb_free_descriptors(f->hs_descriptors);
894fail: 885fail:
886 f_midi_unregister_card(midi);
887fail_register:
895 /* we might as well release our claims on endpoints */ 888 /* we might as well release our claims on endpoints */
896 if (midi->out_ep) 889 if (midi->out_ep)
897 midi->out_ep->driver_data = NULL; 890 midi->out_ep->driver_data = NULL;
@@ -903,42 +896,235 @@ fail:
903 return status; 896 return status;
904} 897}
905 898
906/** 899static inline struct f_midi_opts *to_f_midi_opts(struct config_item *item)
907 * f_midi_bind_config - add USB MIDI function to a configuration 900{
908 * @c: the configuration to supcard the USB audio function 901 return container_of(to_config_group(item), struct f_midi_opts,
909 * @index: the soundcard index to use for the ALSA device creation 902 func_inst.group);
910 * @id: the soundcard id to use for the ALSA device creation 903}
911 * @buflen: the buffer length to use 904
912 * @qlen the number of read requests to pre-allocate 905CONFIGFS_ATTR_STRUCT(f_midi_opts);
913 * Context: single threaded during gadget setup 906CONFIGFS_ATTR_OPS(f_midi_opts);
914 * 907
915 * Returns zero on success, else negative errno. 908static void midi_attr_release(struct config_item *item)
916 */ 909{
917int __init f_midi_bind_config(struct usb_configuration *c, 910 struct f_midi_opts *opts = to_f_midi_opts(item);
918 int index, char *id, 911
919 unsigned int in_ports, 912 usb_put_function_instance(&opts->func_inst);
920 unsigned int out_ports, 913}
921 unsigned int buflen, 914
922 unsigned int qlen) 915static struct configfs_item_operations midi_item_ops = {
916 .release = midi_attr_release,
917 .show_attribute = f_midi_opts_attr_show,
918 .store_attribute = f_midi_opts_attr_store,
919};
920
921#define F_MIDI_OPT(name, test_limit, limit) \
922static ssize_t f_midi_opts_##name##_show(struct f_midi_opts *opts, char *page) \
923{ \
924 int result; \
925 \
926 mutex_lock(&opts->lock); \
927 result = sprintf(page, "%d\n", opts->name); \
928 mutex_unlock(&opts->lock); \
929 \
930 return result; \
931} \
932 \
933static ssize_t f_midi_opts_##name##_store(struct f_midi_opts *opts, \
934 const char *page, size_t len) \
935{ \
936 int ret; \
937 u32 num; \
938 \
939 mutex_lock(&opts->lock); \
940 if (opts->refcnt) { \
941 ret = -EBUSY; \
942 goto end; \
943 } \
944 \
945 ret = kstrtou32(page, 0, &num); \
946 if (ret) \
947 goto end; \
948 \
949 if (test_limit && num > limit) { \
950 ret = -EINVAL; \
951 goto end; \
952 } \
953 opts->name = num; \
954 ret = len; \
955 \
956end: \
957 mutex_unlock(&opts->lock); \
958 return ret; \
959} \
960 \
961static struct f_midi_opts_attribute f_midi_opts_##name = \
962 __CONFIGFS_ATTR(name, S_IRUGO | S_IWUSR, f_midi_opts_##name##_show, \
963 f_midi_opts_##name##_store)
964
965F_MIDI_OPT(index, true, SNDRV_CARDS);
966F_MIDI_OPT(buflen, false, 0);
967F_MIDI_OPT(qlen, false, 0);
968F_MIDI_OPT(in_ports, true, MAX_PORTS);
969F_MIDI_OPT(out_ports, true, MAX_PORTS);
970
971static ssize_t f_midi_opts_id_show(struct f_midi_opts *opts, char *page)
972{
973 int result;
974
975 mutex_lock(&opts->lock);
976 result = strlcpy(page, opts->id, PAGE_SIZE);
977 mutex_unlock(&opts->lock);
978
979 return result;
980}
981
982static ssize_t f_midi_opts_id_store(struct f_midi_opts *opts,
983 const char *page, size_t len)
984{
985 int ret;
986 char *c;
987
988 mutex_lock(&opts->lock);
989 if (opts->refcnt) {
990 ret = -EBUSY;
991 goto end;
992 }
993
994 c = kstrndup(page, len, GFP_KERNEL);
995 if (!c) {
996 ret = -ENOMEM;
997 goto end;
998 }
999 if (opts->id_allocated)
1000 kfree(opts->id);
1001 opts->id = c;
1002 opts->id_allocated = true;
1003 ret = len;
1004end:
1005 mutex_unlock(&opts->lock);
1006 return ret;
1007}
1008
1009static struct f_midi_opts_attribute f_midi_opts_id =
1010 __CONFIGFS_ATTR(id, S_IRUGO | S_IWUSR, f_midi_opts_id_show,
1011 f_midi_opts_id_store);
1012
1013static struct configfs_attribute *midi_attrs[] = {
1014 &f_midi_opts_index.attr,
1015 &f_midi_opts_buflen.attr,
1016 &f_midi_opts_qlen.attr,
1017 &f_midi_opts_in_ports.attr,
1018 &f_midi_opts_out_ports.attr,
1019 &f_midi_opts_id.attr,
1020 NULL,
1021};
1022
1023static struct config_item_type midi_func_type = {
1024 .ct_item_ops = &midi_item_ops,
1025 .ct_attrs = midi_attrs,
1026 .ct_owner = THIS_MODULE,
1027};
1028
1029static void f_midi_free_inst(struct usb_function_instance *f)
1030{
1031 struct f_midi_opts *opts;
1032
1033 opts = container_of(f, struct f_midi_opts, func_inst);
1034
1035 if (opts->id_allocated)
1036 kfree(opts->id);
1037
1038 kfree(opts);
1039}
1040
1041static struct usb_function_instance *f_midi_alloc_inst(void)
1042{
1043 struct f_midi_opts *opts;
1044
1045 opts = kzalloc(sizeof(*opts), GFP_KERNEL);
1046 if (!opts)
1047 return ERR_PTR(-ENOMEM);
1048
1049 mutex_init(&opts->lock);
1050 opts->func_inst.free_func_inst = f_midi_free_inst;
1051 opts->index = SNDRV_DEFAULT_IDX1;
1052 opts->id = SNDRV_DEFAULT_STR1;
1053 opts->buflen = 256;
1054 opts->qlen = 32;
1055 opts->in_ports = 1;
1056 opts->out_ports = 1;
1057
1058 config_group_init_type_name(&opts->func_inst.group, "",
1059 &midi_func_type);
1060
1061 return &opts->func_inst;
1062}
1063
1064static void f_midi_free(struct usb_function *f)
1065{
1066 struct f_midi *midi;
1067 struct f_midi_opts *opts;
1068 int i;
1069
1070 midi = func_to_midi(f);
1071 opts = container_of(f->fi, struct f_midi_opts, func_inst);
1072 kfree(midi->id);
1073 mutex_lock(&opts->lock);
1074 for (i = opts->in_ports - 1; i >= 0; --i)
1075 kfree(midi->in_port[i]);
1076 kfree(midi);
1077 --opts->refcnt;
1078 mutex_unlock(&opts->lock);
1079}
1080
1081static void f_midi_unbind(struct usb_configuration *c, struct usb_function *f)
1082{
1083 struct usb_composite_dev *cdev = f->config->cdev;
1084 struct f_midi *midi = func_to_midi(f);
1085 struct snd_card *card;
1086
1087 DBG(cdev, "unbind\n");
1088
1089 /* just to be sure */
1090 f_midi_disable(f);
1091
1092 card = midi->card;
1093 midi->card = NULL;
1094 if (card)
1095 snd_card_free(card);
1096
1097 usb_free_all_descriptors(f);
1098}
1099
1100static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
923{ 1101{
924 struct f_midi *midi; 1102 struct f_midi *midi;
1103 struct f_midi_opts *opts;
925 int status, i; 1104 int status, i;
926 1105
1106 opts = container_of(fi, struct f_midi_opts, func_inst);
1107
1108 mutex_lock(&opts->lock);
927 /* sanity check */ 1109 /* sanity check */
928 if (in_ports > MAX_PORTS || out_ports > MAX_PORTS) 1110 if (opts->in_ports > MAX_PORTS || opts->out_ports > MAX_PORTS) {
929 return -EINVAL; 1111 mutex_unlock(&opts->lock);
1112 return ERR_PTR(-EINVAL);
1113 }
930 1114
931 /* allocate and initialize one new instance */ 1115 /* allocate and initialize one new instance */
932 midi = kzalloc(sizeof *midi, GFP_KERNEL); 1116 midi = kzalloc(sizeof(*midi), GFP_KERNEL);
933 if (!midi) { 1117 if (!midi) {
934 status = -ENOMEM; 1118 mutex_unlock(&opts->lock);
935 goto fail; 1119 return ERR_PTR(-ENOMEM);
936 } 1120 }
937 1121
938 for (i = 0; i < in_ports; i++) { 1122 for (i = 0; i < opts->in_ports; i++) {
939 struct gmidi_in_port *port = kzalloc(sizeof(*port), GFP_KERNEL); 1123 struct gmidi_in_port *port = kzalloc(sizeof(*port), GFP_KERNEL);
1124
940 if (!port) { 1125 if (!port) {
941 status = -ENOMEM; 1126 status = -ENOMEM;
1127 mutex_unlock(&opts->lock);
942 goto setup_fail; 1128 goto setup_fail;
943 } 1129 }
944 1130
@@ -948,39 +1134,37 @@ int __init f_midi_bind_config(struct usb_configuration *c,
948 midi->in_port[i] = port; 1134 midi->in_port[i] = port;
949 } 1135 }
950 1136
951 midi->gadget = c->cdev->gadget;
952 tasklet_init(&midi->tasklet, f_midi_in_tasklet, (unsigned long) midi);
953
954 /* set up ALSA midi devices */ 1137 /* set up ALSA midi devices */
955 midi->in_ports = in_ports; 1138 midi->id = kstrdup(opts->id, GFP_KERNEL);
956 midi->out_ports = out_ports; 1139 if (opts->id && !midi->id) {
957 status = f_midi_register_card(midi); 1140 status = -ENOMEM;
958 if (status < 0) 1141 mutex_unlock(&opts->lock);
959 goto setup_fail; 1142 goto kstrdup_fail;
960 1143 }
961 midi->func.name = "gmidi function"; 1144 midi->in_ports = opts->in_ports;
962 midi->func.strings = midi_strings; 1145 midi->out_ports = opts->out_ports;
963 midi->func.bind = f_midi_bind; 1146 midi->index = opts->index;
964 midi->func.unbind = f_midi_unbind; 1147 midi->buflen = opts->buflen;
965 midi->func.set_alt = f_midi_set_alt; 1148 midi->qlen = opts->qlen;
966 midi->func.disable = f_midi_disable; 1149 ++opts->refcnt;
967 1150 mutex_unlock(&opts->lock);
968 midi->id = kstrdup(id, GFP_KERNEL); 1151
969 midi->index = index; 1152 midi->func.name = "gmidi function";
970 midi->buflen = buflen; 1153 midi->func.bind = f_midi_bind;
971 midi->qlen = qlen; 1154 midi->func.unbind = f_midi_unbind;
972 1155 midi->func.set_alt = f_midi_set_alt;
973 status = usb_add_function(c, &midi->func); 1156 midi->func.disable = f_midi_disable;
974 if (status) 1157 midi->func.free_func = f_midi_free;
975 goto setup_fail; 1158
976 1159 return &midi->func;
977 return 0; 1160
978 1161kstrdup_fail:
1162 f_midi_unregister_card(midi);
979setup_fail: 1163setup_fail:
980 for (--i; i >= 0; i--) 1164 for (--i; i >= 0; i--)
981 kfree(midi->in_port[i]); 1165 kfree(midi->in_port[i]);
982 kfree(midi); 1166 kfree(midi);
983fail: 1167 return ERR_PTR(status);
984 return status;
985} 1168}
986 1169
1170DECLARE_USB_FUNCTION_INIT(midi, f_midi_alloc_inst, f_midi_alloc);
diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
index 16361b0a8b46..bdcda9f5148e 100644
--- a/drivers/usb/gadget/function/f_ncm.c
+++ b/drivers/usb/gadget/function/f_ncm.c
@@ -1441,6 +1441,9 @@ static int ncm_bind(struct usb_configuration *c, struct usb_function *f)
1441 1441
1442 status = usb_assign_descriptors(f, ncm_fs_function, ncm_hs_function, 1442 status = usb_assign_descriptors(f, ncm_fs_function, ncm_hs_function,
1443 NULL); 1443 NULL);
1444 if (status)
1445 goto fail;
1446
1444 /* 1447 /*
1445 * NOTE: all that is done without knowing or caring about 1448 * NOTE: all that is done without knowing or caring about
1446 * the network link ... which is unavailable to this code 1449 * the network link ... which is unavailable to this code
diff --git a/drivers/usb/gadget/function/f_rndis.c b/drivers/usb/gadget/function/f_rndis.c
index f13fc6a58565..829edf878dac 100644
--- a/drivers/usb/gadget/function/f_rndis.c
+++ b/drivers/usb/gadget/function/f_rndis.c
@@ -375,8 +375,7 @@ static struct sk_buff *rndis_add_header(struct gether *port,
375 struct sk_buff *skb2; 375 struct sk_buff *skb2;
376 376
377 skb2 = skb_realloc_headroom(skb, sizeof(struct rndis_packet_msg_type)); 377 skb2 = skb_realloc_headroom(skb, sizeof(struct rndis_packet_msg_type));
378 if (skb2) 378 rndis_add_hdr(skb2);
379 rndis_add_hdr(skb2);
380 379
381 dev_kfree_skb(skb); 380 dev_kfree_skb(skb);
382 return skb2; 381 return skb2;
diff --git a/drivers/usb/gadget/function/u_hid.h b/drivers/usb/gadget/function/u_hid.h
new file mode 100644
index 000000000000..aaa0e368a159
--- /dev/null
+++ b/drivers/usb/gadget/function/u_hid.h
@@ -0,0 +1,42 @@
1/*
2 * u_hid.h
3 *
4 * Utility definitions for the hid function
5 *
6 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * http://www.samsung.com
8 *
9 * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15
16#ifndef U_HID_H
17#define U_HID_H
18
19#include <linux/usb/composite.h>
20
21struct f_hid_opts {
22 struct usb_function_instance func_inst;
23 int minor;
24 unsigned char subclass;
25 unsigned char protocol;
26 unsigned short report_length;
27 unsigned short report_desc_length;
28 unsigned char *report_desc;
29 bool report_desc_alloc;
30
31 /*
32 * Protect the data form concurrent access by read/write
33 * and create symlink/remove symlink.
34 */
35 struct mutex lock;
36 int refcnt;
37};
38
39int ghid_setup(struct usb_gadget *g, int count);
40void ghid_cleanup(void);
41
42#endif /* U_HID_H */
diff --git a/drivers/usb/gadget/function/u_midi.h b/drivers/usb/gadget/function/u_midi.h
new file mode 100644
index 000000000000..22510189758e
--- /dev/null
+++ b/drivers/usb/gadget/function/u_midi.h
@@ -0,0 +1,40 @@
1/*
2 * u_midi.h
3 *
4 * Utility definitions for the midi function
5 *
6 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * http://www.samsung.com
8 *
9 * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15
16#ifndef U_MIDI_H
17#define U_MIDI_H
18
19#include <linux/usb/composite.h>
20
21struct f_midi_opts {
22 struct usb_function_instance func_inst;
23 int index;
24 char *id;
25 bool id_allocated;
26 unsigned int in_ports;
27 unsigned int out_ports;
28 unsigned int buflen;
29 unsigned int qlen;
30
31 /*
32 * Protect the data form concurrent access by read/write
33 * and create symlink/remove symlink.
34 */
35 struct mutex lock;
36 int refcnt;
37};
38
39#endif /* U_MIDI_H */
40
diff --git a/drivers/usb/gadget/function/u_uac1.c b/drivers/usb/gadget/function/u_uac1.c
index a44a07f30281..53842a1b947f 100644
--- a/drivers/usb/gadget/function/u_uac1.c
+++ b/drivers/usb/gadget/function/u_uac1.c
@@ -213,9 +213,6 @@ static int gaudio_open_snd_dev(struct gaudio *card)
213 fn_cap = opts->fn_cap; 213 fn_cap = opts->fn_cap;
214 fn_cntl = opts->fn_cntl; 214 fn_cntl = opts->fn_cntl;
215 215
216 if (!card)
217 return -ENODEV;
218
219 /* Open control device */ 216 /* Open control device */
220 snd = &card->control; 217 snd = &card->control;
221 snd->filp = filp_open(fn_cntl, O_RDWR, 0); 218 snd->filp = filp_open(fn_cntl, O_RDWR, 0);
diff --git a/drivers/usb/gadget/legacy/Kconfig b/drivers/usb/gadget/legacy/Kconfig
index 24392d269709..fd48ef3af4eb 100644
--- a/drivers/usb/gadget/legacy/Kconfig
+++ b/drivers/usb/gadget/legacy/Kconfig
@@ -287,6 +287,7 @@ config USB_MIDI_GADGET
287 depends on SND 287 depends on SND
288 select USB_LIBCOMPOSITE 288 select USB_LIBCOMPOSITE
289 select SND_RAWMIDI 289 select SND_RAWMIDI
290 select USB_F_MIDI
290 help 291 help
291 The MIDI Gadget acts as a USB Audio device, with one MIDI 292 The MIDI Gadget acts as a USB Audio device, with one MIDI
292 input and one MIDI output. These MIDI jacks appear as 293 input and one MIDI output. These MIDI jacks appear as
@@ -419,6 +420,7 @@ endif # TTY
419config USB_G_HID 420config USB_G_HID
420 tristate "HID Gadget" 421 tristate "HID Gadget"
421 select USB_LIBCOMPOSITE 422 select USB_LIBCOMPOSITE
423 select USB_F_HID
422 help 424 help
423 The HID gadget driver provides generic emulation of USB 425 The HID gadget driver provides generic emulation of USB
424 Human Interface Devices (HID). 426 Human Interface Devices (HID).
diff --git a/drivers/usb/gadget/legacy/dbgp.c b/drivers/usb/gadget/legacy/dbgp.c
index 1b075132f8f1..633683a72a11 100644
--- a/drivers/usb/gadget/legacy/dbgp.c
+++ b/drivers/usb/gadget/legacy/dbgp.c
@@ -237,7 +237,7 @@ static void dbgp_unbind(struct usb_gadget *gadget)
237static unsigned char tty_line; 237static unsigned char tty_line;
238#endif 238#endif
239 239
240static int __init dbgp_configure_endpoints(struct usb_gadget *gadget) 240static int dbgp_configure_endpoints(struct usb_gadget *gadget)
241{ 241{
242 int stp; 242 int stp;
243 243
@@ -273,19 +273,10 @@ static int __init dbgp_configure_endpoints(struct usb_gadget *gadget)
273 273
274 dbgp.serial->in->desc = &i_desc; 274 dbgp.serial->in->desc = &i_desc;
275 dbgp.serial->out->desc = &o_desc; 275 dbgp.serial->out->desc = &o_desc;
276 276#endif
277 if (gserial_alloc_line(&tty_line)) {
278 stp = 3;
279 goto fail_3;
280 }
281 277
282 return 0; 278 return 0;
283 279
284fail_3:
285 dbgp.o_ep->driver_data = NULL;
286#else
287 return 0;
288#endif
289fail_2: 280fail_2:
290 dbgp.i_ep->driver_data = NULL; 281 dbgp.i_ep->driver_data = NULL;
291fail_1: 282fail_1:
@@ -324,10 +315,17 @@ static int __init dbgp_bind(struct usb_gadget *gadget,
324 err = -ENOMEM; 315 err = -ENOMEM;
325 goto fail; 316 goto fail;
326 } 317 }
318
319 if (gserial_alloc_line(&tty_line)) {
320 stp = 4;
321 err = -ENODEV;
322 goto fail;
323 }
327#endif 324#endif
325
328 err = dbgp_configure_endpoints(gadget); 326 err = dbgp_configure_endpoints(gadget);
329 if (err < 0) { 327 if (err < 0) {
330 stp = 4; 328 stp = 5;
331 goto fail; 329 goto fail;
332 } 330 }
333 331
@@ -383,6 +381,10 @@ static int dbgp_setup(struct usb_gadget *gadget,
383#ifdef CONFIG_USB_G_DBGP_PRINTK 381#ifdef CONFIG_USB_G_DBGP_PRINTK
384 err = dbgp_enable_ep(); 382 err = dbgp_enable_ep();
385#else 383#else
384 err = dbgp_configure_endpoints(gadget);
385 if (err < 0) {
386 goto fail;
387 }
386 err = gserial_connect(dbgp.serial, tty_line); 388 err = gserial_connect(dbgp.serial, tty_line);
387#endif 389#endif
388 if (err < 0) 390 if (err < 0)
diff --git a/drivers/usb/gadget/legacy/gmidi.c b/drivers/usb/gadget/legacy/gmidi.c
index 3d696b86ff76..e02a095294ac 100644
--- a/drivers/usb/gadget/legacy/gmidi.c
+++ b/drivers/usb/gadget/legacy/gmidi.c
@@ -37,7 +37,7 @@
37 37
38#include "gadget_chips.h" 38#include "gadget_chips.h"
39 39
40#include "f_midi.c" 40#include "u_midi.h"
41 41
42/*-------------------------------------------------------------------------*/ 42/*-------------------------------------------------------------------------*/
43 43
@@ -115,8 +115,13 @@ static struct usb_gadget_strings *dev_strings[] = {
115 NULL, 115 NULL,
116}; 116};
117 117
118static struct usb_function_instance *fi_midi;
119static struct usb_function *f_midi;
120
118static int __exit midi_unbind(struct usb_composite_dev *dev) 121static int __exit midi_unbind(struct usb_composite_dev *dev)
119{ 122{
123 usb_put_function(f_midi);
124 usb_put_function_instance(fi_midi);
120 return 0; 125 return 0;
121} 126}
122 127
@@ -130,28 +135,54 @@ static struct usb_configuration midi_config = {
130 135
131static int __init midi_bind_config(struct usb_configuration *c) 136static int __init midi_bind_config(struct usb_configuration *c)
132{ 137{
133 return f_midi_bind_config(c, index, id, 138 int status;
134 in_ports, out_ports, 139
135 buflen, qlen); 140 f_midi = usb_get_function(fi_midi);
141 if (IS_ERR(f_midi))
142 return PTR_ERR(f_midi);
143
144 status = usb_add_function(c, f_midi);
145 if (status < 0) {
146 usb_put_function(f_midi);
147 return status;
148 }
149
150 return 0;
136} 151}
137 152
138static int __init midi_bind(struct usb_composite_dev *cdev) 153static int __init midi_bind(struct usb_composite_dev *cdev)
139{ 154{
155 struct f_midi_opts *midi_opts;
140 int status; 156 int status;
141 157
158 fi_midi = usb_get_function_instance("midi");
159 if (IS_ERR(fi_midi))
160 return PTR_ERR(fi_midi);
161
162 midi_opts = container_of(fi_midi, struct f_midi_opts, func_inst);
163 midi_opts->index = index;
164 midi_opts->id = id;
165 midi_opts->in_ports = in_ports;
166 midi_opts->out_ports = out_ports;
167 midi_opts->buflen = buflen;
168 midi_opts->qlen = qlen;
169
142 status = usb_string_ids_tab(cdev, strings_dev); 170 status = usb_string_ids_tab(cdev, strings_dev);
143 if (status < 0) 171 if (status < 0)
144 return status; 172 goto put;
145 device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 173 device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id;
146 device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 174 device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
147 midi_config.iConfiguration = strings_dev[STRING_DESCRIPTION_IDX].id; 175 midi_config.iConfiguration = strings_dev[STRING_DESCRIPTION_IDX].id;
148 176
149 status = usb_add_config(cdev, &midi_config, midi_bind_config); 177 status = usb_add_config(cdev, &midi_config, midi_bind_config);
150 if (status < 0) 178 if (status < 0)
151 return status; 179 goto put;
152 usb_composite_overwrite_options(cdev, &coverwrite); 180 usb_composite_overwrite_options(cdev, &coverwrite);
153 pr_info("%s\n", longname); 181 pr_info("%s\n", longname);
154 return 0; 182 return 0;
183put:
184 usb_put_function_instance(fi_midi);
185 return status;
155} 186}
156 187
157static __refdata struct usb_composite_driver midi_driver = { 188static __refdata struct usb_composite_driver midi_driver = {
diff --git a/drivers/usb/gadget/legacy/hid.c b/drivers/usb/gadget/legacy/hid.c
index 778613eb37af..633fe7e07688 100644
--- a/drivers/usb/gadget/legacy/hid.c
+++ b/drivers/usb/gadget/legacy/hid.c
@@ -17,11 +17,14 @@
17#include <linux/list.h> 17#include <linux/list.h>
18#include <linux/module.h> 18#include <linux/module.h>
19#include <linux/usb/composite.h> 19#include <linux/usb/composite.h>
20#include <linux/usb/g_hid.h>
20 21
21#include "gadget_chips.h" 22#include "gadget_chips.h"
22#define DRIVER_DESC "HID Gadget" 23#define DRIVER_DESC "HID Gadget"
23#define DRIVER_VERSION "2010/03/16" 24#define DRIVER_VERSION "2010/03/16"
24 25
26#include "u_hid.h"
27
25/*-------------------------------------------------------------------------*/ 28/*-------------------------------------------------------------------------*/
26 29
27#define HIDG_VENDOR_NUM 0x0525 /* XXX NetChip */ 30#define HIDG_VENDOR_NUM 0x0525 /* XXX NetChip */
@@ -29,17 +32,9 @@
29 32
30/*-------------------------------------------------------------------------*/ 33/*-------------------------------------------------------------------------*/
31 34
32/*
33 * kbuild is not very cooperative with respect to linking separately
34 * compiled library objects into one module. So for now we won't use
35 * separate compilation ... ensuring init/exit sections work to shrink
36 * the runtime footprint, and giving us at least some parts of what
37 * a "gcc --combine ... part1.c part2.c part3.c ... " build would.
38 */
39#include "f_hid.c"
40
41
42struct hidg_func_node { 35struct hidg_func_node {
36 struct usb_function_instance *fi;
37 struct usb_function *f;
43 struct list_head node; 38 struct list_head node;
44 struct hidg_func_descriptor *func; 39 struct hidg_func_descriptor *func;
45}; 40};
@@ -113,8 +108,8 @@ static struct usb_gadget_strings *dev_strings[] = {
113 108
114static int __init do_config(struct usb_configuration *c) 109static int __init do_config(struct usb_configuration *c)
115{ 110{
116 struct hidg_func_node *e; 111 struct hidg_func_node *e, *n;
117 int func = 0, status = 0; 112 int status = 0;
118 113
119 if (gadget_is_otg(c->cdev->gadget)) { 114 if (gadget_is_otg(c->cdev->gadget)) {
120 c->descriptors = otg_desc; 115 c->descriptors = otg_desc;
@@ -122,11 +117,24 @@ static int __init do_config(struct usb_configuration *c)
122 } 117 }
123 118
124 list_for_each_entry(e, &hidg_func_list, node) { 119 list_for_each_entry(e, &hidg_func_list, node) {
125 status = hidg_bind_config(c, e->func, func++); 120 e->f = usb_get_function(e->fi);
126 if (status) 121 if (IS_ERR(e->f))
127 break; 122 goto put;
123 status = usb_add_function(c, e->f);
124 if (status < 0) {
125 usb_put_function(e->f);
126 goto put;
127 }
128 } 128 }
129 129
130 return 0;
131put:
132 list_for_each_entry(n, &hidg_func_list, node) {
133 if (n == e)
134 break;
135 usb_remove_function(c, n->f);
136 usb_put_function(n->f);
137 }
130 return status; 138 return status;
131} 139}
132 140
@@ -143,6 +151,8 @@ static int __init hid_bind(struct usb_composite_dev *cdev)
143{ 151{
144 struct usb_gadget *gadget = cdev->gadget; 152 struct usb_gadget *gadget = cdev->gadget;
145 struct list_head *tmp; 153 struct list_head *tmp;
154 struct hidg_func_node *n, *m;
155 struct f_hid_opts *hid_opts;
146 int status, funcs = 0; 156 int status, funcs = 0;
147 157
148 list_for_each(tmp, &hidg_func_list) 158 list_for_each(tmp, &hidg_func_list)
@@ -151,10 +161,20 @@ static int __init hid_bind(struct usb_composite_dev *cdev)
151 if (!funcs) 161 if (!funcs)
152 return -ENODEV; 162 return -ENODEV;
153 163
154 /* set up HID */ 164 list_for_each_entry(n, &hidg_func_list, node) {
155 status = ghid_setup(cdev->gadget, funcs); 165 n->fi = usb_get_function_instance("hid");
156 if (status < 0) 166 if (IS_ERR(n->fi)) {
157 return status; 167 status = PTR_ERR(n->fi);
168 goto put;
169 }
170 hid_opts = container_of(n->fi, struct f_hid_opts, func_inst);
171 hid_opts->subclass = n->func->subclass;
172 hid_opts->protocol = n->func->protocol;
173 hid_opts->report_length = n->func->report_length;
174 hid_opts->report_desc_length = n->func->report_desc_length;
175 hid_opts->report_desc = n->func->report_desc;
176 }
177
158 178
159 /* Allocate string descriptor numbers ... note that string 179 /* Allocate string descriptor numbers ... note that string
160 * contents can be overridden by the composite_dev glue. 180 * contents can be overridden by the composite_dev glue.
@@ -162,24 +182,37 @@ static int __init hid_bind(struct usb_composite_dev *cdev)
162 182
163 status = usb_string_ids_tab(cdev, strings_dev); 183 status = usb_string_ids_tab(cdev, strings_dev);
164 if (status < 0) 184 if (status < 0)
165 return status; 185 goto put;
166 device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; 186 device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id;
167 device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; 187 device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
168 188
169 /* register our configuration */ 189 /* register our configuration */
170 status = usb_add_config(cdev, &config_driver, do_config); 190 status = usb_add_config(cdev, &config_driver, do_config);
171 if (status < 0) 191 if (status < 0)
172 return status; 192 goto put;
173 193
174 usb_composite_overwrite_options(cdev, &coverwrite); 194 usb_composite_overwrite_options(cdev, &coverwrite);
175 dev_info(&gadget->dev, DRIVER_DESC ", version: " DRIVER_VERSION "\n"); 195 dev_info(&gadget->dev, DRIVER_DESC ", version: " DRIVER_VERSION "\n");
176 196
177 return 0; 197 return 0;
198
199put:
200 list_for_each_entry(m, &hidg_func_list, node) {
201 if (m == n)
202 break;
203 usb_put_function_instance(m->fi);
204 }
205 return status;
178} 206}
179 207
180static int __exit hid_unbind(struct usb_composite_dev *cdev) 208static int __exit hid_unbind(struct usb_composite_dev *cdev)
181{ 209{
182 ghid_cleanup(); 210 struct hidg_func_node *n;
211
212 list_for_each_entry(n, &hidg_func_list, node) {
213 usb_put_function(n->f);
214 usb_put_function_instance(n->fi);
215 }
183 return 0; 216 return 0;
184} 217}
185 218
@@ -260,7 +293,7 @@ module_init(hidg_init);
260 293
261static void __exit hidg_cleanup(void) 294static void __exit hidg_cleanup(void)
262{ 295{
263 platform_driver_unregister(&hidg_plat_driver);
264 usb_composite_unregister(&hidg_driver); 296 usb_composite_unregister(&hidg_driver);
297 platform_driver_unregister(&hidg_plat_driver);
265} 298}
266module_exit(hidg_cleanup); 299module_exit(hidg_cleanup);
diff --git a/drivers/usb/gadget/legacy/printer.c b/drivers/usb/gadget/legacy/printer.c
index 6474081dcbaf..90545980542f 100644
--- a/drivers/usb/gadget/legacy/printer.c
+++ b/drivers/usb/gadget/legacy/printer.c
@@ -208,6 +208,43 @@ static struct usb_descriptor_header *hs_printer_function[] = {
208 NULL 208 NULL
209}; 209};
210 210
211/*
212 * Added endpoint descriptors for 3.0 devices
213 */
214
215static struct usb_endpoint_descriptor ss_ep_in_desc = {
216 .bLength = USB_DT_ENDPOINT_SIZE,
217 .bDescriptorType = USB_DT_ENDPOINT,
218 .bmAttributes = USB_ENDPOINT_XFER_BULK,
219 .wMaxPacketSize = cpu_to_le16(1024),
220};
221
222static struct usb_ss_ep_comp_descriptor ss_ep_in_comp_desc = {
223 .bLength = sizeof(ss_ep_in_comp_desc),
224 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP,
225};
226
227static struct usb_endpoint_descriptor ss_ep_out_desc = {
228 .bLength = USB_DT_ENDPOINT_SIZE,
229 .bDescriptorType = USB_DT_ENDPOINT,
230 .bmAttributes = USB_ENDPOINT_XFER_BULK,
231 .wMaxPacketSize = cpu_to_le16(1024),
232};
233
234static struct usb_ss_ep_comp_descriptor ss_ep_out_comp_desc = {
235 .bLength = sizeof(ss_ep_out_comp_desc),
236 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP,
237};
238
239static struct usb_descriptor_header *ss_printer_function[] = {
240 (struct usb_descriptor_header *) &intf_desc,
241 (struct usb_descriptor_header *) &ss_ep_in_desc,
242 (struct usb_descriptor_header *) &ss_ep_in_comp_desc,
243 (struct usb_descriptor_header *) &ss_ep_out_desc,
244 (struct usb_descriptor_header *) &ss_ep_out_comp_desc,
245 NULL
246};
247
211static struct usb_otg_descriptor otg_descriptor = { 248static struct usb_otg_descriptor otg_descriptor = {
212 .bLength = sizeof otg_descriptor, 249 .bLength = sizeof otg_descriptor,
213 .bDescriptorType = USB_DT_OTG, 250 .bDescriptorType = USB_DT_OTG,
@@ -220,7 +257,20 @@ static const struct usb_descriptor_header *otg_desc[] = {
220}; 257};
221 258
222/* maxpacket and other transfer characteristics vary by speed. */ 259/* maxpacket and other transfer characteristics vary by speed. */
223#define ep_desc(g, hs, fs) (((g)->speed == USB_SPEED_HIGH)?(hs):(fs)) 260static inline struct usb_endpoint_descriptor *ep_desc(struct usb_gadget *gadget,
261 struct usb_endpoint_descriptor *fs,
262 struct usb_endpoint_descriptor *hs,
263 struct usb_endpoint_descriptor *ss)
264{
265 switch (gadget->speed) {
266 case USB_SPEED_SUPER:
267 return ss;
268 case USB_SPEED_HIGH:
269 return hs;
270 default:
271 return fs;
272 }
273}
224 274
225/*-------------------------------------------------------------------------*/ 275/*-------------------------------------------------------------------------*/
226 276
@@ -793,11 +843,12 @@ set_printer_interface(struct printer_dev *dev)
793{ 843{
794 int result = 0; 844 int result = 0;
795 845
796 dev->in_ep->desc = ep_desc(dev->gadget, &hs_ep_in_desc, &fs_ep_in_desc); 846 dev->in_ep->desc = ep_desc(dev->gadget, &fs_ep_in_desc, &hs_ep_in_desc,
847 &ss_ep_in_desc);
797 dev->in_ep->driver_data = dev; 848 dev->in_ep->driver_data = dev;
798 849
799 dev->out_ep->desc = ep_desc(dev->gadget, &hs_ep_out_desc, 850 dev->out_ep->desc = ep_desc(dev->gadget, &fs_ep_out_desc,
800 &fs_ep_out_desc); 851 &hs_ep_out_desc, &ss_ep_out_desc);
801 dev->out_ep->driver_data = dev; 852 dev->out_ep->driver_data = dev;
802 853
803 result = usb_ep_enable(dev->in_ep); 854 result = usb_ep_enable(dev->in_ep);
@@ -1016,9 +1067,11 @@ autoconf_fail:
1016 /* assumes that all endpoints are dual-speed */ 1067 /* assumes that all endpoints are dual-speed */
1017 hs_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress; 1068 hs_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress;
1018 hs_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress; 1069 hs_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress;
1070 ss_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress;
1071 ss_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress;
1019 1072
1020 ret = usb_assign_descriptors(f, fs_printer_function, 1073 ret = usb_assign_descriptors(f, fs_printer_function,
1021 hs_printer_function, NULL); 1074 hs_printer_function, ss_printer_function);
1022 if (ret) 1075 if (ret)
1023 return ret; 1076 return ret;
1024 1077
@@ -1253,7 +1306,7 @@ static __refdata struct usb_composite_driver printer_driver = {
1253 .name = shortname, 1306 .name = shortname,
1254 .dev = &device_desc, 1307 .dev = &device_desc,
1255 .strings = dev_strings, 1308 .strings = dev_strings,
1256 .max_speed = USB_SPEED_HIGH, 1309 .max_speed = USB_SPEED_SUPER,
1257 .bind = printer_bind, 1310 .bind = printer_bind,
1258 .unbind = printer_unbind, 1311 .unbind = printer_unbind,
1259}; 1312};
diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig
index 217365d35a25..b8e213eb36cc 100644
--- a/drivers/usb/gadget/udc/Kconfig
+++ b/drivers/usb/gadget/udc/Kconfig
@@ -241,6 +241,8 @@ config USB_M66592
241 dynamically linked module called "m66592_udc" and force all 241 dynamically linked module called "m66592_udc" and force all
242 gadget drivers to also be dynamically linked. 242 gadget drivers to also be dynamically linked.
243 243
244source "drivers/usb/gadget/udc/bdc/Kconfig"
245
244# 246#
245# Controllers available only in discrete form (and all PCI controllers) 247# Controllers available only in discrete form (and all PCI controllers)
246# 248#
diff --git a/drivers/usb/gadget/udc/Makefile b/drivers/usb/gadget/udc/Makefile
index a7f4491593f1..fba2049bf985 100644
--- a/drivers/usb/gadget/udc/Makefile
+++ b/drivers/usb/gadget/udc/Makefile
@@ -30,3 +30,4 @@ obj-$(CONFIG_USB_FOTG210_UDC) += fotg210-udc.o
30obj-$(CONFIG_USB_MV_U3D) += mv_u3d_core.o 30obj-$(CONFIG_USB_MV_U3D) += mv_u3d_core.o
31obj-$(CONFIG_USB_GR_UDC) += gr_udc.o 31obj-$(CONFIG_USB_GR_UDC) += gr_udc.o
32obj-$(CONFIG_USB_GADGET_XILINX) += udc-xilinx.o 32obj-$(CONFIG_USB_GADGET_XILINX) += udc-xilinx.o
33obj-$(CONFIG_USB_BDC_UDC) += bdc/
diff --git a/drivers/usb/gadget/udc/amd5536udc.c b/drivers/usb/gadget/udc/amd5536udc.c
index 3b9d13848a4f..de7e5e2ccf1c 100644
--- a/drivers/usb/gadget/udc/amd5536udc.c
+++ b/drivers/usb/gadget/udc/amd5536udc.c
@@ -1401,9 +1401,8 @@ static int udc_wakeup(struct usb_gadget *gadget)
1401 1401
1402static int amd5536_udc_start(struct usb_gadget *g, 1402static int amd5536_udc_start(struct usb_gadget *g,
1403 struct usb_gadget_driver *driver); 1403 struct usb_gadget_driver *driver);
1404static int amd5536_udc_stop(struct usb_gadget *g, 1404static int amd5536_udc_stop(struct usb_gadget *g);
1405 struct usb_gadget_driver *driver); 1405
1406/* gadget operations */
1407static const struct usb_gadget_ops udc_ops = { 1406static const struct usb_gadget_ops udc_ops = {
1408 .wakeup = udc_wakeup, 1407 .wakeup = udc_wakeup,
1409 .get_frame = udc_get_frame, 1408 .get_frame = udc_get_frame,
@@ -1962,8 +1961,7 @@ __acquires(dev->lock)
1962} 1961}
1963 1962
1964/* Called by gadget driver to unregister itself */ 1963/* Called by gadget driver to unregister itself */
1965static int amd5536_udc_stop(struct usb_gadget *g, 1964static int amd5536_udc_stop(struct usb_gadget *g)
1966 struct usb_gadget_driver *driver)
1967{ 1965{
1968 struct udc *dev = to_amd5536_udc(g); 1966 struct udc *dev = to_amd5536_udc(g);
1969 unsigned long flags; 1967 unsigned long flags;
@@ -1971,7 +1969,7 @@ static int amd5536_udc_stop(struct usb_gadget *g,
1971 1969
1972 spin_lock_irqsave(&dev->lock, flags); 1970 spin_lock_irqsave(&dev->lock, flags);
1973 udc_mask_unused_interrupts(dev); 1971 udc_mask_unused_interrupts(dev);
1974 shutdown(dev, driver); 1972 shutdown(dev, NULL);
1975 spin_unlock_irqrestore(&dev->lock, flags); 1973 spin_unlock_irqrestore(&dev->lock, flags);
1976 1974
1977 dev->driver = NULL; 1975 dev->driver = NULL;
@@ -2873,7 +2871,7 @@ __acquires(dev->lock)
2873 dev->driver->resume(&dev->gadget); 2871 dev->driver->resume(&dev->gadget);
2874 dev->sys_suspended = 0; 2872 dev->sys_suspended = 0;
2875 } 2873 }
2876 dev->driver->disconnect(&dev->gadget); 2874 usb_gadget_udc_reset(&dev->gadget, dev->driver);
2877 spin_lock(&dev->lock); 2875 spin_lock(&dev->lock);
2878 2876
2879 /* disable ep0 to empty req queue */ 2877 /* disable ep0 to empty req queue */
diff --git a/drivers/usb/gadget/udc/at91_udc.c b/drivers/usb/gadget/udc/at91_udc.c
index 9968f5331fe4..eb2999c5d03c 100644
--- a/drivers/usb/gadget/udc/at91_udc.c
+++ b/drivers/usb/gadget/udc/at91_udc.c
@@ -840,6 +840,31 @@ static void udc_reinit(struct at91_udc *udc)
840 } 840 }
841} 841}
842 842
843static void reset_gadget(struct at91_udc *udc)
844{
845 struct usb_gadget_driver *driver = udc->driver;
846 int i;
847
848 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
849 driver = NULL;
850 udc->gadget.speed = USB_SPEED_UNKNOWN;
851 udc->suspended = 0;
852
853 for (i = 0; i < NUM_ENDPOINTS; i++) {
854 struct at91_ep *ep = &udc->ep[i];
855
856 ep->stopped = 1;
857 nuke(ep, -ESHUTDOWN);
858 }
859 if (driver) {
860 spin_unlock(&udc->lock);
861 usb_gadget_udc_reset(&udc->gadget, driver);
862 spin_lock(&udc->lock);
863 }
864
865 udc_reinit(udc);
866}
867
843static void stop_activity(struct at91_udc *udc) 868static void stop_activity(struct at91_udc *udc)
844{ 869{
845 struct usb_gadget_driver *driver = udc->driver; 870 struct usb_gadget_driver *driver = udc->driver;
@@ -870,12 +895,10 @@ static void clk_on(struct at91_udc *udc)
870 return; 895 return;
871 udc->clocked = 1; 896 udc->clocked = 1;
872 897
873 if (IS_ENABLED(CONFIG_COMMON_CLK)) { 898 if (IS_ENABLED(CONFIG_COMMON_CLK))
874 clk_set_rate(udc->uclk, 48000000); 899 clk_enable(udc->uclk);
875 clk_prepare_enable(udc->uclk); 900 clk_enable(udc->iclk);
876 } 901 clk_enable(udc->fclk);
877 clk_prepare_enable(udc->iclk);
878 clk_prepare_enable(udc->fclk);
879} 902}
880 903
881static void clk_off(struct at91_udc *udc) 904static void clk_off(struct at91_udc *udc)
@@ -884,10 +907,10 @@ static void clk_off(struct at91_udc *udc)
884 return; 907 return;
885 udc->clocked = 0; 908 udc->clocked = 0;
886 udc->gadget.speed = USB_SPEED_UNKNOWN; 909 udc->gadget.speed = USB_SPEED_UNKNOWN;
887 clk_disable_unprepare(udc->fclk); 910 clk_disable(udc->fclk);
888 clk_disable_unprepare(udc->iclk); 911 clk_disable(udc->iclk);
889 if (IS_ENABLED(CONFIG_COMMON_CLK)) 912 if (IS_ENABLED(CONFIG_COMMON_CLK))
890 clk_disable_unprepare(udc->uclk); 913 clk_disable(udc->uclk);
891} 914}
892 915
893/* 916/*
@@ -984,8 +1007,8 @@ static int at91_set_selfpowered(struct usb_gadget *gadget, int is_on)
984 1007
985static int at91_start(struct usb_gadget *gadget, 1008static int at91_start(struct usb_gadget *gadget,
986 struct usb_gadget_driver *driver); 1009 struct usb_gadget_driver *driver);
987static int at91_stop(struct usb_gadget *gadget, 1010static int at91_stop(struct usb_gadget *gadget);
988 struct usb_gadget_driver *driver); 1011
989static const struct usb_gadget_ops at91_udc_ops = { 1012static const struct usb_gadget_ops at91_udc_ops = {
990 .get_frame = at91_get_frame, 1013 .get_frame = at91_get_frame,
991 .wakeup = at91_wakeup, 1014 .wakeup = at91_wakeup,
@@ -1426,7 +1449,7 @@ static irqreturn_t at91_udc_irq (int irq, void *_udc)
1426 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES); 1449 at91_udp_write(udc, AT91_UDP_ICR, AT91_UDP_ENDBUSRES);
1427 VDBG("end bus reset\n"); 1450 VDBG("end bus reset\n");
1428 udc->addr = 0; 1451 udc->addr = 0;
1429 stop_activity(udc); 1452 reset_gadget(udc);
1430 1453
1431 /* enable ep0 */ 1454 /* enable ep0 */
1432 at91_udp_write(udc, AT91_UDP_CSR(0), 1455 at91_udp_write(udc, AT91_UDP_CSR(0),
@@ -1512,20 +1535,11 @@ static irqreturn_t at91_udc_irq (int irq, void *_udc)
1512 1535
1513/*-------------------------------------------------------------------------*/ 1536/*-------------------------------------------------------------------------*/
1514 1537
1515static void nop_release(struct device *dev)
1516{
1517 /* nothing to free */
1518}
1519
1520static struct at91_udc controller = { 1538static struct at91_udc controller = {
1521 .gadget = { 1539 .gadget = {
1522 .ops = &at91_udc_ops, 1540 .ops = &at91_udc_ops,
1523 .ep0 = &controller.ep[0].ep, 1541 .ep0 = &controller.ep[0].ep,
1524 .name = driver_name, 1542 .name = driver_name,
1525 .dev = {
1526 .init_name = "gadget",
1527 .release = nop_release,
1528 }
1529 }, 1543 },
1530 .ep[0] = { 1544 .ep[0] = {
1531 .ep = { 1545 .ep = {
@@ -1641,12 +1655,10 @@ static int at91_start(struct usb_gadget *gadget,
1641 udc->enabled = 1; 1655 udc->enabled = 1;
1642 udc->selfpowered = 1; 1656 udc->selfpowered = 1;
1643 1657
1644 DBG("bound to %s\n", driver->driver.name);
1645 return 0; 1658 return 0;
1646} 1659}
1647 1660
1648static int at91_stop(struct usb_gadget *gadget, 1661static int at91_stop(struct usb_gadget *gadget)
1649 struct usb_gadget_driver *driver)
1650{ 1662{
1651 struct at91_udc *udc; 1663 struct at91_udc *udc;
1652 unsigned long flags; 1664 unsigned long flags;
@@ -1659,7 +1671,6 @@ static int at91_stop(struct usb_gadget *gadget,
1659 1671
1660 udc->driver = NULL; 1672 udc->driver = NULL;
1661 1673
1662 DBG("unbound from %s\n", driver->driver.name);
1663 return 0; 1674 return 0;
1664} 1675}
1665 1676
@@ -1780,14 +1791,24 @@ static int at91udc_probe(struct platform_device *pdev)
1780 } 1791 }
1781 1792
1782 /* don't do anything until we have both gadget driver and VBUS */ 1793 /* don't do anything until we have both gadget driver and VBUS */
1794 if (IS_ENABLED(CONFIG_COMMON_CLK)) {
1795 clk_set_rate(udc->uclk, 48000000);
1796 retval = clk_prepare(udc->uclk);
1797 if (retval)
1798 goto fail1;
1799 }
1800 retval = clk_prepare(udc->fclk);
1801 if (retval)
1802 goto fail1a;
1803
1783 retval = clk_prepare_enable(udc->iclk); 1804 retval = clk_prepare_enable(udc->iclk);
1784 if (retval) 1805 if (retval)
1785 goto fail1; 1806 goto fail1b;
1786 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS); 1807 at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS);
1787 at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff); 1808 at91_udp_write(udc, AT91_UDP_IDR, 0xffffffff);
1788 /* Clear all pending interrupts - UDP may be used by bootloader. */ 1809 /* Clear all pending interrupts - UDP may be used by bootloader. */
1789 at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff); 1810 at91_udp_write(udc, AT91_UDP_ICR, 0xffffffff);
1790 clk_disable_unprepare(udc->iclk); 1811 clk_disable(udc->iclk);
1791 1812
1792 /* request UDC and maybe VBUS irqs */ 1813 /* request UDC and maybe VBUS irqs */
1793 udc->udp_irq = platform_get_irq(pdev, 0); 1814 udc->udp_irq = platform_get_irq(pdev, 0);
@@ -1795,7 +1816,7 @@ static int at91udc_probe(struct platform_device *pdev)
1795 0, driver_name, udc); 1816 0, driver_name, udc);
1796 if (retval < 0) { 1817 if (retval < 0) {
1797 DBG("request irq %d failed\n", udc->udp_irq); 1818 DBG("request irq %d failed\n", udc->udp_irq);
1798 goto fail1; 1819 goto fail1c;
1799 } 1820 }
1800 if (gpio_is_valid(udc->board.vbus_pin)) { 1821 if (gpio_is_valid(udc->board.vbus_pin)) {
1801 retval = gpio_request(udc->board.vbus_pin, "udc_vbus"); 1822 retval = gpio_request(udc->board.vbus_pin, "udc_vbus");
@@ -1848,6 +1869,13 @@ fail3:
1848 gpio_free(udc->board.vbus_pin); 1869 gpio_free(udc->board.vbus_pin);
1849fail2: 1870fail2:
1850 free_irq(udc->udp_irq, udc); 1871 free_irq(udc->udp_irq, udc);
1872fail1c:
1873 clk_unprepare(udc->iclk);
1874fail1b:
1875 clk_unprepare(udc->fclk);
1876fail1a:
1877 if (IS_ENABLED(CONFIG_COMMON_CLK))
1878 clk_unprepare(udc->uclk);
1851fail1: 1879fail1:
1852 if (IS_ENABLED(CONFIG_COMMON_CLK) && !IS_ERR(udc->uclk)) 1880 if (IS_ENABLED(CONFIG_COMMON_CLK) && !IS_ERR(udc->uclk))
1853 clk_put(udc->uclk); 1881 clk_put(udc->uclk);
@@ -1896,6 +1924,11 @@ static int __exit at91udc_remove(struct platform_device *pdev)
1896 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1924 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1897 release_mem_region(res->start, resource_size(res)); 1925 release_mem_region(res->start, resource_size(res));
1898 1926
1927 if (IS_ENABLED(CONFIG_COMMON_CLK))
1928 clk_unprepare(udc->uclk);
1929 clk_unprepare(udc->fclk);
1930 clk_unprepare(udc->iclk);
1931
1899 clk_put(udc->iclk); 1932 clk_put(udc->iclk);
1900 clk_put(udc->fclk); 1933 clk_put(udc->fclk);
1901 if (IS_ENABLED(CONFIG_COMMON_CLK)) 1934 if (IS_ENABLED(CONFIG_COMMON_CLK))
diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
index 1529926e20a0..b31747979c4a 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
@@ -987,8 +987,8 @@ usba_udc_set_selfpowered(struct usb_gadget *gadget, int is_selfpowered)
987 987
988static int atmel_usba_start(struct usb_gadget *gadget, 988static int atmel_usba_start(struct usb_gadget *gadget,
989 struct usb_gadget_driver *driver); 989 struct usb_gadget_driver *driver);
990static int atmel_usba_stop(struct usb_gadget *gadget, 990static int atmel_usba_stop(struct usb_gadget *gadget);
991 struct usb_gadget_driver *driver); 991
992static const struct usb_gadget_ops usba_udc_ops = { 992static const struct usb_gadget_ops usba_udc_ops = {
993 .get_frame = usba_udc_get_frame, 993 .get_frame = usba_udc_get_frame,
994 .wakeup = usba_udc_wakeup, 994 .wakeup = usba_udc_wakeup,
@@ -1007,19 +1007,10 @@ static struct usb_endpoint_descriptor usba_ep0_desc = {
1007 .bInterval = 1, 1007 .bInterval = 1,
1008}; 1008};
1009 1009
1010static void nop_release(struct device *dev)
1011{
1012
1013}
1014
1015static struct usb_gadget usba_gadget_template = { 1010static struct usb_gadget usba_gadget_template = {
1016 .ops = &usba_udc_ops, 1011 .ops = &usba_udc_ops,
1017 .max_speed = USB_SPEED_HIGH, 1012 .max_speed = USB_SPEED_HIGH,
1018 .name = "atmel_usba_udc", 1013 .name = "atmel_usba_udc",
1019 .dev = {
1020 .init_name = "gadget",
1021 .release = nop_release,
1022 },
1023}; 1014};
1024 1015
1025/* 1016/*
@@ -1685,11 +1676,10 @@ static irqreturn_t usba_udc_irq(int irq, void *devid)
1685 usba_writel(udc, INT_CLR, USBA_END_OF_RESET); 1676 usba_writel(udc, INT_CLR, USBA_END_OF_RESET);
1686 reset_all_endpoints(udc); 1677 reset_all_endpoints(udc);
1687 1678
1688 if (udc->gadget.speed != USB_SPEED_UNKNOWN 1679 if (udc->gadget.speed != USB_SPEED_UNKNOWN && udc->driver) {
1689 && udc->driver && udc->driver->disconnect) {
1690 udc->gadget.speed = USB_SPEED_UNKNOWN; 1680 udc->gadget.speed = USB_SPEED_UNKNOWN;
1691 spin_unlock(&udc->lock); 1681 spin_unlock(&udc->lock);
1692 udc->driver->disconnect(&udc->gadget); 1682 usb_gadget_udc_reset(&udc->gadget, udc->driver);
1693 spin_lock(&udc->lock); 1683 spin_lock(&udc->lock);
1694 } 1684 }
1695 1685
@@ -1791,8 +1781,6 @@ static int atmel_usba_start(struct usb_gadget *gadget,
1791 return ret; 1781 return ret;
1792 } 1782 }
1793 1783
1794 DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name);
1795
1796 udc->vbus_prev = 0; 1784 udc->vbus_prev = 0;
1797 if (gpio_is_valid(udc->vbus_pin)) 1785 if (gpio_is_valid(udc->vbus_pin))
1798 enable_irq(gpio_to_irq(udc->vbus_pin)); 1786 enable_irq(gpio_to_irq(udc->vbus_pin));
@@ -1809,8 +1797,7 @@ static int atmel_usba_start(struct usb_gadget *gadget,
1809 return 0; 1797 return 0;
1810} 1798}
1811 1799
1812static int atmel_usba_stop(struct usb_gadget *gadget, 1800static int atmel_usba_stop(struct usb_gadget *gadget)
1813 struct usb_gadget_driver *driver)
1814{ 1801{
1815 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget); 1802 struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget);
1816 unsigned long flags; 1803 unsigned long flags;
@@ -1830,8 +1817,6 @@ static int atmel_usba_stop(struct usb_gadget *gadget,
1830 clk_disable_unprepare(udc->hclk); 1817 clk_disable_unprepare(udc->hclk);
1831 clk_disable_unprepare(udc->pclk); 1818 clk_disable_unprepare(udc->pclk);
1832 1819
1833 DBG(DBG_GADGET, "unregistered driver `%s'\n", udc->driver->driver.name);
1834
1835 udc->driver = NULL; 1820 udc->driver = NULL;
1836 1821
1837 return 0; 1822 return 0;
diff --git a/drivers/usb/gadget/udc/bcm63xx_udc.c b/drivers/usb/gadget/udc/bcm63xx_udc.c
index 2235b8808700..c790918b337b 100644
--- a/drivers/usb/gadget/udc/bcm63xx_udc.c
+++ b/drivers/usb/gadget/udc/bcm63xx_udc.c
@@ -1836,8 +1836,7 @@ static int bcm63xx_udc_start(struct usb_gadget *gadget,
1836 * @gadget: USB slave device. 1836 * @gadget: USB slave device.
1837 * @driver: Driver for USB slave devices. 1837 * @driver: Driver for USB slave devices.
1838 */ 1838 */
1839static int bcm63xx_udc_stop(struct usb_gadget *gadget, 1839static int bcm63xx_udc_stop(struct usb_gadget *gadget)
1840 struct usb_gadget_driver *driver)
1841{ 1840{
1842 struct bcm63xx_udc *udc = gadget_to_udc(gadget); 1841 struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1843 unsigned long flags; 1842 unsigned long flags;
@@ -1963,7 +1962,7 @@ static irqreturn_t bcm63xx_udc_ctrl_isr(int irq, void *dev_id)
1963{ 1962{
1964 struct bcm63xx_udc *udc = dev_id; 1963 struct bcm63xx_udc *udc = dev_id;
1965 u32 stat; 1964 u32 stat;
1966 bool disconnected = false; 1965 bool disconnected = false, bus_reset = false;
1967 1966
1968 stat = usbd_readl(udc, USBD_EVENT_IRQ_STATUS_REG) & 1967 stat = usbd_readl(udc, USBD_EVENT_IRQ_STATUS_REG) &
1969 usbd_readl(udc, USBD_EVENT_IRQ_MASK_REG); 1968 usbd_readl(udc, USBD_EVENT_IRQ_MASK_REG);
@@ -1991,7 +1990,7 @@ static irqreturn_t bcm63xx_udc_ctrl_isr(int irq, void *dev_id)
1991 1990
1992 udc->ep0_req_reset = 1; 1991 udc->ep0_req_reset = 1;
1993 schedule_work(&udc->ep0_wq); 1992 schedule_work(&udc->ep0_wq);
1994 disconnected = true; 1993 bus_reset = true;
1995 } 1994 }
1996 if (stat & BIT(USBD_EVENT_IRQ_SETUP)) { 1995 if (stat & BIT(USBD_EVENT_IRQ_SETUP)) {
1997 if (bcm63xx_update_link_speed(udc)) { 1996 if (bcm63xx_update_link_speed(udc)) {
@@ -2014,6 +2013,8 @@ static irqreturn_t bcm63xx_udc_ctrl_isr(int irq, void *dev_id)
2014 2013
2015 if (disconnected && udc->driver) 2014 if (disconnected && udc->driver)
2016 udc->driver->disconnect(&udc->gadget); 2015 udc->driver->disconnect(&udc->gadget);
2016 else if (bus_reset && udc->driver)
2017 usb_gadget_udc_reset(&udc->gadget, udc->driver);
2017 2018
2018 return IRQ_HANDLED; 2019 return IRQ_HANDLED;
2019} 2020}
@@ -2324,10 +2325,8 @@ static int bcm63xx_udc_probe(struct platform_device *pdev)
2324 int rc = -ENOMEM, i, irq; 2325 int rc = -ENOMEM, i, irq;
2325 2326
2326 udc = devm_kzalloc(dev, sizeof(*udc), GFP_KERNEL); 2327 udc = devm_kzalloc(dev, sizeof(*udc), GFP_KERNEL);
2327 if (!udc) { 2328 if (!udc)
2328 dev_err(dev, "cannot allocate memory\n");
2329 return -ENOMEM; 2329 return -ENOMEM;
2330 }
2331 2330
2332 platform_set_drvdata(pdev, udc); 2331 platform_set_drvdata(pdev, udc);
2333 udc->dev = dev; 2332 udc->dev = dev;
diff --git a/drivers/usb/gadget/udc/bdc/Kconfig b/drivers/usb/gadget/udc/bdc/Kconfig
new file mode 100644
index 000000000000..0d7b8c9f72fd
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/Kconfig
@@ -0,0 +1,21 @@
1config USB_BDC_UDC
2 tristate "Broadcom USB3.0 device controller IP driver(BDC)"
3 depends on USB_GADGET && HAS_DMA
4
5 help
6 BDC is Broadcom's USB3.0 device controller IP. If your SOC has a BDC IP
7 then select this driver.
8
9 Say "y" here to link the driver statically, or "m" to build a dynamically
10 linked module called "bdc".
11
12if USB_BDC_UDC
13
14comment "Platform Support"
15config USB_BDC_PCI
16 tristate "BDC support for PCIe based platforms"
17 depends on PCI
18 default USB_BDC_UDC
19 help
20 Enable support for platforms which have BDC connected through PCIe, such as Lego3 FPGA platform.
21endif
diff --git a/drivers/usb/gadget/udc/bdc/Makefile b/drivers/usb/gadget/udc/bdc/Makefile
new file mode 100644
index 000000000000..5cf6a3bcdf0f
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/Makefile
@@ -0,0 +1,8 @@
1obj-$(CONFIG_USB_BDC_UDC) += bdc.o
2bdc-y := bdc_core.o bdc_cmd.o bdc_ep.o bdc_udc.o
3
4ifneq ($(CONFIG_USB_GADGET_VERBOSE),)
5 bdc-y += bdc_dbg.o
6endif
7
8obj-$(CONFIG_USB_BDC_PCI) += bdc_pci.o
diff --git a/drivers/usb/gadget/udc/bdc/bdc.h b/drivers/usb/gadget/udc/bdc/bdc.h
new file mode 100644
index 000000000000..dc18a20bf040
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc.h
@@ -0,0 +1,490 @@
1/*
2 * bdc.h - header for the BRCM BDC USB3.0 device controller
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14
15#ifndef __LINUX_BDC_H__
16#define __LINUX_BDC_H__
17
18#include <linux/kernel.h>
19#include <linux/usb.h>
20#include <linux/device.h>
21#include <linux/spinlock.h>
22#include <linux/list.h>
23#include <linux/dma-mapping.h>
24#include <linux/mm.h>
25#include <linux/debugfs.h>
26#include <linux/usb/ch9.h>
27#include <linux/usb/gadget.h>
28#include <asm/unaligned.h>
29
30#define BRCM_BDC_NAME "bdc_usb3"
31#define BRCM_BDC_DESC "BDC device controller driver"
32
33#define DMA_ADDR_INVALID (~(dma_addr_t)0)
34
35/* BDC command operation timeout in usec*/
36#define BDC_CMD_TIMEOUT 1000
37/* BDC controller operation timeout in usec*/
38#define BDC_COP_TIMEOUT 500
39
40/*
41 * Maximum size of ep0 response buffer for ch9 requests,
42 * the set_sel request uses 6 so far, the max.
43*/
44#define EP0_RESPONSE_BUFF 6
45/* Start with SS as default */
46#define EP0_MAX_PKT_SIZE 512
47
48/* 64 entries in a SRR */
49#define NUM_SR_ENTRIES 64
50
51/* Num of bds per table */
52#define NUM_BDS_PER_TABLE 32
53
54/* Num of tables in bd list for control,bulk and Int ep */
55#define NUM_TABLES 2
56
57/* Num of tables in bd list for Isoch ep */
58#define NUM_TABLES_ISOCH 6
59
60/* U1 Timeout default: 248usec */
61#define U1_TIMEOUT 0xf8
62
63/* Interrupt coalescence in usec */
64#define INT_CLS 500
65
66/* Register offsets */
67/* Configuration and Capability registers */
68#define BDC_BDCCFG0 0x00
69#define BDC_BDCCFG1 0x04
70#define BDC_BDCCAP0 0x08
71#define BDC_BDCCAP1 0x0c
72#define BDC_CMDPAR0 0x10
73#define BDC_CMDPAR1 0x14
74#define BDC_CMDPAR2 0x18
75#define BDC_CMDSC 0x1c
76#define BDC_USPC 0x20
77#define BDC_USPPMS 0x28
78#define BDC_USPPM2 0x2c
79#define BDC_SPBBAL 0x38
80#define BDC_SPBBAH 0x3c
81#define BDC_BDCSC 0x40
82#define BDC_XSFNTF 0x4c
83
84#define BDC_DVCSA 0x50
85#define BDC_DVCSB 0x54
86#define BDC_EPSTS0(n) (0x60 + (n * 0x10))
87#define BDC_EPSTS1(n) (0x64 + (n * 0x10))
88#define BDC_EPSTS2(n) (0x68 + (n * 0x10))
89#define BDC_EPSTS3(n) (0x6c + (n * 0x10))
90#define BDC_EPSTS4(n) (0x70 + (n * 0x10))
91#define BDC_EPSTS5(n) (0x74 + (n * 0x10))
92#define BDC_EPSTS6(n) (0x78 + (n * 0x10))
93#define BDC_EPSTS7(n) (0x7c + (n * 0x10))
94#define BDC_SRRBAL(n) (0x200 + (n * 0x10))
95#define BDC_SRRBAH(n) (0x204 + (n * 0x10))
96#define BDC_SRRINT(n) (0x208 + (n * 0x10))
97#define BDC_INTCTLS(n) (0x20c + (n * 0x10))
98
99/* Extended capability regs */
100#define BDC_FSCNOC 0xcd4
101#define BDC_FSCNIC 0xce4
102#define NUM_NCS(p) (p >> 28)
103
104/* Register bit fields and Masks */
105/* BDC Configuration 0 */
106#define BDC_PGS(p) (((p) & (0x7 << 8)) >> 8)
107#define BDC_SPB(p) (p & 0x7)
108
109/* BDC Capability1 */
110#define BDC_P64 (1 << 0)
111
112/* BDC Command register */
113#define BDC_CMD_FH 0xe
114#define BDC_CMD_DNC 0x6
115#define BDC_CMD_EPO 0x4
116#define BDC_CMD_BLA 0x3
117#define BDC_CMD_EPC 0x2
118#define BDC_CMD_DVC 0x1
119#define BDC_CMD_CWS (0x1 << 5)
120#define BDC_CMD_CST(p) (((p) & (0xf << 6))>>6)
121#define BDC_CMD_EPN(p) ((p & 0x1f) << 10)
122#define BDC_SUB_CMD_ADD (0x1 << 17)
123#define BDC_SUB_CMD_FWK (0x4 << 17)
124/* Reset sequence number */
125#define BDC_CMD_EPO_RST_SN (0x1 << 16)
126#define BDC_CMD_EP0_XSD (0x1 << 16)
127#define BDC_SUB_CMD_ADD_EP (0x1 << 17)
128#define BDC_SUB_CMD_DRP_EP (0x2 << 17)
129#define BDC_SUB_CMD_EP_STP (0x2 << 17)
130#define BDC_SUB_CMD_EP_STL (0x4 << 17)
131#define BDC_SUB_CMD_EP_RST (0x1 << 17)
132#define BDC_CMD_SRD (1 << 27)
133
134/* CMD completion status */
135#define BDC_CMDS_SUCC 0x1
136#define BDC_CMDS_PARA 0x3
137#define BDC_CMDS_STAT 0x4
138#define BDC_CMDS_FAIL 0x5
139#define BDC_CMDS_INTL 0x6
140#define BDC_CMDS_BUSY 0xf
141
142/* CMDSC Param 2 shifts */
143#define EPT_SHIFT 22
144#define MP_SHIFT 10
145#define MB_SHIFT 6
146#define EPM_SHIFT 4
147
148/* BDC USPSC */
149#define BDC_VBC (1 << 31)
150#define BDC_PRC (1 << 30)
151#define BDC_PCE (1 << 29)
152#define BDC_CFC (1 << 28)
153#define BDC_PCC (1 << 27)
154#define BDC_PSC (1 << 26)
155#define BDC_VBS (1 << 25)
156#define BDC_PRS (1 << 24)
157#define BDC_PCS (1 << 23)
158#define BDC_PSP(p) (((p) & (0x7 << 20))>>20)
159#define BDC_SCN (1 << 8)
160#define BDC_SDC (1 << 7)
161#define BDC_SWS (1 << 4)
162
163#define BDC_USPSC_RW (BDC_SCN|BDC_SDC|BDC_SWS|0xf)
164#define BDC_PSP(p) (((p) & (0x7 << 20))>>20)
165
166#define BDC_SPEED_FS 0x1
167#define BDC_SPEED_LS 0x2
168#define BDC_SPEED_HS 0x3
169#define BDC_SPEED_SS 0x4
170
171#define BDC_PST(p) (p & 0xf)
172#define BDC_PST_MASK 0xf
173
174/* USPPMS */
175#define BDC_U2E (0x1 << 31)
176#define BDC_U1E (0x1 << 30)
177#define BDC_U2A (0x1 << 29)
178#define BDC_PORT_W1S (0x1 << 17)
179#define BDC_U1T(p) ((p) & 0xff)
180#define BDC_U2T(p) (((p) & 0xff) << 8)
181#define BDC_U1T_MASK 0xff
182
183/* USBPM2 */
184/* Hardware LPM Enable */
185#define BDC_HLE (1 << 16)
186
187/* BDC Status and Control */
188#define BDC_COP_RST (1 << 29)
189#define BDC_COP_RUN (2 << 29)
190#define BDC_COP_STP (4 << 29)
191
192#define BDC_COP_MASK (BDC_COP_RST|BDC_COP_RUN|BDC_COP_STP)
193
194#define BDC_COS (1 << 28)
195#define BDC_CSTS(p) (((p) & (0x7 << 20)) >> 20)
196#define BDC_MASK_MCW (1 << 7)
197#define BDC_GIE (1 << 1)
198#define BDC_GIP (1 << 0)
199
200#define BDC_HLT 1
201#define BDC_NOR 2
202#define BDC_OIP 7
203
204/* Buffer descriptor and Status report bit fields and masks */
205#define BD_TYPE_BITMASK (0xf)
206#define BD_CHAIN 0xf
207
208#define BD_TFS_SHIFT 4
209#define BD_SOT (1 << 26)
210#define BD_EOT (1 << 27)
211#define BD_ISP (1 << 29)
212#define BD_IOC (1 << 30)
213#define BD_SBF (1 << 31)
214
215#define BD_INTR_TARGET(p) (((p) & 0x1f) << 27)
216
217#define BDC_SRR_RWS (1 << 4)
218#define BDC_SRR_RST (1 << 3)
219#define BDC_SRR_ISR (1 << 2)
220#define BDC_SRR_IE (1 << 1)
221#define BDC_SRR_IP (1 << 0)
222#define BDC_SRR_EPI(p) (((p) & (0xff << 24)) >> 24)
223#define BDC_SRR_DPI(p) (((p) & (0xff << 16)) >> 16)
224#define BDC_SRR_DPI_MASK 0x00ff0000
225
226#define MARK_CHAIN_BD (BD_CHAIN|BD_EOT|BD_SOT)
227
228/* Control transfer BD specific fields */
229#define BD_DIR_IN (1 << 25)
230
231#define BDC_PTC_MASK 0xf0000000
232
233/* status report defines */
234#define SR_XSF 0
235#define SR_USPC 4
236#define SR_BD_LEN(p) (p & 0xffffff)
237
238#define XSF_SUCC 0x1
239#define XSF_SHORT 0x3
240#define XSF_BABB 0x4
241#define XSF_SETUP_RECV 0x6
242#define XSF_DATA_START 0x7
243#define XSF_STATUS_START 0x8
244
245#define XSF_STS(p) (((p) >> 28) & 0xf)
246
247/* Transfer BD fields */
248#define BD_LEN(p) ((p) & 0x1ffff)
249#define BD_LTF (1 << 25)
250#define BD_TYPE_DS 0x1
251#define BD_TYPE_SS 0x2
252
253#define BDC_EP_ENABLED (1 << 0)
254#define BDC_EP_STALL (1 << 1)
255#define BDC_EP_STOP (1 << 2)
256
257/* One BD can transfer max 65536 bytes */
258#define BD_MAX_BUFF_SIZE (1 << 16)
259/* Maximum bytes in one XFR, Refer to BDC spec */
260#define MAX_XFR_LEN 16777215
261
262/* defines for Force Header command */
263#define DEV_NOTF_TYPE 6
264#define FWK_SUBTYPE 1
265#define TRA_PACKET 4
266
267#define to_bdc_ep(e) container_of(e, struct bdc_ep, usb_ep)
268#define to_bdc_req(r) container_of(r, struct bdc_req, usb_req)
269#define gadget_to_bdc(g) container_of(g, struct bdc, gadget)
270
271/* FUNCTION WAKE DEV NOTIFICATION interval, USB3 spec table 8.13 */
272#define BDC_TNOTIFY 2500 /*in ms*/
273/* Devstatus bitfields */
274#define REMOTE_WAKEUP_ISSUED (1 << 16)
275#define DEVICE_SUSPENDED (1 << 17)
276#define FUNC_WAKE_ISSUED (1 << 18)
277#define REMOTE_WAKE_ENABLE (1 << USB_DEVICE_REMOTE_WAKEUP)
278
279/* On disconnect, preserve these bits and clear rest */
280#define DEVSTATUS_CLEAR (1 << USB_DEVICE_SELF_POWERED)
281/* Hardware and software Data structures */
282
283/* Endpoint bd: buffer descriptor */
284struct bdc_bd {
285 __le32 offset[4];
286};
287
288/* Status report in Status report ring(srr) */
289struct bdc_sr {
290 __le32 offset[4];
291};
292
293/* bd_table: contigous bd's in a table */
294struct bd_table {
295 struct bdc_bd *start_bd;
296 /* dma address of start bd of table*/
297 dma_addr_t dma;
298};
299
300/*
301 * Each endpoint has a bdl(buffer descriptor list), bdl consists of 1 or more bd
302 * table's chained to each other through a chain bd, every table has equal
303 * number of bds. the software uses bdi(bd index) to refer to particular bd in
304 * the list.
305 */
306struct bd_list {
307 /* Array of bd table pointers*/
308 struct bd_table **bd_table_array;
309 /* How many tables chained to each other */
310 int num_tabs;
311 /* Max_bdi = num_tabs * num_bds_table - 1 */
312 int max_bdi;
313 /* current enq bdi from sw point of view */
314 int eqp_bdi;
315 /* current deq bdi from sw point of view */
316 int hwd_bdi;
317 /* numbers of bds per table */
318 int num_bds_table;
319};
320
321struct bdc_req;
322
323/* Representation of a transfer, one transfer can have multiple bd's */
324struct bd_transfer {
325 struct bdc_req *req;
326 /* start bd index */
327 int start_bdi;
328 /* this will be the next hw dqp when this transfer completes */
329 int next_hwd_bdi;
330 /* number of bds in this transfer */
331 int num_bds;
332};
333
334/*
335 * Representation of a gadget request, every gadget request is contained
336 * by 1 bd_transfer.
337 */
338struct bdc_req {
339 struct usb_request usb_req;
340 struct list_head queue;
341 struct bdc_ep *ep;
342 /* only one Transfer per request */
343 struct bd_transfer bd_xfr;
344 int epnum;
345};
346
347/* scratchpad buffer needed by bdc hardware */
348struct bdc_scratchpad {
349 dma_addr_t sp_dma;
350 void *buff;
351 u32 size;
352};
353
354/* endpoint representation */
355struct bdc_ep {
356 struct usb_ep usb_ep;
357 struct list_head queue;
358 struct bdc *bdc;
359 u8 ep_type;
360 u8 dir;
361 u8 ep_num;
362 const struct usb_ss_ep_comp_descriptor *comp_desc;
363 const struct usb_endpoint_descriptor *desc;
364 unsigned int flags;
365 char name[20];
366 /* endpoint bd list*/
367 struct bd_list bd_list;
368 /*
369 * HW generates extra event for multi bd tranfers, this flag helps in
370 * ignoring the extra event
371 */
372 bool ignore_next_sr;
373};
374
375/* bdc cmmand parameter structure */
376struct bdc_cmd_params {
377 u32 param2;
378 u32 param1;
379 u32 param0;
380};
381
382/* status report ring(srr), currently one srr is supported for entire system */
383struct srr {
384 struct bdc_sr *sr_bds;
385 u16 eqp_index;
386 u16 dqp_index;
387 dma_addr_t dma_addr;
388};
389
390/* EP0 states */
391enum bdc_ep0_state {
392 WAIT_FOR_SETUP = 0,
393 WAIT_FOR_DATA_START,
394 WAIT_FOR_DATA_XMIT,
395 WAIT_FOR_STATUS_START,
396 WAIT_FOR_STATUS_XMIT,
397 STATUS_PENDING
398};
399
400/* Link states */
401enum bdc_link_state {
402 BDC_LINK_STATE_U0 = 0x00,
403 BDC_LINK_STATE_U3 = 0x03,
404 BDC_LINK_STATE_RX_DET = 0x05,
405 BDC_LINK_STATE_RESUME = 0x0f
406};
407
408/* representation of bdc */
409struct bdc {
410 struct usb_gadget gadget;
411 struct usb_gadget_driver *gadget_driver;
412 struct device *dev;
413 /* device lock */
414 spinlock_t lock;
415
416 /* num of endpoints for a particular instantiation of IP */
417 unsigned int num_eps;
418 /*
419 * Array of ep's, it uses the same index covention as bdc hw i.e.
420 * 1 for ep0, 2 for 1out,3 for 1in ....
421 */
422 struct bdc_ep **bdc_ep_array;
423 void __iomem *regs;
424 struct bdc_scratchpad scratchpad;
425 u32 sp_buff_size;
426 /* current driver supports 1 status ring */
427 struct srr srr;
428 /* Last received setup packet */
429 struct usb_ctrlrequest setup_pkt;
430 struct bdc_req ep0_req;
431 struct bdc_req status_req;
432 enum bdc_ep0_state ep0_state;
433 bool delayed_status;
434 bool zlp_needed;
435 bool reinit;
436 bool pullup;
437 /* Bits 0-15 are standard and 16-31 for proprietary information */
438 u32 devstatus;
439 int irq;
440 void *mem;
441 u32 dev_addr;
442 /* DMA pools */
443 struct dma_pool *bd_table_pool;
444 u8 test_mode;
445 /* array of callbacks for various status report handlers */
446 void (*sr_handler[2])(struct bdc *, struct bdc_sr *);
447 /* ep0 callback handlers */
448 void (*sr_xsf_ep0[3])(struct bdc *, struct bdc_sr *);
449 /* ep0 response buffer for ch9 requests like GET_STATUS and SET_SEL */
450 unsigned char ep0_response_buff[EP0_RESPONSE_BUFF];
451 /*
452 * Timer to check if host resumed transfer after bdc sent Func wake
453 * notification packet after a remote wakeup. if not, then resend the
454 * Func Wake packet every 2.5 secs. Refer to USB3 spec section 8.5.6.4
455 */
456 struct delayed_work func_wake_notify;
457};
458
459static inline u32 bdc_readl(void __iomem *base, u32 offset)
460{
461 return readl(base + offset);
462}
463
464static inline void bdc_writel(void __iomem *base, u32 offset, u32 value)
465{
466 writel(value, base + offset);
467}
468
469/* Buffer descriptor list operations */
470void bdc_notify_xfr(struct bdc *, u32);
471void bdc_softconn(struct bdc *);
472void bdc_softdisconn(struct bdc *);
473int bdc_run(struct bdc *);
474int bdc_stop(struct bdc *);
475int bdc_reset(struct bdc *);
476int bdc_udc_init(struct bdc *);
477void bdc_udc_exit(struct bdc *);
478int bdc_reinit(struct bdc *);
479
480/* Status report handlers */
481/* Upstream port status change sr */
482void bdc_sr_uspc(struct bdc *, struct bdc_sr *);
483/* transfer sr */
484void bdc_sr_xsf(struct bdc *, struct bdc_sr *);
485/* EP0 XSF handlers */
486void bdc_xsf_ep0_setup_recv(struct bdc *, struct bdc_sr *);
487void bdc_xsf_ep0_data_start(struct bdc *, struct bdc_sr *);
488void bdc_xsf_ep0_status_start(struct bdc *, struct bdc_sr *);
489
490#endif /* __LINUX_BDC_H__ */
diff --git a/drivers/usb/gadget/udc/bdc/bdc_cmd.c b/drivers/usb/gadget/udc/bdc/bdc_cmd.c
new file mode 100644
index 000000000000..6a4155c4bd86
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc_cmd.c
@@ -0,0 +1,376 @@
1/*
2 * bdc_cmd.c - BRCM BDC USB3.0 device controller
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14#include <linux/scatterlist.h>
15#include <linux/slab.h>
16
17#include "bdc.h"
18#include "bdc_cmd.h"
19#include "bdc_dbg.h"
20
21/* Issues a cmd to cmd processor and waits for cmd completion */
22static int bdc_issue_cmd(struct bdc *bdc, u32 cmd_sc, u32 param0,
23 u32 param1, u32 param2)
24{
25 u32 timeout = BDC_CMD_TIMEOUT;
26 u32 cmd_status;
27 u32 temp;
28
29 bdc_writel(bdc->regs, BDC_CMDPAR0, param0);
30 bdc_writel(bdc->regs, BDC_CMDPAR1, param1);
31 bdc_writel(bdc->regs, BDC_CMDPAR2, param2);
32
33 /* Issue the cmd */
34 /* Make sure the cmd params are written before asking HW to exec cmd */
35 wmb();
36 bdc_writel(bdc->regs, BDC_CMDSC, cmd_sc | BDC_CMD_CWS | BDC_CMD_SRD);
37 do {
38 temp = bdc_readl(bdc->regs, BDC_CMDSC);
39 dev_dbg_ratelimited(bdc->dev, "cmdsc=%x", temp);
40 cmd_status = BDC_CMD_CST(temp);
41 if (cmd_status != BDC_CMDS_BUSY) {
42 dev_dbg(bdc->dev,
43 "command completed cmd_sts:%x\n", cmd_status);
44 return cmd_status;
45 }
46 udelay(1);
47 } while (timeout--);
48
49 dev_err(bdc->dev,
50 "command operation timedout cmd_status=%d\n", cmd_status);
51
52 return cmd_status;
53}
54
55/* Submits cmd and analyze the return value of bdc_issue_cmd */
56static int bdc_submit_cmd(struct bdc *bdc, u32 cmd_sc,
57 u32 param0, u32 param1, u32 param2)
58{
59 u32 temp, cmd_status;
60 int reset_bdc = 0;
61 int ret;
62
63 temp = bdc_readl(bdc->regs, BDC_CMDSC);
64 dev_dbg(bdc->dev,
65 "%s:CMDSC:%08x cmdsc:%08x param0=%08x param1=%08x param2=%08x\n",
66 __func__, temp, cmd_sc, param0, param1, param2);
67
68 cmd_status = BDC_CMD_CST(temp);
69 if (cmd_status == BDC_CMDS_BUSY) {
70 dev_err(bdc->dev, "command processor busy: %x\n", cmd_status);
71 return -EBUSY;
72 }
73 ret = bdc_issue_cmd(bdc, cmd_sc, param0, param1, param2);
74 switch (ret) {
75 case BDC_CMDS_SUCC:
76 dev_dbg(bdc->dev, "command completed successfully\n");
77 ret = 0;
78 break;
79
80 case BDC_CMDS_PARA:
81 dev_err(bdc->dev, "command parameter error\n");
82 ret = -EINVAL;
83 break;
84
85 case BDC_CMDS_STAT:
86 dev_err(bdc->dev, "Invalid device/ep state\n");
87 ret = -EINVAL;
88 break;
89
90 case BDC_CMDS_FAIL:
91 dev_err(bdc->dev, "Command failed?\n");
92 ret = -EAGAIN;
93 break;
94
95 case BDC_CMDS_INTL:
96 dev_err(bdc->dev, "BDC Internal error\n");
97 reset_bdc = 1;
98 ret = -ECONNRESET;
99 break;
100
101 case BDC_CMDS_BUSY:
102 dev_err(bdc->dev,
103 "command timedout waited for %dusec\n",
104 BDC_CMD_TIMEOUT);
105 reset_bdc = 1;
106 ret = -ECONNRESET;
107 break;
108 default:
109 dev_dbg(bdc->dev, "Unknown command completion code:%x\n", ret);
110 }
111
112 return ret;
113}
114
115/* Deconfigure the endpoint from HW */
116int bdc_dconfig_ep(struct bdc *bdc, struct bdc_ep *ep)
117{
118 u32 cmd_sc;
119
120 cmd_sc = BDC_SUB_CMD_DRP_EP|BDC_CMD_EPN(ep->ep_num)|BDC_CMD_EPC;
121 dev_dbg(bdc->dev, "%s ep->ep_num =%d cmd_sc=%x\n", __func__,
122 ep->ep_num, cmd_sc);
123
124 return bdc_submit_cmd(bdc, cmd_sc, 0, 0, 0);
125}
126
127/* Reinitalize the bdlist after config ep command */
128static void ep_bd_list_reinit(struct bdc_ep *ep)
129{
130 struct bdc *bdc = ep->bdc;
131 struct bdc_bd *bd;
132
133 ep->bd_list.eqp_bdi = 0;
134 ep->bd_list.hwd_bdi = 0;
135 bd = ep->bd_list.bd_table_array[0]->start_bd;
136 dev_dbg(bdc->dev, "%s ep:%p bd:%p\n", __func__, ep, bd);
137 memset(bd, 0, sizeof(struct bdc_bd));
138 bd->offset[3] |= cpu_to_le32(BD_SBF);
139}
140
141/* Configure an endpoint */
142int bdc_config_ep(struct bdc *bdc, struct bdc_ep *ep)
143{
144 const struct usb_ss_ep_comp_descriptor *comp_desc;
145 const struct usb_endpoint_descriptor *desc;
146 u32 param0, param1, param2, cmd_sc;
147 u32 mps, mbs, mul, si;
148 int ret;
149
150 desc = ep->desc;
151 comp_desc = ep->comp_desc;
152 cmd_sc = mul = mbs = param2 = 0;
153 param0 = lower_32_bits(ep->bd_list.bd_table_array[0]->dma);
154 param1 = upper_32_bits(ep->bd_list.bd_table_array[0]->dma);
155 cpu_to_le32s(&param0);
156 cpu_to_le32s(&param1);
157
158 dev_dbg(bdc->dev, "%s: param0=%08x param1=%08x",
159 __func__, param0, param1);
160 si = desc->bInterval;
161 si = clamp_val(si, 1, 16) - 1;
162
163 mps = usb_endpoint_maxp(desc);
164 mps &= 0x7ff;
165 param2 |= mps << MP_SHIFT;
166 param2 |= usb_endpoint_type(desc) << EPT_SHIFT;
167
168 switch (bdc->gadget.speed) {
169 case USB_SPEED_SUPER:
170 if (usb_endpoint_xfer_int(desc) ||
171 usb_endpoint_xfer_isoc(desc)) {
172 param2 |= si;
173 if (usb_endpoint_xfer_isoc(desc) && comp_desc)
174 mul = comp_desc->bmAttributes;
175
176 }
177 param2 |= mul << EPM_SHIFT;
178 if (comp_desc)
179 mbs = comp_desc->bMaxBurst;
180 param2 |= mbs << MB_SHIFT;
181 break;
182
183 case USB_SPEED_HIGH:
184 if (usb_endpoint_xfer_isoc(desc) ||
185 usb_endpoint_xfer_int(desc)) {
186 param2 |= si;
187
188 mbs = (usb_endpoint_maxp(desc) & 0x1800) >> 11;
189 param2 |= mbs << MB_SHIFT;
190 }
191 break;
192
193 case USB_SPEED_FULL:
194 case USB_SPEED_LOW:
195 /* the hardware accepts SI in 125usec range */
196 if (usb_endpoint_xfer_isoc(desc))
197 si += 3;
198
199 /*
200 * FS Int endpoints can have si of 1-255ms but the controller
201 * accepts 2^bInterval*125usec, so convert ms to nearest power
202 * of 2
203 */
204 if (usb_endpoint_xfer_int(desc))
205 si = fls(desc->bInterval * 8) - 1;
206
207 param2 |= si;
208 break;
209 default:
210 dev_err(bdc->dev, "UNKNOWN speed ERR\n");
211 return -EINVAL;
212 }
213
214 cmd_sc |= BDC_CMD_EPC|BDC_CMD_EPN(ep->ep_num)|BDC_SUB_CMD_ADD_EP;
215
216 dev_dbg(bdc->dev, "cmd_sc=%x param2=%08x\n", cmd_sc, param2);
217 ret = bdc_submit_cmd(bdc, cmd_sc, param0, param1, param2);
218 if (ret) {
219 dev_err(bdc->dev, "command failed :%x\n", ret);
220 return ret;
221 }
222 ep_bd_list_reinit(ep);
223
224 return ret;
225}
226
227/*
228 * Change the HW deq pointer, if this command is successful, HW will start
229 * fetching the next bd from address dma_addr.
230 */
231int bdc_ep_bla(struct bdc *bdc, struct bdc_ep *ep, dma_addr_t dma_addr)
232{
233 u32 param0, param1;
234 u32 cmd_sc = 0;
235
236 dev_dbg(bdc->dev, "%s: add=%08llx\n", __func__,
237 (unsigned long long)(dma_addr));
238 param0 = lower_32_bits(dma_addr);
239 param1 = upper_32_bits(dma_addr);
240 cpu_to_le32s(&param0);
241 cpu_to_le32s(&param1);
242
243 cmd_sc |= BDC_CMD_EPN(ep->ep_num)|BDC_CMD_BLA;
244 dev_dbg(bdc->dev, "cmd_sc=%x\n", cmd_sc);
245
246 return bdc_submit_cmd(bdc, cmd_sc, param0, param1, 0);
247}
248
249/* Set the address sent bu Host in SET_ADD request */
250int bdc_address_device(struct bdc *bdc, u32 add)
251{
252 u32 cmd_sc = 0;
253 u32 param2;
254
255 dev_dbg(bdc->dev, "%s: add=%d\n", __func__, add);
256 cmd_sc |= BDC_SUB_CMD_ADD|BDC_CMD_DVC;
257 param2 = add & 0x7f;
258
259 return bdc_submit_cmd(bdc, cmd_sc, 0, 0, param2);
260}
261
262/* Send a Function Wake notification packet using FH command */
263int bdc_function_wake_fh(struct bdc *bdc, u8 intf)
264{
265 u32 param0, param1;
266 u32 cmd_sc = 0;
267
268 param0 = param1 = 0;
269 dev_dbg(bdc->dev, "%s intf=%d\n", __func__, intf);
270 cmd_sc |= BDC_CMD_FH;
271 param0 |= TRA_PACKET;
272 param0 |= (bdc->dev_addr << 25);
273 param1 |= DEV_NOTF_TYPE;
274 param1 |= (FWK_SUBTYPE<<4);
275 dev_dbg(bdc->dev, "param0=%08x param1=%08x\n", param0, param1);
276
277 return bdc_submit_cmd(bdc, cmd_sc, param0, param1, 0);
278}
279
280/* Send a Function Wake notification packet using DNC command */
281int bdc_function_wake(struct bdc *bdc, u8 intf)
282{
283 u32 cmd_sc = 0;
284 u32 param2 = 0;
285
286 dev_dbg(bdc->dev, "%s intf=%d", __func__, intf);
287 param2 |= intf;
288 cmd_sc |= BDC_SUB_CMD_FWK|BDC_CMD_DNC;
289
290 return bdc_submit_cmd(bdc, cmd_sc, 0, 0, param2);
291}
292
293/* Stall the endpoint */
294int bdc_ep_set_stall(struct bdc *bdc, int epnum)
295{
296 u32 cmd_sc = 0;
297
298 dev_dbg(bdc->dev, "%s epnum=%d\n", __func__, epnum);
299 /* issue a stall endpoint command */
300 cmd_sc |= BDC_SUB_CMD_EP_STL | BDC_CMD_EPN(epnum) | BDC_CMD_EPO;
301
302 return bdc_submit_cmd(bdc, cmd_sc, 0, 0, 0);
303}
304
305/* resets the endpoint, called when host sends CLEAR_FEATURE(HALT) */
306int bdc_ep_clear_stall(struct bdc *bdc, int epnum)
307{
308 struct bdc_ep *ep;
309 u32 cmd_sc = 0;
310 int ret;
311
312 dev_dbg(bdc->dev, "%s: epnum=%d\n", __func__, epnum);
313 ep = bdc->bdc_ep_array[epnum];
314 /*
315 * If we are not in stalled then stall Endpoint and issue clear stall,
316 * his will reset the seq number for non EP0.
317 */
318 if (epnum != 1) {
319 /* if the endpoint it not stallled */
320 if (!(ep->flags & BDC_EP_STALL)) {
321 ret = bdc_ep_set_stall(bdc, epnum);
322 if (ret)
323 return ret;
324 }
325 }
326 /* Preserve the seq number for ep0 only */
327 if (epnum != 1)
328 cmd_sc |= BDC_CMD_EPO_RST_SN;
329
330 /* issue a reset endpoint command */
331 cmd_sc |= BDC_SUB_CMD_EP_RST | BDC_CMD_EPN(epnum) | BDC_CMD_EPO;
332
333 ret = bdc_submit_cmd(bdc, cmd_sc, 0, 0, 0);
334 if (ret) {
335 dev_err(bdc->dev, "command failed:%x\n", ret);
336 return ret;
337 }
338 bdc_notify_xfr(bdc, epnum);
339
340 return ret;
341}
342
343/* Stop the endpoint, called when software wants to dequeue some request */
344int bdc_stop_ep(struct bdc *bdc, int epnum)
345{
346 struct bdc_ep *ep;
347 u32 cmd_sc = 0;
348 int ret;
349
350 ep = bdc->bdc_ep_array[epnum];
351 dev_dbg(bdc->dev, "%s: ep:%s ep->flags:%08x\n", __func__,
352 ep->name, ep->flags);
353 /* Endpoint has to be in running state to execute stop ep command */
354 if (!(ep->flags & BDC_EP_ENABLED)) {
355 dev_err(bdc->dev, "stop endpoint called for disabled ep\n");
356 return -EINVAL;
357 }
358 if ((ep->flags & BDC_EP_STALL) || (ep->flags & BDC_EP_STOP))
359 return 0;
360
361 /* issue a stop endpoint command */
362 cmd_sc |= BDC_CMD_EP0_XSD | BDC_SUB_CMD_EP_STP
363 | BDC_CMD_EPN(epnum) | BDC_CMD_EPO;
364
365 ret = bdc_submit_cmd(bdc, cmd_sc, 0, 0, 0);
366 if (ret) {
367 dev_err(bdc->dev,
368 "stop endpoint command didn't complete:%d ep:%s\n",
369 ret, ep->name);
370 return ret;
371 }
372 ep->flags |= BDC_EP_STOP;
373 bdc_dump_epsts(bdc);
374
375 return ret;
376}
diff --git a/drivers/usb/gadget/udc/bdc/bdc_cmd.h b/drivers/usb/gadget/udc/bdc/bdc_cmd.h
new file mode 100644
index 000000000000..61d0e3bf9853
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc_cmd.h
@@ -0,0 +1,29 @@
1/*
2 * bdc_cmd.h - header for the BDC debug functions
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14#ifndef __LINUX_BDC_CMD_H__
15#define __LINUX_BDC_CMD_H__
16
17/* Command operations */
18int bdc_address_device(struct bdc *, u32);
19int bdc_config_ep(struct bdc *, struct bdc_ep *);
20int bdc_dconfig_ep(struct bdc *, struct bdc_ep *);
21int bdc_stop_ep(struct bdc *, int);
22int bdc_ep_set_stall(struct bdc *, int);
23int bdc_ep_clear_stall(struct bdc *, int);
24int bdc_ep_set_halt(struct bdc_ep *, u32 , int);
25int bdc_ep_bla(struct bdc *, struct bdc_ep *, dma_addr_t);
26int bdc_function_wake(struct bdc*, u8);
27int bdc_function_wake_fh(struct bdc*, u8);
28
29#endif /* __LINUX_BDC_CMD_H__ */
diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c
new file mode 100644
index 000000000000..c6dfef8c7bbc
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc_core.c
@@ -0,0 +1,533 @@
1/*
2 * bdc_core.c - BRCM BDC USB3.0 device controller core operations
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14#include <linux/module.h>
15#include <linux/kernel.h>
16#include <linux/slab.h>
17#include <linux/spinlock.h>
18#include <linux/platform_device.h>
19#include <linux/interrupt.h>
20#include <linux/ioport.h>
21#include <linux/io.h>
22#include <linux/list.h>
23#include <linux/delay.h>
24#include <linux/dma-mapping.h>
25#include <linux/dmapool.h>
26#include <linux/of.h>
27#include <linux/moduleparam.h>
28#include <linux/usb/ch9.h>
29#include <linux/usb/gadget.h>
30
31#include "bdc.h"
32#include "bdc_dbg.h"
33
34/* Poll till controller status is not OIP */
35static int poll_oip(struct bdc *bdc, int usec)
36{
37 u32 status;
38 /* Poll till STS!= OIP */
39 while (usec) {
40 status = bdc_readl(bdc->regs, BDC_BDCSC);
41 if (BDC_CSTS(status) != BDC_OIP) {
42 dev_dbg(bdc->dev,
43 "poll_oip complete status=%d",
44 BDC_CSTS(status));
45 return 0;
46 }
47 udelay(10);
48 usec -= 10;
49 }
50 dev_err(bdc->dev, "Err: operation timedout BDCSC: 0x%08x\n", status);
51
52 return -ETIMEDOUT;
53}
54
55/* Stop the BDC controller */
56int bdc_stop(struct bdc *bdc)
57{
58 int ret;
59 u32 temp;
60
61 dev_dbg(bdc->dev, "%s ()\n\n", __func__);
62 temp = bdc_readl(bdc->regs, BDC_BDCSC);
63 /* Check if BDC is already halted */
64 if (BDC_CSTS(temp) == BDC_HLT) {
65 dev_vdbg(bdc->dev, "BDC already halted\n");
66 return 0;
67 }
68 temp &= ~BDC_COP_MASK;
69 temp |= BDC_COS|BDC_COP_STP;
70 bdc_writel(bdc->regs, BDC_BDCSC, temp);
71
72 ret = poll_oip(bdc, BDC_COP_TIMEOUT);
73 if (ret)
74 dev_err(bdc->dev, "bdc stop operation failed");
75
76 return ret;
77}
78
79/* Issue a reset to BDC controller */
80int bdc_reset(struct bdc *bdc)
81{
82 u32 temp;
83 int ret;
84
85 dev_dbg(bdc->dev, "%s ()\n", __func__);
86 /* First halt the controller */
87 ret = bdc_stop(bdc);
88 if (ret)
89 return ret;
90
91 temp = bdc_readl(bdc->regs, BDC_BDCSC);
92 temp &= ~BDC_COP_MASK;
93 temp |= BDC_COS|BDC_COP_RST;
94 bdc_writel(bdc->regs, BDC_BDCSC, temp);
95 ret = poll_oip(bdc, BDC_COP_TIMEOUT);
96 if (ret)
97 dev_err(bdc->dev, "bdc reset operation failed");
98
99 return ret;
100}
101
102/* Run the BDC controller */
103int bdc_run(struct bdc *bdc)
104{
105 u32 temp;
106 int ret;
107
108 dev_dbg(bdc->dev, "%s ()\n", __func__);
109 temp = bdc_readl(bdc->regs, BDC_BDCSC);
110 /* if BDC is already in running state then do not do anything */
111 if (BDC_CSTS(temp) == BDC_NOR) {
112 dev_warn(bdc->dev, "bdc is already in running state\n");
113 return 0;
114 }
115 temp &= ~BDC_COP_MASK;
116 temp |= BDC_COP_RUN;
117 temp |= BDC_COS;
118 bdc_writel(bdc->regs, BDC_BDCSC, temp);
119 ret = poll_oip(bdc, BDC_COP_TIMEOUT);
120 if (ret) {
121 dev_err(bdc->dev, "bdc run operation failed:%d", ret);
122 return ret;
123 }
124 temp = bdc_readl(bdc->regs, BDC_BDCSC);
125 if (BDC_CSTS(temp) != BDC_NOR) {
126 dev_err(bdc->dev, "bdc not in normal mode after RUN op :%d\n",
127 BDC_CSTS(temp));
128 return -ESHUTDOWN;
129 }
130
131 return 0;
132}
133
134/*
135 * Present the termination to the host, typically called from upstream port
136 * event with Vbus present =1
137 */
138void bdc_softconn(struct bdc *bdc)
139{
140 u32 uspc;
141
142 uspc = bdc_readl(bdc->regs, BDC_USPC);
143 uspc &= ~BDC_PST_MASK;
144 uspc |= BDC_LINK_STATE_RX_DET;
145 uspc |= BDC_SWS;
146 dev_dbg(bdc->dev, "%s () uspc=%08x\n", __func__, uspc);
147 bdc_writel(bdc->regs, BDC_USPC, uspc);
148}
149
150/* Remove the termination */
151void bdc_softdisconn(struct bdc *bdc)
152{
153 u32 uspc;
154
155 uspc = bdc_readl(bdc->regs, BDC_USPC);
156 uspc |= BDC_SDC;
157 uspc &= ~BDC_SCN;
158 dev_dbg(bdc->dev, "%s () uspc=%x\n", __func__, uspc);
159 bdc_writel(bdc->regs, BDC_USPC, uspc);
160}
161
162/* Set up the scratchpad buffer array and scratchpad buffers, if needed. */
163static int scratchpad_setup(struct bdc *bdc)
164{
165 int sp_buff_size;
166 u32 low32;
167 u32 upp32;
168
169 sp_buff_size = BDC_SPB(bdc_readl(bdc->regs, BDC_BDCCFG0));
170 dev_dbg(bdc->dev, "%s() sp_buff_size=%d\n", __func__, sp_buff_size);
171 if (!sp_buff_size) {
172 dev_dbg(bdc->dev, "Scratchpad buffer not needed\n");
173 return 0;
174 }
175 /* Refer to BDC spec, Table 4 for description of SPB */
176 sp_buff_size = 1 << (sp_buff_size + 5);
177 dev_dbg(bdc->dev, "Allocating %d bytes for scratchpad\n", sp_buff_size);
178 bdc->scratchpad.buff = dma_zalloc_coherent(bdc->dev, sp_buff_size,
179 &bdc->scratchpad.sp_dma, GFP_KERNEL);
180
181 if (!bdc->scratchpad.buff)
182 goto fail;
183
184 bdc->sp_buff_size = sp_buff_size;
185 bdc->scratchpad.size = sp_buff_size;
186 low32 = lower_32_bits(bdc->scratchpad.sp_dma);
187 upp32 = upper_32_bits(bdc->scratchpad.sp_dma);
188 cpu_to_le32s(&low32);
189 cpu_to_le32s(&upp32);
190 bdc_writel(bdc->regs, BDC_SPBBAL, low32);
191 bdc_writel(bdc->regs, BDC_SPBBAH, upp32);
192 return 0;
193
194fail:
195 bdc->scratchpad.buff = NULL;
196
197 return -ENOMEM;
198}
199
200/* Allocate the status report ring */
201static int setup_srr(struct bdc *bdc, int interrupter)
202{
203 dev_dbg(bdc->dev, "%s() NUM_SR_ENTRIES:%d\n", __func__, NUM_SR_ENTRIES);
204 /* Reset the SRR */
205 bdc_writel(bdc->regs, BDC_SRRINT(0), BDC_SRR_RWS | BDC_SRR_RST);
206 bdc->srr.dqp_index = 0;
207 /* allocate the status report descriptors */
208 bdc->srr.sr_bds = dma_zalloc_coherent(
209 bdc->dev,
210 NUM_SR_ENTRIES * sizeof(struct bdc_bd),
211 &bdc->srr.dma_addr,
212 GFP_KERNEL);
213 if (!bdc->srr.sr_bds)
214 return -ENOMEM;
215
216 return 0;
217}
218
219/* Initialize the HW regs and internal data structures */
220static void bdc_mem_init(struct bdc *bdc, bool reinit)
221{
222 u8 size = 0;
223 u32 usb2_pm;
224 u32 low32;
225 u32 upp32;
226 u32 temp;
227
228 dev_dbg(bdc->dev, "%s ()\n", __func__);
229 bdc->ep0_state = WAIT_FOR_SETUP;
230 bdc->dev_addr = 0;
231 bdc->srr.eqp_index = 0;
232 bdc->srr.dqp_index = 0;
233 bdc->zlp_needed = false;
234 bdc->delayed_status = false;
235
236 bdc_writel(bdc->regs, BDC_SPBBAL, bdc->scratchpad.sp_dma);
237 /* Init the SRR */
238 temp = BDC_SRR_RWS | BDC_SRR_RST;
239 /* Reset the SRR */
240 bdc_writel(bdc->regs, BDC_SRRINT(0), temp);
241 dev_dbg(bdc->dev, "bdc->srr.sr_bds =%p\n", bdc->srr.sr_bds);
242 temp = lower_32_bits(bdc->srr.dma_addr);
243 size = fls(NUM_SR_ENTRIES) - 2;
244 temp |= size;
245 dev_dbg(bdc->dev, "SRRBAL[0]=%08x NUM_SR_ENTRIES:%d size:%d\n",
246 temp, NUM_SR_ENTRIES, size);
247
248 low32 = lower_32_bits(temp);
249 upp32 = upper_32_bits(bdc->srr.dma_addr);
250 cpu_to_le32s(&low32);
251 cpu_to_le32s(&upp32);
252
253 /* Write the dma addresses into regs*/
254 bdc_writel(bdc->regs, BDC_SRRBAL(0), low32);
255 bdc_writel(bdc->regs, BDC_SRRBAH(0), upp32);
256
257 temp = bdc_readl(bdc->regs, BDC_SRRINT(0));
258 temp |= BDC_SRR_IE;
259 temp &= ~(BDC_SRR_RST | BDC_SRR_RWS);
260 bdc_writel(bdc->regs, BDC_SRRINT(0), temp);
261
262 /* Set the Interrupt Coalescence ~500 usec */
263 temp = bdc_readl(bdc->regs, BDC_INTCTLS(0));
264 temp &= ~0xffff;
265 temp |= INT_CLS;
266 bdc_writel(bdc->regs, BDC_INTCTLS(0), temp);
267
268 usb2_pm = bdc_readl(bdc->regs, BDC_USPPM2);
269 dev_dbg(bdc->dev, "usb2_pm=%08x", usb2_pm);
270 /* Enable hardware LPM Enable */
271 usb2_pm |= BDC_HLE;
272 bdc_writel(bdc->regs, BDC_USPPM2, usb2_pm);
273
274 /* readback for debug */
275 usb2_pm = bdc_readl(bdc->regs, BDC_USPPM2);
276 dev_dbg(bdc->dev, "usb2_pm=%08x\n", usb2_pm);
277
278 /* Disable any unwanted SR's on SRR */
279 temp = bdc_readl(bdc->regs, BDC_BDCSC);
280 /* We don't want Microframe counter wrap SR */
281 temp |= BDC_MASK_MCW;
282 bdc_writel(bdc->regs, BDC_BDCSC, temp);
283
284 /*
285 * In some error cases, driver has to reset the entire BDC controller
286 * in that case reinit is passed as 1
287 */
288 if (reinit) {
289 /* Enable interrupts */
290 temp = bdc_readl(bdc->regs, BDC_BDCSC);
291 temp |= BDC_GIE;
292 bdc_writel(bdc->regs, BDC_BDCSC, temp);
293 /* Init scratchpad to 0 */
294 memset(bdc->scratchpad.buff, 0, bdc->sp_buff_size);
295 /* Initialize SRR to 0 */
296 memset(bdc->srr.sr_bds, 0,
297 NUM_SR_ENTRIES * sizeof(struct bdc_bd));
298 } else {
299 /* One time initiaization only */
300 /* Enable status report function pointers */
301 bdc->sr_handler[0] = bdc_sr_xsf;
302 bdc->sr_handler[1] = bdc_sr_uspc;
303
304 /* EP0 status report function pointers */
305 bdc->sr_xsf_ep0[0] = bdc_xsf_ep0_setup_recv;
306 bdc->sr_xsf_ep0[1] = bdc_xsf_ep0_data_start;
307 bdc->sr_xsf_ep0[2] = bdc_xsf_ep0_status_start;
308 }
309}
310
311/* Free the dynamic memory */
312static void bdc_mem_free(struct bdc *bdc)
313{
314 dev_dbg(bdc->dev, "%s\n", __func__);
315 /* Free SRR */
316 if (bdc->srr.sr_bds)
317 dma_free_coherent(bdc->dev,
318 NUM_SR_ENTRIES * sizeof(struct bdc_bd),
319 bdc->srr.sr_bds, bdc->srr.dma_addr);
320
321 /* Free scratchpad */
322 if (bdc->scratchpad.buff)
323 dma_free_coherent(bdc->dev, bdc->sp_buff_size,
324 bdc->scratchpad.buff, bdc->scratchpad.sp_dma);
325
326 /* Destroy the dma pools */
327 if (bdc->bd_table_pool)
328 dma_pool_destroy(bdc->bd_table_pool);
329
330 /* Free the bdc_ep array */
331 kfree(bdc->bdc_ep_array);
332
333 bdc->srr.sr_bds = NULL;
334 bdc->scratchpad.buff = NULL;
335 bdc->bd_table_pool = NULL;
336 bdc->bdc_ep_array = NULL;
337}
338
339/*
340 * bdc reinit gives a controller reset and reinitialize the registers,
341 * called from disconnect/bus reset scenario's, to ensure proper HW cleanup
342 */
343int bdc_reinit(struct bdc *bdc)
344{
345 int ret;
346
347 dev_dbg(bdc->dev, "%s\n", __func__);
348 ret = bdc_stop(bdc);
349 if (ret)
350 goto out;
351
352 ret = bdc_reset(bdc);
353 if (ret)
354 goto out;
355
356 /* the reinit flag is 1 */
357 bdc_mem_init(bdc, true);
358 ret = bdc_run(bdc);
359out:
360 bdc->reinit = false;
361
362 return ret;
363}
364
365/* Allocate all the dyanmic memory */
366static int bdc_mem_alloc(struct bdc *bdc)
367{
368 u32 page_size;
369 unsigned int num_ieps, num_oeps;
370
371 dev_dbg(bdc->dev,
372 "%s() NUM_BDS_PER_TABLE:%d\n", __func__,
373 NUM_BDS_PER_TABLE);
374 page_size = BDC_PGS(bdc_readl(bdc->regs, BDC_BDCCFG0));
375 /* page size is 2^pgs KB */
376 page_size = 1 << page_size;
377 /* KB */
378 page_size <<= 10;
379 dev_dbg(bdc->dev, "page_size=%d\n", page_size);
380
381 /* Create a pool of bd tables */
382 bdc->bd_table_pool =
383 dma_pool_create("BDC BD tables", bdc->dev, NUM_BDS_PER_TABLE * 16,
384 16, page_size);
385
386 if (!bdc->bd_table_pool)
387 goto fail;
388
389 if (scratchpad_setup(bdc))
390 goto fail;
391
392 /* read from regs */
393 num_ieps = NUM_NCS(bdc_readl(bdc->regs, BDC_FSCNIC));
394 num_oeps = NUM_NCS(bdc_readl(bdc->regs, BDC_FSCNOC));
395 /* +2: 1 for ep0 and the other is rsvd i.e. bdc_ep[0] is rsvd */
396 bdc->num_eps = num_ieps + num_oeps + 2;
397 dev_dbg(bdc->dev,
398 "ieps:%d eops:%d num_eps:%d\n",
399 num_ieps, num_oeps, bdc->num_eps);
400 /* allocate array of ep pointers */
401 bdc->bdc_ep_array = kcalloc(bdc->num_eps, sizeof(struct bdc_ep *),
402 GFP_KERNEL);
403 if (!bdc->bdc_ep_array)
404 goto fail;
405
406 dev_dbg(bdc->dev, "Allocating sr report0\n");
407 if (setup_srr(bdc, 0))
408 goto fail;
409
410 return 0;
411fail:
412 dev_warn(bdc->dev, "Couldn't initialize memory\n");
413 bdc_mem_free(bdc);
414
415 return -ENOMEM;
416}
417
418/* opposite to bdc_hw_init */
419static void bdc_hw_exit(struct bdc *bdc)
420{
421 dev_dbg(bdc->dev, "%s ()\n", __func__);
422 bdc_mem_free(bdc);
423}
424
425/* Initialize the bdc HW and memory */
426static int bdc_hw_init(struct bdc *bdc)
427{
428 int ret;
429
430 dev_dbg(bdc->dev, "%s ()\n", __func__);
431 ret = bdc_reset(bdc);
432 if (ret) {
433 dev_err(bdc->dev, "err resetting bdc abort bdc init%d\n", ret);
434 return ret;
435 }
436 ret = bdc_mem_alloc(bdc);
437 if (ret) {
438 dev_err(bdc->dev, "Mem alloc failed, aborting\n");
439 return -ENOMEM;
440 }
441 bdc_mem_init(bdc, 0);
442 bdc_dbg_regs(bdc);
443 dev_dbg(bdc->dev, "HW Init done\n");
444
445 return 0;
446}
447
448static int bdc_probe(struct platform_device *pdev)
449{
450 struct bdc *bdc;
451 struct resource *res;
452 int ret = -ENOMEM;
453 int irq;
454 u32 temp;
455 struct device *dev = &pdev->dev;
456
457 dev_dbg(dev, "%s()\n", __func__);
458 bdc = devm_kzalloc(dev, sizeof(*bdc), GFP_KERNEL);
459 if (!bdc)
460 return -ENOMEM;
461
462 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
463 bdc->regs = devm_ioremap_resource(dev, res);
464 if (IS_ERR(bdc->regs)) {
465 dev_err(dev, "ioremap error\n");
466 return -ENOMEM;
467 }
468 irq = platform_get_irq(pdev, 0);
469 if (irq < 0) {
470 dev_err(dev, "platform_get_irq failed:%d\n", irq);
471 return irq;
472 }
473 spin_lock_init(&bdc->lock);
474 platform_set_drvdata(pdev, bdc);
475 bdc->irq = irq;
476 bdc->dev = dev;
477 dev_dbg(bdc->dev, "bdc->regs: %p irq=%d\n", bdc->regs, bdc->irq);
478
479 temp = bdc_readl(bdc->regs, BDC_BDCSC);
480 if ((temp & BDC_P64) &&
481 !dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64))) {
482 dev_dbg(bdc->dev, "Using 64-bit address\n");
483 } else {
484 ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
485 if (ret) {
486 dev_err(bdc->dev, "No suitable DMA config available, abort\n");
487 return -ENOTSUPP;
488 }
489 dev_dbg(bdc->dev, "Using 32-bit address\n");
490 }
491 ret = bdc_hw_init(bdc);
492 if (ret) {
493 dev_err(bdc->dev, "BDC init failure:%d\n", ret);
494 return ret;
495 }
496 ret = bdc_udc_init(bdc);
497 if (ret) {
498 dev_err(bdc->dev, "BDC Gadget init failure:%d\n", ret);
499 goto cleanup;
500 }
501 return 0;
502
503cleanup:
504 bdc_hw_exit(bdc);
505
506 return ret;
507}
508
509static int bdc_remove(struct platform_device *pdev)
510{
511 struct bdc *bdc;
512
513 bdc = platform_get_drvdata(pdev);
514 dev_dbg(bdc->dev, "%s ()\n", __func__);
515 bdc_udc_exit(bdc);
516 bdc_hw_exit(bdc);
517
518 return 0;
519}
520
521static struct platform_driver bdc_driver = {
522 .driver = {
523 .name = BRCM_BDC_NAME,
524 .owner = THIS_MODULE
525 },
526 .probe = bdc_probe,
527 .remove = bdc_remove,
528};
529
530module_platform_driver(bdc_driver);
531MODULE_AUTHOR("Ashwini Pahuja <ashwini.linux@gmail.com>");
532MODULE_LICENSE("GPL");
533MODULE_DESCRIPTION(BRCM_BDC_DESC);
diff --git a/drivers/usb/gadget/udc/bdc/bdc_dbg.c b/drivers/usb/gadget/udc/bdc/bdc_dbg.c
new file mode 100644
index 000000000000..5945dbc47825
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc_dbg.c
@@ -0,0 +1,123 @@
1/*
2 * bdc_dbg.c - BRCM BDC USB3.0 device controller debug functions
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14
15#include "bdc.h"
16#include "bdc_dbg.h"
17
18void bdc_dbg_regs(struct bdc *bdc)
19{
20 u32 temp;
21
22 dev_vdbg(bdc->dev, "bdc->regs:%p\n", bdc->regs);
23 temp = bdc_readl(bdc->regs, BDC_BDCCFG0);
24 dev_vdbg(bdc->dev, "bdccfg0:0x%08x\n", temp);
25 temp = bdc_readl(bdc->regs, BDC_BDCCFG1);
26 dev_vdbg(bdc->dev, "bdccfg1:0x%08x\n", temp);
27 temp = bdc_readl(bdc->regs, BDC_BDCCAP0);
28 dev_vdbg(bdc->dev, "bdccap0:0x%08x\n", temp);
29 temp = bdc_readl(bdc->regs, BDC_BDCCAP1);
30 dev_vdbg(bdc->dev, "bdccap1:0x%08x\n", temp);
31 temp = bdc_readl(bdc->regs, BDC_USPC);
32 dev_vdbg(bdc->dev, "uspc:0x%08x\n", temp);
33 temp = bdc_readl(bdc->regs, BDC_DVCSA);
34 dev_vdbg(bdc->dev, "dvcsa:0x%08x\n", temp);
35 temp = bdc_readl(bdc->regs, BDC_DVCSB);
36 dev_vdbg(bdc->dev, "dvcsb:0x%x08\n", temp);
37}
38
39void bdc_dump_epsts(struct bdc *bdc)
40{
41 u32 temp;
42
43 temp = bdc_readl(bdc->regs, BDC_EPSTS0(0));
44 dev_vdbg(bdc->dev, "BDC_EPSTS0:0x%08x\n", temp);
45
46 temp = bdc_readl(bdc->regs, BDC_EPSTS1(0));
47 dev_vdbg(bdc->dev, "BDC_EPSTS1:0x%x\n", temp);
48
49 temp = bdc_readl(bdc->regs, BDC_EPSTS2(0));
50 dev_vdbg(bdc->dev, "BDC_EPSTS2:0x%08x\n", temp);
51
52 temp = bdc_readl(bdc->regs, BDC_EPSTS3(0));
53 dev_vdbg(bdc->dev, "BDC_EPSTS3:0x%08x\n", temp);
54
55 temp = bdc_readl(bdc->regs, BDC_EPSTS4(0));
56 dev_vdbg(bdc->dev, "BDC_EPSTS4:0x%08x\n", temp);
57
58 temp = bdc_readl(bdc->regs, BDC_EPSTS5(0));
59 dev_vdbg(bdc->dev, "BDC_EPSTS5:0x%08x\n", temp);
60
61 temp = bdc_readl(bdc->regs, BDC_EPSTS6(0));
62 dev_vdbg(bdc->dev, "BDC_EPSTS6:0x%08x\n", temp);
63
64 temp = bdc_readl(bdc->regs, BDC_EPSTS7(0));
65 dev_vdbg(bdc->dev, "BDC_EPSTS7:0x%08x\n", temp);
66}
67
68void bdc_dbg_srr(struct bdc *bdc, u32 srr_num)
69{
70 struct bdc_sr *sr;
71 dma_addr_t addr;
72 int i;
73
74 sr = bdc->srr.sr_bds;
75 addr = bdc->srr.dma_addr;
76 dev_vdbg(bdc->dev, "bdc_dbg_srr sr:%p dqp_index:%d\n",
77 sr, bdc->srr.dqp_index);
78 for (i = 0; i < NUM_SR_ENTRIES; i++) {
79 sr = &bdc->srr.sr_bds[i];
80 dev_vdbg(bdc->dev, "%llx %08x %08x %08x %08x\n",
81 (unsigned long long)addr,
82 le32_to_cpu(sr->offset[0]),
83 le32_to_cpu(sr->offset[1]),
84 le32_to_cpu(sr->offset[2]),
85 le32_to_cpu(sr->offset[3]));
86 addr += sizeof(*sr);
87 }
88}
89
90void bdc_dbg_bd_list(struct bdc *bdc, struct bdc_ep *ep)
91{
92 struct bd_list *bd_list = &ep->bd_list;
93 struct bd_table *bd_table;
94 struct bdc_bd *bd;
95 int tbi, bdi, gbdi;
96 dma_addr_t dma;
97
98 gbdi = 0;
99 dev_vdbg(bdc->dev,
100 "Dump bd list for %s epnum:%d\n",
101 ep->name, ep->ep_num);
102
103 dev_vdbg(bdc->dev,
104 "tabs:%d max_bdi:%d eqp_bdi:%d hwd_bdi:%d num_bds_table:%d\n",
105 bd_list->num_tabs, bd_list->max_bdi, bd_list->eqp_bdi,
106 bd_list->hwd_bdi, bd_list->num_bds_table);
107
108 for (tbi = 0; tbi < bd_list->num_tabs; tbi++) {
109 bd_table = bd_list->bd_table_array[tbi];
110 for (bdi = 0; bdi < bd_list->num_bds_table; bdi++) {
111 bd = bd_table->start_bd + bdi;
112 dma = bd_table->dma + (sizeof(struct bdc_bd) * bdi);
113 dev_vdbg(bdc->dev,
114 "tbi:%2d bdi:%2d gbdi:%2d virt:%p phys:%llx %08x %08x %08x %08x\n",
115 tbi, bdi, gbdi++, bd, (unsigned long long)dma,
116 le32_to_cpu(bd->offset[0]),
117 le32_to_cpu(bd->offset[1]),
118 le32_to_cpu(bd->offset[2]),
119 le32_to_cpu(bd->offset[3]));
120 }
121 dev_vdbg(bdc->dev, "\n\n");
122 }
123}
diff --git a/drivers/usb/gadget/udc/bdc/bdc_dbg.h b/drivers/usb/gadget/udc/bdc/bdc_dbg.h
new file mode 100644
index 000000000000..338a6c701315
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc_dbg.h
@@ -0,0 +1,37 @@
1/*
2 * bdc_dbg.h - header for the BDC debug functions
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14#ifndef __LINUX_BDC_DBG_H__
15#define __LINUX_BDC_DBG_H__
16
17#include "bdc.h"
18
19#ifdef CONFIG_USB_GADGET_VERBOSE
20void bdc_dbg_bd_list(struct bdc *, struct bdc_ep*);
21void bdc_dbg_srr(struct bdc *, u32);
22void bdc_dbg_regs(struct bdc *);
23void bdc_dump_epsts(struct bdc *);
24#else
25static inline void bdc_dbg_regs(struct bdc *bdc)
26{ }
27
28static inline void bdc_dbg_srr(struct bdc *bdc, u32 srr_num)
29{ }
30
31static inline void bdc_dbg_bd_list(struct bdc *bdc, struct bdc_ep *ep)
32{ }
33
34static inline void bdc_dump_epsts(struct bdc *bdc)
35{ }
36#endif /* CONFIG_USB_GADGET_VERBOSE */
37#endif /* __LINUX_BDC_DBG_H__ */
diff --git a/drivers/usb/gadget/udc/bdc/bdc_ep.c b/drivers/usb/gadget/udc/bdc/bdc_ep.c
new file mode 100644
index 000000000000..15da5b1e76c0
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc_ep.c
@@ -0,0 +1,2023 @@
1/*
2 * bdc_ep.c - BRCM BDC USB3.0 device controller endpoint related functions
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * Based on drivers under drivers/usb/
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 *
15 */
16#include <linux/module.h>
17#include <linux/pci.h>
18#include <linux/dma-mapping.h>
19#include <linux/kernel.h>
20#include <linux/delay.h>
21#include <linux/dmapool.h>
22#include <linux/ioport.h>
23#include <linux/sched.h>
24#include <linux/slab.h>
25#include <linux/errno.h>
26#include <linux/init.h>
27#include <linux/timer.h>
28#include <linux/list.h>
29#include <linux/interrupt.h>
30#include <linux/moduleparam.h>
31#include <linux/device.h>
32#include <linux/usb/ch9.h>
33#include <linux/usb/gadget.h>
34#include <linux/usb/otg.h>
35#include <linux/pm.h>
36#include <linux/io.h>
37#include <linux/irq.h>
38#include <asm/unaligned.h>
39#include <linux/platform_device.h>
40#include <linux/usb/composite.h>
41
42#include "bdc.h"
43#include "bdc_ep.h"
44#include "bdc_cmd.h"
45#include "bdc_dbg.h"
46
47static const char * const ep0_state_string[] = {
48 "WAIT_FOR_SETUP",
49 "WAIT_FOR_DATA_START",
50 "WAIT_FOR_DATA_XMIT",
51 "WAIT_FOR_STATUS_START",
52 "WAIT_FOR_STATUS_XMIT",
53 "STATUS_PENDING"
54};
55
56/* Free the bdl during ep disable */
57static void ep_bd_list_free(struct bdc_ep *ep, u32 num_tabs)
58{
59 struct bd_list *bd_list = &ep->bd_list;
60 struct bdc *bdc = ep->bdc;
61 struct bd_table *bd_table;
62 int index;
63
64 dev_dbg(bdc->dev, "%s ep:%s num_tabs:%d\n",
65 __func__, ep->name, num_tabs);
66
67 if (!bd_list->bd_table_array) {
68 dev_dbg(bdc->dev, "%s already freed\n", ep->name);
69 return;
70 }
71 for (index = 0; index < num_tabs; index++) {
72 /*
73 * check if the bd_table struct is allocated ?
74 * if yes, then check if bd memory has been allocated, then
75 * free the dma_pool and also the bd_table struct memory
76 */
77 bd_table = bd_list->bd_table_array[index];
78 dev_dbg(bdc->dev, "bd_table:%p index:%d\n", bd_table, index);
79 if (!bd_table) {
80 dev_dbg(bdc->dev, "bd_table not allocated\n");
81 continue;
82 }
83 if (!bd_table->start_bd) {
84 dev_dbg(bdc->dev, "bd dma pool not allocted\n");
85 continue;
86 }
87
88 dev_dbg(bdc->dev,
89 "Free dma pool start_bd:%p dma:%llx\n",
90 bd_table->start_bd,
91 (unsigned long long)bd_table->dma);
92
93 dma_pool_free(bdc->bd_table_pool,
94 bd_table->start_bd,
95 bd_table->dma);
96 /* Free the bd_table structure */
97 kfree(bd_table);
98 }
99 /* Free the bd table array */
100 kfree(ep->bd_list.bd_table_array);
101}
102
103/*
104 * chain the tables, by insteting a chain bd at the end of prev_table, pointing
105 * to next_table
106 */
107static inline void chain_table(struct bd_table *prev_table,
108 struct bd_table *next_table,
109 u32 bd_p_tab)
110{
111 /* Chain the prev table to next table */
112 prev_table->start_bd[bd_p_tab-1].offset[0] =
113 cpu_to_le32(lower_32_bits(next_table->dma));
114
115 prev_table->start_bd[bd_p_tab-1].offset[1] =
116 cpu_to_le32(upper_32_bits(next_table->dma));
117
118 prev_table->start_bd[bd_p_tab-1].offset[2] =
119 0x0;
120
121 prev_table->start_bd[bd_p_tab-1].offset[3] =
122 cpu_to_le32(MARK_CHAIN_BD);
123}
124
125/* Allocate the bdl for ep, during config ep */
126static int ep_bd_list_alloc(struct bdc_ep *ep)
127{
128 struct bd_table *prev_table = NULL;
129 int index, num_tabs, bd_p_tab;
130 struct bdc *bdc = ep->bdc;
131 struct bd_table *bd_table;
132 dma_addr_t dma;
133
134 if (usb_endpoint_xfer_isoc(ep->desc))
135 num_tabs = NUM_TABLES_ISOCH;
136 else
137 num_tabs = NUM_TABLES;
138
139 bd_p_tab = NUM_BDS_PER_TABLE;
140 /* if there is only 1 table in bd list then loop chain to self */
141 dev_dbg(bdc->dev,
142 "%s ep:%p num_tabs:%d\n",
143 __func__, ep, num_tabs);
144
145 /* Allocate memory for table array */
146 ep->bd_list.bd_table_array = kzalloc(
147 num_tabs * sizeof(struct bd_table *),
148 GFP_ATOMIC);
149 if (!ep->bd_list.bd_table_array)
150 return -ENOMEM;
151
152 /* Allocate memory for each table */
153 for (index = 0; index < num_tabs; index++) {
154 /* Allocate memory for bd_table structure */
155 bd_table = kzalloc(sizeof(struct bd_table), GFP_ATOMIC);
156 if (!bd_table)
157 goto fail;
158
159 bd_table->start_bd = dma_pool_alloc(bdc->bd_table_pool,
160 GFP_ATOMIC,
161 &dma);
162 if (!bd_table->start_bd)
163 goto fail;
164
165 bd_table->dma = dma;
166
167 dev_dbg(bdc->dev,
168 "index:%d start_bd:%p dma=%08llx prev_table:%p\n",
169 index, bd_table->start_bd,
170 (unsigned long long)bd_table->dma, prev_table);
171
172 ep->bd_list.bd_table_array[index] = bd_table;
173 memset(bd_table->start_bd, 0, bd_p_tab * sizeof(struct bdc_bd));
174 if (prev_table)
175 chain_table(prev_table, bd_table, bd_p_tab);
176
177 prev_table = bd_table;
178 }
179 chain_table(prev_table, ep->bd_list.bd_table_array[0], bd_p_tab);
180 /* Memory allocation is successful, now init the internal fields */
181 ep->bd_list.num_tabs = num_tabs;
182 ep->bd_list.max_bdi = (num_tabs * bd_p_tab) - 1;
183 ep->bd_list.num_tabs = num_tabs;
184 ep->bd_list.num_bds_table = bd_p_tab;
185 ep->bd_list.eqp_bdi = 0;
186 ep->bd_list.hwd_bdi = 0;
187
188 return 0;
189fail:
190 /* Free the bd_table_array, bd_table struct, bd's */
191 ep_bd_list_free(ep, num_tabs);
192
193 return -ENOMEM;
194}
195
196/* returns how many bd's are need for this transfer */
197static inline int bd_needed_req(struct bdc_req *req)
198{
199 int bd_needed = 0;
200 int remaining;
201
202 /* 1 bd needed for 0 byte transfer */
203 if (req->usb_req.length == 0)
204 return 1;
205
206 /* remaining bytes after tranfering all max BD size BD's */
207 remaining = req->usb_req.length % BD_MAX_BUFF_SIZE;
208 if (remaining)
209 bd_needed++;
210
211 /* How many maximum BUFF size BD's ? */
212 remaining = req->usb_req.length / BD_MAX_BUFF_SIZE;
213 bd_needed += remaining;
214
215 return bd_needed;
216}
217
218/* returns the bd index(bdi) corresponding to bd dma address */
219static int bd_add_to_bdi(struct bdc_ep *ep, dma_addr_t bd_dma_addr)
220{
221 struct bd_list *bd_list = &ep->bd_list;
222 dma_addr_t dma_first_bd, dma_last_bd;
223 struct bdc *bdc = ep->bdc;
224 struct bd_table *bd_table;
225 bool found = false;
226 int tbi, bdi;
227
228 dma_first_bd = dma_last_bd = 0;
229 dev_dbg(bdc->dev, "%s %llx\n",
230 __func__, (unsigned long long)bd_dma_addr);
231 /*
232 * Find in which table this bd_dma_addr belongs?, go through the table
233 * array and compare addresses of first and last address of bd of each
234 * table
235 */
236 for (tbi = 0; tbi < bd_list->num_tabs; tbi++) {
237 bd_table = bd_list->bd_table_array[tbi];
238 dma_first_bd = bd_table->dma;
239 dma_last_bd = bd_table->dma +
240 (sizeof(struct bdc_bd) *
241 (bd_list->num_bds_table - 1));
242 dev_dbg(bdc->dev, "dma_first_bd:%llx dma_last_bd:%llx\n",
243 (unsigned long long)dma_first_bd,
244 (unsigned long long)dma_last_bd);
245 if (bd_dma_addr >= dma_first_bd && bd_dma_addr <= dma_last_bd) {
246 found = true;
247 break;
248 }
249 }
250 if (unlikely(!found)) {
251 dev_err(bdc->dev, "%s FATAL err, bd not found\n", __func__);
252 return -EINVAL;
253 }
254 /* Now we know the table, find the bdi */
255 bdi = (bd_dma_addr - dma_first_bd) / sizeof(struct bdc_bd);
256
257 /* return the global bdi, to compare with ep eqp_bdi */
258 return (bdi + (tbi * bd_list->num_bds_table));
259}
260
261/* returns the table index(tbi) of the given bdi */
262static int bdi_to_tbi(struct bdc_ep *ep, int bdi)
263{
264 int tbi;
265
266 tbi = bdi / ep->bd_list.num_bds_table;
267 dev_vdbg(ep->bdc->dev,
268 "bdi:%d num_bds_table:%d tbi:%d\n",
269 bdi, ep->bd_list.num_bds_table, tbi);
270
271 return tbi;
272}
273
274/* Find the bdi last bd in the transfer */
275static inline int find_end_bdi(struct bdc_ep *ep, int next_hwd_bdi)
276{
277 int end_bdi;
278
279 end_bdi = next_hwd_bdi - 1;
280 if (end_bdi < 0)
281 end_bdi = ep->bd_list.max_bdi - 1;
282 else if ((end_bdi % (ep->bd_list.num_bds_table-1)) == 0)
283 end_bdi--;
284
285 return end_bdi;
286}
287
288/*
289 * How many transfer bd's are available on this ep bdl, chain bds are not
290 * counted in available bds
291 */
292static int bd_available_ep(struct bdc_ep *ep)
293{
294 struct bd_list *bd_list = &ep->bd_list;
295 int available1, available2;
296 struct bdc *bdc = ep->bdc;
297 int chain_bd1, chain_bd2;
298 int available_bd = 0;
299
300 available1 = available2 = chain_bd1 = chain_bd2 = 0;
301 /* if empty then we have all bd's available - number of chain bd's */
302 if (bd_list->eqp_bdi == bd_list->hwd_bdi)
303 return bd_list->max_bdi - bd_list->num_tabs;
304
305 /*
306 * Depending upon where eqp and dqp pointers are, caculate number
307 * of avaialble bd's
308 */
309 if (bd_list->hwd_bdi < bd_list->eqp_bdi) {
310 /* available bd's are from eqp..max_bds + 0..dqp - chain_bds */
311 available1 = bd_list->max_bdi - bd_list->eqp_bdi;
312 available2 = bd_list->hwd_bdi;
313 chain_bd1 = available1 / bd_list->num_bds_table;
314 chain_bd2 = available2 / bd_list->num_bds_table;
315 dev_vdbg(bdc->dev, "chain_bd1:%d chain_bd2:%d\n",
316 chain_bd1, chain_bd2);
317 available_bd = available1 + available2 - chain_bd1 - chain_bd2;
318 } else {
319 /* available bd's are from eqp..dqp - number of chain bd's */
320 available1 = bd_list->hwd_bdi - bd_list->eqp_bdi;
321 /* if gap between eqp and dqp is less than NUM_BDS_PER_TABLE */
322 if ((bd_list->hwd_bdi - bd_list->eqp_bdi)
323 <= bd_list->num_bds_table) {
324 /* If there any chain bd in between */
325 if (!(bdi_to_tbi(ep, bd_list->hwd_bdi)
326 == bdi_to_tbi(ep, bd_list->eqp_bdi))) {
327 available_bd = available1 - 1;
328 }
329 } else {
330 chain_bd1 = available1 / bd_list->num_bds_table;
331 available_bd = available1 - chain_bd1;
332 }
333 }
334 /*
335 * we need to keep one extra bd to check if ring is full or empty so
336 * reduce by 1
337 */
338 available_bd--;
339 dev_vdbg(bdc->dev, "available_bd:%d\n", available_bd);
340
341 return available_bd;
342}
343
344/* Notify the hardware after queueing the bd to bdl */
345void bdc_notify_xfr(struct bdc *bdc, u32 epnum)
346{
347 struct bdc_ep *ep = bdc->bdc_ep_array[epnum];
348
349 dev_vdbg(bdc->dev, "%s epnum:%d\n", __func__, epnum);
350 /*
351 * We don't have anyway to check if ep state is running,
352 * except the software flags.
353 */
354 if (unlikely(ep->flags & BDC_EP_STOP))
355 ep->flags &= ~BDC_EP_STOP;
356
357 bdc_writel(bdc->regs, BDC_XSFNTF, epnum);
358}
359
360/* returns the bd corresponding to bdi */
361static struct bdc_bd *bdi_to_bd(struct bdc_ep *ep, int bdi)
362{
363 int tbi = bdi_to_tbi(ep, bdi);
364 int local_bdi = 0;
365
366 local_bdi = bdi - (tbi * ep->bd_list.num_bds_table);
367 dev_vdbg(ep->bdc->dev,
368 "%s bdi:%d local_bdi:%d\n",
369 __func__, bdi, local_bdi);
370
371 return (ep->bd_list.bd_table_array[tbi]->start_bd + local_bdi);
372}
373
374/* Advance the enqueue pointer */
375static void ep_bdlist_eqp_adv(struct bdc_ep *ep)
376{
377 ep->bd_list.eqp_bdi++;
378 /* if it's chain bd, then move to next */
379 if (((ep->bd_list.eqp_bdi + 1) % ep->bd_list.num_bds_table) == 0)
380 ep->bd_list.eqp_bdi++;
381
382 /* if the eqp is pointing to last + 1 then move back to 0 */
383 if (ep->bd_list.eqp_bdi == (ep->bd_list.max_bdi + 1))
384 ep->bd_list.eqp_bdi = 0;
385}
386
387/* Setup the first bd for ep0 transfer */
388static int setup_first_bd_ep0(struct bdc *bdc, struct bdc_req *req, u32 *dword3)
389{
390 u16 wValue;
391 u32 req_len;
392
393 req->ep->dir = 0;
394 req_len = req->usb_req.length;
395 switch (bdc->ep0_state) {
396 case WAIT_FOR_DATA_START:
397 *dword3 |= BD_TYPE_DS;
398 if (bdc->setup_pkt.bRequestType & USB_DIR_IN)
399 *dword3 |= BD_DIR_IN;
400
401 /* check if zlp will be needed */
402 wValue = le16_to_cpu(bdc->setup_pkt.wValue);
403 if ((wValue > req_len) &&
404 (req_len % bdc->gadget.ep0->maxpacket == 0)) {
405 dev_dbg(bdc->dev, "ZLP needed wVal:%d len:%d MaxP:%d\n",
406 wValue, req_len,
407 bdc->gadget.ep0->maxpacket);
408 bdc->zlp_needed = true;
409 }
410 break;
411
412 case WAIT_FOR_STATUS_START:
413 *dword3 |= BD_TYPE_SS;
414 if (!le16_to_cpu(bdc->setup_pkt.wLength) ||
415 !(bdc->setup_pkt.bRequestType & USB_DIR_IN))
416 *dword3 |= BD_DIR_IN;
417 break;
418 default:
419 dev_err(bdc->dev,
420 "Unknown ep0 state for queueing bd ep0_state:%s\n",
421 ep0_state_string[bdc->ep0_state]);
422 return -EINVAL;
423 }
424
425 return 0;
426}
427
428/* Setup the bd dma descriptor for a given request */
429static int setup_bd_list_xfr(struct bdc *bdc, struct bdc_req *req, int num_bds)
430{
431 dma_addr_t buf_add = req->usb_req.dma;
432 u32 maxp, tfs, dword2, dword3;
433 struct bd_transfer *bd_xfr;
434 struct bd_list *bd_list;
435 struct bdc_ep *ep;
436 struct bdc_bd *bd;
437 int ret, bdnum;
438 u32 req_len;
439
440 ep = req->ep;
441 bd_list = &ep->bd_list;
442 bd_xfr = &req->bd_xfr;
443 bd_xfr->req = req;
444 bd_xfr->start_bdi = bd_list->eqp_bdi;
445 bd = bdi_to_bd(ep, bd_list->eqp_bdi);
446 req_len = req->usb_req.length;
447 maxp = usb_endpoint_maxp(ep->desc) & 0x7ff;
448 tfs = roundup(req->usb_req.length, maxp);
449 tfs = tfs/maxp;
450 dev_vdbg(bdc->dev, "%s ep:%s num_bds:%d tfs:%d r_len:%d bd:%p\n",
451 __func__, ep->name, num_bds, tfs, req_len, bd);
452
453 for (bdnum = 0; bdnum < num_bds; bdnum++) {
454 dword2 = dword3 = 0;
455 /* First bd */
456 if (!bdnum) {
457 dword3 |= BD_SOT|BD_SBF|(tfs<<BD_TFS_SHIFT);
458 dword2 |= BD_LTF;
459 /* format of first bd for ep0 is different than other */
460 if (ep->ep_num == 1)
461 ret = setup_first_bd_ep0(bdc, req, &dword3);
462 if (ret)
463 return ret;
464 }
465 if (!req->ep->dir)
466 dword3 |= BD_ISP;
467
468 if (req_len > BD_MAX_BUFF_SIZE) {
469 dword2 |= BD_MAX_BUFF_SIZE;
470 req_len -= BD_MAX_BUFF_SIZE;
471 } else {
472 /* this should be the last bd */
473 dword2 |= req_len;
474 dword3 |= BD_IOC;
475 dword3 |= BD_EOT;
476 }
477 /* Currently only 1 INT target is supported */
478 dword2 |= BD_INTR_TARGET(0);
479 bd = bdi_to_bd(ep, ep->bd_list.eqp_bdi);
480 if (unlikely(!bd)) {
481 dev_err(bdc->dev, "Err bd pointing to wrong addr\n");
482 return -EINVAL;
483 }
484 /* write bd */
485 bd->offset[0] = cpu_to_le32(lower_32_bits(buf_add));
486 bd->offset[1] = cpu_to_le32(upper_32_bits(buf_add));
487 bd->offset[2] = cpu_to_le32(dword2);
488 bd->offset[3] = cpu_to_le32(dword3);
489 /* advance eqp pointer */
490 ep_bdlist_eqp_adv(ep);
491 /* advance the buff pointer */
492 buf_add += BD_MAX_BUFF_SIZE;
493 dev_vdbg(bdc->dev, "buf_add:%08llx req_len:%d bd:%p eqp:%d\n",
494 (unsigned long long)buf_add, req_len, bd,
495 ep->bd_list.eqp_bdi);
496 bd = bdi_to_bd(ep, ep->bd_list.eqp_bdi);
497 bd->offset[3] = cpu_to_le32(BD_SBF);
498 }
499 /* clear the STOP BD fetch bit from the first bd of this xfr */
500 bd = bdi_to_bd(ep, bd_xfr->start_bdi);
501 bd->offset[3] &= cpu_to_le32(~BD_SBF);
502 /* the new eqp will be next hw dqp */
503 bd_xfr->num_bds = num_bds;
504 bd_xfr->next_hwd_bdi = ep->bd_list.eqp_bdi;
505 /* everything is written correctly before notifying the HW */
506 wmb();
507
508 return 0;
509}
510
511/* Queue the xfr */
512static int bdc_queue_xfr(struct bdc *bdc, struct bdc_req *req)
513{
514 int num_bds, bd_available;
515 struct bdc_ep *ep;
516 int ret;
517
518 ep = req->ep;
519 dev_dbg(bdc->dev, "%s req:%p\n", __func__, req);
520 dev_dbg(bdc->dev, "eqp_bdi:%d hwd_bdi:%d\n",
521 ep->bd_list.eqp_bdi, ep->bd_list.hwd_bdi);
522
523 num_bds = bd_needed_req(req);
524 bd_available = bd_available_ep(ep);
525
526 /* how many bd's are avaialble on ep */
527 if (num_bds > bd_available)
528 return -ENOMEM;
529
530 ret = setup_bd_list_xfr(bdc, req, num_bds);
531 if (ret)
532 return ret;
533 list_add_tail(&req->queue, &ep->queue);
534 bdc_dbg_bd_list(bdc, ep);
535 bdc_notify_xfr(bdc, ep->ep_num);
536
537 return 0;
538}
539
540/* callback to gadget layer when xfr completes */
541static void bdc_req_complete(struct bdc_ep *ep, struct bdc_req *req,
542 int status)
543{
544 struct bdc *bdc = ep->bdc;
545
546 if (req == NULL || &req->queue == NULL || &req->usb_req == NULL)
547 return;
548
549 dev_dbg(bdc->dev, "%s ep:%s status:%d\n", __func__, ep->name, status);
550 list_del(&req->queue);
551 req->usb_req.status = status;
552 usb_gadget_unmap_request(&bdc->gadget, &req->usb_req, ep->dir);
553 if (req->usb_req.complete) {
554 spin_unlock(&bdc->lock);
555 usb_gadget_giveback_request(&ep->usb_ep, &req->usb_req);
556 spin_lock(&bdc->lock);
557 }
558}
559
560/* Disable the endpoint */
561int bdc_ep_disable(struct bdc_ep *ep)
562{
563 struct bdc_req *req;
564 struct bdc *bdc;
565 int ret;
566
567 ret = 0;
568 bdc = ep->bdc;
569 dev_dbg(bdc->dev, "%s() ep->ep_num=%d\n", __func__, ep->ep_num);
570 /* Stop the endpoint */
571 ret = bdc_stop_ep(bdc, ep->ep_num);
572
573 /*
574 * Intentionally don't check the ret value of stop, it can fail in
575 * disconnect scenarios, continue with dconfig
576 */
577 /* de-queue any pending requests */
578 while (!list_empty(&ep->queue)) {
579 req = list_entry(ep->queue.next, struct bdc_req,
580 queue);
581 bdc_req_complete(ep, req, -ESHUTDOWN);
582 }
583 /* deconfigure the endpoint */
584 ret = bdc_dconfig_ep(bdc, ep);
585 if (ret)
586 dev_warn(bdc->dev,
587 "dconfig fail but continue with memory free");
588
589 ep->flags = 0;
590 /* ep0 memory is not freed, but reused on next connect sr */
591 if (ep->ep_num == 1)
592 return 0;
593
594 /* Free the bdl memory */
595 ep_bd_list_free(ep, ep->bd_list.num_tabs);
596 ep->desc = NULL;
597 ep->comp_desc = NULL;
598 ep->usb_ep.desc = NULL;
599 ep->ep_type = 0;
600
601 return ret;
602}
603
604/* Enable the ep */
605int bdc_ep_enable(struct bdc_ep *ep)
606{
607 struct bdc *bdc;
608 int ret = 0;
609
610 bdc = ep->bdc;
611 dev_dbg(bdc->dev, "%s NUM_TABLES:%d %d\n",
612 __func__, NUM_TABLES, NUM_TABLES_ISOCH);
613
614 ret = ep_bd_list_alloc(ep);
615 if (ret) {
616 dev_err(bdc->dev, "ep bd list allocation failed:%d\n", ret);
617 return -ENOMEM;
618 }
619 bdc_dbg_bd_list(bdc, ep);
620 /* only for ep0: config ep is called for ep0 from connect event */
621 ep->flags |= BDC_EP_ENABLED;
622 if (ep->ep_num == 1)
623 return ret;
624
625 /* Issue a configure endpoint command */
626 ret = bdc_config_ep(bdc, ep);
627 if (ret)
628 return ret;
629
630 ep->usb_ep.maxpacket = usb_endpoint_maxp(ep->desc);
631 ep->usb_ep.desc = ep->desc;
632 ep->usb_ep.comp_desc = ep->comp_desc;
633 ep->ep_type = usb_endpoint_type(ep->desc);
634 ep->flags |= BDC_EP_ENABLED;
635
636 return 0;
637}
638
639/* EP0 related code */
640
641/* Queue a status stage BD */
642static int ep0_queue_status_stage(struct bdc *bdc)
643{
644 struct bdc_req *status_req;
645 struct bdc_ep *ep;
646
647 status_req = &bdc->status_req;
648 ep = bdc->bdc_ep_array[1];
649 status_req->ep = ep;
650 status_req->usb_req.length = 0;
651 status_req->usb_req.status = -EINPROGRESS;
652 status_req->usb_req.actual = 0;
653 status_req->usb_req.complete = NULL;
654 bdc_queue_xfr(bdc, status_req);
655
656 return 0;
657}
658
659/* Queue xfr on ep0 */
660static int ep0_queue(struct bdc_ep *ep, struct bdc_req *req)
661{
662 struct bdc *bdc;
663 int ret;
664
665 bdc = ep->bdc;
666 dev_dbg(bdc->dev, "%s()\n", __func__);
667 req->usb_req.actual = 0;
668 req->usb_req.status = -EINPROGRESS;
669 req->epnum = ep->ep_num;
670
671 if (bdc->delayed_status) {
672 bdc->delayed_status = false;
673 /* if status stage was delayed? */
674 if (bdc->ep0_state == WAIT_FOR_STATUS_START) {
675 /* Queue a status stage BD */
676 ep0_queue_status_stage(bdc);
677 bdc->ep0_state = WAIT_FOR_STATUS_XMIT;
678 return 0;
679 }
680 } else {
681 /*
682 * if delayed status is false and 0 length transfer is requested
683 * i.e. for status stage of some setup request, then just
684 * return from here the status stage is queued independently
685 */
686 if (req->usb_req.length == 0)
687 return 0;
688
689 }
690 ret = usb_gadget_map_request(&bdc->gadget, &req->usb_req, ep->dir);
691 if (ret) {
692 dev_err(bdc->dev, "dma mapping failed %s\n", ep->name);
693 return ret;
694 }
695
696 return bdc_queue_xfr(bdc, req);
697}
698
699/* Queue data stage */
700static int ep0_queue_data_stage(struct bdc *bdc)
701{
702 struct usb_request *ep0_usb_req;
703 struct bdc_ep *ep;
704
705 dev_dbg(bdc->dev, "%s\n", __func__);
706 ep0_usb_req = &bdc->ep0_req.usb_req;
707 ep = bdc->bdc_ep_array[1];
708 bdc->ep0_req.ep = ep;
709 bdc->ep0_req.usb_req.complete = NULL;
710
711 return ep0_queue(ep, &bdc->ep0_req);
712}
713
714/* Queue req on ep */
715static int ep_queue(struct bdc_ep *ep, struct bdc_req *req)
716{
717 struct bdc *bdc;
718 int ret = 0;
719
720 bdc = ep->bdc;
721 if (!req || !ep || !ep->usb_ep.desc)
722 return -EINVAL;
723
724 req->usb_req.actual = 0;
725 req->usb_req.status = -EINPROGRESS;
726 req->epnum = ep->ep_num;
727
728 ret = usb_gadget_map_request(&bdc->gadget, &req->usb_req, ep->dir);
729 if (ret) {
730 dev_err(bdc->dev, "dma mapping failed\n");
731 return ret;
732 }
733
734 return bdc_queue_xfr(bdc, req);
735}
736
737/* Dequeue a request from ep */
738static int ep_dequeue(struct bdc_ep *ep, struct bdc_req *req)
739{
740 int start_bdi, end_bdi, tbi, eqp_bdi, curr_hw_dqpi;
741 bool start_pending, end_pending;
742 bool first_remove = false;
743 struct bdc_req *first_req;
744 struct bdc_bd *bd_start;
745 struct bd_table *table;
746 dma_addr_t next_bd_dma;
747 u64 deq_ptr_64 = 0;
748 struct bdc *bdc;
749 u32 tmp_32;
750 int ret;
751
752 bdc = ep->bdc;
753 start_pending = end_pending = false;
754 eqp_bdi = ep->bd_list.eqp_bdi - 1;
755
756 if (eqp_bdi < 0)
757 eqp_bdi = ep->bd_list.max_bdi;
758
759 start_bdi = req->bd_xfr.start_bdi;
760 end_bdi = find_end_bdi(ep, req->bd_xfr.next_hwd_bdi);
761
762 dev_dbg(bdc->dev, "%s ep:%s start:%d end:%d\n",
763 __func__, ep->name, start_bdi, end_bdi);
764 dev_dbg(bdc->dev, "ep_dequeue ep=%p ep->desc=%p\n",
765 ep, (void *)ep->usb_ep.desc);
766 /* Stop the ep to see where the HW is ? */
767 ret = bdc_stop_ep(bdc, ep->ep_num);
768 /* if there is an issue with stopping ep, then no need to go further */
769 if (ret)
770 return 0;
771
772 /*
773 * After endpoint is stopped, there can be 3 cases, the request
774 * is processed, pending or in the middle of processing
775 */
776
777 /* The current hw dequeue pointer */
778 tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(0));
779 deq_ptr_64 = tmp_32;
780 tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(1));
781 deq_ptr_64 |= ((u64)tmp_32 << 32);
782
783 /* we have the dma addr of next bd that will be fetched by hardware */
784 curr_hw_dqpi = bd_add_to_bdi(ep, deq_ptr_64);
785 if (curr_hw_dqpi < 0)
786 return curr_hw_dqpi;
787
788 /*
789 * curr_hw_dqpi points to actual dqp of HW and HW owns bd's from
790 * curr_hw_dqbdi..eqp_bdi.
791 */
792
793 /* Check if start_bdi and end_bdi are in range of HW owned BD's */
794 if (curr_hw_dqpi > eqp_bdi) {
795 /* there is a wrap from last to 0 */
796 if (start_bdi >= curr_hw_dqpi || start_bdi <= eqp_bdi) {
797 start_pending = true;
798 end_pending = true;
799 } else if (end_bdi >= curr_hw_dqpi || end_bdi <= eqp_bdi) {
800 end_pending = true;
801 }
802 } else {
803 if (start_bdi >= curr_hw_dqpi) {
804 start_pending = true;
805 end_pending = true;
806 } else if (end_bdi >= curr_hw_dqpi) {
807 end_pending = true;
808 }
809 }
810 dev_dbg(bdc->dev,
811 "start_pending:%d end_pending:%d speed:%d\n",
812 start_pending, end_pending, bdc->gadget.speed);
813
814 /* If both start till end are processes, we cannot deq req */
815 if (!start_pending && !end_pending)
816 return -EINVAL;
817
818 /*
819 * if ep_dequeue is called after disconnect then just return
820 * success from here
821 */
822 if (bdc->gadget.speed == USB_SPEED_UNKNOWN)
823 return 0;
824 tbi = bdi_to_tbi(ep, req->bd_xfr.next_hwd_bdi);
825 table = ep->bd_list.bd_table_array[tbi];
826 next_bd_dma = table->dma +
827 sizeof(struct bdc_bd)*(req->bd_xfr.next_hwd_bdi -
828 tbi * ep->bd_list.num_bds_table);
829
830 first_req = list_first_entry(&ep->queue, struct bdc_req,
831 queue);
832
833 if (req == first_req)
834 first_remove = true;
835
836 /*
837 * Due to HW limitation we need to bypadd chain bd's and issue ep_bla,
838 * incase if start is pending this is the first request in the list
839 * then issue ep_bla instead of marking as chain bd
840 */
841 if (start_pending && !first_remove) {
842 /*
843 * Mark the start bd as Chain bd, and point the chain
844 * bd to next_bd_dma
845 */
846 bd_start = bdi_to_bd(ep, start_bdi);
847 bd_start->offset[0] = cpu_to_le32(lower_32_bits(next_bd_dma));
848 bd_start->offset[1] = cpu_to_le32(upper_32_bits(next_bd_dma));
849 bd_start->offset[2] = 0x0;
850 bd_start->offset[3] = cpu_to_le32(MARK_CHAIN_BD);
851 bdc_dbg_bd_list(bdc, ep);
852 } else if (end_pending) {
853 /*
854 * The transfer is stopped in the middle, move the
855 * HW deq pointer to next_bd_dma
856 */
857 ret = bdc_ep_bla(bdc, ep, next_bd_dma);
858 if (ret) {
859 dev_err(bdc->dev, "error in ep_bla:%d\n", ret);
860 return ret;
861 }
862 }
863
864 return 0;
865}
866
867/* Halt/Clear the ep based on value */
868static int ep_set_halt(struct bdc_ep *ep, u32 value)
869{
870 struct bdc *bdc;
871 int ret;
872
873 bdc = ep->bdc;
874 dev_dbg(bdc->dev, "%s ep:%s value=%d\n", __func__, ep->name, value);
875
876 if (value) {
877 dev_dbg(bdc->dev, "Halt\n");
878 if (ep->ep_num == 1)
879 bdc->ep0_state = WAIT_FOR_SETUP;
880
881 ret = bdc_ep_set_stall(bdc, ep->ep_num);
882 if (ret)
883 dev_err(bdc->dev, "failed to %s STALL on %s\n",
884 value ? "set" : "clear", ep->name);
885 else
886 ep->flags |= BDC_EP_STALL;
887 } else {
888 /* Clear */
889 dev_dbg(bdc->dev, "Before Clear\n");
890 ret = bdc_ep_clear_stall(bdc, ep->ep_num);
891 if (ret)
892 dev_err(bdc->dev, "failed to %s STALL on %s\n",
893 value ? "set" : "clear", ep->name);
894 else
895 ep->flags &= ~BDC_EP_STALL;
896 dev_dbg(bdc->dev, "After Clear\n");
897 }
898
899 return ret;
900}
901
902/* Free all the ep */
903void bdc_free_ep(struct bdc *bdc)
904{
905 struct bdc_ep *ep;
906 u8 epnum;
907
908 dev_dbg(bdc->dev, "%s\n", __func__);
909 for (epnum = 1; epnum < bdc->num_eps; epnum++) {
910 ep = bdc->bdc_ep_array[epnum];
911 if (!ep)
912 continue;
913
914 if (ep->flags & BDC_EP_ENABLED)
915 ep_bd_list_free(ep, ep->bd_list.num_tabs);
916
917 /* ep0 is not in this gadget list */
918 if (epnum != 1)
919 list_del(&ep->usb_ep.ep_list);
920
921 kfree(ep);
922 }
923}
924
925/* USB2 spec, section 7.1.20 */
926static int bdc_set_test_mode(struct bdc *bdc)
927{
928 u32 usb2_pm;
929
930 usb2_pm = bdc_readl(bdc->regs, BDC_USPPM2);
931 usb2_pm &= ~BDC_PTC_MASK;
932 dev_dbg(bdc->dev, "%s\n", __func__);
933 switch (bdc->test_mode) {
934 case TEST_J:
935 case TEST_K:
936 case TEST_SE0_NAK:
937 case TEST_PACKET:
938 case TEST_FORCE_EN:
939 usb2_pm |= bdc->test_mode << 28;
940 break;
941 default:
942 return -EINVAL;
943 }
944 dev_dbg(bdc->dev, "usb2_pm=%08x", usb2_pm);
945 bdc_writel(bdc->regs, BDC_USPPM2, usb2_pm);
946
947 return 0;
948}
949
950/*
951 * Helper function to handle Transfer status report with status as either
952 * success or short
953 */
954static void handle_xsr_succ_status(struct bdc *bdc, struct bdc_ep *ep,
955 struct bdc_sr *sreport)
956{
957 int short_bdi, start_bdi, end_bdi, max_len_bds, chain_bds;
958 struct bd_list *bd_list = &ep->bd_list;
959 int actual_length, length_short;
960 struct bd_transfer *bd_xfr;
961 struct bdc_bd *short_bd;
962 struct bdc_req *req;
963 u64 deq_ptr_64 = 0;
964 int status = 0;
965 int sr_status;
966 u32 tmp_32;
967
968 dev_dbg(bdc->dev, "%s ep:%p\n", __func__, ep);
969 bdc_dbg_srr(bdc, 0);
970 /* do not process thie sr if ignore flag is set */
971 if (ep->ignore_next_sr) {
972 ep->ignore_next_sr = false;
973 return;
974 }
975
976 if (unlikely(list_empty(&ep->queue))) {
977 dev_warn(bdc->dev, "xfr srr with no BD's queued\n");
978 return;
979 }
980 req = list_entry(ep->queue.next, struct bdc_req,
981 queue);
982
983 bd_xfr = &req->bd_xfr;
984 sr_status = XSF_STS(le32_to_cpu(sreport->offset[3]));
985
986 /*
987 * sr_status is short and this transfer has more than 1 bd then it needs
988 * special handling, this is only applicable for bulk and ctrl
989 */
990 if (sr_status == XSF_SHORT && bd_xfr->num_bds > 1) {
991 /*
992 * This is multi bd xfr, lets see which bd
993 * caused short transfer and how many bytes have been
994 * transferred so far.
995 */
996 tmp_32 = le32_to_cpu(sreport->offset[0]);
997 deq_ptr_64 = tmp_32;
998 tmp_32 = le32_to_cpu(sreport->offset[1]);
999 deq_ptr_64 |= ((u64)tmp_32 << 32);
1000 short_bdi = bd_add_to_bdi(ep, deq_ptr_64);
1001 if (unlikely(short_bdi < 0))
1002 dev_warn(bdc->dev, "bd doesn't exist?\n");
1003
1004 start_bdi = bd_xfr->start_bdi;
1005 /*
1006 * We know the start_bdi and short_bdi, how many xfr
1007 * bds in between
1008 */
1009 if (start_bdi <= short_bdi) {
1010 max_len_bds = short_bdi - start_bdi;
1011 if (max_len_bds <= bd_list->num_bds_table) {
1012 if (!(bdi_to_tbi(ep, start_bdi) ==
1013 bdi_to_tbi(ep, short_bdi)))
1014 max_len_bds--;
1015 } else {
1016 chain_bds = max_len_bds/bd_list->num_bds_table;
1017 max_len_bds -= chain_bds;
1018 }
1019 } else {
1020 /* there is a wrap in the ring within a xfr */
1021 chain_bds = (bd_list->max_bdi - start_bdi)/
1022 bd_list->num_bds_table;
1023 chain_bds += short_bdi/bd_list->num_bds_table;
1024 max_len_bds = bd_list->max_bdi - start_bdi;
1025 max_len_bds += short_bdi;
1026 max_len_bds -= chain_bds;
1027 }
1028 /* max_len_bds is the number of full length bds */
1029 end_bdi = find_end_bdi(ep, bd_xfr->next_hwd_bdi);
1030 if (!(end_bdi == short_bdi))
1031 ep->ignore_next_sr = true;
1032
1033 actual_length = max_len_bds * BD_MAX_BUFF_SIZE;
1034 short_bd = bdi_to_bd(ep, short_bdi);
1035 /* length queued */
1036 length_short = le32_to_cpu(short_bd->offset[2]) & 0x1FFFFF;
1037 /* actual length trensfered */
1038 length_short -= SR_BD_LEN(le32_to_cpu(sreport->offset[2]));
1039 actual_length += length_short;
1040 req->usb_req.actual = actual_length;
1041 } else {
1042 req->usb_req.actual = req->usb_req.length -
1043 SR_BD_LEN(le32_to_cpu(sreport->offset[2]));
1044 dev_dbg(bdc->dev,
1045 "len=%d actual=%d bd_xfr->next_hwd_bdi:%d\n",
1046 req->usb_req.length, req->usb_req.actual,
1047 bd_xfr->next_hwd_bdi);
1048 }
1049
1050 /* Update the dequeue pointer */
1051 ep->bd_list.hwd_bdi = bd_xfr->next_hwd_bdi;
1052 if (req->usb_req.actual < req->usb_req.length) {
1053 dev_dbg(bdc->dev, "short xfr on %d\n", ep->ep_num);
1054 if (req->usb_req.short_not_ok)
1055 status = -EREMOTEIO;
1056 }
1057 bdc_req_complete(ep, bd_xfr->req, status);
1058}
1059
1060/* EP0 setup related packet handlers */
1061
1062/*
1063 * Setup packet received, just store the packet and process on next DS or SS
1064 * started SR
1065 */
1066void bdc_xsf_ep0_setup_recv(struct bdc *bdc, struct bdc_sr *sreport)
1067{
1068 struct usb_ctrlrequest *setup_pkt;
1069 u32 len;
1070
1071 dev_dbg(bdc->dev,
1072 "%s ep0_state:%s\n",
1073 __func__, ep0_state_string[bdc->ep0_state]);
1074 /* Store received setup packet */
1075 setup_pkt = &bdc->setup_pkt;
1076 memcpy(setup_pkt, &sreport->offset[0], sizeof(*setup_pkt));
1077 len = le16_to_cpu(setup_pkt->wLength);
1078 if (!len)
1079 bdc->ep0_state = WAIT_FOR_STATUS_START;
1080 else
1081 bdc->ep0_state = WAIT_FOR_DATA_START;
1082
1083
1084 dev_dbg(bdc->dev,
1085 "%s exit ep0_state:%s\n",
1086 __func__, ep0_state_string[bdc->ep0_state]);
1087}
1088
1089/* Stall ep0 */
1090static void ep0_stall(struct bdc *bdc)
1091{
1092 struct bdc_ep *ep = bdc->bdc_ep_array[1];
1093 struct bdc_req *req;
1094
1095 dev_dbg(bdc->dev, "%s\n", __func__);
1096 bdc->delayed_status = false;
1097 ep_set_halt(ep, 1);
1098
1099 /* de-queue any pendig requests */
1100 while (!list_empty(&ep->queue)) {
1101 req = list_entry(ep->queue.next, struct bdc_req,
1102 queue);
1103 bdc_req_complete(ep, req, -ESHUTDOWN);
1104 }
1105}
1106
1107/* SET_ADD handlers */
1108static int ep0_set_address(struct bdc *bdc, struct usb_ctrlrequest *ctrl)
1109{
1110 enum usb_device_state state = bdc->gadget.state;
1111 int ret = 0;
1112 u32 addr;
1113
1114 addr = le16_to_cpu(ctrl->wValue);
1115 dev_dbg(bdc->dev,
1116 "%s addr:%d dev state:%d\n",
1117 __func__, addr, state);
1118
1119 if (addr > 127)
1120 return -EINVAL;
1121
1122 switch (state) {
1123 case USB_STATE_DEFAULT:
1124 case USB_STATE_ADDRESS:
1125 /* Issue Address device command */
1126 ret = bdc_address_device(bdc, addr);
1127 if (ret)
1128 return ret;
1129
1130 if (addr)
1131 usb_gadget_set_state(&bdc->gadget, USB_STATE_ADDRESS);
1132 else
1133 usb_gadget_set_state(&bdc->gadget, USB_STATE_DEFAULT);
1134
1135 bdc->dev_addr = addr;
1136 break;
1137 default:
1138 dev_warn(bdc->dev,
1139 "SET Address in wrong device state %d\n",
1140 state);
1141 ret = -EINVAL;
1142 }
1143
1144 return ret;
1145}
1146
1147/* Handler for SET/CLEAR FEATURE requests for device */
1148static int ep0_handle_feature_dev(struct bdc *bdc, u16 wValue,
1149 u16 wIndex, bool set)
1150{
1151 enum usb_device_state state = bdc->gadget.state;
1152 u32 usppms = 0;
1153
1154 dev_dbg(bdc->dev, "%s set:%d dev state:%d\n",
1155 __func__, set, state);
1156 switch (wValue) {
1157 case USB_DEVICE_REMOTE_WAKEUP:
1158 dev_dbg(bdc->dev, "USB_DEVICE_REMOTE_WAKEUP\n");
1159 if (set)
1160 bdc->devstatus |= REMOTE_WAKE_ENABLE;
1161 else
1162 bdc->devstatus &= ~REMOTE_WAKE_ENABLE;
1163 break;
1164
1165 case USB_DEVICE_TEST_MODE:
1166 dev_dbg(bdc->dev, "USB_DEVICE_TEST_MODE\n");
1167 if ((wIndex & 0xFF) ||
1168 (bdc->gadget.speed != USB_SPEED_HIGH) || !set)
1169 return -EINVAL;
1170
1171 bdc->test_mode = wIndex >> 8;
1172 break;
1173
1174 case USB_DEVICE_U1_ENABLE:
1175 dev_dbg(bdc->dev, "USB_DEVICE_U1_ENABLE\n");
1176
1177 if (bdc->gadget.speed != USB_SPEED_SUPER ||
1178 state != USB_STATE_CONFIGURED)
1179 return -EINVAL;
1180
1181 usppms = bdc_readl(bdc->regs, BDC_USPPMS);
1182 if (set) {
1183 /* clear previous u1t */
1184 usppms &= ~BDC_U1T(BDC_U1T_MASK);
1185 usppms |= BDC_U1T(U1_TIMEOUT);
1186 usppms |= BDC_U1E | BDC_PORT_W1S;
1187 bdc->devstatus |= (1 << USB_DEV_STAT_U1_ENABLED);
1188 } else {
1189 usppms &= ~BDC_U1E;
1190 usppms |= BDC_PORT_W1S;
1191 bdc->devstatus &= ~(1 << USB_DEV_STAT_U1_ENABLED);
1192 }
1193 bdc_writel(bdc->regs, BDC_USPPMS, usppms);
1194 break;
1195
1196 case USB_DEVICE_U2_ENABLE:
1197 dev_dbg(bdc->dev, "USB_DEVICE_U2_ENABLE\n");
1198
1199 if (bdc->gadget.speed != USB_SPEED_SUPER ||
1200 state != USB_STATE_CONFIGURED)
1201 return -EINVAL;
1202
1203 usppms = bdc_readl(bdc->regs, BDC_USPPMS);
1204 if (set) {
1205 usppms |= BDC_U2E;
1206 usppms |= BDC_U2A;
1207 bdc->devstatus |= (1 << USB_DEV_STAT_U2_ENABLED);
1208 } else {
1209 usppms &= ~BDC_U2E;
1210 usppms &= ~BDC_U2A;
1211 bdc->devstatus &= ~(1 << USB_DEV_STAT_U2_ENABLED);
1212 }
1213 bdc_writel(bdc->regs, BDC_USPPMS, usppms);
1214 break;
1215
1216 case USB_DEVICE_LTM_ENABLE:
1217 dev_dbg(bdc->dev, "USB_DEVICE_LTM_ENABLE?\n");
1218 if (bdc->gadget.speed != USB_SPEED_SUPER ||
1219 state != USB_STATE_CONFIGURED)
1220 return -EINVAL;
1221 break;
1222 default:
1223 dev_err(bdc->dev, "Unknown wValue:%d\n", wValue);
1224 return -EOPNOTSUPP;
1225 } /* USB_RECIP_DEVICE end */
1226
1227 return 0;
1228}
1229
1230/* SET/CLEAR FEATURE handler */
1231static int ep0_handle_feature(struct bdc *bdc,
1232 struct usb_ctrlrequest *setup_pkt, bool set)
1233{
1234 enum usb_device_state state = bdc->gadget.state;
1235 struct bdc_ep *ep;
1236 u16 wValue;
1237 u16 wIndex;
1238 int epnum;
1239
1240 wValue = le16_to_cpu(setup_pkt->wValue);
1241 wIndex = le16_to_cpu(setup_pkt->wIndex);
1242
1243 dev_dbg(bdc->dev,
1244 "%s wValue=%d wIndex=%d devstate=%08x speed=%d set=%d",
1245 __func__, wValue, wIndex, state,
1246 bdc->gadget.speed, set);
1247
1248 switch (setup_pkt->bRequestType & USB_RECIP_MASK) {
1249 case USB_RECIP_DEVICE:
1250 return ep0_handle_feature_dev(bdc, wValue, wIndex, set);
1251 case USB_RECIP_INTERFACE:
1252 dev_dbg(bdc->dev, "USB_RECIP_INTERFACE\n");
1253 /* USB3 spec, sec 9.4.9 */
1254 if (wValue != USB_INTRF_FUNC_SUSPEND)
1255 return -EINVAL;
1256 /* USB3 spec, Table 9-8 */
1257 if (set) {
1258 if (wIndex & USB_INTRF_FUNC_SUSPEND_RW) {
1259 dev_dbg(bdc->dev, "SET REMOTE_WAKEUP\n");
1260 bdc->devstatus |= REMOTE_WAKE_ENABLE;
1261 } else {
1262 dev_dbg(bdc->dev, "CLEAR REMOTE_WAKEUP\n");
1263 bdc->devstatus &= ~REMOTE_WAKE_ENABLE;
1264 }
1265 }
1266 break;
1267
1268 case USB_RECIP_ENDPOINT:
1269 dev_dbg(bdc->dev, "USB_RECIP_ENDPOINT\n");
1270 if (wValue != USB_ENDPOINT_HALT)
1271 return -EINVAL;
1272
1273 epnum = wIndex & USB_ENDPOINT_NUMBER_MASK;
1274 if (epnum) {
1275 if ((wIndex & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
1276 epnum = epnum * 2 + 1;
1277 else
1278 epnum *= 2;
1279 } else {
1280 epnum = 1; /*EP0*/
1281 }
1282 /*
1283 * If CLEAR_FEATURE on ep0 then don't do anything as the stall
1284 * condition on ep0 has already been cleared when SETUP packet
1285 * was received.
1286 */
1287 if (epnum == 1 && !set) {
1288 dev_dbg(bdc->dev, "ep0 stall already cleared\n");
1289 return 0;
1290 }
1291 dev_dbg(bdc->dev, "epnum=%d\n", epnum);
1292 ep = bdc->bdc_ep_array[epnum];
1293 if (!ep)
1294 return -EINVAL;
1295
1296 return ep_set_halt(ep, set);
1297 default:
1298 dev_err(bdc->dev, "Unknown recipient\n");
1299 return -EINVAL;
1300 }
1301
1302 return 0;
1303}
1304
1305/* GET_STATUS request handler */
1306static int ep0_handle_status(struct bdc *bdc,
1307 struct usb_ctrlrequest *setup_pkt)
1308{
1309 enum usb_device_state state = bdc->gadget.state;
1310 struct bdc_ep *ep;
1311 u16 usb_status = 0;
1312 u32 epnum;
1313 u16 wIndex;
1314
1315 /* USB2.0 spec sec 9.4.5 */
1316 if (state == USB_STATE_DEFAULT)
1317 return -EINVAL;
1318 wIndex = le16_to_cpu(setup_pkt->wIndex);
1319 dev_dbg(bdc->dev, "%s\n", __func__);
1320 usb_status = bdc->devstatus;
1321 switch (setup_pkt->bRequestType & USB_RECIP_MASK) {
1322 case USB_RECIP_DEVICE:
1323 dev_dbg(bdc->dev,
1324 "USB_RECIP_DEVICE devstatus:%08x\n",
1325 bdc->devstatus);
1326 /* USB3 spec, sec 9.4.5 */
1327 if (bdc->gadget.speed == USB_SPEED_SUPER)
1328 usb_status &= ~REMOTE_WAKE_ENABLE;
1329 break;
1330
1331 case USB_RECIP_INTERFACE:
1332 dev_dbg(bdc->dev, "USB_RECIP_INTERFACE\n");
1333 if (bdc->gadget.speed == USB_SPEED_SUPER) {
1334 /*
1335 * This should come from func for Func remote wkup
1336 * usb_status |=1;
1337 */
1338 if (bdc->devstatus & REMOTE_WAKE_ENABLE)
1339 usb_status |= REMOTE_WAKE_ENABLE;
1340 } else {
1341 usb_status = 0;
1342 }
1343
1344 break;
1345
1346 case USB_RECIP_ENDPOINT:
1347 dev_dbg(bdc->dev, "USB_RECIP_ENDPOINT\n");
1348 epnum = wIndex & USB_ENDPOINT_NUMBER_MASK;
1349 if (epnum) {
1350 if ((wIndex & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
1351 epnum = epnum*2 + 1;
1352 else
1353 epnum *= 2;
1354 } else {
1355 epnum = 1; /* EP0 */
1356 }
1357
1358 ep = bdc->bdc_ep_array[epnum];
1359 if (!ep) {
1360 dev_err(bdc->dev, "ISSUE, GET_STATUS for invalid EP ?");
1361 return -EINVAL;
1362 }
1363 if (ep->flags & BDC_EP_STALL)
1364 usb_status |= 1 << USB_ENDPOINT_HALT;
1365
1366 break;
1367 default:
1368 dev_err(bdc->dev, "Unknown recipient for get_status\n");
1369 return -EINVAL;
1370 }
1371 /* prepare a data stage for GET_STATUS */
1372 dev_dbg(bdc->dev, "usb_status=%08x\n", usb_status);
1373 *(__le16 *)bdc->ep0_response_buff = cpu_to_le16(usb_status);
1374 bdc->ep0_req.usb_req.length = 2;
1375 bdc->ep0_req.usb_req.buf = &bdc->ep0_response_buff;
1376 ep0_queue_data_stage(bdc);
1377
1378 return 0;
1379}
1380
1381static void ep0_set_sel_cmpl(struct usb_ep *_ep, struct usb_request *_req)
1382{
1383 /* ep0_set_sel_cmpl */
1384}
1385
1386/* Queue data stage to handle 6 byte SET_SEL request */
1387static int ep0_set_sel(struct bdc *bdc,
1388 struct usb_ctrlrequest *setup_pkt)
1389{
1390 struct bdc_ep *ep;
1391 u16 wLength;
1392 u16 wValue;
1393
1394 dev_dbg(bdc->dev, "%s\n", __func__);
1395 wValue = le16_to_cpu(setup_pkt->wValue);
1396 wLength = le16_to_cpu(setup_pkt->wLength);
1397 if (unlikely(wLength != 6)) {
1398 dev_err(bdc->dev, "%s Wrong wLength:%d\n", __func__, wLength);
1399 return -EINVAL;
1400 }
1401 ep = bdc->bdc_ep_array[1];
1402 bdc->ep0_req.ep = ep;
1403 bdc->ep0_req.usb_req.length = 6;
1404 bdc->ep0_req.usb_req.buf = bdc->ep0_response_buff;
1405 bdc->ep0_req.usb_req.complete = ep0_set_sel_cmpl;
1406 ep0_queue_data_stage(bdc);
1407
1408 return 0;
1409}
1410
1411/*
1412 * Queue a 0 byte bd only if wLength is more than the length and and length is
1413 * a multiple of MaxPacket then queue 0 byte BD
1414 */
1415static int ep0_queue_zlp(struct bdc *bdc)
1416{
1417 int ret;
1418
1419 dev_dbg(bdc->dev, "%s\n", __func__);
1420 bdc->ep0_req.ep = bdc->bdc_ep_array[1];
1421 bdc->ep0_req.usb_req.length = 0;
1422 bdc->ep0_req.usb_req.complete = NULL;
1423 bdc->ep0_state = WAIT_FOR_DATA_START;
1424 ret = bdc_queue_xfr(bdc, &bdc->ep0_req);
1425 if (ret) {
1426 dev_err(bdc->dev, "err queueing zlp :%d\n", ret);
1427 return ret;
1428 }
1429 bdc->ep0_state = WAIT_FOR_DATA_XMIT;
1430
1431 return 0;
1432}
1433
1434/* Control request handler */
1435static int handle_control_request(struct bdc *bdc)
1436{
1437 enum usb_device_state state = bdc->gadget.state;
1438 struct usb_ctrlrequest *setup_pkt;
1439 int delegate_setup = 0;
1440 int ret = 0;
1441 int config = 0;
1442
1443 setup_pkt = &bdc->setup_pkt;
1444 dev_dbg(bdc->dev, "%s\n", __func__);
1445 if ((setup_pkt->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
1446 switch (setup_pkt->bRequest) {
1447 case USB_REQ_SET_ADDRESS:
1448 dev_dbg(bdc->dev, "USB_REQ_SET_ADDRESS\n");
1449 ret = ep0_set_address(bdc, setup_pkt);
1450 bdc->devstatus &= DEVSTATUS_CLEAR;
1451 break;
1452
1453 case USB_REQ_SET_CONFIGURATION:
1454 dev_dbg(bdc->dev, "USB_REQ_SET_CONFIGURATION\n");
1455 if (state == USB_STATE_ADDRESS) {
1456 usb_gadget_set_state(&bdc->gadget,
1457 USB_STATE_CONFIGURED);
1458 } else if (state == USB_STATE_CONFIGURED) {
1459 /*
1460 * USB2 spec sec 9.4.7, if wValue is 0 then dev
1461 * is moved to addressed state
1462 */
1463 config = le16_to_cpu(setup_pkt->wValue);
1464 if (!config)
1465 usb_gadget_set_state(
1466 &bdc->gadget,
1467 USB_STATE_ADDRESS);
1468 }
1469 delegate_setup = 1;
1470 break;
1471
1472 case USB_REQ_SET_FEATURE:
1473 dev_dbg(bdc->dev, "USB_REQ_SET_FEATURE\n");
1474 ret = ep0_handle_feature(bdc, setup_pkt, 1);
1475 break;
1476
1477 case USB_REQ_CLEAR_FEATURE:
1478 dev_dbg(bdc->dev, "USB_REQ_CLEAR_FEATURE\n");
1479 ret = ep0_handle_feature(bdc, setup_pkt, 0);
1480 break;
1481
1482 case USB_REQ_GET_STATUS:
1483 dev_dbg(bdc->dev, "USB_REQ_GET_STATUS\n");
1484 ret = ep0_handle_status(bdc, setup_pkt);
1485 break;
1486
1487 case USB_REQ_SET_SEL:
1488 dev_dbg(bdc->dev, "USB_REQ_SET_SEL\n");
1489 ret = ep0_set_sel(bdc, setup_pkt);
1490 break;
1491
1492 case USB_REQ_SET_ISOCH_DELAY:
1493 dev_warn(bdc->dev,
1494 "USB_REQ_SET_ISOCH_DELAY not handled\n");
1495 ret = 0;
1496 break;
1497 default:
1498 delegate_setup = 1;
1499 }
1500 } else {
1501 delegate_setup = 1;
1502 }
1503
1504 if (delegate_setup) {
1505 spin_unlock(&bdc->lock);
1506 ret = bdc->gadget_driver->setup(&bdc->gadget, setup_pkt);
1507 spin_lock(&bdc->lock);
1508 }
1509
1510 return ret;
1511}
1512
1513/* EP0: Data stage started */
1514void bdc_xsf_ep0_data_start(struct bdc *bdc, struct bdc_sr *sreport)
1515{
1516 struct bdc_ep *ep;
1517 int ret = 0;
1518
1519 dev_dbg(bdc->dev, "%s\n", __func__);
1520 ep = bdc->bdc_ep_array[1];
1521 /* If ep0 was stalled, the clear it first */
1522 if (ep->flags & BDC_EP_STALL) {
1523 ret = ep_set_halt(ep, 0);
1524 if (ret)
1525 goto err;
1526 }
1527 if (bdc->ep0_state != WAIT_FOR_DATA_START)
1528 dev_warn(bdc->dev,
1529 "Data stage not expected ep0_state:%s\n",
1530 ep0_state_string[bdc->ep0_state]);
1531
1532 ret = handle_control_request(bdc);
1533 if (ret == USB_GADGET_DELAYED_STATUS) {
1534 /*
1535 * The ep0 state will remain WAIT_FOR_DATA_START till
1536 * we received ep_queue on ep0
1537 */
1538 bdc->delayed_status = true;
1539 return;
1540 }
1541 if (!ret) {
1542 bdc->ep0_state = WAIT_FOR_DATA_XMIT;
1543 dev_dbg(bdc->dev,
1544 "ep0_state:%s", ep0_state_string[bdc->ep0_state]);
1545 return;
1546 }
1547err:
1548 ep0_stall(bdc);
1549}
1550
1551/* EP0: status stage started */
1552void bdc_xsf_ep0_status_start(struct bdc *bdc, struct bdc_sr *sreport)
1553{
1554 struct usb_ctrlrequest *setup_pkt;
1555 struct bdc_ep *ep;
1556 int ret = 0;
1557
1558 dev_dbg(bdc->dev,
1559 "%s ep0_state:%s",
1560 __func__, ep0_state_string[bdc->ep0_state]);
1561 ep = bdc->bdc_ep_array[1];
1562
1563 /* check if ZLP was queued? */
1564 if (bdc->zlp_needed)
1565 bdc->zlp_needed = false;
1566
1567 if (ep->flags & BDC_EP_STALL) {
1568 ret = ep_set_halt(ep, 0);
1569 if (ret)
1570 goto err;
1571 }
1572
1573 if ((bdc->ep0_state != WAIT_FOR_STATUS_START) &&
1574 (bdc->ep0_state != WAIT_FOR_DATA_XMIT))
1575 dev_err(bdc->dev,
1576 "Status stage recv but ep0_state:%s\n",
1577 ep0_state_string[bdc->ep0_state]);
1578
1579 /* check if data stage is in progress ? */
1580 if (bdc->ep0_state == WAIT_FOR_DATA_XMIT) {
1581 bdc->ep0_state = STATUS_PENDING;
1582 /* Status stage will be queued upon Data stage transmit event */
1583 dev_dbg(bdc->dev,
1584 "status started but data not transmitted yet\n");
1585 return;
1586 }
1587 setup_pkt = &bdc->setup_pkt;
1588
1589 /*
1590 * 2 stage setup then only process the setup, for 3 stage setup the date
1591 * stage is already handled
1592 */
1593 if (!le16_to_cpu(setup_pkt->wLength)) {
1594 ret = handle_control_request(bdc);
1595 if (ret == USB_GADGET_DELAYED_STATUS) {
1596 bdc->delayed_status = true;
1597 /* ep0_state will remain WAIT_FOR_STATUS_START */
1598 return;
1599 }
1600 }
1601 if (!ret) {
1602 /* Queue a status stage BD */
1603 ep0_queue_status_stage(bdc);
1604 bdc->ep0_state = WAIT_FOR_STATUS_XMIT;
1605 dev_dbg(bdc->dev,
1606 "ep0_state:%s", ep0_state_string[bdc->ep0_state]);
1607 return;
1608 }
1609err:
1610 ep0_stall(bdc);
1611}
1612
1613/* Helper function to update ep0 upon SR with xsf_succ or xsf_short */
1614static void ep0_xsf_complete(struct bdc *bdc, struct bdc_sr *sreport)
1615{
1616 dev_dbg(bdc->dev, "%s\n", __func__);
1617 switch (bdc->ep0_state) {
1618 case WAIT_FOR_DATA_XMIT:
1619 bdc->ep0_state = WAIT_FOR_STATUS_START;
1620 break;
1621 case WAIT_FOR_STATUS_XMIT:
1622 bdc->ep0_state = WAIT_FOR_SETUP;
1623 if (bdc->test_mode) {
1624 int ret;
1625
1626 dev_dbg(bdc->dev, "test_mode:%d\n", bdc->test_mode);
1627 ret = bdc_set_test_mode(bdc);
1628 if (ret < 0) {
1629 dev_err(bdc->dev, "Err in setting Test mode\n");
1630 return;
1631 }
1632 bdc->test_mode = 0;
1633 }
1634 break;
1635 case STATUS_PENDING:
1636 bdc_xsf_ep0_status_start(bdc, sreport);
1637 break;
1638
1639 default:
1640 dev_err(bdc->dev,
1641 "Unknown ep0_state:%s\n",
1642 ep0_state_string[bdc->ep0_state]);
1643
1644 }
1645}
1646
1647/* xfr completion status report handler */
1648void bdc_sr_xsf(struct bdc *bdc, struct bdc_sr *sreport)
1649{
1650 struct bdc_ep *ep;
1651 u32 sr_status;
1652 u8 ep_num;
1653
1654 ep_num = (le32_to_cpu(sreport->offset[3])>>4) & 0x1f;
1655 ep = bdc->bdc_ep_array[ep_num];
1656 if (!ep || !(ep->flags & BDC_EP_ENABLED)) {
1657 dev_err(bdc->dev, "xsf for ep not enabled\n");
1658 return;
1659 }
1660 /*
1661 * check if this transfer is after link went from U3->U0 due
1662 * to remote wakeup
1663 */
1664 if (bdc->devstatus & FUNC_WAKE_ISSUED) {
1665 bdc->devstatus &= ~(FUNC_WAKE_ISSUED);
1666 dev_dbg(bdc->dev, "%s clearing FUNC_WAKE_ISSUED flag\n",
1667 __func__);
1668 }
1669 sr_status = XSF_STS(le32_to_cpu(sreport->offset[3]));
1670 dev_dbg_ratelimited(bdc->dev, "%s sr_status=%d ep:%s\n",
1671 __func__, sr_status, ep->name);
1672
1673 switch (sr_status) {
1674 case XSF_SUCC:
1675 case XSF_SHORT:
1676 handle_xsr_succ_status(bdc, ep, sreport);
1677 if (ep_num == 1)
1678 ep0_xsf_complete(bdc, sreport);
1679 break;
1680
1681 case XSF_SETUP_RECV:
1682 case XSF_DATA_START:
1683 case XSF_STATUS_START:
1684 if (ep_num != 1) {
1685 dev_err(bdc->dev,
1686 "ep0 related packets on non ep0 endpoint");
1687 return;
1688 }
1689 bdc->sr_xsf_ep0[sr_status - XSF_SETUP_RECV](bdc, sreport);
1690 break;
1691
1692 case XSF_BABB:
1693 if (ep_num == 1) {
1694 dev_dbg(bdc->dev, "Babble on ep0 zlp_need:%d\n",
1695 bdc->zlp_needed);
1696 /*
1697 * If the last completed transfer had wLength >Data Len,
1698 * and Len is multiple of MaxPacket,then queue ZLP
1699 */
1700 if (bdc->zlp_needed) {
1701 /* queue 0 length bd */
1702 ep0_queue_zlp(bdc);
1703 return;
1704 }
1705 }
1706 dev_warn(bdc->dev, "Babble on ep not handled\n");
1707 break;
1708 default:
1709 dev_warn(bdc->dev, "sr status not handled:%x\n", sr_status);
1710 break;
1711 }
1712}
1713
1714static int bdc_gadget_ep_queue(struct usb_ep *_ep,
1715 struct usb_request *_req, gfp_t gfp_flags)
1716{
1717 struct bdc_req *req;
1718 unsigned long flags;
1719 struct bdc_ep *ep;
1720 struct bdc *bdc;
1721 int ret;
1722
1723 if (!_ep || !_ep->desc)
1724 return -ESHUTDOWN;
1725
1726 if (!_req || !_req->complete || !_req->buf)
1727 return -EINVAL;
1728
1729 ep = to_bdc_ep(_ep);
1730 req = to_bdc_req(_req);
1731 bdc = ep->bdc;
1732 dev_dbg(bdc->dev, "%s ep:%p req:%p\n", __func__, ep, req);
1733 dev_dbg(bdc->dev, "queuing request %p to %s length %d zero:%d\n",
1734 _req, ep->name, _req->length, _req->zero);
1735
1736 if (!ep->usb_ep.desc) {
1737 dev_warn(bdc->dev,
1738 "trying to queue req %p to disabled %s\n",
1739 _req, ep->name);
1740 return -ESHUTDOWN;
1741 }
1742
1743 if (_req->length > MAX_XFR_LEN) {
1744 dev_warn(bdc->dev,
1745 "req length > supported MAX:%d requested:%d\n",
1746 MAX_XFR_LEN, _req->length);
1747 return -EOPNOTSUPP;
1748 }
1749 spin_lock_irqsave(&bdc->lock, flags);
1750 if (ep == bdc->bdc_ep_array[1])
1751 ret = ep0_queue(ep, req);
1752 else
1753 ret = ep_queue(ep, req);
1754
1755 spin_unlock_irqrestore(&bdc->lock, flags);
1756
1757 return ret;
1758}
1759
1760static int bdc_gadget_ep_dequeue(struct usb_ep *_ep,
1761 struct usb_request *_req)
1762{
1763 struct bdc_req *req;
1764 unsigned long flags;
1765 struct bdc_ep *ep;
1766 struct bdc *bdc;
1767 int ret;
1768
1769 if (!_ep || !_req)
1770 return -EINVAL;
1771
1772 ep = to_bdc_ep(_ep);
1773 req = to_bdc_req(_req);
1774 bdc = ep->bdc;
1775 dev_dbg(bdc->dev, "%s ep:%s req:%p\n", __func__, ep->name, req);
1776 bdc_dbg_bd_list(bdc, ep);
1777 spin_lock_irqsave(&bdc->lock, flags);
1778 /* make sure it's still queued on this endpoint */
1779 list_for_each_entry(req, &ep->queue, queue) {
1780 if (&req->usb_req == _req)
1781 break;
1782 }
1783 if (&req->usb_req != _req) {
1784 spin_unlock_irqrestore(&bdc->lock, flags);
1785 dev_err(bdc->dev, "usb_req !=req n");
1786 return -EINVAL;
1787 }
1788 ret = ep_dequeue(ep, req);
1789 if (ret) {
1790 ret = -EOPNOTSUPP;
1791 goto err;
1792 }
1793 bdc_req_complete(ep, req, -ECONNRESET);
1794
1795err:
1796 bdc_dbg_bd_list(bdc, ep);
1797 spin_unlock_irqrestore(&bdc->lock, flags);
1798
1799 return ret;
1800}
1801
1802static int bdc_gadget_ep_set_halt(struct usb_ep *_ep, int value)
1803{
1804 unsigned long flags;
1805 struct bdc_ep *ep;
1806 struct bdc *bdc;
1807 int ret;
1808
1809 ep = to_bdc_ep(_ep);
1810 bdc = ep->bdc;
1811 dev_dbg(bdc->dev, "%s ep:%s value=%d\n", __func__, ep->name, value);
1812 spin_lock_irqsave(&bdc->lock, flags);
1813 if (usb_endpoint_xfer_isoc(ep->usb_ep.desc))
1814 ret = -EINVAL;
1815 else if (!list_empty(&ep->queue))
1816 ret = -EAGAIN;
1817 else
1818 ret = ep_set_halt(ep, value);
1819
1820 spin_unlock_irqrestore(&bdc->lock, flags);
1821
1822 return ret;
1823}
1824
1825static struct usb_request *bdc_gadget_alloc_request(struct usb_ep *_ep,
1826 gfp_t gfp_flags)
1827{
1828 struct bdc_req *req;
1829 struct bdc_ep *ep;
1830
1831 req = kzalloc(sizeof(*req), gfp_flags);
1832 if (!req)
1833 return NULL;
1834
1835 ep = to_bdc_ep(_ep);
1836 req->ep = ep;
1837 req->epnum = ep->ep_num;
1838 req->usb_req.dma = DMA_ADDR_INVALID;
1839 dev_dbg(ep->bdc->dev, "%s ep:%s req:%p\n", __func__, ep->name, req);
1840
1841 return &req->usb_req;
1842}
1843
1844static void bdc_gadget_free_request(struct usb_ep *_ep,
1845 struct usb_request *_req)
1846{
1847 struct bdc_req *req;
1848
1849 req = to_bdc_req(_req);
1850 kfree(req);
1851}
1852
1853/* endpoint operations */
1854
1855/* configure endpoint and also allocate resources */
1856static int bdc_gadget_ep_enable(struct usb_ep *_ep,
1857 const struct usb_endpoint_descriptor *desc)
1858{
1859 unsigned long flags;
1860 struct bdc_ep *ep;
1861 struct bdc *bdc;
1862 int ret;
1863
1864 if (!_ep || !desc || desc->bDescriptorType != USB_DT_ENDPOINT) {
1865 pr_debug("bdc_gadget_ep_enable invalid parameters\n");
1866 return -EINVAL;
1867 }
1868
1869 if (!desc->wMaxPacketSize) {
1870 pr_debug("bdc_gadget_ep_enable missing wMaxPacketSize\n");
1871 return -EINVAL;
1872 }
1873
1874 ep = to_bdc_ep(_ep);
1875 bdc = ep->bdc;
1876
1877 /* Sanity check, upper layer will not send enable for ep0 */
1878 if (ep == bdc->bdc_ep_array[1])
1879 return -EINVAL;
1880
1881 if (!bdc->gadget_driver
1882 || bdc->gadget.speed == USB_SPEED_UNKNOWN) {
1883 return -ESHUTDOWN;
1884 }
1885
1886 dev_dbg(bdc->dev, "%s Enabling %s\n", __func__, ep->name);
1887 spin_lock_irqsave(&bdc->lock, flags);
1888 ep->desc = desc;
1889 ep->comp_desc = _ep->comp_desc;
1890 ret = bdc_ep_enable(ep);
1891 spin_unlock_irqrestore(&bdc->lock, flags);
1892
1893 return ret;
1894}
1895
1896static int bdc_gadget_ep_disable(struct usb_ep *_ep)
1897{
1898 unsigned long flags;
1899 struct bdc_ep *ep;
1900 struct bdc *bdc;
1901 int ret;
1902
1903 if (!_ep) {
1904 pr_debug("bdc: invalid parameters\n");
1905 return -EINVAL;
1906 }
1907 ep = to_bdc_ep(_ep);
1908 bdc = ep->bdc;
1909
1910 /* Upper layer will not call this for ep0, but do a sanity check */
1911 if (ep == bdc->bdc_ep_array[1]) {
1912 dev_warn(bdc->dev, "%s called for ep0\n", __func__);
1913 return -EINVAL;
1914 }
1915 dev_dbg(bdc->dev,
1916 "%s() ep:%s ep->flags:%08x\n",
1917 __func__, ep->name, ep->flags);
1918
1919 if (!(ep->flags & BDC_EP_ENABLED)) {
1920 dev_warn(bdc->dev, "%s is already disabled\n", ep->name);
1921 return 0;
1922 }
1923 spin_lock_irqsave(&bdc->lock, flags);
1924 ret = bdc_ep_disable(ep);
1925 spin_unlock_irqrestore(&bdc->lock, flags);
1926
1927 return ret;
1928}
1929
1930static const struct usb_ep_ops bdc_gadget_ep_ops = {
1931 .enable = bdc_gadget_ep_enable,
1932 .disable = bdc_gadget_ep_disable,
1933 .alloc_request = bdc_gadget_alloc_request,
1934 .free_request = bdc_gadget_free_request,
1935 .queue = bdc_gadget_ep_queue,
1936 .dequeue = bdc_gadget_ep_dequeue,
1937 .set_halt = bdc_gadget_ep_set_halt
1938};
1939
1940/* dir = 1 is IN */
1941static int init_ep(struct bdc *bdc, u32 epnum, u32 dir)
1942{
1943 struct bdc_ep *ep;
1944
1945 dev_dbg(bdc->dev, "%s epnum=%d dir=%d\n", __func__, epnum, dir);
1946 ep = kzalloc(sizeof(*ep), GFP_KERNEL);
1947 if (!ep)
1948 return -ENOMEM;
1949
1950 ep->bdc = bdc;
1951 ep->dir = dir;
1952
1953 /* ep->ep_num is the index inside bdc_ep */
1954 if (epnum == 1) {
1955 ep->ep_num = 1;
1956 bdc->bdc_ep_array[ep->ep_num] = ep;
1957 snprintf(ep->name, sizeof(ep->name), "ep%d", epnum - 1);
1958 usb_ep_set_maxpacket_limit(&ep->usb_ep, EP0_MAX_PKT_SIZE);
1959 ep->comp_desc = NULL;
1960 bdc->gadget.ep0 = &ep->usb_ep;
1961 } else {
1962 if (dir)
1963 ep->ep_num = epnum * 2 - 1;
1964 else
1965 ep->ep_num = epnum * 2 - 2;
1966
1967 bdc->bdc_ep_array[ep->ep_num] = ep;
1968 snprintf(ep->name, sizeof(ep->name), "ep%d%s", epnum - 1,
1969 dir & 1 ? "in" : "out");
1970
1971 usb_ep_set_maxpacket_limit(&ep->usb_ep, 1024);
1972 ep->usb_ep.max_streams = 0;
1973 list_add_tail(&ep->usb_ep.ep_list, &bdc->gadget.ep_list);
1974 }
1975 ep->usb_ep.ops = &bdc_gadget_ep_ops;
1976 ep->usb_ep.name = ep->name;
1977 ep->flags = 0;
1978 ep->ignore_next_sr = false;
1979 dev_dbg(bdc->dev, "ep=%p ep->usb_ep.name=%s epnum=%d ep->epnum=%d\n",
1980 ep, ep->usb_ep.name, epnum, ep->ep_num);
1981
1982 INIT_LIST_HEAD(&ep->queue);
1983
1984 return 0;
1985}
1986
1987/* Init all ep */
1988int bdc_init_ep(struct bdc *bdc)
1989{
1990 u8 epnum;
1991 int ret;
1992
1993 dev_dbg(bdc->dev, "%s()\n", __func__);
1994 INIT_LIST_HEAD(&bdc->gadget.ep_list);
1995 /* init ep0 */
1996 ret = init_ep(bdc, 1, 0);
1997 if (ret) {
1998 dev_err(bdc->dev, "init ep ep0 fail %d\n", ret);
1999 return ret;
2000 }
2001
2002 for (epnum = 2; epnum <= bdc->num_eps / 2; epnum++) {
2003 /* OUT */
2004 ret = init_ep(bdc, epnum, 0);
2005 if (ret) {
2006 dev_err(bdc->dev,
2007 "init ep failed for:%d error: %d\n",
2008 epnum, ret);
2009 return ret;
2010 }
2011
2012 /* IN */
2013 ret = init_ep(bdc, epnum, 1);
2014 if (ret) {
2015 dev_err(bdc->dev,
2016 "init ep failed for:%d error: %d\n",
2017 epnum, ret);
2018 return ret;
2019 }
2020 }
2021
2022 return 0;
2023}
diff --git a/drivers/usb/gadget/udc/bdc/bdc_ep.h b/drivers/usb/gadget/udc/bdc/bdc_ep.h
new file mode 100644
index 000000000000..8a6b36cbf2ea
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc_ep.h
@@ -0,0 +1,22 @@
1/*
2 * bdc_ep.h - header for the BDC debug functions
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14#ifndef __LINUX_BDC_EP_H__
15#define __LINUX_BDC_EP_H__
16
17int bdc_init_ep(struct bdc *);
18int bdc_ep_disable(struct bdc_ep *);
19int bdc_ep_enable(struct bdc_ep *);
20void bdc_free_ep(struct bdc *);
21
22#endif /* __LINUX_BDC_EP_H__ */
diff --git a/drivers/usb/gadget/udc/bdc/bdc_pci.c b/drivers/usb/gadget/udc/bdc/bdc_pci.c
new file mode 100644
index 000000000000..02968842b359
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc_pci.c
@@ -0,0 +1,132 @@
1/*
2 * bdc_pci.c - BRCM BDC USB3.0 device controller PCI interface file.
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * Based on drivers under drivers/usb/
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 *
15 */
16
17#include <linux/kernel.h>
18#include <linux/module.h>
19#include <linux/slab.h>
20#include <linux/pci.h>
21#include <linux/pci_ids.h>
22#include <linux/platform_device.h>
23
24#include "bdc.h"
25
26#define BDC_PCI_PID 0x1570
27
28struct bdc_pci {
29 struct device *dev;
30 struct platform_device *bdc;
31};
32
33static int bdc_setup_msi(struct pci_dev *pci)
34{
35 int ret;
36
37 ret = pci_enable_msi(pci);
38 if (ret) {
39 pr_err("failed to allocate MSI entry\n");
40 return ret;
41 }
42
43 return ret;
44}
45
46static int bdc_pci_probe(struct pci_dev *pci, const struct pci_device_id *id)
47{
48 struct resource res[2];
49 struct platform_device *bdc;
50 struct bdc_pci *glue;
51 int ret = -ENOMEM;
52
53 glue = devm_kzalloc(&pci->dev, sizeof(*glue), GFP_KERNEL);
54 if (!glue)
55 return -ENOMEM;
56
57 glue->dev = &pci->dev;
58 ret = pci_enable_device(pci);
59 if (ret) {
60 dev_err(&pci->dev, "failed to enable pci device\n");
61 return -ENODEV;
62 }
63 pci_set_master(pci);
64
65 bdc = platform_device_alloc(BRCM_BDC_NAME, PLATFORM_DEVID_AUTO);
66 if (!bdc)
67 return -ENOMEM;
68
69 memset(res, 0x00, sizeof(struct resource) * ARRAY_SIZE(res));
70 bdc_setup_msi(pci);
71
72 res[0].start = pci_resource_start(pci, 0);
73 res[0].end = pci_resource_end(pci, 0);
74 res[0].name = BRCM_BDC_NAME;
75 res[0].flags = IORESOURCE_MEM;
76
77 res[1].start = pci->irq;
78 res[1].name = BRCM_BDC_NAME;
79 res[1].flags = IORESOURCE_IRQ;
80
81 ret = platform_device_add_resources(bdc, res, ARRAY_SIZE(res));
82 if (ret) {
83 dev_err(&pci->dev,
84 "couldn't add resources to bdc device\n");
85 return ret;
86 }
87
88 pci_set_drvdata(pci, glue);
89
90 dma_set_coherent_mask(&bdc->dev, pci->dev.coherent_dma_mask);
91
92 bdc->dev.dma_mask = pci->dev.dma_mask;
93 bdc->dev.dma_parms = pci->dev.dma_parms;
94 bdc->dev.parent = &pci->dev;
95 glue->bdc = bdc;
96
97 ret = platform_device_add(bdc);
98 if (ret) {
99 dev_err(&pci->dev, "failed to register bdc device\n");
100 platform_device_put(bdc);
101 return ret;
102 }
103
104 return 0;
105}
106
107static void bdc_pci_remove(struct pci_dev *pci)
108{
109 struct bdc_pci *glue = pci_get_drvdata(pci);
110
111 platform_device_unregister(glue->bdc);
112 pci_disable_msi(pci);
113}
114
115static struct pci_device_id bdc_pci_id_table[] = {
116 { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BDC_PCI_PID), },
117 {} /* Terminating Entry */
118};
119
120MODULE_DEVICE_TABLE(pci, bdc_pci_id_table);
121
122static struct pci_driver bdc_pci_driver = {
123 .name = "bdc-pci",
124 .id_table = bdc_pci_id_table,
125 .probe = bdc_pci_probe,
126 .remove = bdc_pci_remove,
127};
128
129MODULE_AUTHOR("Ashwini Pahuja <ashwini.linux@gmail.com>");
130MODULE_LICENSE("GPL");
131MODULE_DESCRIPTION("BRCM BDC USB3 PCI Glue layer");
132module_pci_driver(bdc_pci_driver);
diff --git a/drivers/usb/gadget/udc/bdc/bdc_udc.c b/drivers/usb/gadget/udc/bdc/bdc_udc.c
new file mode 100644
index 000000000000..3700ce70b0be
--- /dev/null
+++ b/drivers/usb/gadget/udc/bdc/bdc_udc.c
@@ -0,0 +1,587 @@
1/*
2 * bdc_udc.c - BRCM BDC USB3.0 device controller gagdet ops
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * Author: Ashwini Pahuja
7 *
8 * Based on drivers under drivers/usb/gadget/udc/
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 *
15 */
16#include <linux/module.h>
17#include <linux/pci.h>
18#include <linux/dma-mapping.h>
19#include <linux/kernel.h>
20#include <linux/delay.h>
21#include <linux/ioport.h>
22#include <linux/sched.h>
23#include <linux/slab.h>
24#include <linux/errno.h>
25#include <linux/init.h>
26#include <linux/timer.h>
27#include <linux/list.h>
28#include <linux/interrupt.h>
29#include <linux/moduleparam.h>
30#include <linux/device.h>
31#include <linux/usb/ch9.h>
32#include <linux/usb/gadget.h>
33#include <linux/usb/otg.h>
34#include <linux/pm.h>
35#include <linux/io.h>
36#include <linux/irq.h>
37#include <asm/unaligned.h>
38#include <linux/platform_device.h>
39
40#include "bdc.h"
41#include "bdc_ep.h"
42#include "bdc_cmd.h"
43#include "bdc_dbg.h"
44
45static const struct usb_gadget_ops bdc_gadget_ops;
46
47static const char * const conn_speed_str[] = {
48 "Not connected",
49 "Full Speed",
50 "Low Speed",
51 "High Speed",
52 "Super Speed",
53};
54
55/* EP0 initial descripror */
56static struct usb_endpoint_descriptor bdc_gadget_ep0_desc = {
57 .bLength = USB_DT_ENDPOINT_SIZE,
58 .bDescriptorType = USB_DT_ENDPOINT,
59 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
60 .bEndpointAddress = 0,
61 .wMaxPacketSize = cpu_to_le16(EP0_MAX_PKT_SIZE),
62};
63
64/* Advance the srr dqp maintained by SW */
65static void srr_dqp_index_advc(struct bdc *bdc, u32 srr_num)
66{
67 struct srr *srr;
68
69 srr = &bdc->srr;
70 dev_dbg_ratelimited(bdc->dev, "srr->dqp_index:%d\n", srr->dqp_index);
71 srr->dqp_index++;
72 /* rollback to 0 if we are past the last */
73 if (srr->dqp_index == NUM_SR_ENTRIES)
74 srr->dqp_index = 0;
75}
76
77/* connect sr */
78static void bdc_uspc_connected(struct bdc *bdc)
79{
80 u32 speed, temp;
81 u32 usppms;
82 int ret;
83
84 temp = bdc_readl(bdc->regs, BDC_USPC);
85 speed = BDC_PSP(temp);
86 dev_dbg(bdc->dev, "%s speed=%x\n", __func__, speed);
87 switch (speed) {
88 case BDC_SPEED_SS:
89 bdc_gadget_ep0_desc.wMaxPacketSize =
90 cpu_to_le16(EP0_MAX_PKT_SIZE);
91 bdc->gadget.ep0->maxpacket = EP0_MAX_PKT_SIZE;
92 bdc->gadget.speed = USB_SPEED_SUPER;
93 /* Enable U1T in SS mode */
94 usppms = bdc_readl(bdc->regs, BDC_USPPMS);
95 usppms &= ~BDC_U1T(0xff);
96 usppms |= BDC_U1T(U1_TIMEOUT);
97 usppms |= BDC_PORT_W1S;
98 bdc_writel(bdc->regs, BDC_USPPMS, usppms);
99 break;
100
101 case BDC_SPEED_HS:
102 bdc_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64);
103 bdc->gadget.ep0->maxpacket = 64;
104 bdc->gadget.speed = USB_SPEED_HIGH;
105 break;
106
107 case BDC_SPEED_FS:
108 bdc_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64);
109 bdc->gadget.ep0->maxpacket = 64;
110 bdc->gadget.speed = USB_SPEED_FULL;
111 break;
112
113 case BDC_SPEED_LS:
114 bdc_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(8);
115 bdc->gadget.ep0->maxpacket = 8;
116 bdc->gadget.speed = USB_SPEED_LOW;
117 break;
118 default:
119 dev_err(bdc->dev, "UNDEFINED SPEED\n");
120 return;
121 }
122 dev_dbg(bdc->dev, "connected at %s\n", conn_speed_str[speed]);
123 /* Now we know the speed, configure ep0 */
124 bdc->bdc_ep_array[1]->desc = &bdc_gadget_ep0_desc;
125 ret = bdc_config_ep(bdc, bdc->bdc_ep_array[1]);
126 if (ret)
127 dev_err(bdc->dev, "EP0 config failed\n");
128 bdc->bdc_ep_array[1]->usb_ep.desc = &bdc_gadget_ep0_desc;
129 bdc->bdc_ep_array[1]->flags |= BDC_EP_ENABLED;
130 usb_gadget_set_state(&bdc->gadget, USB_STATE_DEFAULT);
131}
132
133/* device got disconnected */
134static void bdc_uspc_disconnected(struct bdc *bdc, bool reinit)
135{
136 struct bdc_ep *ep;
137
138 dev_dbg(bdc->dev, "%s\n", __func__);
139 /*
140 * Only stop ep0 from here, rest of the endpoints will be disabled
141 * from gadget_disconnect
142 */
143 ep = bdc->bdc_ep_array[1];
144 if (ep && (ep->flags & BDC_EP_ENABLED))
145 /* if enabled then stop and remove requests */
146 bdc_ep_disable(ep);
147
148 if (bdc->gadget_driver && bdc->gadget_driver->disconnect) {
149 spin_unlock(&bdc->lock);
150 bdc->gadget_driver->disconnect(&bdc->gadget);
151 spin_lock(&bdc->lock);
152 }
153 /* Set Unknown speed */
154 bdc->gadget.speed = USB_SPEED_UNKNOWN;
155 bdc->devstatus &= DEVSTATUS_CLEAR;
156 bdc->delayed_status = false;
157 bdc->reinit = reinit;
158 bdc->test_mode = false;
159}
160
161/* TNotify wkaeup timer */
162static void bdc_func_wake_timer(struct work_struct *work)
163{
164 struct bdc *bdc = container_of(work, struct bdc, func_wake_notify.work);
165 unsigned long flags;
166
167 dev_dbg(bdc->dev, "%s\n", __func__);
168 spin_lock_irqsave(&bdc->lock, flags);
169 /*
170 * Check if host has started transferring on endpoints
171 * FUNC_WAKE_ISSUED is cleared when transfer has started after resume
172 */
173 if (bdc->devstatus & FUNC_WAKE_ISSUED) {
174 dev_dbg(bdc->dev, "FUNC_WAKE_ISSUED FLAG IS STILL SET\n");
175 /* flag is still set, so again send func wake */
176 bdc_function_wake_fh(bdc, 0);
177 schedule_delayed_work(&bdc->func_wake_notify,
178 msecs_to_jiffies(BDC_TNOTIFY));
179 }
180 spin_unlock_irqrestore(&bdc->lock, flags);
181}
182
183/* handler for Link state change condition */
184static void handle_link_state_change(struct bdc *bdc, u32 uspc)
185{
186 u32 link_state;
187
188 dev_dbg(bdc->dev, "Link state change");
189 link_state = BDC_PST(uspc);
190 switch (link_state) {
191 case BDC_LINK_STATE_U3:
192 if ((bdc->gadget.speed != USB_SPEED_UNKNOWN) &&
193 bdc->gadget_driver->suspend) {
194 dev_dbg(bdc->dev, "Entered Suspend mode\n");
195 spin_unlock(&bdc->lock);
196 bdc->devstatus |= DEVICE_SUSPENDED;
197 bdc->gadget_driver->suspend(&bdc->gadget);
198 spin_lock(&bdc->lock);
199 }
200 break;
201 case BDC_LINK_STATE_U0:
202 if (bdc->devstatus & REMOTE_WAKEUP_ISSUED) {
203 bdc->devstatus &= ~REMOTE_WAKEUP_ISSUED;
204 if (bdc->gadget.speed == USB_SPEED_SUPER) {
205 bdc_function_wake_fh(bdc, 0);
206 bdc->devstatus |= FUNC_WAKE_ISSUED;
207 /*
208 * Start a Notification timer and check if the
209 * Host transferred anything on any of the EPs,
210 * if not then send function wake again every
211 * TNotification secs until host initiates
212 * transfer to BDC, USB3 spec Table 8.13
213 */
214 schedule_delayed_work(
215 &bdc->func_wake_notify,
216 msecs_to_jiffies(BDC_TNOTIFY));
217 dev_dbg(bdc->dev, "sched func_wake_notify\n");
218 }
219 }
220 break;
221
222 case BDC_LINK_STATE_RESUME:
223 dev_dbg(bdc->dev, "Resumed from Suspend\n");
224 if (bdc->devstatus & DEVICE_SUSPENDED) {
225 bdc->gadget_driver->resume(&bdc->gadget);
226 bdc->devstatus &= ~DEVICE_SUSPENDED;
227 }
228 break;
229 default:
230 dev_dbg(bdc->dev, "link state:%d\n", link_state);
231 }
232}
233
234/* something changes on upstream port, handle it here */
235void bdc_sr_uspc(struct bdc *bdc, struct bdc_sr *sreport)
236{
237 u32 clear_flags = 0;
238 u32 uspc;
239 bool connected = false;
240 bool disconn = false;
241
242 uspc = bdc_readl(bdc->regs, BDC_USPC);
243 dev_dbg(bdc->dev, "%s uspc=0x%08x\n", __func__, uspc);
244
245 /* Port connect changed */
246 if (uspc & BDC_PCC) {
247 /* Vbus not present, and not connected to Downstream port */
248 if ((uspc & BDC_VBC) && !(uspc & BDC_VBS) && !(uspc & BDC_PCS))
249 disconn = true;
250 else if ((uspc & BDC_PCS) && !BDC_PST(uspc))
251 connected = true;
252 }
253
254 /* Change in VBus and VBus is present */
255 if ((uspc & BDC_VBC) && (uspc & BDC_VBS)) {
256 if (bdc->pullup) {
257 dev_dbg(bdc->dev, "Do a softconnect\n");
258 /* Attached state, do a softconnect */
259 bdc_softconn(bdc);
260 usb_gadget_set_state(&bdc->gadget, USB_STATE_POWERED);
261 }
262 clear_flags = BDC_VBC;
263 } else if ((uspc & BDC_PRS) || (uspc & BDC_PRC) || disconn) {
264 /* Hot reset, warm reset, 2.0 bus reset or disconn */
265 dev_dbg(bdc->dev, "Port reset or disconn\n");
266 bdc_uspc_disconnected(bdc, disconn);
267 clear_flags = BDC_PCC|BDC_PCS|BDC_PRS|BDC_PRC;
268 } else if ((uspc & BDC_PSC) && (uspc & BDC_PCS)) {
269 /* Change in Link state */
270 handle_link_state_change(bdc, uspc);
271 clear_flags = BDC_PSC|BDC_PCS;
272 }
273
274 /*
275 * In SS we might not have PRC bit set before connection, but in 2.0
276 * the PRC bit is set before connection, so moving this condition out
277 * of bus reset to handle both SS/2.0 speeds.
278 */
279 if (connected) {
280 /* This is the connect event for U0/L0 */
281 dev_dbg(bdc->dev, "Connected\n");
282 bdc_uspc_connected(bdc);
283 bdc->devstatus &= ~(DEVICE_SUSPENDED);
284 }
285 uspc = bdc_readl(bdc->regs, BDC_USPC);
286 uspc &= (~BDC_USPSC_RW);
287 dev_dbg(bdc->dev, "uspc=%x\n", uspc);
288 bdc_writel(bdc->regs, BDC_USPC, clear_flags);
289}
290
291/* Main interrupt handler for bdc */
292static irqreturn_t bdc_udc_interrupt(int irq, void *_bdc)
293{
294 u32 eqp_index, dqp_index, sr_type, srr_int;
295 struct bdc_sr *sreport;
296 struct bdc *bdc = _bdc;
297 u32 status;
298 int ret;
299
300 spin_lock(&bdc->lock);
301 status = bdc_readl(bdc->regs, BDC_BDCSC);
302 if (!(status & BDC_GIP)) {
303 spin_unlock(&bdc->lock);
304 return IRQ_NONE;
305 }
306 srr_int = bdc_readl(bdc->regs, BDC_SRRINT(0));
307 /* Check if the SRR IP bit it set? */
308 if (!(srr_int & BDC_SRR_IP)) {
309 dev_warn(bdc->dev, "Global irq pending but SRR IP is 0\n");
310 spin_unlock(&bdc->lock);
311 return IRQ_NONE;
312 }
313 eqp_index = BDC_SRR_EPI(srr_int);
314 dqp_index = BDC_SRR_DPI(srr_int);
315 dev_dbg(bdc->dev,
316 "%s eqp_index=%d dqp_index=%d srr.dqp_index=%d\n\n",
317 __func__, eqp_index, dqp_index, bdc->srr.dqp_index);
318
319 /* check for ring empty condition */
320 if (eqp_index == dqp_index) {
321 dev_dbg(bdc->dev, "SRR empty?\n");
322 spin_unlock(&bdc->lock);
323 return IRQ_HANDLED;
324 }
325
326 while (bdc->srr.dqp_index != eqp_index) {
327 sreport = &bdc->srr.sr_bds[bdc->srr.dqp_index];
328 /* sreport is read before using it */
329 rmb();
330 sr_type = le32_to_cpu(sreport->offset[3]) & BD_TYPE_BITMASK;
331 dev_dbg_ratelimited(bdc->dev, "sr_type=%d\n", sr_type);
332 switch (sr_type) {
333 case SR_XSF:
334 bdc->sr_handler[0](bdc, sreport);
335 break;
336
337 case SR_USPC:
338 bdc->sr_handler[1](bdc, sreport);
339 break;
340 default:
341 dev_warn(bdc->dev, "SR:%d not handled\n", sr_type);
342 }
343 /* Advance the srr dqp index */
344 srr_dqp_index_advc(bdc, 0);
345 }
346 /* update the hw dequeue pointer */
347 srr_int = bdc_readl(bdc->regs, BDC_SRRINT(0));
348 srr_int &= ~BDC_SRR_DPI_MASK;
349 srr_int &= ~(BDC_SRR_RWS|BDC_SRR_RST|BDC_SRR_ISR);
350 srr_int |= ((bdc->srr.dqp_index) << 16);
351 srr_int |= BDC_SRR_IP;
352 bdc_writel(bdc->regs, BDC_SRRINT(0), srr_int);
353 srr_int = bdc_readl(bdc->regs, BDC_SRRINT(0));
354 if (bdc->reinit) {
355 ret = bdc_reinit(bdc);
356 if (ret)
357 dev_err(bdc->dev, "err in bdc reinit\n");
358 }
359
360 spin_unlock(&bdc->lock);
361
362 return IRQ_HANDLED;
363}
364
365/* Gadget ops */
366static int bdc_udc_start(struct usb_gadget *gadget,
367 struct usb_gadget_driver *driver)
368{
369 struct bdc *bdc = gadget_to_bdc(gadget);
370 unsigned long flags;
371 int ret = 0;
372
373 dev_dbg(bdc->dev, "%s()\n", __func__);
374 spin_lock_irqsave(&bdc->lock, flags);
375 if (bdc->gadget_driver) {
376 dev_err(bdc->dev, "%s is already bound to %s\n",
377 bdc->gadget.name,
378 bdc->gadget_driver->driver.name);
379 ret = -EBUSY;
380 goto err;
381 }
382 /*
383 * Run the controller from here and when BDC is connected to
384 * Host then driver will receive a USPC SR with VBUS present
385 * and then driver will do a softconnect.
386 */
387 ret = bdc_run(bdc);
388 if (ret) {
389 dev_err(bdc->dev, "%s bdc run fail\n", __func__);
390 goto err;
391 }
392 bdc->gadget_driver = driver;
393 bdc->gadget.dev.driver = &driver->driver;
394err:
395 spin_unlock_irqrestore(&bdc->lock, flags);
396
397 return ret;
398}
399
400static int bdc_udc_stop(struct usb_gadget *gadget)
401{
402 struct bdc *bdc = gadget_to_bdc(gadget);
403 unsigned long flags;
404
405 dev_dbg(bdc->dev, "%s()\n", __func__);
406 spin_lock_irqsave(&bdc->lock, flags);
407 bdc_stop(bdc);
408 bdc->gadget_driver = NULL;
409 bdc->gadget.dev.driver = NULL;
410 spin_unlock_irqrestore(&bdc->lock, flags);
411
412 return 0;
413}
414
415static int bdc_udc_pullup(struct usb_gadget *gadget, int is_on)
416{
417 struct bdc *bdc = gadget_to_bdc(gadget);
418 unsigned long flags;
419 u32 uspc;
420
421 dev_dbg(bdc->dev, "%s() is_on:%d\n", __func__, is_on);
422 if (!gadget)
423 return -EINVAL;
424
425 spin_lock_irqsave(&bdc->lock, flags);
426 if (!is_on) {
427 bdc_softdisconn(bdc);
428 bdc->pullup = false;
429 } else {
430 /*
431 * For a self powered device, we need to wait till we receive
432 * a VBUS change and Vbus present event, then if pullup flag
433 * is set, then only we present the Termintation.
434 */
435 bdc->pullup = true;
436 /*
437 * Check if BDC is already connected to Host i.e Vbus=1,
438 * if yes, then present TERM now, this is typical for bus
439 * powered devices.
440 */
441 uspc = bdc_readl(bdc->regs, BDC_USPC);
442 if (uspc & BDC_VBS)
443 bdc_softconn(bdc);
444 }
445 spin_unlock_irqrestore(&bdc->lock, flags);
446
447 return 0;
448}
449
450static int bdc_udc_set_selfpowered(struct usb_gadget *gadget,
451 int is_self)
452{
453 struct bdc *bdc = gadget_to_bdc(gadget);
454 unsigned long flags;
455
456 dev_dbg(bdc->dev, "%s()\n", __func__);
457 spin_lock_irqsave(&bdc->lock, flags);
458 if (!is_self)
459 bdc->devstatus |= 1 << USB_DEVICE_SELF_POWERED;
460 else
461 bdc->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED);
462
463 spin_unlock_irqrestore(&bdc->lock, flags);
464
465 return 0;
466}
467
468static int bdc_udc_wakeup(struct usb_gadget *gadget)
469{
470 struct bdc *bdc = gadget_to_bdc(gadget);
471 unsigned long flags;
472 u8 link_state;
473 u32 uspc;
474 int ret = 0;
475
476 dev_dbg(bdc->dev,
477 "%s() bdc->devstatus=%08x\n",
478 __func__, bdc->devstatus);
479
480 if (!(bdc->devstatus & REMOTE_WAKE_ENABLE))
481 return -EOPNOTSUPP;
482
483 spin_lock_irqsave(&bdc->lock, flags);
484 uspc = bdc_readl(bdc->regs, BDC_USPC);
485 link_state = BDC_PST(uspc);
486 dev_dbg(bdc->dev, "link_state =%d portsc=%x", link_state, uspc);
487 if (link_state != BDC_LINK_STATE_U3) {
488 dev_warn(bdc->dev,
489 "can't wakeup from link state %d\n",
490 link_state);
491 ret = -EINVAL;
492 goto out;
493 }
494 if (bdc->gadget.speed == USB_SPEED_SUPER)
495 bdc->devstatus |= REMOTE_WAKEUP_ISSUED;
496
497 uspc &= ~BDC_PST_MASK;
498 uspc &= (~BDC_USPSC_RW);
499 uspc |= BDC_PST(BDC_LINK_STATE_U0);
500 uspc |= BDC_SWS;
501 bdc_writel(bdc->regs, BDC_USPC, uspc);
502 uspc = bdc_readl(bdc->regs, BDC_USPC);
503 link_state = BDC_PST(uspc);
504 dev_dbg(bdc->dev, "link_state =%d portsc=%x", link_state, uspc);
505out:
506 spin_unlock_irqrestore(&bdc->lock, flags);
507
508 return ret;
509}
510
511static const struct usb_gadget_ops bdc_gadget_ops = {
512 .wakeup = bdc_udc_wakeup,
513 .set_selfpowered = bdc_udc_set_selfpowered,
514 .pullup = bdc_udc_pullup,
515 .udc_start = bdc_udc_start,
516 .udc_stop = bdc_udc_stop,
517};
518
519/* Init the gadget interface and register the udc */
520int bdc_udc_init(struct bdc *bdc)
521{
522 u32 temp;
523 int ret;
524
525 dev_dbg(bdc->dev, "%s()\n", __func__);
526 bdc->gadget.ops = &bdc_gadget_ops;
527 bdc->gadget.max_speed = USB_SPEED_SUPER;
528 bdc->gadget.speed = USB_SPEED_UNKNOWN;
529 bdc->gadget.dev.parent = bdc->dev;
530
531 bdc->gadget.sg_supported = false;
532
533
534 bdc->gadget.name = BRCM_BDC_NAME;
535 ret = devm_request_irq(bdc->dev, bdc->irq, bdc_udc_interrupt,
536 IRQF_SHARED , BRCM_BDC_NAME, bdc);
537 if (ret) {
538 dev_err(bdc->dev,
539 "failed to request irq #%d %d\n",
540 bdc->irq, ret);
541 return ret;
542 }
543
544 ret = bdc_init_ep(bdc);
545 if (ret) {
546 dev_err(bdc->dev, "bdc init ep fail: %d\n", ret);
547 return ret;
548 }
549
550 ret = usb_add_gadget_udc(bdc->dev, &bdc->gadget);
551 if (ret) {
552 dev_err(bdc->dev, "failed to register udc\n");
553 goto err0;
554 }
555 usb_gadget_set_state(&bdc->gadget, USB_STATE_NOTATTACHED);
556 bdc->bdc_ep_array[1]->desc = &bdc_gadget_ep0_desc;
557 /*
558 * Allocate bd list for ep0 only, ep0 will be enabled on connect
559 * status report when the speed is known
560 */
561 ret = bdc_ep_enable(bdc->bdc_ep_array[1]);
562 if (ret) {
563 dev_err(bdc->dev, "fail to enable %s\n",
564 bdc->bdc_ep_array[1]->name);
565 goto err1;
566 }
567 INIT_DELAYED_WORK(&bdc->func_wake_notify, bdc_func_wake_timer);
568 /* Enable Interrupts */
569 temp = bdc_readl(bdc->regs, BDC_BDCSC);
570 temp |= BDC_GIE;
571 bdc_writel(bdc->regs, BDC_BDCSC, temp);
572 return 0;
573err1:
574 usb_del_gadget_udc(&bdc->gadget);
575err0:
576 bdc_free_ep(bdc);
577
578 return ret;
579}
580
581void bdc_udc_exit(struct bdc *bdc)
582{
583 dev_dbg(bdc->dev, "%s()\n", __func__);
584 bdc_ep_disable(bdc->bdc_ep_array[1]);
585 usb_del_gadget_udc(&bdc->gadget);
586 bdc_free_ep(bdc);
587}
diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
index 81dc5959e36b..1c69c760408e 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
@@ -367,19 +367,22 @@ static void set_link_state(struct dummy_hcd *dum_hcd)
367 dum_hcd->active) 367 dum_hcd->active)
368 dum_hcd->resuming = 0; 368 dum_hcd->resuming = 0;
369 369
370 /* if !connected or reset */ 370 /* Currently !connected or in reset */
371 if ((dum_hcd->port_status & USB_PORT_STAT_CONNECTION) == 0 || 371 if ((dum_hcd->port_status & USB_PORT_STAT_CONNECTION) == 0 ||
372 (dum_hcd->port_status & USB_PORT_STAT_RESET) != 0) { 372 (dum_hcd->port_status & USB_PORT_STAT_RESET) != 0) {
373 /* 373 unsigned disconnect = USB_PORT_STAT_CONNECTION &
374 * We're connected and not reset (reset occurred now), 374 dum_hcd->old_status & (~dum_hcd->port_status);
375 * and driver attached - disconnect! 375 unsigned reset = USB_PORT_STAT_RESET &
376 */ 376 (~dum_hcd->old_status) & dum_hcd->port_status;
377 if ((dum_hcd->old_status & USB_PORT_STAT_CONNECTION) != 0 && 377
378 (dum_hcd->old_status & USB_PORT_STAT_RESET) == 0 && 378 /* Report reset and disconnect events to the driver */
379 dum->driver) { 379 if (dum->driver && (disconnect || reset)) {
380 stop_activity(dum); 380 stop_activity(dum);
381 spin_unlock(&dum->lock); 381 spin_unlock(&dum->lock);
382 dum->driver->disconnect(&dum->gadget); 382 if (reset)
383 usb_gadget_udc_reset(&dum->gadget, dum->driver);
384 else
385 dum->driver->disconnect(&dum->gadget);
383 spin_lock(&dum->lock); 386 spin_lock(&dum->lock);
384 } 387 }
385 } else if (dum_hcd->active != dum_hcd->old_active) { 388 } else if (dum_hcd->active != dum_hcd->old_active) {
@@ -851,8 +854,7 @@ static int dummy_pullup(struct usb_gadget *_gadget, int value)
851 854
852static int dummy_udc_start(struct usb_gadget *g, 855static int dummy_udc_start(struct usb_gadget *g,
853 struct usb_gadget_driver *driver); 856 struct usb_gadget_driver *driver);
854static int dummy_udc_stop(struct usb_gadget *g, 857static int dummy_udc_stop(struct usb_gadget *g);
855 struct usb_gadget_driver *driver);
856 858
857static const struct usb_gadget_ops dummy_ops = { 859static const struct usb_gadget_ops dummy_ops = {
858 .get_frame = dummy_g_get_frame, 860 .get_frame = dummy_g_get_frame,
@@ -908,23 +910,16 @@ static int dummy_udc_start(struct usb_gadget *g,
908 */ 910 */
909 911
910 dum->devstatus = 0; 912 dum->devstatus = 0;
911
912 dum->driver = driver; 913 dum->driver = driver;
913 dev_dbg(udc_dev(dum), "binding gadget driver '%s'\n", 914
914 driver->driver.name);
915 return 0; 915 return 0;
916} 916}
917 917
918static int dummy_udc_stop(struct usb_gadget *g, 918static int dummy_udc_stop(struct usb_gadget *g)
919 struct usb_gadget_driver *driver)
920{ 919{
921 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g); 920 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g);
922 struct dummy *dum = dum_hcd->dum; 921 struct dummy *dum = dum_hcd->dum;
923 922
924 if (driver)
925 dev_dbg(udc_dev(dum), "unregister gadget driver '%s'\n",
926 driver->driver.name);
927
928 dum->driver = NULL; 923 dum->driver = NULL;
929 924
930 return 0; 925 return 0;
@@ -2370,7 +2365,6 @@ static void dummy_stop(struct usb_hcd *hcd)
2370 2365
2371 dum = hcd_to_dummy_hcd(hcd)->dum; 2366 dum = hcd_to_dummy_hcd(hcd)->dum;
2372 device_remove_file(dummy_dev(hcd_to_dummy_hcd(hcd)), &dev_attr_urbs); 2367 device_remove_file(dummy_dev(hcd_to_dummy_hcd(hcd)), &dev_attr_urbs);
2373 usb_gadget_unregister_driver(dum->driver);
2374 dev_info(dummy_dev(hcd_to_dummy_hcd(hcd)), "stopped\n"); 2368 dev_info(dummy_dev(hcd_to_dummy_hcd(hcd)), "stopped\n");
2375} 2369}
2376 2370
diff --git a/drivers/usb/gadget/udc/fotg210-udc.c b/drivers/usb/gadget/udc/fotg210-udc.c
index 1d315921bf34..1ca52e11eb98 100644
--- a/drivers/usb/gadget/udc/fotg210-udc.c
+++ b/drivers/usb/gadget/udc/fotg210-udc.c
@@ -1053,8 +1053,7 @@ static void fotg210_init(struct fotg210_udc *fotg210)
1053 iowrite32(value, fotg210->reg + FOTG210_DMISGR0); 1053 iowrite32(value, fotg210->reg + FOTG210_DMISGR0);
1054} 1054}
1055 1055
1056static int fotg210_udc_stop(struct usb_gadget *g, 1056static int fotg210_udc_stop(struct usb_gadget *g)
1057 struct usb_gadget_driver *driver)
1058{ 1057{
1059 struct fotg210_udc *fotg210 = gadget_to_fotg210(g); 1058 struct fotg210_udc *fotg210 = gadget_to_fotg210(g);
1060 unsigned long flags; 1059 unsigned long flags;
diff --git a/drivers/usb/gadget/udc/fsl_qe_udc.c b/drivers/usb/gadget/udc/fsl_qe_udc.c
index dd18ea38e391..d201f9a89ce3 100644
--- a/drivers/usb/gadget/udc/fsl_qe_udc.c
+++ b/drivers/usb/gadget/udc/fsl_qe_udc.c
@@ -1887,8 +1887,7 @@ static int qe_get_frame(struct usb_gadget *gadget)
1887 1887
1888static int fsl_qe_start(struct usb_gadget *gadget, 1888static int fsl_qe_start(struct usb_gadget *gadget,
1889 struct usb_gadget_driver *driver); 1889 struct usb_gadget_driver *driver);
1890static int fsl_qe_stop(struct usb_gadget *gadget, 1890static int fsl_qe_stop(struct usb_gadget *gadget);
1891 struct usb_gadget_driver *driver);
1892 1891
1893/* defined in usb_gadget.h */ 1892/* defined in usb_gadget.h */
1894static const struct usb_gadget_ops qe_gadget_ops = { 1893static const struct usb_gadget_ops qe_gadget_ops = {
@@ -1918,7 +1917,7 @@ static int reset_queues(struct qe_udc *udc)
1918 1917
1919 /* report disconnect; the driver is already quiesced */ 1918 /* report disconnect; the driver is already quiesced */
1920 spin_unlock(&udc->lock); 1919 spin_unlock(&udc->lock);
1921 udc->driver->disconnect(&udc->gadget); 1920 usb_gadget_udc_reset(&udc->gadget, udc->driver);
1922 spin_lock(&udc->lock); 1921 spin_lock(&udc->lock);
1923 1922
1924 return 0; 1923 return 0;
@@ -2305,13 +2304,10 @@ static int fsl_qe_start(struct usb_gadget *gadget,
2305 udc->ep0_dir = USB_DIR_OUT; 2304 udc->ep0_dir = USB_DIR_OUT;
2306 spin_unlock_irqrestore(&udc->lock, flags); 2305 spin_unlock_irqrestore(&udc->lock, flags);
2307 2306
2308 dev_info(udc->dev, "%s bind to driver %s\n", udc->gadget.name,
2309 driver->driver.name);
2310 return 0; 2307 return 0;
2311} 2308}
2312 2309
2313static int fsl_qe_stop(struct usb_gadget *gadget, 2310static int fsl_qe_stop(struct usb_gadget *gadget)
2314 struct usb_gadget_driver *driver)
2315{ 2311{
2316 struct qe_udc *udc; 2312 struct qe_udc *udc;
2317 struct qe_ep *loop_ep; 2313 struct qe_ep *loop_ep;
@@ -2336,8 +2332,6 @@ static int fsl_qe_stop(struct usb_gadget *gadget,
2336 2332
2337 udc->driver = NULL; 2333 udc->driver = NULL;
2338 2334
2339 dev_info(udc->dev, "unregistered gadget driver '%s'\r\n",
2340 driver->driver.name);
2341 return 0; 2335 return 0;
2342} 2336}
2343 2337
@@ -2538,7 +2532,6 @@ static int qe_udc_probe(struct platform_device *ofdev)
2538 /* create a buf for ZLP send, need to remain zeroed */ 2532 /* create a buf for ZLP send, need to remain zeroed */
2539 udc->nullbuf = devm_kzalloc(&ofdev->dev, 256, GFP_KERNEL); 2533 udc->nullbuf = devm_kzalloc(&ofdev->dev, 256, GFP_KERNEL);
2540 if (udc->nullbuf == NULL) { 2534 if (udc->nullbuf == NULL) {
2541 dev_err(udc->dev, "cannot alloc nullbuf\n");
2542 ret = -ENOMEM; 2535 ret = -ENOMEM;
2543 goto err3; 2536 goto err3;
2544 } 2537 }
diff --git a/drivers/usb/gadget/udc/fsl_udc_core.c b/drivers/usb/gadget/udc/fsl_udc_core.c
index c3620791a315..f340181da23c 100644
--- a/drivers/usb/gadget/udc/fsl_udc_core.c
+++ b/drivers/usb/gadget/udc/fsl_udc_core.c
@@ -1236,9 +1236,8 @@ static int fsl_pullup(struct usb_gadget *gadget, int is_on)
1236 1236
1237static int fsl_udc_start(struct usb_gadget *g, 1237static int fsl_udc_start(struct usb_gadget *g,
1238 struct usb_gadget_driver *driver); 1238 struct usb_gadget_driver *driver);
1239static int fsl_udc_stop(struct usb_gadget *g, 1239static int fsl_udc_stop(struct usb_gadget *g);
1240 struct usb_gadget_driver *driver); 1240
1241/* defined in gadget.h */
1242static const struct usb_gadget_ops fsl_gadget_ops = { 1241static const struct usb_gadget_ops fsl_gadget_ops = {
1243 .get_frame = fsl_get_frame, 1242 .get_frame = fsl_get_frame,
1244 .wakeup = fsl_wakeup, 1243 .wakeup = fsl_wakeup,
@@ -1772,7 +1771,7 @@ static void bus_resume(struct fsl_udc *udc)
1772} 1771}
1773 1772
1774/* Clear up all ep queues */ 1773/* Clear up all ep queues */
1775static int reset_queues(struct fsl_udc *udc) 1774static int reset_queues(struct fsl_udc *udc, bool bus_reset)
1776{ 1775{
1777 u8 pipe; 1776 u8 pipe;
1778 1777
@@ -1781,7 +1780,10 @@ static int reset_queues(struct fsl_udc *udc)
1781 1780
1782 /* report disconnect; the driver is already quiesced */ 1781 /* report disconnect; the driver is already quiesced */
1783 spin_unlock(&udc->lock); 1782 spin_unlock(&udc->lock);
1784 udc->driver->disconnect(&udc->gadget); 1783 if (bus_reset)
1784 usb_gadget_udc_reset(&udc->gadget, udc->driver);
1785 else
1786 udc->driver->disconnect(&udc->gadget);
1785 spin_lock(&udc->lock); 1787 spin_lock(&udc->lock);
1786 1788
1787 return 0; 1789 return 0;
@@ -1835,7 +1837,7 @@ static void reset_irq(struct fsl_udc *udc)
1835 udc->bus_reset = 1; 1837 udc->bus_reset = 1;
1836 /* Reset all the queues, include XD, dTD, EP queue 1838 /* Reset all the queues, include XD, dTD, EP queue
1837 * head and TR Queue */ 1839 * head and TR Queue */
1838 reset_queues(udc); 1840 reset_queues(udc, true);
1839 udc->usb_state = USB_STATE_DEFAULT; 1841 udc->usb_state = USB_STATE_DEFAULT;
1840 } else { 1842 } else {
1841 VDBG("Controller reset"); 1843 VDBG("Controller reset");
@@ -1844,7 +1846,7 @@ static void reset_irq(struct fsl_udc *udc)
1844 dr_controller_setup(udc); 1846 dr_controller_setup(udc);
1845 1847
1846 /* Reset all internal used Queues */ 1848 /* Reset all internal used Queues */
1847 reset_queues(udc); 1849 reset_queues(udc, false);
1848 1850
1849 ep0_setup(udc); 1851 ep0_setup(udc);
1850 1852
@@ -1975,8 +1977,7 @@ static int fsl_udc_start(struct usb_gadget *g,
1975} 1977}
1976 1978
1977/* Disconnect from gadget driver */ 1979/* Disconnect from gadget driver */
1978static int fsl_udc_stop(struct usb_gadget *g, 1980static int fsl_udc_stop(struct usb_gadget *g)
1979 struct usb_gadget_driver *driver)
1980{ 1981{
1981 struct fsl_ep *loop_ep; 1982 struct fsl_ep *loop_ep;
1982 unsigned long flags; 1983 unsigned long flags;
diff --git a/drivers/usb/gadget/udc/fusb300_udc.c b/drivers/usb/gadget/udc/fusb300_udc.c
index 8286df72add4..a1b33f534b52 100644
--- a/drivers/usb/gadget/udc/fusb300_udc.c
+++ b/drivers/usb/gadget/udc/fusb300_udc.c
@@ -1320,8 +1320,7 @@ static int fusb300_udc_start(struct usb_gadget *g,
1320 return 0; 1320 return 0;
1321} 1321}
1322 1322
1323static int fusb300_udc_stop(struct usb_gadget *g, 1323static int fusb300_udc_stop(struct usb_gadget *g)
1324 struct usb_gadget_driver *driver)
1325{ 1324{
1326 struct fusb300 *fusb300 = to_fusb300(g); 1325 struct fusb300 *fusb300 = to_fusb300(g);
1327 1326
diff --git a/drivers/usb/gadget/udc/goku_udc.c b/drivers/usb/gadget/udc/goku_udc.c
index bf9c5ef8b56b..5b9176e7202a 100644
--- a/drivers/usb/gadget/udc/goku_udc.c
+++ b/drivers/usb/gadget/udc/goku_udc.c
@@ -992,8 +992,7 @@ static int goku_get_frame(struct usb_gadget *_gadget)
992 992
993static int goku_udc_start(struct usb_gadget *g, 993static int goku_udc_start(struct usb_gadget *g,
994 struct usb_gadget_driver *driver); 994 struct usb_gadget_driver *driver);
995static int goku_udc_stop(struct usb_gadget *g, 995static int goku_udc_stop(struct usb_gadget *g);
996 struct usb_gadget_driver *driver);
997 996
998static const struct usb_gadget_ops goku_ops = { 997static const struct usb_gadget_ops goku_ops = {
999 .get_frame = goku_get_frame, 998 .get_frame = goku_get_frame,
@@ -1364,8 +1363,7 @@ static void stop_activity(struct goku_udc *dev)
1364 udc_enable(dev); 1363 udc_enable(dev);
1365} 1364}
1366 1365
1367static int goku_udc_stop(struct usb_gadget *g, 1366static int goku_udc_stop(struct usb_gadget *g)
1368 struct usb_gadget_driver *driver)
1369{ 1367{
1370 struct goku_udc *dev = to_goku_udc(g); 1368 struct goku_udc *dev = to_goku_udc(g);
1371 unsigned long flags; 1369 unsigned long flags;
diff --git a/drivers/usb/gadget/udc/gr_udc.c b/drivers/usb/gadget/udc/gr_udc.c
index 1b3048a6a2a3..320df9a250ff 100644
--- a/drivers/usb/gadget/udc/gr_udc.c
+++ b/drivers/usb/gadget/udc/gr_udc.c
@@ -1932,14 +1932,10 @@ static int gr_udc_start(struct usb_gadget *gadget,
1932 1932
1933 spin_unlock(&dev->lock); 1933 spin_unlock(&dev->lock);
1934 1934
1935 dev_info(dev->dev, "Started with gadget driver '%s'\n",
1936 driver->driver.name);
1937
1938 return 0; 1935 return 0;
1939} 1936}
1940 1937
1941static int gr_udc_stop(struct usb_gadget *gadget, 1938static int gr_udc_stop(struct usb_gadget *gadget)
1942 struct usb_gadget_driver *driver)
1943{ 1939{
1944 struct gr_udc *dev = to_gr_udc(gadget); 1940 struct gr_udc *dev = to_gr_udc(gadget);
1945 unsigned long flags; 1941 unsigned long flags;
@@ -1951,8 +1947,6 @@ static int gr_udc_stop(struct usb_gadget *gadget,
1951 1947
1952 spin_unlock_irqrestore(&dev->lock, flags); 1948 spin_unlock_irqrestore(&dev->lock, flags);
1953 1949
1954 dev_info(dev->dev, "Stopped\n");
1955
1956 return 0; 1950 return 0;
1957} 1951}
1958 1952
diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c
index feab0bac8fdc..976529631c19 100644
--- a/drivers/usb/gadget/udc/lpc32xx_udc.c
+++ b/drivers/usb/gadget/udc/lpc32xx_udc.c
@@ -582,8 +582,7 @@ static void create_debug_file(struct lpc32xx_udc *udc)
582 582
583static void remove_debug_file(struct lpc32xx_udc *udc) 583static void remove_debug_file(struct lpc32xx_udc *udc)
584{ 584{
585 if (udc->pde) 585 debugfs_remove(udc->pde);
586 debugfs_remove(udc->pde);
587} 586}
588 587
589#else 588#else
@@ -2559,7 +2558,7 @@ static int lpc32xx_pullup(struct usb_gadget *gadget, int is_on)
2559} 2558}
2560 2559
2561static int lpc32xx_start(struct usb_gadget *, struct usb_gadget_driver *); 2560static int lpc32xx_start(struct usb_gadget *, struct usb_gadget_driver *);
2562static int lpc32xx_stop(struct usb_gadget *, struct usb_gadget_driver *); 2561static int lpc32xx_stop(struct usb_gadget *);
2563 2562
2564static const struct usb_gadget_ops lpc32xx_udc_ops = { 2563static const struct usb_gadget_ops lpc32xx_udc_ops = {
2565 .get_frame = lpc32xx_get_frame, 2564 .get_frame = lpc32xx_get_frame,
@@ -2961,15 +2960,11 @@ static int lpc32xx_start(struct usb_gadget *gadget,
2961 return 0; 2960 return 0;
2962} 2961}
2963 2962
2964static int lpc32xx_stop(struct usb_gadget *gadget, 2963static int lpc32xx_stop(struct usb_gadget *gadget)
2965 struct usb_gadget_driver *driver)
2966{ 2964{
2967 int i; 2965 int i;
2968 struct lpc32xx_udc *udc = to_udc(gadget); 2966 struct lpc32xx_udc *udc = to_udc(gadget);
2969 2967
2970 if (!driver || driver != udc->driver)
2971 return -EINVAL;
2972
2973 for (i = IRQ_USB_LP; i <= IRQ_USB_ATX; i++) 2968 for (i = IRQ_USB_LP; i <= IRQ_USB_ATX; i++)
2974 disable_irq(udc->udp_irq[i]); 2969 disable_irq(udc->udp_irq[i]);
2975 2970
diff --git a/drivers/usb/gadget/udc/m66592-udc.c b/drivers/usb/gadget/udc/m66592-udc.c
index 898565687a8c..ef3f73dd9099 100644
--- a/drivers/usb/gadget/udc/m66592-udc.c
+++ b/drivers/usb/gadget/udc/m66592-udc.c
@@ -1142,7 +1142,7 @@ static void irq_device_state(struct m66592 *m66592)
1142 m66592_write(m66592, ~M66592_DVST, M66592_INTSTS0); 1142 m66592_write(m66592, ~M66592_DVST, M66592_INTSTS0);
1143 1143
1144 if (dvsq == M66592_DS_DFLT) { /* bus reset */ 1144 if (dvsq == M66592_DS_DFLT) { /* bus reset */
1145 m66592->driver->disconnect(&m66592->gadget); 1145 usb_gadget_udc_reset(&m66592->gadget, m66592->driver);
1146 m66592_update_usb_speed(m66592); 1146 m66592_update_usb_speed(m66592);
1147 } 1147 }
1148 if (m66592->old_dvsq == M66592_DS_CNFG && dvsq != M66592_DS_CNFG) 1148 if (m66592->old_dvsq == M66592_DS_CNFG && dvsq != M66592_DS_CNFG)
@@ -1485,8 +1485,7 @@ static int m66592_udc_start(struct usb_gadget *g,
1485 return 0; 1485 return 0;
1486} 1486}
1487 1487
1488static int m66592_udc_stop(struct usb_gadget *g, 1488static int m66592_udc_stop(struct usb_gadget *g)
1489 struct usb_gadget_driver *driver)
1490{ 1489{
1491 struct m66592 *m66592 = to_m66592(g); 1490 struct m66592 *m66592 = to_m66592(g);
1492 1491
diff --git a/drivers/usb/gadget/udc/mv_u3d_core.c b/drivers/usb/gadget/udc/mv_u3d_core.c
index 046a1f808b0d..ea422ac79990 100644
--- a/drivers/usb/gadget/udc/mv_u3d_core.c
+++ b/drivers/usb/gadget/udc/mv_u3d_core.c
@@ -1266,8 +1266,7 @@ static int mv_u3d_start(struct usb_gadget *g,
1266 return 0; 1266 return 0;
1267} 1267}
1268 1268
1269static int mv_u3d_stop(struct usb_gadget *g, 1269static int mv_u3d_stop(struct usb_gadget *g)
1270 struct usb_gadget_driver *driver)
1271{ 1270{
1272 struct mv_u3d *u3d = container_of(g, struct mv_u3d, gadget); 1271 struct mv_u3d *u3d = container_of(g, struct mv_u3d, gadget);
1273 struct mv_usb_platform_data *pdata = dev_get_platdata(u3d->dev); 1272 struct mv_usb_platform_data *pdata = dev_get_platdata(u3d->dev);
@@ -1284,7 +1283,7 @@ static int mv_u3d_stop(struct usb_gadget *g,
1284 mv_u3d_controller_stop(u3d); 1283 mv_u3d_controller_stop(u3d);
1285 /* stop all usb activities */ 1284 /* stop all usb activities */
1286 u3d->gadget.speed = USB_SPEED_UNKNOWN; 1285 u3d->gadget.speed = USB_SPEED_UNKNOWN;
1287 mv_u3d_stop_activity(u3d, driver); 1286 mv_u3d_stop_activity(u3d, NULL);
1288 mv_u3d_disable(u3d); 1287 mv_u3d_disable(u3d);
1289 1288
1290 if (pdata->phy_deinit) 1289 if (pdata->phy_deinit)
diff --git a/drivers/usb/gadget/udc/mv_udc_core.c b/drivers/usb/gadget/udc/mv_udc_core.c
index 3c5db80ae325..d4edd763e963 100644
--- a/drivers/usb/gadget/udc/mv_udc_core.c
+++ b/drivers/usb/gadget/udc/mv_udc_core.c
@@ -1223,7 +1223,7 @@ static int mv_udc_pullup(struct usb_gadget *gadget, int is_on)
1223} 1223}
1224 1224
1225static int mv_udc_start(struct usb_gadget *, struct usb_gadget_driver *); 1225static int mv_udc_start(struct usb_gadget *, struct usb_gadget_driver *);
1226static int mv_udc_stop(struct usb_gadget *, struct usb_gadget_driver *); 1226static int mv_udc_stop(struct usb_gadget *);
1227/* device controller usb_gadget_ops structure */ 1227/* device controller usb_gadget_ops structure */
1228static const struct usb_gadget_ops mv_ops = { 1228static const struct usb_gadget_ops mv_ops = {
1229 1229
@@ -1307,6 +1307,23 @@ static void nuke(struct mv_ep *ep, int status)
1307 } 1307 }
1308} 1308}
1309 1309
1310static void gadget_reset(struct mv_udc *udc, struct usb_gadget_driver *driver)
1311{
1312 struct mv_ep *ep;
1313
1314 nuke(&udc->eps[0], -ESHUTDOWN);
1315
1316 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
1317 nuke(ep, -ESHUTDOWN);
1318 }
1319
1320 /* report reset; the driver is already quiesced */
1321 if (driver) {
1322 spin_unlock(&udc->lock);
1323 usb_gadget_udc_reset(&udc->gadget, driver);
1324 spin_lock(&udc->lock);
1325 }
1326}
1310/* stop all USB activities */ 1327/* stop all USB activities */
1311static void stop_activity(struct mv_udc *udc, struct usb_gadget_driver *driver) 1328static void stop_activity(struct mv_udc *udc, struct usb_gadget_driver *driver)
1312{ 1329{
@@ -1371,8 +1388,7 @@ static int mv_udc_start(struct usb_gadget *gadget,
1371 return 0; 1388 return 0;
1372} 1389}
1373 1390
1374static int mv_udc_stop(struct usb_gadget *gadget, 1391static int mv_udc_stop(struct usb_gadget *gadget)
1375 struct usb_gadget_driver *driver)
1376{ 1392{
1377 struct mv_udc *udc; 1393 struct mv_udc *udc;
1378 unsigned long flags; 1394 unsigned long flags;
@@ -1386,7 +1402,7 @@ static int mv_udc_stop(struct usb_gadget *gadget,
1386 1402
1387 /* stop all usb activities */ 1403 /* stop all usb activities */
1388 udc->gadget.speed = USB_SPEED_UNKNOWN; 1404 udc->gadget.speed = USB_SPEED_UNKNOWN;
1389 stop_activity(udc, driver); 1405 stop_activity(udc, NULL);
1390 mv_udc_disable(udc); 1406 mv_udc_disable(udc);
1391 1407
1392 spin_unlock_irqrestore(&udc->lock, flags); 1408 spin_unlock_irqrestore(&udc->lock, flags);
@@ -1882,7 +1898,7 @@ static void irq_process_reset(struct mv_udc *udc)
1882 dev_info(&udc->dev->dev, "usb bus reset\n"); 1898 dev_info(&udc->dev->dev, "usb bus reset\n");
1883 udc->usb_state = USB_STATE_DEFAULT; 1899 udc->usb_state = USB_STATE_DEFAULT;
1884 /* reset all the queues, stop all USB activities */ 1900 /* reset all the queues, stop all USB activities */
1885 stop_activity(udc, udc->driver); 1901 gadget_reset(udc, udc->driver);
1886 } else { 1902 } else {
1887 dev_info(&udc->dev->dev, "USB reset portsc 0x%x\n", 1903 dev_info(&udc->dev->dev, "USB reset portsc 0x%x\n",
1888 readl(&udc->op_regs->portsc)); 1904 readl(&udc->op_regs->portsc));
@@ -2107,10 +2123,8 @@ static int mv_udc_probe(struct platform_device *pdev)
2107 } 2123 }
2108 2124
2109 udc = devm_kzalloc(&pdev->dev, sizeof(*udc), GFP_KERNEL); 2125 udc = devm_kzalloc(&pdev->dev, sizeof(*udc), GFP_KERNEL);
2110 if (udc == NULL) { 2126 if (udc == NULL)
2111 dev_err(&pdev->dev, "failed to allocate memory for udc\n");
2112 return -ENOMEM; 2127 return -ENOMEM;
2113 }
2114 2128
2115 udc->done = &release_done; 2129 udc->done = &release_done;
2116 udc->pdata = dev_get_platdata(&pdev->dev); 2130 udc->pdata = dev_get_platdata(&pdev->dev);
@@ -2207,7 +2221,6 @@ static int mv_udc_probe(struct platform_device *pdev)
2207 size = udc->max_eps * sizeof(struct mv_ep) *2; 2221 size = udc->max_eps * sizeof(struct mv_ep) *2;
2208 udc->eps = devm_kzalloc(&pdev->dev, size, GFP_KERNEL); 2222 udc->eps = devm_kzalloc(&pdev->dev, size, GFP_KERNEL);
2209 if (udc->eps == NULL) { 2223 if (udc->eps == NULL) {
2210 dev_err(&pdev->dev, "allocate ep memory failed\n");
2211 retval = -ENOMEM; 2224 retval = -ENOMEM;
2212 goto err_destroy_dma; 2225 goto err_destroy_dma;
2213 } 2226 }
@@ -2216,7 +2229,6 @@ static int mv_udc_probe(struct platform_device *pdev)
2216 udc->status_req = devm_kzalloc(&pdev->dev, sizeof(struct mv_req), 2229 udc->status_req = devm_kzalloc(&pdev->dev, sizeof(struct mv_req),
2217 GFP_KERNEL); 2230 GFP_KERNEL);
2218 if (!udc->status_req) { 2231 if (!udc->status_req) {
2219 dev_err(&pdev->dev, "allocate status_req memory failed\n");
2220 retval = -ENOMEM; 2232 retval = -ENOMEM;
2221 goto err_destroy_dma; 2233 goto err_destroy_dma;
2222 } 2234 }
diff --git a/drivers/usb/gadget/udc/net2272.c b/drivers/usb/gadget/udc/net2272.c
index 84d7162a8022..3a90856625f2 100644
--- a/drivers/usb/gadget/udc/net2272.c
+++ b/drivers/usb/gadget/udc/net2272.c
@@ -1169,8 +1169,7 @@ net2272_pullup(struct usb_gadget *_gadget, int is_on)
1169 1169
1170static int net2272_start(struct usb_gadget *_gadget, 1170static int net2272_start(struct usb_gadget *_gadget,
1171 struct usb_gadget_driver *driver); 1171 struct usb_gadget_driver *driver);
1172static int net2272_stop(struct usb_gadget *_gadget, 1172static int net2272_stop(struct usb_gadget *_gadget);
1173 struct usb_gadget_driver *driver);
1174 1173
1175static const struct usb_gadget_ops net2272_ops = { 1174static const struct usb_gadget_ops net2272_ops = {
1176 .get_frame = net2272_get_frame, 1175 .get_frame = net2272_get_frame,
@@ -1471,8 +1470,6 @@ static int net2272_start(struct usb_gadget *_gadget,
1471 */ 1470 */
1472 net2272_ep0_start(dev); 1471 net2272_ep0_start(dev);
1473 1472
1474 dev_dbg(dev->dev, "%s ready\n", driver->driver.name);
1475
1476 return 0; 1473 return 0;
1477} 1474}
1478 1475
@@ -1502,8 +1499,7 @@ stop_activity(struct net2272 *dev, struct usb_gadget_driver *driver)
1502 net2272_usb_reinit(dev); 1499 net2272_usb_reinit(dev);
1503} 1500}
1504 1501
1505static int net2272_stop(struct usb_gadget *_gadget, 1502static int net2272_stop(struct usb_gadget *_gadget)
1506 struct usb_gadget_driver *driver)
1507{ 1503{
1508 struct net2272 *dev; 1504 struct net2272 *dev;
1509 unsigned long flags; 1505 unsigned long flags;
@@ -1511,12 +1507,11 @@ static int net2272_stop(struct usb_gadget *_gadget,
1511 dev = container_of(_gadget, struct net2272, gadget); 1507 dev = container_of(_gadget, struct net2272, gadget);
1512 1508
1513 spin_lock_irqsave(&dev->lock, flags); 1509 spin_lock_irqsave(&dev->lock, flags);
1514 stop_activity(dev, driver); 1510 stop_activity(dev, NULL);
1515 spin_unlock_irqrestore(&dev->lock, flags); 1511 spin_unlock_irqrestore(&dev->lock, flags);
1516 1512
1517 dev->driver = NULL; 1513 dev->driver = NULL;
1518 1514
1519 dev_dbg(dev->dev, "unregistered driver '%s'\n", driver->driver.name);
1520 return 0; 1515 return 0;
1521} 1516}
1522 1517
@@ -1987,17 +1982,42 @@ net2272_handle_stat1_irqs(struct net2272 *dev, u8 stat)
1987 mask = (1 << USB_HIGH_SPEED) | (1 << USB_FULL_SPEED); 1982 mask = (1 << USB_HIGH_SPEED) | (1 << USB_FULL_SPEED);
1988 1983
1989 if (stat & tmp) { 1984 if (stat & tmp) {
1985 bool reset = false;
1986 bool disconnect = false;
1987
1988 /*
1989 * Ignore disconnects and resets if the speed hasn't been set.
1990 * VBUS can bounce and there's always an initial reset.
1991 */
1990 net2272_write(dev, IRQSTAT1, tmp); 1992 net2272_write(dev, IRQSTAT1, tmp);
1991 if ((((stat & (1 << ROOT_PORT_RESET_INTERRUPT)) && 1993 if (dev->gadget.speed != USB_SPEED_UNKNOWN) {
1992 ((net2272_read(dev, USBCTL1) & mask) == 0)) 1994 if ((stat & (1 << VBUS_INTERRUPT)) &&
1993 || ((net2272_read(dev, USBCTL1) & (1 << VBUS_PIN)) 1995 (net2272_read(dev, USBCTL1) &
1994 == 0)) 1996 (1 << VBUS_PIN)) == 0) {
1995 && (dev->gadget.speed != USB_SPEED_UNKNOWN)) { 1997 disconnect = true;
1996 dev_dbg(dev->dev, "disconnect %s\n", 1998 dev_dbg(dev->dev, "disconnect %s\n",
1997 dev->driver->driver.name); 1999 dev->driver->driver.name);
1998 stop_activity(dev, dev->driver); 2000 } else if ((stat & (1 << ROOT_PORT_RESET_INTERRUPT)) &&
1999 net2272_ep0_start(dev); 2001 (net2272_read(dev, USBCTL1) & mask)
2000 return; 2002 == 0) {
2003 reset = true;
2004 dev_dbg(dev->dev, "reset %s\n",
2005 dev->driver->driver.name);
2006 }
2007
2008 if (disconnect || reset) {
2009 stop_activity(dev, dev->driver);
2010 net2272_ep0_start(dev);
2011 spin_unlock(&dev->lock);
2012 if (reset)
2013 usb_gadget_udc_reset
2014 (&dev->gadget, dev->driver);
2015 else
2016 (dev->driver->disconnect)
2017 (&dev->gadget);
2018 spin_lock(&dev->lock);
2019 return;
2020 }
2001 } 2021 }
2002 stat &= ~tmp; 2022 stat &= ~tmp;
2003 2023
@@ -2200,18 +2220,8 @@ static void
2200net2272_remove(struct net2272 *dev) 2220net2272_remove(struct net2272 *dev)
2201{ 2221{
2202 usb_del_gadget_udc(&dev->gadget); 2222 usb_del_gadget_udc(&dev->gadget);
2203
2204 /* start with the driver above us */
2205 if (dev->driver) {
2206 /* should have been done already by driver model core */
2207 dev_warn(dev->dev, "pci remove, driver '%s' is still registered\n",
2208 dev->driver->driver.name);
2209 usb_gadget_unregister_driver(dev->driver);
2210 }
2211
2212 free_irq(dev->irq, dev); 2223 free_irq(dev->irq, dev);
2213 iounmap(dev->base_addr); 2224 iounmap(dev->base_addr);
2214
2215 device_remove_file(dev->dev, &dev_attr_registers); 2225 device_remove_file(dev->dev, &dev_attr_registers);
2216 2226
2217 dev_info(dev->dev, "unbind\n"); 2227 dev_info(dev->dev, "unbind\n");
diff --git a/drivers/usb/gadget/udc/net2280.c b/drivers/usb/gadget/udc/net2280.c
index 8d13337e2dde..d6411e0a8e03 100644
--- a/drivers/usb/gadget/udc/net2280.c
+++ b/drivers/usb/gadget/udc/net2280.c
@@ -1118,10 +1118,10 @@ static void scan_dma_completions(struct net2280_ep *ep)
1118 break; 1118 break;
1119 } else if (!ep->is_in && 1119 } else if (!ep->is_in &&
1120 (req->req.length % ep->ep.maxpacket) != 0) { 1120 (req->req.length % ep->ep.maxpacket) != 0) {
1121 tmp = readl(&ep->regs->ep_stat);
1122 if (ep->dev->quirks & PLX_SUPERSPEED) 1121 if (ep->dev->quirks & PLX_SUPERSPEED)
1123 return dma_done(ep, req, tmp, 0); 1122 return dma_done(ep, req, tmp, 0);
1124 1123
1124 tmp = readl(&ep->regs->ep_stat);
1125 /* AVOID TROUBLE HERE by not issuing short reads from 1125 /* AVOID TROUBLE HERE by not issuing short reads from
1126 * your gadget driver. That helps avoids errata 0121, 1126 * your gadget driver. That helps avoids errata 0121,
1127 * 0122, and 0124; not all cases trigger the warning. 1127 * 0122, and 0124; not all cases trigger the warning.
@@ -1548,8 +1548,7 @@ static int net2280_pullup(struct usb_gadget *_gadget, int is_on)
1548 1548
1549static int net2280_start(struct usb_gadget *_gadget, 1549static int net2280_start(struct usb_gadget *_gadget,
1550 struct usb_gadget_driver *driver); 1550 struct usb_gadget_driver *driver);
1551static int net2280_stop(struct usb_gadget *_gadget, 1551static int net2280_stop(struct usb_gadget *_gadget);
1552 struct usb_gadget_driver *driver);
1553 1552
1554static const struct usb_gadget_ops net2280_ops = { 1553static const struct usb_gadget_ops net2280_ops = {
1555 .get_frame = net2280_get_frame, 1554 .get_frame = net2280_get_frame,
@@ -2397,11 +2396,6 @@ static int net2280_start(struct usb_gadget *_gadget,
2397 2396
2398 ep0_start(dev); 2397 ep0_start(dev);
2399 2398
2400 ep_dbg(dev, "%s ready, usbctl %08x stdrsp %08x\n",
2401 driver->driver.name,
2402 readl(&dev->usb->usbctl),
2403 readl(&dev->usb->stdrsp));
2404
2405 /* pci writes may still be posted */ 2399 /* pci writes may still be posted */
2406 return 0; 2400 return 0;
2407 2401
@@ -2437,8 +2431,7 @@ static void stop_activity(struct net2280 *dev, struct usb_gadget_driver *driver)
2437 usb_reinit(dev); 2431 usb_reinit(dev);
2438} 2432}
2439 2433
2440static int net2280_stop(struct usb_gadget *_gadget, 2434static int net2280_stop(struct usb_gadget *_gadget)
2441 struct usb_gadget_driver *driver)
2442{ 2435{
2443 struct net2280 *dev; 2436 struct net2280 *dev;
2444 unsigned long flags; 2437 unsigned long flags;
@@ -2446,11 +2439,9 @@ static int net2280_stop(struct usb_gadget *_gadget,
2446 dev = container_of(_gadget, struct net2280, gadget); 2439 dev = container_of(_gadget, struct net2280, gadget);
2447 2440
2448 spin_lock_irqsave(&dev->lock, flags); 2441 spin_lock_irqsave(&dev->lock, flags);
2449 stop_activity(dev, driver); 2442 stop_activity(dev, NULL);
2450 spin_unlock_irqrestore(&dev->lock, flags); 2443 spin_unlock_irqrestore(&dev->lock, flags);
2451 2444
2452 dev->driver = NULL;
2453
2454 net2280_led_active(dev, 0); 2445 net2280_led_active(dev, 0);
2455 2446
2456 /* Disable full-speed test mode */ 2447 /* Disable full-speed test mode */
@@ -2460,8 +2451,7 @@ static int net2280_stop(struct usb_gadget *_gadget,
2460 device_remove_file(&dev->pdev->dev, &dev_attr_function); 2451 device_remove_file(&dev->pdev->dev, &dev_attr_function);
2461 device_remove_file(&dev->pdev->dev, &dev_attr_queues); 2452 device_remove_file(&dev->pdev->dev, &dev_attr_queues);
2462 2453
2463 ep_dbg(dev, "unregistered driver '%s'\n", 2454 dev->driver = NULL;
2464 driver ? driver->driver.name : "");
2465 2455
2466 return 0; 2456 return 0;
2467} 2457}
@@ -3318,17 +3308,42 @@ static void handle_stat1_irqs(struct net2280 *dev, u32 stat)
3318 * only indicates a change in the reset state). 3308 * only indicates a change in the reset state).
3319 */ 3309 */
3320 if (stat & tmp) { 3310 if (stat & tmp) {
3311 bool reset = false;
3312 bool disconnect = false;
3313
3314 /*
3315 * Ignore disconnects and resets if the speed hasn't been set.
3316 * VBUS can bounce and there's always an initial reset.
3317 */
3321 writel(tmp, &dev->regs->irqstat1); 3318 writel(tmp, &dev->regs->irqstat1);
3322 if ((((stat & BIT(ROOT_PORT_RESET_INTERRUPT)) && 3319 if (dev->gadget.speed != USB_SPEED_UNKNOWN) {
3323 ((readl(&dev->usb->usbstat) & mask) == 0)) || 3320 if ((stat & BIT(VBUS_INTERRUPT)) &&
3324 ((readl(&dev->usb->usbctl) & 3321 (readl(&dev->usb->usbctl) &
3325 BIT(VBUS_PIN)) == 0)) && 3322 BIT(VBUS_PIN)) == 0) {
3326 (dev->gadget.speed != USB_SPEED_UNKNOWN)) { 3323 disconnect = true;
3327 ep_dbg(dev, "disconnect %s\n", 3324 ep_dbg(dev, "disconnect %s\n",
3328 dev->driver->driver.name); 3325 dev->driver->driver.name);
3329 stop_activity(dev, dev->driver); 3326 } else if ((stat & BIT(ROOT_PORT_RESET_INTERRUPT)) &&
3330 ep0_start(dev); 3327 (readl(&dev->usb->usbstat) & mask)
3331 return; 3328 == 0) {
3329 reset = true;
3330 ep_dbg(dev, "reset %s\n",
3331 dev->driver->driver.name);
3332 }
3333
3334 if (disconnect || reset) {
3335 stop_activity(dev, dev->driver);
3336 ep0_start(dev);
3337 spin_unlock(&dev->lock);
3338 if (reset)
3339 usb_gadget_udc_reset
3340 (&dev->gadget, dev->driver);
3341 else
3342 (dev->driver->disconnect)
3343 (&dev->gadget);
3344 spin_lock(&dev->lock);
3345 return;
3346 }
3332 } 3347 }
3333 stat &= ~tmp; 3348 stat &= ~tmp;
3334 3349
diff --git a/drivers/usb/gadget/udc/omap_udc.c b/drivers/usb/gadget/udc/omap_udc.c
index dcdfea46003b..534b85c07feb 100644
--- a/drivers/usb/gadget/udc/omap_udc.c
+++ b/drivers/usb/gadget/udc/omap_udc.c
@@ -1311,8 +1311,7 @@ static int omap_pullup(struct usb_gadget *gadget, int is_on)
1311 1311
1312static int omap_udc_start(struct usb_gadget *g, 1312static int omap_udc_start(struct usb_gadget *g,
1313 struct usb_gadget_driver *driver); 1313 struct usb_gadget_driver *driver);
1314static int omap_udc_stop(struct usb_gadget *g, 1314static int omap_udc_stop(struct usb_gadget *g);
1315 struct usb_gadget_driver *driver);
1316 1315
1317static const struct usb_gadget_ops omap_gadget_ops = { 1316static const struct usb_gadget_ops omap_gadget_ops = {
1318 .get_frame = omap_get_frame, 1317 .get_frame = omap_get_frame,
@@ -2102,8 +2101,7 @@ done:
2102 return status; 2101 return status;
2103} 2102}
2104 2103
2105static int omap_udc_stop(struct usb_gadget *g, 2104static int omap_udc_stop(struct usb_gadget *g)
2106 struct usb_gadget_driver *driver)
2107{ 2105{
2108 unsigned long flags; 2106 unsigned long flags;
2109 int status = -ENODEV; 2107 int status = -ENODEV;
diff --git a/drivers/usb/gadget/udc/pch_udc.c b/drivers/usb/gadget/udc/pch_udc.c
index ccbe3d4a2a50..1c7379ac2379 100644
--- a/drivers/usb/gadget/udc/pch_udc.c
+++ b/drivers/usb/gadget/udc/pch_udc.c
@@ -1240,8 +1240,8 @@ static int pch_udc_pcd_vbus_draw(struct usb_gadget *gadget, unsigned int mA)
1240 1240
1241static int pch_udc_start(struct usb_gadget *g, 1241static int pch_udc_start(struct usb_gadget *g,
1242 struct usb_gadget_driver *driver); 1242 struct usb_gadget_driver *driver);
1243static int pch_udc_stop(struct usb_gadget *g, 1243static int pch_udc_stop(struct usb_gadget *g);
1244 struct usb_gadget_driver *driver); 1244
1245static const struct usb_gadget_ops pch_udc_ops = { 1245static const struct usb_gadget_ops pch_udc_ops = {
1246 .get_frame = pch_udc_pcd_get_frame, 1246 .get_frame = pch_udc_pcd_get_frame,
1247 .wakeup = pch_udc_pcd_wakeup, 1247 .wakeup = pch_udc_pcd_wakeup,
@@ -2592,9 +2592,9 @@ static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev)
2592 /* Complete request queue */ 2592 /* Complete request queue */
2593 empty_req_queue(ep); 2593 empty_req_queue(ep);
2594 } 2594 }
2595 if (dev->driver && dev->driver->disconnect) { 2595 if (dev->driver) {
2596 spin_unlock(&dev->lock); 2596 spin_unlock(&dev->lock);
2597 dev->driver->disconnect(&dev->gadget); 2597 usb_gadget_udc_reset(&dev->gadget, dev->driver);
2598 spin_lock(&dev->lock); 2598 spin_lock(&dev->lock);
2599 } 2599 }
2600} 2600}
@@ -3008,8 +3008,7 @@ static int pch_udc_start(struct usb_gadget *g,
3008 return 0; 3008 return 0;
3009} 3009}
3010 3010
3011static int pch_udc_stop(struct usb_gadget *g, 3011static int pch_udc_stop(struct usb_gadget *g)
3012 struct usb_gadget_driver *driver)
3013{ 3012{
3014 struct pch_udc_dev *dev = to_pch_udc(g); 3013 struct pch_udc_dev *dev = to_pch_udc(g);
3015 3014
diff --git a/drivers/usb/gadget/udc/pxa25x_udc.c b/drivers/usb/gadget/udc/pxa25x_udc.c
index 42f7eeb8ff6f..347a05b5afc1 100644
--- a/drivers/usb/gadget/udc/pxa25x_udc.c
+++ b/drivers/usb/gadget/udc/pxa25x_udc.c
@@ -998,8 +998,7 @@ static int pxa25x_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
998 998
999static int pxa25x_udc_start(struct usb_gadget *g, 999static int pxa25x_udc_start(struct usb_gadget *g,
1000 struct usb_gadget_driver *driver); 1000 struct usb_gadget_driver *driver);
1001static int pxa25x_udc_stop(struct usb_gadget *g, 1001static int pxa25x_udc_stop(struct usb_gadget *g);
1002 struct usb_gadget_driver *driver);
1003 1002
1004static const struct usb_gadget_ops pxa25x_udc_ops = { 1003static const struct usb_gadget_ops pxa25x_udc_ops = {
1005 .get_frame = pxa25x_udc_get_frame, 1004 .get_frame = pxa25x_udc_get_frame,
@@ -1135,11 +1134,7 @@ static const struct file_operations debug_fops = {
1135 dev->debugfs_udc = debugfs_create_file(dev->gadget.name, \ 1134 dev->debugfs_udc = debugfs_create_file(dev->gadget.name, \
1136 S_IRUGO, NULL, dev, &debug_fops); \ 1135 S_IRUGO, NULL, dev, &debug_fops); \
1137 } while (0) 1136 } while (0)
1138#define remove_debug_files(dev) \ 1137#define remove_debug_files(dev) debugfs_remove(dev->debugfs_udc)
1139 do { \
1140 if (dev->debugfs_udc) \
1141 debugfs_remove(dev->debugfs_udc); \
1142 } while (0)
1143 1138
1144#else /* !CONFIG_USB_GADGET_DEBUG_FILES */ 1139#else /* !CONFIG_USB_GADGET_DEBUG_FILES */
1145 1140
@@ -1285,6 +1280,33 @@ bind_fail:
1285} 1280}
1286 1281
1287static void 1282static void
1283reset_gadget(struct pxa25x_udc *dev, struct usb_gadget_driver *driver)
1284{
1285 int i;
1286
1287 /* don't disconnect drivers more than once */
1288 if (dev->gadget.speed == USB_SPEED_UNKNOWN)
1289 driver = NULL;
1290 dev->gadget.speed = USB_SPEED_UNKNOWN;
1291
1292 /* prevent new request submissions, kill any outstanding requests */
1293 for (i = 0; i < PXA_UDC_NUM_ENDPOINTS; i++) {
1294 struct pxa25x_ep *ep = &dev->ep[i];
1295
1296 ep->stopped = 1;
1297 nuke(ep, -ESHUTDOWN);
1298 }
1299 del_timer_sync(&dev->timer);
1300
1301 /* report reset; the driver is already quiesced */
1302 if (driver)
1303 usb_gadget_udc_reset(&dev->gadget, driver);
1304
1305 /* re-init driver-visible data structures */
1306 udc_reinit(dev);
1307}
1308
1309static void
1288stop_activity(struct pxa25x_udc *dev, struct usb_gadget_driver *driver) 1310stop_activity(struct pxa25x_udc *dev, struct usb_gadget_driver *driver)
1289{ 1311{
1290 int i; 1312 int i;
@@ -1311,15 +1333,14 @@ stop_activity(struct pxa25x_udc *dev, struct usb_gadget_driver *driver)
1311 udc_reinit(dev); 1333 udc_reinit(dev);
1312} 1334}
1313 1335
1314static int pxa25x_udc_stop(struct usb_gadget*g, 1336static int pxa25x_udc_stop(struct usb_gadget*g)
1315 struct usb_gadget_driver *driver)
1316{ 1337{
1317 struct pxa25x_udc *dev = to_pxa25x(g); 1338 struct pxa25x_udc *dev = to_pxa25x(g);
1318 1339
1319 local_irq_disable(); 1340 local_irq_disable();
1320 dev->pullup = 0; 1341 dev->pullup = 0;
1321 pullup(dev); 1342 pullup(dev);
1322 stop_activity(dev, driver); 1343 stop_activity(dev, NULL);
1323 local_irq_enable(); 1344 local_irq_enable();
1324 1345
1325 if (!IS_ERR_OR_NULL(dev->transceiver)) 1346 if (!IS_ERR_OR_NULL(dev->transceiver))
@@ -1723,7 +1744,7 @@ pxa25x_udc_irq(int irq, void *_dev)
1723 /* reset driver and endpoints, 1744 /* reset driver and endpoints,
1724 * in case that's not yet done 1745 * in case that's not yet done
1725 */ 1746 */
1726 stop_activity (dev, dev->driver); 1747 reset_gadget(dev, dev->driver);
1727 1748
1728 } else { 1749 } else {
1729 DBG(DBG_VERBOSE, "USB reset end\n"); 1750 DBG(DBG_VERBOSE, "USB reset end\n");
diff --git a/drivers/usb/gadget/udc/pxa27x_udc.c b/drivers/usb/gadget/udc/pxa27x_udc.c
index 4868369eeec6..9b03fab13707 100644
--- a/drivers/usb/gadget/udc/pxa27x_udc.c
+++ b/drivers/usb/gadget/udc/pxa27x_udc.c
@@ -22,10 +22,13 @@
22#include <linux/clk.h> 22#include <linux/clk.h>
23#include <linux/irq.h> 23#include <linux/irq.h>
24#include <linux/gpio.h> 24#include <linux/gpio.h>
25#include <linux/gpio/consumer.h>
25#include <linux/slab.h> 26#include <linux/slab.h>
26#include <linux/prefetch.h> 27#include <linux/prefetch.h>
27#include <linux/byteorder/generic.h> 28#include <linux/byteorder/generic.h>
28#include <linux/platform_data/pxa2xx_udc.h> 29#include <linux/platform_data/pxa2xx_udc.h>
30#include <linux/of_device.h>
31#include <linux/of_gpio.h>
29 32
30#include <linux/usb.h> 33#include <linux/usb.h>
31#include <linux/usb/ch9.h> 34#include <linux/usb/ch9.h>
@@ -1507,18 +1510,13 @@ static struct usb_ep_ops pxa_ep_ops = {
1507 */ 1510 */
1508static void dplus_pullup(struct pxa_udc *udc, int on) 1511static void dplus_pullup(struct pxa_udc *udc, int on)
1509{ 1512{
1510 if (on) { 1513 if (udc->gpiod) {
1511 if (gpio_is_valid(udc->mach->gpio_pullup)) 1514 gpiod_set_value(udc->gpiod, on);
1512 gpio_set_value(udc->mach->gpio_pullup, 1515 } else if (udc->udc_command) {
1513 !udc->mach->gpio_pullup_inverted); 1516 if (on)
1514 if (udc->mach->udc_command) 1517 udc->udc_command(PXA2XX_UDC_CMD_CONNECT);
1515 udc->mach->udc_command(PXA2XX_UDC_CMD_CONNECT); 1518 else
1516 } else { 1519 udc->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
1517 if (gpio_is_valid(udc->mach->gpio_pullup))
1518 gpio_set_value(udc->mach->gpio_pullup,
1519 udc->mach->gpio_pullup_inverted);
1520 if (udc->mach->udc_command)
1521 udc->mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
1522 } 1520 }
1523 udc->pullup_on = on; 1521 udc->pullup_on = on;
1524} 1522}
@@ -1609,7 +1607,7 @@ static int pxa_udc_pullup(struct usb_gadget *_gadget, int is_active)
1609{ 1607{
1610 struct pxa_udc *udc = to_gadget_udc(_gadget); 1608 struct pxa_udc *udc = to_gadget_udc(_gadget);
1611 1609
1612 if (!gpio_is_valid(udc->mach->gpio_pullup) && !udc->mach->udc_command) 1610 if (!udc->gpiod && !udc->udc_command)
1613 return -EOPNOTSUPP; 1611 return -EOPNOTSUPP;
1614 1612
1615 dplus_pullup(udc, is_active); 1613 dplus_pullup(udc, is_active);
@@ -1671,8 +1669,7 @@ static int pxa_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
1671 1669
1672static int pxa27x_udc_start(struct usb_gadget *g, 1670static int pxa27x_udc_start(struct usb_gadget *g,
1673 struct usb_gadget_driver *driver); 1671 struct usb_gadget_driver *driver);
1674static int pxa27x_udc_stop(struct usb_gadget *g, 1672static int pxa27x_udc_stop(struct usb_gadget *g);
1675 struct usb_gadget_driver *driver);
1676 1673
1677static const struct usb_gadget_ops pxa_udc_ops = { 1674static const struct usb_gadget_ops pxa_udc_ops = {
1678 .get_frame = pxa_udc_get_frame, 1675 .get_frame = pxa_udc_get_frame,
@@ -1701,10 +1698,10 @@ static void udc_disable(struct pxa_udc *udc)
1701 udc_writel(udc, UDCICR1, 0); 1698 udc_writel(udc, UDCICR1, 0);
1702 1699
1703 udc_clear_mask_UDCCR(udc, UDCCR_UDE); 1700 udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1704 clk_disable(udc->clk);
1705 1701
1706 ep0_idle(udc); 1702 ep0_idle(udc);
1707 udc->gadget.speed = USB_SPEED_UNKNOWN; 1703 udc->gadget.speed = USB_SPEED_UNKNOWN;
1704 clk_disable(udc->clk);
1708 1705
1709 udc->enabled = 0; 1706 udc->enabled = 0;
1710} 1707}
@@ -1757,16 +1754,16 @@ static void udc_enable(struct pxa_udc *udc)
1757 if (udc->enabled) 1754 if (udc->enabled)
1758 return; 1755 return;
1759 1756
1757 clk_enable(udc->clk);
1760 udc_writel(udc, UDCICR0, 0); 1758 udc_writel(udc, UDCICR0, 0);
1761 udc_writel(udc, UDCICR1, 0); 1759 udc_writel(udc, UDCICR1, 0);
1762 udc_clear_mask_UDCCR(udc, UDCCR_UDE); 1760 udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1763 1761
1764 clk_enable(udc->clk);
1765
1766 ep0_idle(udc); 1762 ep0_idle(udc);
1767 udc->gadget.speed = USB_SPEED_FULL; 1763 udc->gadget.speed = USB_SPEED_FULL;
1768 memset(&udc->stats, 0, sizeof(udc->stats)); 1764 memset(&udc->stats, 0, sizeof(udc->stats));
1769 1765
1766 pxa_eps_setup(udc);
1770 udc_set_mask_UDCCR(udc, UDCCR_UDE); 1767 udc_set_mask_UDCCR(udc, UDCCR_UDE);
1771 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_ACM); 1768 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_ACM);
1772 udelay(2); 1769 udelay(2);
@@ -1859,12 +1856,11 @@ static void stop_activity(struct pxa_udc *udc, struct usb_gadget_driver *driver)
1859 * 1856 *
1860 * Returns 0 if no error, -ENODEV, -EINVAL otherwise 1857 * Returns 0 if no error, -ENODEV, -EINVAL otherwise
1861 */ 1858 */
1862static int pxa27x_udc_stop(struct usb_gadget *g, 1859static int pxa27x_udc_stop(struct usb_gadget *g)
1863 struct usb_gadget_driver *driver)
1864{ 1860{
1865 struct pxa_udc *udc = to_pxa(g); 1861 struct pxa_udc *udc = to_pxa(g);
1866 1862
1867 stop_activity(udc, driver); 1863 stop_activity(udc, NULL);
1868 udc_disable(udc); 1864 udc_disable(udc);
1869 dplus_pullup(udc, 0); 1865 dplus_pullup(udc, 0);
1870 1866
@@ -2404,6 +2400,14 @@ static struct pxa_udc memory = {
2404 } 2400 }
2405}; 2401};
2406 2402
2403#if defined(CONFIG_OF)
2404static struct of_device_id udc_pxa_dt_ids[] = {
2405 { .compatible = "marvell,pxa270-udc" },
2406 {}
2407};
2408MODULE_DEVICE_TABLE(of, udc_pxa_dt_ids);
2409#endif
2410
2407/** 2411/**
2408 * pxa_udc_probe - probes the udc device 2412 * pxa_udc_probe - probes the udc device
2409 * @_dev: platform device 2413 * @_dev: platform device
@@ -2416,81 +2420,77 @@ static int pxa_udc_probe(struct platform_device *pdev)
2416 struct resource *regs; 2420 struct resource *regs;
2417 struct pxa_udc *udc = &memory; 2421 struct pxa_udc *udc = &memory;
2418 int retval = 0, gpio; 2422 int retval = 0, gpio;
2423 struct pxa2xx_udc_mach_info *mach = dev_get_platdata(&pdev->dev);
2424 unsigned long gpio_flags;
2425
2426 if (mach) {
2427 gpio_flags = mach->gpio_pullup_inverted ? GPIOF_ACTIVE_LOW : 0;
2428 gpio = mach->gpio_pullup;
2429 if (gpio_is_valid(gpio)) {
2430 retval = devm_gpio_request_one(&pdev->dev, gpio,
2431 gpio_flags,
2432 "USB D+ pullup");
2433 if (retval)
2434 return retval;
2435 udc->gpiod = gpio_to_desc(mach->gpio_pullup);
2436 }
2437 udc->udc_command = mach->udc_command;
2438 } else {
2439 udc->gpiod = devm_gpiod_get(&pdev->dev, NULL);
2440 }
2419 2441
2420 regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); 2442 regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2421 if (!regs) 2443 udc->regs = devm_ioremap_resource(&pdev->dev, regs);
2422 return -ENXIO; 2444 if (IS_ERR(udc->regs))
2445 return PTR_ERR(udc->regs);
2423 udc->irq = platform_get_irq(pdev, 0); 2446 udc->irq = platform_get_irq(pdev, 0);
2424 if (udc->irq < 0) 2447 if (udc->irq < 0)
2425 return udc->irq; 2448 return udc->irq;
2426 2449
2427 udc->dev = &pdev->dev; 2450 udc->dev = &pdev->dev;
2428 udc->mach = dev_get_platdata(&pdev->dev);
2429 udc->transceiver = usb_get_phy(USB_PHY_TYPE_USB2); 2451 udc->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
2430 2452
2431 gpio = udc->mach->gpio_pullup; 2453 if (IS_ERR(udc->gpiod)) {
2432 if (gpio_is_valid(gpio)) { 2454 dev_err(&pdev->dev, "Couldn't find or request D+ gpio : %ld\n",
2433 retval = gpio_request(gpio, "USB D+ pullup"); 2455 PTR_ERR(udc->gpiod));
2434 if (retval == 0) 2456 return PTR_ERR(udc->gpiod);
2435 gpio_direction_output(gpio,
2436 udc->mach->gpio_pullup_inverted);
2437 }
2438 if (retval) {
2439 dev_err(&pdev->dev, "Couldn't request gpio %d : %d\n",
2440 gpio, retval);
2441 return retval;
2442 } 2457 }
2458 if (udc->gpiod)
2459 gpiod_direction_output(udc->gpiod, 0);
2460
2461 udc->clk = devm_clk_get(&pdev->dev, NULL);
2462 if (IS_ERR(udc->clk))
2463 return PTR_ERR(udc->clk);
2443 2464
2444 udc->clk = clk_get(&pdev->dev, NULL);
2445 if (IS_ERR(udc->clk)) {
2446 retval = PTR_ERR(udc->clk);
2447 goto err_clk;
2448 }
2449 retval = clk_prepare(udc->clk); 2465 retval = clk_prepare(udc->clk);
2450 if (retval) 2466 if (retval)
2451 goto err_clk_prepare; 2467 return retval;
2452
2453 retval = -ENOMEM;
2454 udc->regs = ioremap(regs->start, resource_size(regs));
2455 if (!udc->regs) {
2456 dev_err(&pdev->dev, "Unable to map UDC I/O memory\n");
2457 goto err_map;
2458 }
2459 2468
2460 udc->vbus_sensed = 0; 2469 udc->vbus_sensed = 0;
2461 2470
2462 the_controller = udc; 2471 the_controller = udc;
2463 platform_set_drvdata(pdev, udc); 2472 platform_set_drvdata(pdev, udc);
2464 udc_init_data(udc); 2473 udc_init_data(udc);
2465 pxa_eps_setup(udc);
2466 2474
2467 /* irq setup after old hardware state is cleaned up */ 2475 /* irq setup after old hardware state is cleaned up */
2468 retval = request_irq(udc->irq, pxa_udc_irq, 2476 retval = devm_request_irq(&pdev->dev, udc->irq, pxa_udc_irq,
2469 IRQF_SHARED, driver_name, udc); 2477 IRQF_SHARED, driver_name, udc);
2470 if (retval != 0) { 2478 if (retval != 0) {
2471 dev_err(udc->dev, "%s: can't get irq %i, err %d\n", 2479 dev_err(udc->dev, "%s: can't get irq %i, err %d\n",
2472 driver_name, udc->irq, retval); 2480 driver_name, udc->irq, retval);
2473 goto err_irq; 2481 goto err;
2474 } 2482 }
2475 2483
2476 retval = usb_add_gadget_udc(&pdev->dev, &udc->gadget); 2484 retval = usb_add_gadget_udc(&pdev->dev, &udc->gadget);
2477 if (retval) 2485 if (retval)
2478 goto err_add_udc; 2486 goto err;
2479 2487
2480 pxa_init_debugfs(udc); 2488 pxa_init_debugfs(udc);
2481 2489 if (should_enable_udc(udc))
2490 udc_enable(udc);
2482 return 0; 2491 return 0;
2483 2492err:
2484err_add_udc:
2485 free_irq(udc->irq, udc);
2486err_irq:
2487 iounmap(udc->regs);
2488err_map:
2489 clk_unprepare(udc->clk); 2493 clk_unprepare(udc->clk);
2490err_clk_prepare:
2491 clk_put(udc->clk);
2492 udc->clk = NULL;
2493err_clk:
2494 return retval; 2494 return retval;
2495} 2495}
2496 2496
@@ -2501,22 +2501,15 @@ err_clk:
2501static int pxa_udc_remove(struct platform_device *_dev) 2501static int pxa_udc_remove(struct platform_device *_dev)
2502{ 2502{
2503 struct pxa_udc *udc = platform_get_drvdata(_dev); 2503 struct pxa_udc *udc = platform_get_drvdata(_dev);
2504 int gpio = udc->mach->gpio_pullup;
2505 2504
2506 usb_del_gadget_udc(&udc->gadget); 2505 usb_del_gadget_udc(&udc->gadget);
2507 usb_gadget_unregister_driver(udc->driver);
2508 free_irq(udc->irq, udc);
2509 pxa_cleanup_debugfs(udc); 2506 pxa_cleanup_debugfs(udc);
2510 if (gpio_is_valid(gpio))
2511 gpio_free(gpio);
2512 2507
2513 usb_put_phy(udc->transceiver); 2508 usb_put_phy(udc->transceiver);
2514 2509
2515 udc->transceiver = NULL; 2510 udc->transceiver = NULL;
2516 the_controller = NULL; 2511 the_controller = NULL;
2517 clk_unprepare(udc->clk); 2512 clk_unprepare(udc->clk);
2518 clk_put(udc->clk);
2519 iounmap(udc->regs);
2520 2513
2521 return 0; 2514 return 0;
2522} 2515}
@@ -2546,19 +2539,11 @@ extern void pxa27x_clear_otgph(void);
2546 */ 2539 */
2547static int pxa_udc_suspend(struct platform_device *_dev, pm_message_t state) 2540static int pxa_udc_suspend(struct platform_device *_dev, pm_message_t state)
2548{ 2541{
2549 int i;
2550 struct pxa_udc *udc = platform_get_drvdata(_dev); 2542 struct pxa_udc *udc = platform_get_drvdata(_dev);
2551 struct pxa_ep *ep; 2543 struct pxa_ep *ep;
2552 2544
2553 ep = &udc->pxa_ep[0]; 2545 ep = &udc->pxa_ep[0];
2554 udc->udccsr0 = udc_ep_readl(ep, UDCCSR); 2546 udc->udccsr0 = udc_ep_readl(ep, UDCCSR);
2555 for (i = 1; i < NR_PXA_ENDPOINTS; i++) {
2556 ep = &udc->pxa_ep[i];
2557 ep->udccsr_value = udc_ep_readl(ep, UDCCSR);
2558 ep->udccr_value = udc_ep_readl(ep, UDCCR);
2559 ep_dbg(ep, "udccsr:0x%03x, udccr:0x%x\n",
2560 ep->udccsr_value, ep->udccr_value);
2561 }
2562 2547
2563 udc_disable(udc); 2548 udc_disable(udc);
2564 udc->pullup_resume = udc->pullup_on; 2549 udc->pullup_resume = udc->pullup_on;
@@ -2576,19 +2561,11 @@ static int pxa_udc_suspend(struct platform_device *_dev, pm_message_t state)
2576 */ 2561 */
2577static int pxa_udc_resume(struct platform_device *_dev) 2562static int pxa_udc_resume(struct platform_device *_dev)
2578{ 2563{
2579 int i;
2580 struct pxa_udc *udc = platform_get_drvdata(_dev); 2564 struct pxa_udc *udc = platform_get_drvdata(_dev);
2581 struct pxa_ep *ep; 2565 struct pxa_ep *ep;
2582 2566
2583 ep = &udc->pxa_ep[0]; 2567 ep = &udc->pxa_ep[0];
2584 udc_ep_writel(ep, UDCCSR, udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME)); 2568 udc_ep_writel(ep, UDCCSR, udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME));
2585 for (i = 1; i < NR_PXA_ENDPOINTS; i++) {
2586 ep = &udc->pxa_ep[i];
2587 udc_ep_writel(ep, UDCCSR, ep->udccsr_value);
2588 udc_ep_writel(ep, UDCCR, ep->udccr_value);
2589 ep_dbg(ep, "udccsr:0x%03x, udccr:0x%x\n",
2590 ep->udccsr_value, ep->udccr_value);
2591 }
2592 2569
2593 dplus_pullup(udc, udc->pullup_resume); 2570 dplus_pullup(udc, udc->pullup_resume);
2594 if (should_enable_udc(udc)) 2571 if (should_enable_udc(udc))
@@ -2615,6 +2592,7 @@ static struct platform_driver udc_driver = {
2615 .driver = { 2592 .driver = {
2616 .name = "pxa27x-udc", 2593 .name = "pxa27x-udc",
2617 .owner = THIS_MODULE, 2594 .owner = THIS_MODULE,
2595 .of_match_table = of_match_ptr(udc_pxa_dt_ids),
2618 }, 2596 },
2619 .probe = pxa_udc_probe, 2597 .probe = pxa_udc_probe,
2620 .remove = pxa_udc_remove, 2598 .remove = pxa_udc_remove,
diff --git a/drivers/usb/gadget/udc/pxa27x_udc.h b/drivers/usb/gadget/udc/pxa27x_udc.h
index 28f2b53530f5..11e14232794b 100644
--- a/drivers/usb/gadget/udc/pxa27x_udc.h
+++ b/drivers/usb/gadget/udc/pxa27x_udc.h
@@ -420,7 +420,8 @@ struct udc_stats {
420 * @usb_gadget: udc gadget structure 420 * @usb_gadget: udc gadget structure
421 * @driver: bound gadget (zero, g_ether, g_mass_storage, ...) 421 * @driver: bound gadget (zero, g_ether, g_mass_storage, ...)
422 * @dev: device 422 * @dev: device
423 * @mach: machine info, used to activate specific GPIO 423 * @udc_command: machine specific function to activate D+ pullup
424 * @gpiod: gpio descriptor of gpio for D+ pullup (or NULL if none)
424 * @transceiver: external transceiver to handle vbus sense and D+ pullup 425 * @transceiver: external transceiver to handle vbus sense and D+ pullup
425 * @ep0state: control endpoint state machine state 426 * @ep0state: control endpoint state machine state
426 * @stats: statistics on udc usage 427 * @stats: statistics on udc usage
@@ -446,7 +447,8 @@ struct pxa_udc {
446 struct usb_gadget gadget; 447 struct usb_gadget gadget;
447 struct usb_gadget_driver *driver; 448 struct usb_gadget_driver *driver;
448 struct device *dev; 449 struct device *dev;
449 struct pxa2xx_udc_mach_info *mach; 450 void (*udc_command)(int);
451 struct gpio_desc *gpiod;
450 struct usb_phy *transceiver; 452 struct usb_phy *transceiver;
451 453
452 enum ep0_state ep0state; 454 enum ep0_state ep0state;
diff --git a/drivers/usb/gadget/udc/r8a66597-udc.c b/drivers/usb/gadget/udc/r8a66597-udc.c
index f8186613b53e..06870da0b988 100644
--- a/drivers/usb/gadget/udc/r8a66597-udc.c
+++ b/drivers/usb/gadget/udc/r8a66597-udc.c
@@ -1345,7 +1345,7 @@ static void irq_device_state(struct r8a66597 *r8a66597)
1345 if (dvsq == DS_DFLT) { 1345 if (dvsq == DS_DFLT) {
1346 /* bus reset */ 1346 /* bus reset */
1347 spin_unlock(&r8a66597->lock); 1347 spin_unlock(&r8a66597->lock);
1348 r8a66597->driver->disconnect(&r8a66597->gadget); 1348 usb_gadget_udc_reset(&r8a66597->gadget, r8a66597->driver);
1349 spin_lock(&r8a66597->lock); 1349 spin_lock(&r8a66597->lock);
1350 r8a66597_update_usb_speed(r8a66597); 1350 r8a66597_update_usb_speed(r8a66597);
1351 } 1351 }
@@ -1763,8 +1763,7 @@ static int r8a66597_start(struct usb_gadget *gadget,
1763 return 0; 1763 return 0;
1764} 1764}
1765 1765
1766static int r8a66597_stop(struct usb_gadget *gadget, 1766static int r8a66597_stop(struct usb_gadget *gadget)
1767 struct usb_gadget_driver *driver)
1768{ 1767{
1769 struct r8a66597 *r8a66597 = gadget_to_r8a66597(gadget); 1768 struct r8a66597 *r8a66597 = gadget_to_r8a66597(gadget);
1770 unsigned long flags; 1769 unsigned long flags;
@@ -1846,10 +1845,7 @@ static int r8a66597_sudmac_ioremap(struct r8a66597 *r8a66597,
1846 1845
1847 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sudmac"); 1846 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sudmac");
1848 r8a66597->sudmac_reg = devm_ioremap_resource(&pdev->dev, res); 1847 r8a66597->sudmac_reg = devm_ioremap_resource(&pdev->dev, res);
1849 if (IS_ERR(r8a66597->sudmac_reg)) 1848 return PTR_ERR_OR_ZERO(r8a66597->sudmac_reg);
1850 return PTR_ERR(r8a66597->sudmac_reg);
1851
1852 return 0;
1853} 1849}
1854 1850
1855static int r8a66597_probe(struct platform_device *pdev) 1851static int r8a66597_probe(struct platform_device *pdev)
diff --git a/drivers/usb/gadget/udc/s3c-hsudc.c b/drivers/usb/gadget/udc/s3c-hsudc.c
index dfbf55797360..97d3a9144381 100644
--- a/drivers/usb/gadget/udc/s3c-hsudc.c
+++ b/drivers/usb/gadget/udc/s3c-hsudc.c
@@ -1172,8 +1172,6 @@ static int s3c_hsudc_start(struct usb_gadget *gadget,
1172 } 1172 }
1173 1173
1174 enable_irq(hsudc->irq); 1174 enable_irq(hsudc->irq);
1175 dev_info(hsudc->dev, "bound driver %s\n", driver->driver.name);
1176
1177 s3c_hsudc_reconfig(hsudc); 1175 s3c_hsudc_reconfig(hsudc);
1178 1176
1179 pm_runtime_get_sync(hsudc->dev); 1177 pm_runtime_get_sync(hsudc->dev);
@@ -1190,8 +1188,7 @@ err_supplies:
1190 return ret; 1188 return ret;
1191} 1189}
1192 1190
1193static int s3c_hsudc_stop(struct usb_gadget *gadget, 1191static int s3c_hsudc_stop(struct usb_gadget *gadget)
1194 struct usb_gadget_driver *driver)
1195{ 1192{
1196 struct s3c_hsudc *hsudc = to_hsudc(gadget); 1193 struct s3c_hsudc *hsudc = to_hsudc(gadget);
1197 unsigned long flags; 1194 unsigned long flags;
@@ -1199,11 +1196,7 @@ static int s3c_hsudc_stop(struct usb_gadget *gadget,
1199 if (!hsudc) 1196 if (!hsudc)
1200 return -ENODEV; 1197 return -ENODEV;
1201 1198
1202 if (!driver || driver != hsudc->driver)
1203 return -EINVAL;
1204
1205 spin_lock_irqsave(&hsudc->lock, flags); 1199 spin_lock_irqsave(&hsudc->lock, flags);
1206 hsudc->driver = NULL;
1207 hsudc->gadget.speed = USB_SPEED_UNKNOWN; 1200 hsudc->gadget.speed = USB_SPEED_UNKNOWN;
1208 s3c_hsudc_uninit_phy(); 1201 s3c_hsudc_uninit_phy();
1209 1202
@@ -1220,9 +1213,8 @@ static int s3c_hsudc_stop(struct usb_gadget *gadget,
1220 disable_irq(hsudc->irq); 1213 disable_irq(hsudc->irq);
1221 1214
1222 regulator_bulk_disable(ARRAY_SIZE(hsudc->supplies), hsudc->supplies); 1215 regulator_bulk_disable(ARRAY_SIZE(hsudc->supplies), hsudc->supplies);
1216 hsudc->driver = NULL;
1223 1217
1224 dev_info(hsudc->dev, "unregistered gadget driver '%s'\n",
1225 driver->driver.name);
1226 return 0; 1218 return 0;
1227} 1219}
1228 1220
@@ -1267,10 +1259,8 @@ static int s3c_hsudc_probe(struct platform_device *pdev)
1267 hsudc = devm_kzalloc(&pdev->dev, sizeof(struct s3c_hsudc) + 1259 hsudc = devm_kzalloc(&pdev->dev, sizeof(struct s3c_hsudc) +
1268 sizeof(struct s3c_hsudc_ep) * pd->epnum, 1260 sizeof(struct s3c_hsudc_ep) * pd->epnum,
1269 GFP_KERNEL); 1261 GFP_KERNEL);
1270 if (!hsudc) { 1262 if (!hsudc)
1271 dev_err(dev, "cannot allocate memory\n");
1272 return -ENOMEM; 1263 return -ENOMEM;
1273 }
1274 1264
1275 platform_set_drvdata(pdev, dev); 1265 platform_set_drvdata(pdev, dev);
1276 hsudc->dev = dev; 1266 hsudc->dev = dev;
diff --git a/drivers/usb/gadget/udc/s3c2410_udc.c b/drivers/usb/gadget/udc/s3c2410_udc.c
index ff423d15beff..2a8e36d31488 100644
--- a/drivers/usb/gadget/udc/s3c2410_udc.c
+++ b/drivers/usb/gadget/udc/s3c2410_udc.c
@@ -1541,8 +1541,7 @@ static int s3c2410_vbus_draw(struct usb_gadget *_gadget, unsigned ma)
1541 1541
1542static int s3c2410_udc_start(struct usb_gadget *g, 1542static int s3c2410_udc_start(struct usb_gadget *g,
1543 struct usb_gadget_driver *driver); 1543 struct usb_gadget_driver *driver);
1544static int s3c2410_udc_stop(struct usb_gadget *g, 1544static int s3c2410_udc_stop(struct usb_gadget *g);
1545 struct usb_gadget_driver *driver);
1546 1545
1547static const struct usb_gadget_ops s3c2410_ops = { 1546static const struct usb_gadget_ops s3c2410_ops = {
1548 .get_frame = s3c2410_udc_get_frame, 1547 .get_frame = s3c2410_udc_get_frame,
@@ -1683,8 +1682,7 @@ static int s3c2410_udc_start(struct usb_gadget *g,
1683 return 0; 1682 return 0;
1684} 1683}
1685 1684
1686static int s3c2410_udc_stop(struct usb_gadget *g, 1685static int s3c2410_udc_stop(struct usb_gadget *g)
1687 struct usb_gadget_driver *driver)
1688{ 1686{
1689 struct s3c2410_udc *udc = to_s3c2410(g); 1687 struct s3c2410_udc *udc = to_s3c2410(g);
1690 1688
diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index f2054659f25b..e31d574d8860 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -174,8 +174,7 @@ EXPORT_SYMBOL_GPL(usb_gadget_udc_reset);
174 174
175/** 175/**
176 * usb_gadget_udc_start - tells usb device controller to start up 176 * usb_gadget_udc_start - tells usb device controller to start up
177 * @gadget: The gadget we want to get started 177 * @udc: The UDC to be started
178 * @driver: The driver we want to bind to @gadget
179 * 178 *
180 * This call is issued by the UDC Class driver when it's about 179 * This call is issued by the UDC Class driver when it's about
181 * to register a gadget driver to the device controller, before 180 * to register a gadget driver to the device controller, before
@@ -186,10 +185,9 @@ EXPORT_SYMBOL_GPL(usb_gadget_udc_reset);
186 * 185 *
187 * Returns zero on success, else negative errno. 186 * Returns zero on success, else negative errno.
188 */ 187 */
189static inline int usb_gadget_udc_start(struct usb_gadget *gadget, 188static inline int usb_gadget_udc_start(struct usb_udc *udc)
190 struct usb_gadget_driver *driver)
191{ 189{
192 return gadget->ops->udc_start(gadget, driver); 190 return udc->gadget->ops->udc_start(udc->gadget, udc->driver);
193} 191}
194 192
195/** 193/**
@@ -204,10 +202,9 @@ static inline int usb_gadget_udc_start(struct usb_gadget *gadget,
204 * far as powering off UDC completely and disable its data 202 * far as powering off UDC completely and disable its data
205 * line pullups. 203 * line pullups.
206 */ 204 */
207static inline void usb_gadget_udc_stop(struct usb_gadget *gadget, 205static inline void usb_gadget_udc_stop(struct usb_udc *udc)
208 struct usb_gadget_driver *driver)
209{ 206{
210 gadget->ops->udc_stop(gadget, driver); 207 udc->gadget->ops->udc_stop(udc->gadget);
211} 208}
212 209
213/** 210/**
@@ -328,14 +325,14 @@ EXPORT_SYMBOL_GPL(usb_add_gadget_udc);
328static void usb_gadget_remove_driver(struct usb_udc *udc) 325static void usb_gadget_remove_driver(struct usb_udc *udc)
329{ 326{
330 dev_dbg(&udc->dev, "unregistering UDC driver [%s]\n", 327 dev_dbg(&udc->dev, "unregistering UDC driver [%s]\n",
331 udc->gadget->name); 328 udc->driver->function);
332 329
333 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); 330 kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
334 331
335 usb_gadget_disconnect(udc->gadget); 332 usb_gadget_disconnect(udc->gadget);
336 udc->driver->disconnect(udc->gadget); 333 udc->driver->disconnect(udc->gadget);
337 udc->driver->unbind(udc->gadget); 334 udc->driver->unbind(udc->gadget);
338 usb_gadget_udc_stop(udc->gadget, NULL); 335 usb_gadget_udc_stop(udc);
339 336
340 udc->driver = NULL; 337 udc->driver = NULL;
341 udc->dev.driver = NULL; 338 udc->dev.driver = NULL;
@@ -395,7 +392,7 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
395 ret = driver->bind(udc->gadget, driver); 392 ret = driver->bind(udc->gadget, driver);
396 if (ret) 393 if (ret)
397 goto err1; 394 goto err1;
398 ret = usb_gadget_udc_start(udc->gadget, driver); 395 ret = usb_gadget_udc_start(udc);
399 if (ret) { 396 if (ret) {
400 driver->unbind(udc->gadget); 397 driver->unbind(udc->gadget);
401 goto err1; 398 goto err1;
@@ -414,7 +411,7 @@ err1:
414 return ret; 411 return ret;
415} 412}
416 413
417int udc_attach_driver(const char *name, struct usb_gadget_driver *driver) 414int usb_udc_attach_driver(const char *name, struct usb_gadget_driver *driver)
418{ 415{
419 struct usb_udc *udc = NULL; 416 struct usb_udc *udc = NULL;
420 int ret = -ENODEV; 417 int ret = -ENODEV;
@@ -438,7 +435,7 @@ out:
438 mutex_unlock(&udc_lock); 435 mutex_unlock(&udc_lock);
439 return ret; 436 return ret;
440} 437}
441EXPORT_SYMBOL_GPL(udc_attach_driver); 438EXPORT_SYMBOL_GPL(usb_udc_attach_driver);
442 439
443int usb_gadget_probe_driver(struct usb_gadget_driver *driver) 440int usb_gadget_probe_driver(struct usb_gadget_driver *driver)
444{ 441{
@@ -513,11 +510,12 @@ static ssize_t usb_udc_softconn_store(struct device *dev,
513 } 510 }
514 511
515 if (sysfs_streq(buf, "connect")) { 512 if (sysfs_streq(buf, "connect")) {
516 usb_gadget_udc_start(udc->gadget, udc->driver); 513 usb_gadget_udc_start(udc);
517 usb_gadget_connect(udc->gadget); 514 usb_gadget_connect(udc->gadget);
518 } else if (sysfs_streq(buf, "disconnect")) { 515 } else if (sysfs_streq(buf, "disconnect")) {
519 usb_gadget_disconnect(udc->gadget); 516 usb_gadget_disconnect(udc->gadget);
520 usb_gadget_udc_stop(udc->gadget, udc->driver); 517 udc->driver->disconnect(udc->gadget);
518 usb_gadget_udc_stop(udc);
521 } else { 519 } else {
522 dev_err(dev, "unsupported command '%s'\n", buf); 520 dev_err(dev, "unsupported command '%s'\n", buf);
523 return -EINVAL; 521 return -EINVAL;
diff --git a/drivers/usb/gadget/udc/udc-xilinx.c b/drivers/usb/gadget/udc/udc-xilinx.c
index ed27e1687a4e..1eac56fc384d 100644
--- a/drivers/usb/gadget/udc/udc-xilinx.c
+++ b/drivers/usb/gadget/udc/udc-xilinx.c
@@ -1403,8 +1403,7 @@ err:
1403 * 1403 *
1404 * Return: zero always 1404 * Return: zero always
1405 */ 1405 */
1406static int xudc_stop(struct usb_gadget *gadget, 1406static int xudc_stop(struct usb_gadget *gadget)
1407 struct usb_gadget_driver *driver)
1408{ 1407{
1409 struct xusb_udc *udc = to_udc(gadget); 1408 struct xusb_udc *udc = to_udc(gadget);
1410 unsigned long flags; 1409 unsigned long flags;
diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c
index 0231606d47c2..3e5df5af3740 100644
--- a/drivers/usb/host/ohci-omap.c
+++ b/drivers/usb/host/ohci-omap.c
@@ -183,7 +183,7 @@ static void start_hnp(struct ohci_hcd *ohci)
183 otg_start_hnp(hcd->usb_phy->otg); 183 otg_start_hnp(hcd->usb_phy->otg);
184 184
185 local_irq_save(flags); 185 local_irq_save(flags);
186 hcd->usb_phy->state = OTG_STATE_A_SUSPEND; 186 hcd->usb_phy->otg->state = OTG_STATE_A_SUSPEND;
187 writel (RH_PS_PSS, &ohci->regs->roothub.portstatus [port]); 187 writel (RH_PS_PSS, &ohci->regs->roothub.portstatus [port]);
188 l = omap_readl(OTG_CTRL); 188 l = omap_readl(OTG_CTRL);
189 l &= ~OTG_A_BUSREQ; 189 l &= ~OTG_A_BUSREQ;
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index 06cc5d6ea681..9d68372dd9aa 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -58,8 +58,7 @@ config USB_MUSB_DUAL_ROLE
58 58
59endchoice 59endchoice
60 60
61choice 61comment "Platform Glue Layer"
62 prompt "Platform Glue Layer"
63 62
64config USB_MUSB_DAVINCI 63config USB_MUSB_DAVINCI
65 tristate "DaVinci" 64 tristate "DaVinci"
@@ -101,8 +100,6 @@ config USB_MUSB_JZ4740
101 depends on USB_MUSB_GADGET 100 depends on USB_MUSB_GADGET
102 depends on USB_OTG_BLACKLIST_HUB 101 depends on USB_OTG_BLACKLIST_HUB
103 102
104endchoice
105
106config USB_MUSB_AM335X_CHILD 103config USB_MUSB_AM335X_CHILD
107 tristate 104 tristate
108 105
diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c
index a2735df24cc6..220fd4d3b41c 100644
--- a/drivers/usb/musb/am35x.c
+++ b/drivers/usb/musb/am35x.c
@@ -149,25 +149,25 @@ static void otg_timer(unsigned long _musb)
149 */ 149 */
150 devctl = musb_readb(mregs, MUSB_DEVCTL); 150 devctl = musb_readb(mregs, MUSB_DEVCTL);
151 dev_dbg(musb->controller, "Poll devctl %02x (%s)\n", devctl, 151 dev_dbg(musb->controller, "Poll devctl %02x (%s)\n", devctl,
152 usb_otg_state_string(musb->xceiv->state)); 152 usb_otg_state_string(musb->xceiv->otg->state));
153 153
154 spin_lock_irqsave(&musb->lock, flags); 154 spin_lock_irqsave(&musb->lock, flags);
155 switch (musb->xceiv->state) { 155 switch (musb->xceiv->otg->state) {
156 case OTG_STATE_A_WAIT_BCON: 156 case OTG_STATE_A_WAIT_BCON:
157 devctl &= ~MUSB_DEVCTL_SESSION; 157 devctl &= ~MUSB_DEVCTL_SESSION;
158 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); 158 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
159 159
160 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); 160 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
161 if (devctl & MUSB_DEVCTL_BDEVICE) { 161 if (devctl & MUSB_DEVCTL_BDEVICE) {
162 musb->xceiv->state = OTG_STATE_B_IDLE; 162 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
163 MUSB_DEV_MODE(musb); 163 MUSB_DEV_MODE(musb);
164 } else { 164 } else {
165 musb->xceiv->state = OTG_STATE_A_IDLE; 165 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
166 MUSB_HST_MODE(musb); 166 MUSB_HST_MODE(musb);
167 } 167 }
168 break; 168 break;
169 case OTG_STATE_A_WAIT_VFALL: 169 case OTG_STATE_A_WAIT_VFALL:
170 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 170 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
171 musb_writel(musb->ctrl_base, CORE_INTR_SRC_SET_REG, 171 musb_writel(musb->ctrl_base, CORE_INTR_SRC_SET_REG,
172 MUSB_INTR_VBUSERROR << AM35X_INTR_USB_SHIFT); 172 MUSB_INTR_VBUSERROR << AM35X_INTR_USB_SHIFT);
173 break; 173 break;
@@ -176,7 +176,7 @@ static void otg_timer(unsigned long _musb)
176 if (devctl & MUSB_DEVCTL_BDEVICE) 176 if (devctl & MUSB_DEVCTL_BDEVICE)
177 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 177 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
178 else 178 else
179 musb->xceiv->state = OTG_STATE_A_IDLE; 179 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
180 break; 180 break;
181 default: 181 default:
182 break; 182 break;
@@ -193,9 +193,9 @@ static void am35x_musb_try_idle(struct musb *musb, unsigned long timeout)
193 193
194 /* Never idle if active, or when VBUS timeout is not set as host */ 194 /* Never idle if active, or when VBUS timeout is not set as host */
195 if (musb->is_active || (musb->a_wait_bcon == 0 && 195 if (musb->is_active || (musb->a_wait_bcon == 0 &&
196 musb->xceiv->state == OTG_STATE_A_WAIT_BCON)) { 196 musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON)) {
197 dev_dbg(musb->controller, "%s active, deleting timer\n", 197 dev_dbg(musb->controller, "%s active, deleting timer\n",
198 usb_otg_state_string(musb->xceiv->state)); 198 usb_otg_state_string(musb->xceiv->otg->state));
199 del_timer(&otg_workaround); 199 del_timer(&otg_workaround);
200 last_timer = jiffies; 200 last_timer = jiffies;
201 return; 201 return;
@@ -208,7 +208,7 @@ static void am35x_musb_try_idle(struct musb *musb, unsigned long timeout)
208 last_timer = timeout; 208 last_timer = timeout;
209 209
210 dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n", 210 dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n",
211 usb_otg_state_string(musb->xceiv->state), 211 usb_otg_state_string(musb->xceiv->otg->state),
212 jiffies_to_msecs(timeout - jiffies)); 212 jiffies_to_msecs(timeout - jiffies));
213 mod_timer(&otg_workaround, timeout); 213 mod_timer(&otg_workaround, timeout);
214} 214}
@@ -278,27 +278,27 @@ static irqreturn_t am35x_musb_interrupt(int irq, void *hci)
278 * devctl. 278 * devctl.
279 */ 279 */
280 musb->int_usb &= ~MUSB_INTR_VBUSERROR; 280 musb->int_usb &= ~MUSB_INTR_VBUSERROR;
281 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; 281 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VFALL;
282 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 282 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
283 WARNING("VBUS error workaround (delay coming)\n"); 283 WARNING("VBUS error workaround (delay coming)\n");
284 } else if (drvvbus) { 284 } else if (drvvbus) {
285 MUSB_HST_MODE(musb); 285 MUSB_HST_MODE(musb);
286 otg->default_a = 1; 286 otg->default_a = 1;
287 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 287 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
288 portstate(musb->port1_status |= USB_PORT_STAT_POWER); 288 portstate(musb->port1_status |= USB_PORT_STAT_POWER);
289 del_timer(&otg_workaround); 289 del_timer(&otg_workaround);
290 } else { 290 } else {
291 musb->is_active = 0; 291 musb->is_active = 0;
292 MUSB_DEV_MODE(musb); 292 MUSB_DEV_MODE(musb);
293 otg->default_a = 0; 293 otg->default_a = 0;
294 musb->xceiv->state = OTG_STATE_B_IDLE; 294 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
295 portstate(musb->port1_status &= ~USB_PORT_STAT_POWER); 295 portstate(musb->port1_status &= ~USB_PORT_STAT_POWER);
296 } 296 }
297 297
298 /* NOTE: this must complete power-on within 100 ms. */ 298 /* NOTE: this must complete power-on within 100 ms. */
299 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n", 299 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n",
300 drvvbus ? "on" : "off", 300 drvvbus ? "on" : "off",
301 usb_otg_state_string(musb->xceiv->state), 301 usb_otg_state_string(musb->xceiv->otg->state),
302 err ? " ERROR" : "", 302 err ? " ERROR" : "",
303 devctl); 303 devctl);
304 ret = IRQ_HANDLED; 304 ret = IRQ_HANDLED;
@@ -324,7 +324,7 @@ eoi:
324 } 324 }
325 325
326 /* Poll for ID change */ 326 /* Poll for ID change */
327 if (musb->xceiv->state == OTG_STATE_B_IDLE) 327 if (musb->xceiv->otg->state == OTG_STATE_B_IDLE)
328 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 328 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
329 329
330 spin_unlock_irqrestore(&musb->lock, flags); 330 spin_unlock_irqrestore(&musb->lock, flags);
@@ -408,7 +408,7 @@ static int am35x_musb_exit(struct musb *musb)
408} 408}
409 409
410/* AM35x supports only 32bit read operation */ 410/* AM35x supports only 32bit read operation */
411void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst) 411static void am35x_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
412{ 412{
413 void __iomem *fifo = hw_ep->fifo; 413 void __iomem *fifo = hw_ep->fifo;
414 u32 val; 414 u32 val;
@@ -438,9 +438,11 @@ void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
438} 438}
439 439
440static const struct musb_platform_ops am35x_ops = { 440static const struct musb_platform_ops am35x_ops = {
441 .quirks = MUSB_INDEXED_EP,
441 .init = am35x_musb_init, 442 .init = am35x_musb_init,
442 .exit = am35x_musb_exit, 443 .exit = am35x_musb_exit,
443 444
445 .read_fifo = am35x_read_fifo,
444 .enable = am35x_musb_enable, 446 .enable = am35x_musb_enable,
445 .disable = am35x_musb_disable, 447 .disable = am35x_musb_disable,
446 448
diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c
index ac4422b33dcd..a441a2de8619 100644
--- a/drivers/usb/musb/blackfin.c
+++ b/drivers/usb/musb/blackfin.c
@@ -33,10 +33,45 @@ struct bfin_glue {
33}; 33};
34#define glue_to_musb(g) platform_get_drvdata(g->musb) 34#define glue_to_musb(g) platform_get_drvdata(g->musb)
35 35
36static u32 bfin_fifo_offset(u8 epnum)
37{
38 return USB_OFFSET(USB_EP0_FIFO) + (epnum * 8);
39}
40
41static u8 bfin_readb(const void __iomem *addr, unsigned offset)
42{
43 return (u8)(bfin_read16(addr + offset));
44}
45
46static u16 bfin_readw(const void __iomem *addr, unsigned offset)
47{
48 return bfin_read16(addr + offset);
49}
50
51static u32 bfin_readl(const void __iomem *addr, unsigned offset)
52{
53 return (u32)(bfin_read16(addr + offset));
54}
55
56static void bfin_writeb(void __iomem *addr, unsigned offset, u8 data)
57{
58 bfin_write16(addr + offset, (u16)data);
59}
60
61static void bfin_writew(void __iomem *addr, unsigned offset, u16 data)
62{
63 bfin_write16(addr + offset, data);
64}
65
66static void binf_writel(void __iomem *addr, unsigned offset, u32 data)
67{
68 bfin_write16(addr + offset, (u16)data);
69}
70
36/* 71/*
37 * Load an endpoint's FIFO 72 * Load an endpoint's FIFO
38 */ 73 */
39void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src) 74static void bfin_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src)
40{ 75{
41 struct musb *musb = hw_ep->musb; 76 struct musb *musb = hw_ep->musb;
42 void __iomem *fifo = hw_ep->fifo; 77 void __iomem *fifo = hw_ep->fifo;
@@ -100,7 +135,7 @@ void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src)
100/* 135/*
101 * Unload an endpoint's FIFO 136 * Unload an endpoint's FIFO
102 */ 137 */
103void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst) 138static void bfin_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
104{ 139{
105 struct musb *musb = hw_ep->musb; 140 struct musb *musb = hw_ep->musb;
106 void __iomem *fifo = hw_ep->fifo; 141 void __iomem *fifo = hw_ep->fifo;
@@ -185,8 +220,8 @@ static irqreturn_t blackfin_interrupt(int irq, void *__hci)
185 } 220 }
186 221
187 /* Start sampling ID pin, when plug is removed from MUSB */ 222 /* Start sampling ID pin, when plug is removed from MUSB */
188 if ((musb->xceiv->state == OTG_STATE_B_IDLE 223 if ((musb->xceiv->otg->state == OTG_STATE_B_IDLE
189 || musb->xceiv->state == OTG_STATE_A_WAIT_BCON) || 224 || musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON) ||
190 (musb->int_usb & MUSB_INTR_DISCONNECT && is_host_active(musb))) { 225 (musb->int_usb & MUSB_INTR_DISCONNECT && is_host_active(musb))) {
191 mod_timer(&musb_conn_timer, jiffies + TIMER_DELAY); 226 mod_timer(&musb_conn_timer, jiffies + TIMER_DELAY);
192 musb->a_wait_bcon = TIMER_DELAY; 227 musb->a_wait_bcon = TIMER_DELAY;
@@ -205,7 +240,7 @@ static void musb_conn_timer_handler(unsigned long _musb)
205 static u8 toggle; 240 static u8 toggle;
206 241
207 spin_lock_irqsave(&musb->lock, flags); 242 spin_lock_irqsave(&musb->lock, flags);
208 switch (musb->xceiv->state) { 243 switch (musb->xceiv->otg->state) {
209 case OTG_STATE_A_IDLE: 244 case OTG_STATE_A_IDLE:
210 case OTG_STATE_A_WAIT_BCON: 245 case OTG_STATE_A_WAIT_BCON:
211 /* Start a new session */ 246 /* Start a new session */
@@ -219,7 +254,7 @@ static void musb_conn_timer_handler(unsigned long _musb)
219 254
220 if (!(val & MUSB_DEVCTL_BDEVICE)) { 255 if (!(val & MUSB_DEVCTL_BDEVICE)) {
221 gpio_set_value(musb->config->gpio_vrsel, 1); 256 gpio_set_value(musb->config->gpio_vrsel, 1);
222 musb->xceiv->state = OTG_STATE_A_WAIT_BCON; 257 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON;
223 } else { 258 } else {
224 gpio_set_value(musb->config->gpio_vrsel, 0); 259 gpio_set_value(musb->config->gpio_vrsel, 0);
225 /* Ignore VBUSERROR and SUSPEND IRQ */ 260 /* Ignore VBUSERROR and SUSPEND IRQ */
@@ -229,7 +264,7 @@ static void musb_conn_timer_handler(unsigned long _musb)
229 264
230 val = MUSB_INTR_SUSPEND | MUSB_INTR_VBUSERROR; 265 val = MUSB_INTR_SUSPEND | MUSB_INTR_VBUSERROR;
231 musb_writeb(musb->mregs, MUSB_INTRUSB, val); 266 musb_writeb(musb->mregs, MUSB_INTRUSB, val);
232 musb->xceiv->state = OTG_STATE_B_IDLE; 267 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
233 } 268 }
234 mod_timer(&musb_conn_timer, jiffies + TIMER_DELAY); 269 mod_timer(&musb_conn_timer, jiffies + TIMER_DELAY);
235 break; 270 break;
@@ -245,7 +280,7 @@ static void musb_conn_timer_handler(unsigned long _musb)
245 280
246 if (!(val & MUSB_DEVCTL_BDEVICE)) { 281 if (!(val & MUSB_DEVCTL_BDEVICE)) {
247 gpio_set_value(musb->config->gpio_vrsel, 1); 282 gpio_set_value(musb->config->gpio_vrsel, 1);
248 musb->xceiv->state = OTG_STATE_A_WAIT_BCON; 283 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON;
249 } else { 284 } else {
250 gpio_set_value(musb->config->gpio_vrsel, 0); 285 gpio_set_value(musb->config->gpio_vrsel, 0);
251 286
@@ -280,13 +315,13 @@ static void musb_conn_timer_handler(unsigned long _musb)
280 break; 315 break;
281 default: 316 default:
282 dev_dbg(musb->controller, "%s state not handled\n", 317 dev_dbg(musb->controller, "%s state not handled\n",
283 usb_otg_state_string(musb->xceiv->state)); 318 usb_otg_state_string(musb->xceiv->otg->state));
284 break; 319 break;
285 } 320 }
286 spin_unlock_irqrestore(&musb->lock, flags); 321 spin_unlock_irqrestore(&musb->lock, flags);
287 322
288 dev_dbg(musb->controller, "state is %s\n", 323 dev_dbg(musb->controller, "state is %s\n",
289 usb_otg_state_string(musb->xceiv->state)); 324 usb_otg_state_string(musb->xceiv->otg->state));
290} 325}
291 326
292static void bfin_musb_enable(struct musb *musb) 327static void bfin_musb_enable(struct musb *musb)
@@ -307,7 +342,7 @@ static void bfin_musb_set_vbus(struct musb *musb, int is_on)
307 342
308 dev_dbg(musb->controller, "VBUS %s, devctl %02x " 343 dev_dbg(musb->controller, "VBUS %s, devctl %02x "
309 /* otg %3x conf %08x prcm %08x */ "\n", 344 /* otg %3x conf %08x prcm %08x */ "\n",
310 usb_otg_state_string(musb->xceiv->state), 345 usb_otg_state_string(musb->xceiv->otg->state),
311 musb_readb(musb->mregs, MUSB_DEVCTL)); 346 musb_readb(musb->mregs, MUSB_DEVCTL));
312} 347}
313 348
@@ -433,6 +468,15 @@ static const struct musb_platform_ops bfin_ops = {
433 .init = bfin_musb_init, 468 .init = bfin_musb_init,
434 .exit = bfin_musb_exit, 469 .exit = bfin_musb_exit,
435 470
471 .readb = bfin_readb,
472 .writeb = bfin_writeb,
473 .readw = bfin_readw,
474 .writew = bfin_writew,
475 .readl = bfin_readl,
476 .writel = bfin_writel,
477 .fifo_mode = 2,
478 .read_fifo = bfin_read_fifo,
479 .write_fifo = bfin_write_fifo,
436 .enable = bfin_musb_enable, 480 .enable = bfin_musb_enable,
437 .disable = bfin_musb_disable, 481 .disable = bfin_musb_disable,
438 482
@@ -456,16 +500,12 @@ static int bfin_probe(struct platform_device *pdev)
456 int ret = -ENOMEM; 500 int ret = -ENOMEM;
457 501
458 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL); 502 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL);
459 if (!glue) { 503 if (!glue)
460 dev_err(&pdev->dev, "failed to allocate glue context\n");
461 goto err0; 504 goto err0;
462 }
463 505
464 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO); 506 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO);
465 if (!musb) { 507 if (!musb)
466 dev_err(&pdev->dev, "failed to allocate musb device\n");
467 goto err0; 508 goto err0;
468 }
469 509
470 musb->dev.parent = &pdev->dev; 510 musb->dev.parent = &pdev->dev;
471 musb->dev.dma_mask = &bfin_dmamask; 511 musb->dev.dma_mask = &bfin_dmamask;
diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
index 058775e647ad..9a9c82a4d35d 100644
--- a/drivers/usb/musb/da8xx.c
+++ b/drivers/usb/musb/da8xx.c
@@ -198,20 +198,20 @@ static void otg_timer(unsigned long _musb)
198 */ 198 */
199 devctl = musb_readb(mregs, MUSB_DEVCTL); 199 devctl = musb_readb(mregs, MUSB_DEVCTL);
200 dev_dbg(musb->controller, "Poll devctl %02x (%s)\n", devctl, 200 dev_dbg(musb->controller, "Poll devctl %02x (%s)\n", devctl,
201 usb_otg_state_string(musb->xceiv->state)); 201 usb_otg_state_string(musb->xceiv->otg->state));
202 202
203 spin_lock_irqsave(&musb->lock, flags); 203 spin_lock_irqsave(&musb->lock, flags);
204 switch (musb->xceiv->state) { 204 switch (musb->xceiv->otg->state) {
205 case OTG_STATE_A_WAIT_BCON: 205 case OTG_STATE_A_WAIT_BCON:
206 devctl &= ~MUSB_DEVCTL_SESSION; 206 devctl &= ~MUSB_DEVCTL_SESSION;
207 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); 207 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
208 208
209 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); 209 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
210 if (devctl & MUSB_DEVCTL_BDEVICE) { 210 if (devctl & MUSB_DEVCTL_BDEVICE) {
211 musb->xceiv->state = OTG_STATE_B_IDLE; 211 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
212 MUSB_DEV_MODE(musb); 212 MUSB_DEV_MODE(musb);
213 } else { 213 } else {
214 musb->xceiv->state = OTG_STATE_A_IDLE; 214 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
215 MUSB_HST_MODE(musb); 215 MUSB_HST_MODE(musb);
216 } 216 }
217 break; 217 break;
@@ -226,7 +226,7 @@ static void otg_timer(unsigned long _musb)
226 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 226 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
227 break; 227 break;
228 } 228 }
229 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 229 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
230 musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG, 230 musb_writel(musb->ctrl_base, DA8XX_USB_INTR_SRC_SET_REG,
231 MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT); 231 MUSB_INTR_VBUSERROR << DA8XX_INTR_USB_SHIFT);
232 break; 232 break;
@@ -248,7 +248,7 @@ static void otg_timer(unsigned long _musb)
248 if (devctl & MUSB_DEVCTL_BDEVICE) 248 if (devctl & MUSB_DEVCTL_BDEVICE)
249 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 249 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
250 else 250 else
251 musb->xceiv->state = OTG_STATE_A_IDLE; 251 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
252 break; 252 break;
253 default: 253 default:
254 break; 254 break;
@@ -265,9 +265,9 @@ static void da8xx_musb_try_idle(struct musb *musb, unsigned long timeout)
265 265
266 /* Never idle if active, or when VBUS timeout is not set as host */ 266 /* Never idle if active, or when VBUS timeout is not set as host */
267 if (musb->is_active || (musb->a_wait_bcon == 0 && 267 if (musb->is_active || (musb->a_wait_bcon == 0 &&
268 musb->xceiv->state == OTG_STATE_A_WAIT_BCON)) { 268 musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON)) {
269 dev_dbg(musb->controller, "%s active, deleting timer\n", 269 dev_dbg(musb->controller, "%s active, deleting timer\n",
270 usb_otg_state_string(musb->xceiv->state)); 270 usb_otg_state_string(musb->xceiv->otg->state));
271 del_timer(&otg_workaround); 271 del_timer(&otg_workaround);
272 last_timer = jiffies; 272 last_timer = jiffies;
273 return; 273 return;
@@ -280,7 +280,7 @@ static void da8xx_musb_try_idle(struct musb *musb, unsigned long timeout)
280 last_timer = timeout; 280 last_timer = timeout;
281 281
282 dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n", 282 dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n",
283 usb_otg_state_string(musb->xceiv->state), 283 usb_otg_state_string(musb->xceiv->otg->state),
284 jiffies_to_msecs(timeout - jiffies)); 284 jiffies_to_msecs(timeout - jiffies));
285 mod_timer(&otg_workaround, timeout); 285 mod_timer(&otg_workaround, timeout);
286} 286}
@@ -341,26 +341,26 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci)
341 * devctl. 341 * devctl.
342 */ 342 */
343 musb->int_usb &= ~MUSB_INTR_VBUSERROR; 343 musb->int_usb &= ~MUSB_INTR_VBUSERROR;
344 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; 344 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VFALL;
345 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 345 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
346 WARNING("VBUS error workaround (delay coming)\n"); 346 WARNING("VBUS error workaround (delay coming)\n");
347 } else if (drvvbus) { 347 } else if (drvvbus) {
348 MUSB_HST_MODE(musb); 348 MUSB_HST_MODE(musb);
349 otg->default_a = 1; 349 otg->default_a = 1;
350 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 350 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
351 portstate(musb->port1_status |= USB_PORT_STAT_POWER); 351 portstate(musb->port1_status |= USB_PORT_STAT_POWER);
352 del_timer(&otg_workaround); 352 del_timer(&otg_workaround);
353 } else { 353 } else {
354 musb->is_active = 0; 354 musb->is_active = 0;
355 MUSB_DEV_MODE(musb); 355 MUSB_DEV_MODE(musb);
356 otg->default_a = 0; 356 otg->default_a = 0;
357 musb->xceiv->state = OTG_STATE_B_IDLE; 357 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
358 portstate(musb->port1_status &= ~USB_PORT_STAT_POWER); 358 portstate(musb->port1_status &= ~USB_PORT_STAT_POWER);
359 } 359 }
360 360
361 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n", 361 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n",
362 drvvbus ? "on" : "off", 362 drvvbus ? "on" : "off",
363 usb_otg_state_string(musb->xceiv->state), 363 usb_otg_state_string(musb->xceiv->otg->state),
364 err ? " ERROR" : "", 364 err ? " ERROR" : "",
365 devctl); 365 devctl);
366 ret = IRQ_HANDLED; 366 ret = IRQ_HANDLED;
@@ -375,7 +375,7 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci)
375 musb_writel(reg_base, DA8XX_USB_END_OF_INTR_REG, 0); 375 musb_writel(reg_base, DA8XX_USB_END_OF_INTR_REG, 0);
376 376
377 /* Poll for ID change */ 377 /* Poll for ID change */
378 if (musb->xceiv->state == OTG_STATE_B_IDLE) 378 if (musb->xceiv->otg->state == OTG_STATE_B_IDLE)
379 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 379 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
380 380
381 spin_unlock_irqrestore(&musb->lock, flags); 381 spin_unlock_irqrestore(&musb->lock, flags);
@@ -458,9 +458,11 @@ static int da8xx_musb_exit(struct musb *musb)
458} 458}
459 459
460static const struct musb_platform_ops da8xx_ops = { 460static const struct musb_platform_ops da8xx_ops = {
461 .quirks = MUSB_INDEXED_EP,
461 .init = da8xx_musb_init, 462 .init = da8xx_musb_init,
462 .exit = da8xx_musb_exit, 463 .exit = da8xx_musb_exit,
463 464
465 .fifo_mode = 2,
464 .enable = da8xx_musb_enable, 466 .enable = da8xx_musb_enable,
465 .disable = da8xx_musb_disable, 467 .disable = da8xx_musb_disable,
466 468
diff --git a/drivers/usb/musb/davinci.c b/drivers/usb/musb/davinci.c
index 110b78415bf0..3c1d9b211b51 100644
--- a/drivers/usb/musb/davinci.c
+++ b/drivers/usb/musb/davinci.c
@@ -214,10 +214,10 @@ static void otg_timer(unsigned long _musb)
214 */ 214 */
215 devctl = musb_readb(mregs, MUSB_DEVCTL); 215 devctl = musb_readb(mregs, MUSB_DEVCTL);
216 dev_dbg(musb->controller, "poll devctl %02x (%s)\n", devctl, 216 dev_dbg(musb->controller, "poll devctl %02x (%s)\n", devctl,
217 usb_otg_state_string(musb->xceiv->state)); 217 usb_otg_state_string(musb->xceiv->otg->state));
218 218
219 spin_lock_irqsave(&musb->lock, flags); 219 spin_lock_irqsave(&musb->lock, flags);
220 switch (musb->xceiv->state) { 220 switch (musb->xceiv->otg->state) {
221 case OTG_STATE_A_WAIT_VFALL: 221 case OTG_STATE_A_WAIT_VFALL:
222 /* Wait till VBUS falls below SessionEnd (~0.2V); the 1.3 RTL 222 /* Wait till VBUS falls below SessionEnd (~0.2V); the 1.3 RTL
223 * seems to mis-handle session "start" otherwise (or in our 223 * seems to mis-handle session "start" otherwise (or in our
@@ -228,7 +228,7 @@ static void otg_timer(unsigned long _musb)
228 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 228 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
229 break; 229 break;
230 } 230 }
231 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 231 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
232 musb_writel(musb->ctrl_base, DAVINCI_USB_INT_SET_REG, 232 musb_writel(musb->ctrl_base, DAVINCI_USB_INT_SET_REG,
233 MUSB_INTR_VBUSERROR << DAVINCI_USB_USBINT_SHIFT); 233 MUSB_INTR_VBUSERROR << DAVINCI_USB_USBINT_SHIFT);
234 break; 234 break;
@@ -251,7 +251,7 @@ static void otg_timer(unsigned long _musb)
251 if (devctl & MUSB_DEVCTL_BDEVICE) 251 if (devctl & MUSB_DEVCTL_BDEVICE)
252 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 252 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
253 else 253 else
254 musb->xceiv->state = OTG_STATE_A_IDLE; 254 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
255 break; 255 break;
256 default: 256 default:
257 break; 257 break;
@@ -325,20 +325,20 @@ static irqreturn_t davinci_musb_interrupt(int irq, void *__hci)
325 * to stop registering in devctl. 325 * to stop registering in devctl.
326 */ 326 */
327 musb->int_usb &= ~MUSB_INTR_VBUSERROR; 327 musb->int_usb &= ~MUSB_INTR_VBUSERROR;
328 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; 328 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VFALL;
329 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 329 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
330 WARNING("VBUS error workaround (delay coming)\n"); 330 WARNING("VBUS error workaround (delay coming)\n");
331 } else if (drvvbus) { 331 } else if (drvvbus) {
332 MUSB_HST_MODE(musb); 332 MUSB_HST_MODE(musb);
333 otg->default_a = 1; 333 otg->default_a = 1;
334 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 334 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
335 portstate(musb->port1_status |= USB_PORT_STAT_POWER); 335 portstate(musb->port1_status |= USB_PORT_STAT_POWER);
336 del_timer(&otg_workaround); 336 del_timer(&otg_workaround);
337 } else { 337 } else {
338 musb->is_active = 0; 338 musb->is_active = 0;
339 MUSB_DEV_MODE(musb); 339 MUSB_DEV_MODE(musb);
340 otg->default_a = 0; 340 otg->default_a = 0;
341 musb->xceiv->state = OTG_STATE_B_IDLE; 341 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
342 portstate(musb->port1_status &= ~USB_PORT_STAT_POWER); 342 portstate(musb->port1_status &= ~USB_PORT_STAT_POWER);
343 } 343 }
344 344
@@ -348,7 +348,7 @@ static irqreturn_t davinci_musb_interrupt(int irq, void *__hci)
348 davinci_musb_source_power(musb, drvvbus, 0); 348 davinci_musb_source_power(musb, drvvbus, 0);
349 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n", 349 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n",
350 drvvbus ? "on" : "off", 350 drvvbus ? "on" : "off",
351 usb_otg_state_string(musb->xceiv->state), 351 usb_otg_state_string(musb->xceiv->otg->state),
352 err ? " ERROR" : "", 352 err ? " ERROR" : "",
353 devctl); 353 devctl);
354 retval = IRQ_HANDLED; 354 retval = IRQ_HANDLED;
@@ -361,7 +361,7 @@ static irqreturn_t davinci_musb_interrupt(int irq, void *__hci)
361 musb_writel(tibase, DAVINCI_USB_EOI_REG, 0); 361 musb_writel(tibase, DAVINCI_USB_EOI_REG, 0);
362 362
363 /* poll for ID change */ 363 /* poll for ID change */
364 if (musb->xceiv->state == OTG_STATE_B_IDLE) 364 if (musb->xceiv->otg->state == OTG_STATE_B_IDLE)
365 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ); 365 mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
366 366
367 spin_unlock_irqrestore(&musb->lock, flags); 367 spin_unlock_irqrestore(&musb->lock, flags);
@@ -520,10 +520,8 @@ static int davinci_probe(struct platform_device *pdev)
520 int ret = -ENOMEM; 520 int ret = -ENOMEM;
521 521
522 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL); 522 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL);
523 if (!glue) { 523 if (!glue)
524 dev_err(&pdev->dev, "failed to allocate glue context\n");
525 goto err0; 524 goto err0;
526 }
527 525
528 clk = devm_clk_get(&pdev->dev, "usb"); 526 clk = devm_clk_get(&pdev->dev, "usb");
529 if (IS_ERR(clk)) { 527 if (IS_ERR(clk)) {
diff --git a/drivers/usb/musb/jz4740.c b/drivers/usb/musb/jz4740.c
index d1187290d4e3..bb7b26325a74 100644
--- a/drivers/usb/musb/jz4740.c
+++ b/drivers/usb/musb/jz4740.c
@@ -106,6 +106,8 @@ static int jz4740_musb_exit(struct musb *musb)
106} 106}
107 107
108static const struct musb_platform_ops jz4740_musb_ops = { 108static const struct musb_platform_ops jz4740_musb_ops = {
109 .quirks = MUSB_INDEXED_EP,
110 .fifo_mode = 2,
109 .init = jz4740_musb_init, 111 .init = jz4740_musb_init,
110 .exit = jz4740_musb_exit, 112 .exit = jz4740_musb_exit,
111}; 113};
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 55ebd4b1daac..55fe0ff6fd87 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -224,12 +224,67 @@ static struct usb_phy_io_ops musb_ulpi_access = {
224 224
225/*-------------------------------------------------------------------------*/ 225/*-------------------------------------------------------------------------*/
226 226
227#if !defined(CONFIG_USB_MUSB_TUSB6010) && !defined(CONFIG_USB_MUSB_BLACKFIN) 227static u32 musb_default_fifo_offset(u8 epnum)
228{
229 return 0x20 + (epnum * 4);
230}
231
232/* "flat" mapping: each endpoint has its own i/o address */
233static void musb_flat_ep_select(void __iomem *mbase, u8 epnum)
234{
235}
236
237static u32 musb_flat_ep_offset(u8 epnum, u16 offset)
238{
239 return 0x100 + (0x10 * epnum) + offset;
240}
241
242/* "indexed" mapping: INDEX register controls register bank select */
243static void musb_indexed_ep_select(void __iomem *mbase, u8 epnum)
244{
245 musb_writeb(mbase, MUSB_INDEX, epnum);
246}
247
248static u32 musb_indexed_ep_offset(u8 epnum, u16 offset)
249{
250 return 0x10 + offset;
251}
252
253static u8 musb_default_readb(const void __iomem *addr, unsigned offset)
254{
255 return __raw_readb(addr + offset);
256}
257
258static void musb_default_writeb(void __iomem *addr, unsigned offset, u8 data)
259{
260 __raw_writeb(data, addr + offset);
261}
262
263static u16 musb_default_readw(const void __iomem *addr, unsigned offset)
264{
265 return __raw_readw(addr + offset);
266}
267
268static void musb_default_writew(void __iomem *addr, unsigned offset, u16 data)
269{
270 __raw_writew(data, addr + offset);
271}
272
273static u32 musb_default_readl(const void __iomem *addr, unsigned offset)
274{
275 return __raw_readl(addr + offset);
276}
277
278static void musb_default_writel(void __iomem *addr, unsigned offset, u32 data)
279{
280 __raw_writel(data, addr + offset);
281}
228 282
229/* 283/*
230 * Load an endpoint's FIFO 284 * Load an endpoint's FIFO
231 */ 285 */
232void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src) 286static void musb_default_write_fifo(struct musb_hw_ep *hw_ep, u16 len,
287 const u8 *src)
233{ 288{
234 struct musb *musb = hw_ep->musb; 289 struct musb *musb = hw_ep->musb;
235 void __iomem *fifo = hw_ep->fifo; 290 void __iomem *fifo = hw_ep->fifo;
@@ -270,11 +325,10 @@ void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src)
270 } 325 }
271} 326}
272 327
273#if !defined(CONFIG_USB_MUSB_AM35X)
274/* 328/*
275 * Unload an endpoint's FIFO 329 * Unload an endpoint's FIFO
276 */ 330 */
277void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst) 331static void musb_default_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
278{ 332{
279 struct musb *musb = hw_ep->musb; 333 struct musb *musb = hw_ep->musb;
280 void __iomem *fifo = hw_ep->fifo; 334 void __iomem *fifo = hw_ep->fifo;
@@ -312,10 +366,40 @@ void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
312 ioread8_rep(fifo, dst, len); 366 ioread8_rep(fifo, dst, len);
313 } 367 }
314} 368}
315#endif
316 369
317#endif /* normal PIO */ 370/*
371 * Old style IO functions
372 */
373u8 (*musb_readb)(const void __iomem *addr, unsigned offset);
374EXPORT_SYMBOL_GPL(musb_readb);
375
376void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data);
377EXPORT_SYMBOL_GPL(musb_writeb);
378
379u16 (*musb_readw)(const void __iomem *addr, unsigned offset);
380EXPORT_SYMBOL_GPL(musb_readw);
381
382void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data);
383EXPORT_SYMBOL_GPL(musb_writew);
318 384
385u32 (*musb_readl)(const void __iomem *addr, unsigned offset);
386EXPORT_SYMBOL_GPL(musb_readl);
387
388void (*musb_writel)(void __iomem *addr, unsigned offset, u32 data);
389EXPORT_SYMBOL_GPL(musb_writel);
390
391/*
392 * New style IO functions
393 */
394void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
395{
396 return hw_ep->musb->io.read_fifo(hw_ep, len, dst);
397}
398
399void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *src)
400{
401 return hw_ep->musb->io.write_fifo(hw_ep, len, src);
402}
319 403
320/*-------------------------------------------------------------------------*/ 404/*-------------------------------------------------------------------------*/
321 405
@@ -360,23 +444,23 @@ static void musb_otg_timer_func(unsigned long data)
360 unsigned long flags; 444 unsigned long flags;
361 445
362 spin_lock_irqsave(&musb->lock, flags); 446 spin_lock_irqsave(&musb->lock, flags);
363 switch (musb->xceiv->state) { 447 switch (musb->xceiv->otg->state) {
364 case OTG_STATE_B_WAIT_ACON: 448 case OTG_STATE_B_WAIT_ACON:
365 dev_dbg(musb->controller, "HNP: b_wait_acon timeout; back to b_peripheral\n"); 449 dev_dbg(musb->controller, "HNP: b_wait_acon timeout; back to b_peripheral\n");
366 musb_g_disconnect(musb); 450 musb_g_disconnect(musb);
367 musb->xceiv->state = OTG_STATE_B_PERIPHERAL; 451 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
368 musb->is_active = 0; 452 musb->is_active = 0;
369 break; 453 break;
370 case OTG_STATE_A_SUSPEND: 454 case OTG_STATE_A_SUSPEND:
371 case OTG_STATE_A_WAIT_BCON: 455 case OTG_STATE_A_WAIT_BCON:
372 dev_dbg(musb->controller, "HNP: %s timeout\n", 456 dev_dbg(musb->controller, "HNP: %s timeout\n",
373 usb_otg_state_string(musb->xceiv->state)); 457 usb_otg_state_string(musb->xceiv->otg->state));
374 musb_platform_set_vbus(musb, 0); 458 musb_platform_set_vbus(musb, 0);
375 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; 459 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VFALL;
376 break; 460 break;
377 default: 461 default:
378 dev_dbg(musb->controller, "HNP: Unhandled mode %s\n", 462 dev_dbg(musb->controller, "HNP: Unhandled mode %s\n",
379 usb_otg_state_string(musb->xceiv->state)); 463 usb_otg_state_string(musb->xceiv->otg->state));
380 } 464 }
381 spin_unlock_irqrestore(&musb->lock, flags); 465 spin_unlock_irqrestore(&musb->lock, flags);
382} 466}
@@ -391,19 +475,19 @@ void musb_hnp_stop(struct musb *musb)
391 u8 reg; 475 u8 reg;
392 476
393 dev_dbg(musb->controller, "HNP: stop from %s\n", 477 dev_dbg(musb->controller, "HNP: stop from %s\n",
394 usb_otg_state_string(musb->xceiv->state)); 478 usb_otg_state_string(musb->xceiv->otg->state));
395 479
396 switch (musb->xceiv->state) { 480 switch (musb->xceiv->otg->state) {
397 case OTG_STATE_A_PERIPHERAL: 481 case OTG_STATE_A_PERIPHERAL:
398 musb_g_disconnect(musb); 482 musb_g_disconnect(musb);
399 dev_dbg(musb->controller, "HNP: back to %s\n", 483 dev_dbg(musb->controller, "HNP: back to %s\n",
400 usb_otg_state_string(musb->xceiv->state)); 484 usb_otg_state_string(musb->xceiv->otg->state));
401 break; 485 break;
402 case OTG_STATE_B_HOST: 486 case OTG_STATE_B_HOST:
403 dev_dbg(musb->controller, "HNP: Disabling HR\n"); 487 dev_dbg(musb->controller, "HNP: Disabling HR\n");
404 if (hcd) 488 if (hcd)
405 hcd->self.is_b_host = 0; 489 hcd->self.is_b_host = 0;
406 musb->xceiv->state = OTG_STATE_B_PERIPHERAL; 490 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
407 MUSB_DEV_MODE(musb); 491 MUSB_DEV_MODE(musb);
408 reg = musb_readb(mbase, MUSB_POWER); 492 reg = musb_readb(mbase, MUSB_POWER);
409 reg |= MUSB_POWER_SUSPENDM; 493 reg |= MUSB_POWER_SUSPENDM;
@@ -412,7 +496,7 @@ void musb_hnp_stop(struct musb *musb)
412 break; 496 break;
413 default: 497 default:
414 dev_dbg(musb->controller, "HNP: Stopping in unknown state %s\n", 498 dev_dbg(musb->controller, "HNP: Stopping in unknown state %s\n",
415 usb_otg_state_string(musb->xceiv->state)); 499 usb_otg_state_string(musb->xceiv->otg->state));
416 } 500 }
417 501
418 /* 502 /*
@@ -423,6 +507,7 @@ void musb_hnp_stop(struct musb *musb)
423 musb->port1_status &= ~(USB_PORT_STAT_C_CONNECTION << 16); 507 musb->port1_status &= ~(USB_PORT_STAT_C_CONNECTION << 16);
424} 508}
425 509
510static void musb_generic_disable(struct musb *musb);
426/* 511/*
427 * Interrupt Service Routine to record USB "global" interrupts. 512 * Interrupt Service Routine to record USB "global" interrupts.
428 * Since these do not happen often and signify things of 513 * Since these do not happen often and signify things of
@@ -449,13 +534,13 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
449 */ 534 */
450 if (int_usb & MUSB_INTR_RESUME) { 535 if (int_usb & MUSB_INTR_RESUME) {
451 handled = IRQ_HANDLED; 536 handled = IRQ_HANDLED;
452 dev_dbg(musb->controller, "RESUME (%s)\n", usb_otg_state_string(musb->xceiv->state)); 537 dev_dbg(musb->controller, "RESUME (%s)\n", usb_otg_state_string(musb->xceiv->otg->state));
453 538
454 if (devctl & MUSB_DEVCTL_HM) { 539 if (devctl & MUSB_DEVCTL_HM) {
455 void __iomem *mbase = musb->mregs; 540 void __iomem *mbase = musb->mregs;
456 u8 power; 541 u8 power;
457 542
458 switch (musb->xceiv->state) { 543 switch (musb->xceiv->otg->state) {
459 case OTG_STATE_A_SUSPEND: 544 case OTG_STATE_A_SUSPEND:
460 /* remote wakeup? later, GetPortStatus 545 /* remote wakeup? later, GetPortStatus
461 * will stop RESUME signaling 546 * will stop RESUME signaling
@@ -478,29 +563,26 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
478 | MUSB_PORT_STAT_RESUME; 563 | MUSB_PORT_STAT_RESUME;
479 musb->rh_timer = jiffies 564 musb->rh_timer = jiffies
480 + msecs_to_jiffies(20); 565 + msecs_to_jiffies(20);
481 schedule_delayed_work( 566 musb->need_finish_resume = 1;
482 &musb->finish_resume_work,
483 msecs_to_jiffies(20));
484 567
485 musb->xceiv->state = OTG_STATE_A_HOST; 568 musb->xceiv->otg->state = OTG_STATE_A_HOST;
486 musb->is_active = 1; 569 musb->is_active = 1;
487 musb_host_resume_root_hub(musb);
488 break; 570 break;
489 case OTG_STATE_B_WAIT_ACON: 571 case OTG_STATE_B_WAIT_ACON:
490 musb->xceiv->state = OTG_STATE_B_PERIPHERAL; 572 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
491 musb->is_active = 1; 573 musb->is_active = 1;
492 MUSB_DEV_MODE(musb); 574 MUSB_DEV_MODE(musb);
493 break; 575 break;
494 default: 576 default:
495 WARNING("bogus %s RESUME (%s)\n", 577 WARNING("bogus %s RESUME (%s)\n",
496 "host", 578 "host",
497 usb_otg_state_string(musb->xceiv->state)); 579 usb_otg_state_string(musb->xceiv->otg->state));
498 } 580 }
499 } else { 581 } else {
500 switch (musb->xceiv->state) { 582 switch (musb->xceiv->otg->state) {
501 case OTG_STATE_A_SUSPEND: 583 case OTG_STATE_A_SUSPEND:
502 /* possibly DISCONNECT is upcoming */ 584 /* possibly DISCONNECT is upcoming */
503 musb->xceiv->state = OTG_STATE_A_HOST; 585 musb->xceiv->otg->state = OTG_STATE_A_HOST;
504 musb_host_resume_root_hub(musb); 586 musb_host_resume_root_hub(musb);
505 break; 587 break;
506 case OTG_STATE_B_WAIT_ACON: 588 case OTG_STATE_B_WAIT_ACON:
@@ -523,7 +605,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
523 default: 605 default:
524 WARNING("bogus %s RESUME (%s)\n", 606 WARNING("bogus %s RESUME (%s)\n",
525 "peripheral", 607 "peripheral",
526 usb_otg_state_string(musb->xceiv->state)); 608 usb_otg_state_string(musb->xceiv->otg->state));
527 } 609 }
528 } 610 }
529 } 611 }
@@ -539,7 +621,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
539 } 621 }
540 622
541 dev_dbg(musb->controller, "SESSION_REQUEST (%s)\n", 623 dev_dbg(musb->controller, "SESSION_REQUEST (%s)\n",
542 usb_otg_state_string(musb->xceiv->state)); 624 usb_otg_state_string(musb->xceiv->otg->state));
543 625
544 /* IRQ arrives from ID pin sense or (later, if VBUS power 626 /* IRQ arrives from ID pin sense or (later, if VBUS power
545 * is removed) SRP. responses are time critical: 627 * is removed) SRP. responses are time critical:
@@ -550,7 +632,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
550 */ 632 */
551 musb_writeb(mbase, MUSB_DEVCTL, MUSB_DEVCTL_SESSION); 633 musb_writeb(mbase, MUSB_DEVCTL, MUSB_DEVCTL_SESSION);
552 musb->ep0_stage = MUSB_EP0_START; 634 musb->ep0_stage = MUSB_EP0_START;
553 musb->xceiv->state = OTG_STATE_A_IDLE; 635 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
554 MUSB_HST_MODE(musb); 636 MUSB_HST_MODE(musb);
555 musb_platform_set_vbus(musb, 1); 637 musb_platform_set_vbus(musb, 1);
556 638
@@ -576,7 +658,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
576 * REVISIT: do delays from lots of DEBUG_KERNEL checks 658 * REVISIT: do delays from lots of DEBUG_KERNEL checks
577 * make trouble here, keeping VBUS < 4.4V ? 659 * make trouble here, keeping VBUS < 4.4V ?
578 */ 660 */
579 switch (musb->xceiv->state) { 661 switch (musb->xceiv->otg->state) {
580 case OTG_STATE_A_HOST: 662 case OTG_STATE_A_HOST:
581 /* recovery is dicey once we've gotten past the 663 /* recovery is dicey once we've gotten past the
582 * initial stages of enumeration, but if VBUS 664 * initial stages of enumeration, but if VBUS
@@ -605,7 +687,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
605 687
606 dev_printk(ignore ? KERN_DEBUG : KERN_ERR, musb->controller, 688 dev_printk(ignore ? KERN_DEBUG : KERN_ERR, musb->controller,
607 "VBUS_ERROR in %s (%02x, %s), retry #%d, port1 %08x\n", 689 "VBUS_ERROR in %s (%02x, %s), retry #%d, port1 %08x\n",
608 usb_otg_state_string(musb->xceiv->state), 690 usb_otg_state_string(musb->xceiv->otg->state),
609 devctl, 691 devctl,
610 ({ char *s; 692 ({ char *s;
611 switch (devctl & MUSB_DEVCTL_VBUS) { 693 switch (devctl & MUSB_DEVCTL_VBUS) {
@@ -630,10 +712,10 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
630 712
631 if (int_usb & MUSB_INTR_SUSPEND) { 713 if (int_usb & MUSB_INTR_SUSPEND) {
632 dev_dbg(musb->controller, "SUSPEND (%s) devctl %02x\n", 714 dev_dbg(musb->controller, "SUSPEND (%s) devctl %02x\n",
633 usb_otg_state_string(musb->xceiv->state), devctl); 715 usb_otg_state_string(musb->xceiv->otg->state), devctl);
634 handled = IRQ_HANDLED; 716 handled = IRQ_HANDLED;
635 717
636 switch (musb->xceiv->state) { 718 switch (musb->xceiv->otg->state) {
637 case OTG_STATE_A_PERIPHERAL: 719 case OTG_STATE_A_PERIPHERAL:
638 /* We also come here if the cable is removed, since 720 /* We also come here if the cable is removed, since
639 * this silicon doesn't report ID-no-longer-grounded. 721 * this silicon doesn't report ID-no-longer-grounded.
@@ -657,7 +739,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
657 musb_g_suspend(musb); 739 musb_g_suspend(musb);
658 musb->is_active = musb->g.b_hnp_enable; 740 musb->is_active = musb->g.b_hnp_enable;
659 if (musb->is_active) { 741 if (musb->is_active) {
660 musb->xceiv->state = OTG_STATE_B_WAIT_ACON; 742 musb->xceiv->otg->state = OTG_STATE_B_WAIT_ACON;
661 dev_dbg(musb->controller, "HNP: Setting timer for b_ase0_brst\n"); 743 dev_dbg(musb->controller, "HNP: Setting timer for b_ase0_brst\n");
662 mod_timer(&musb->otg_timer, jiffies 744 mod_timer(&musb->otg_timer, jiffies
663 + msecs_to_jiffies( 745 + msecs_to_jiffies(
@@ -670,7 +752,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
670 + msecs_to_jiffies(musb->a_wait_bcon)); 752 + msecs_to_jiffies(musb->a_wait_bcon));
671 break; 753 break;
672 case OTG_STATE_A_HOST: 754 case OTG_STATE_A_HOST:
673 musb->xceiv->state = OTG_STATE_A_SUSPEND; 755 musb->xceiv->otg->state = OTG_STATE_A_SUSPEND;
674 musb->is_active = musb->hcd->self.b_hnp_enable; 756 musb->is_active = musb->hcd->self.b_hnp_enable;
675 break; 757 break;
676 case OTG_STATE_B_HOST: 758 case OTG_STATE_B_HOST:
@@ -713,7 +795,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
713 musb->port1_status |= USB_PORT_STAT_LOW_SPEED; 795 musb->port1_status |= USB_PORT_STAT_LOW_SPEED;
714 796
715 /* indicate new connection to OTG machine */ 797 /* indicate new connection to OTG machine */
716 switch (musb->xceiv->state) { 798 switch (musb->xceiv->otg->state) {
717 case OTG_STATE_B_PERIPHERAL: 799 case OTG_STATE_B_PERIPHERAL:
718 if (int_usb & MUSB_INTR_SUSPEND) { 800 if (int_usb & MUSB_INTR_SUSPEND) {
719 dev_dbg(musb->controller, "HNP: SUSPEND+CONNECT, now b_host\n"); 801 dev_dbg(musb->controller, "HNP: SUSPEND+CONNECT, now b_host\n");
@@ -725,7 +807,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
725 case OTG_STATE_B_WAIT_ACON: 807 case OTG_STATE_B_WAIT_ACON:
726 dev_dbg(musb->controller, "HNP: CONNECT, now b_host\n"); 808 dev_dbg(musb->controller, "HNP: CONNECT, now b_host\n");
727b_host: 809b_host:
728 musb->xceiv->state = OTG_STATE_B_HOST; 810 musb->xceiv->otg->state = OTG_STATE_B_HOST;
729 if (musb->hcd) 811 if (musb->hcd)
730 musb->hcd->self.is_b_host = 1; 812 musb->hcd->self.is_b_host = 1;
731 del_timer(&musb->otg_timer); 813 del_timer(&musb->otg_timer);
@@ -733,7 +815,7 @@ b_host:
733 default: 815 default:
734 if ((devctl & MUSB_DEVCTL_VBUS) 816 if ((devctl & MUSB_DEVCTL_VBUS)
735 == (3 << MUSB_DEVCTL_VBUS_SHIFT)) { 817 == (3 << MUSB_DEVCTL_VBUS_SHIFT)) {
736 musb->xceiv->state = OTG_STATE_A_HOST; 818 musb->xceiv->otg->state = OTG_STATE_A_HOST;
737 if (hcd) 819 if (hcd)
738 hcd->self.is_b_host = 0; 820 hcd->self.is_b_host = 0;
739 } 821 }
@@ -743,16 +825,16 @@ b_host:
743 musb_host_poke_root_hub(musb); 825 musb_host_poke_root_hub(musb);
744 826
745 dev_dbg(musb->controller, "CONNECT (%s) devctl %02x\n", 827 dev_dbg(musb->controller, "CONNECT (%s) devctl %02x\n",
746 usb_otg_state_string(musb->xceiv->state), devctl); 828 usb_otg_state_string(musb->xceiv->otg->state), devctl);
747 } 829 }
748 830
749 if (int_usb & MUSB_INTR_DISCONNECT) { 831 if (int_usb & MUSB_INTR_DISCONNECT) {
750 dev_dbg(musb->controller, "DISCONNECT (%s) as %s, devctl %02x\n", 832 dev_dbg(musb->controller, "DISCONNECT (%s) as %s, devctl %02x\n",
751 usb_otg_state_string(musb->xceiv->state), 833 usb_otg_state_string(musb->xceiv->otg->state),
752 MUSB_MODE(musb), devctl); 834 MUSB_MODE(musb), devctl);
753 handled = IRQ_HANDLED; 835 handled = IRQ_HANDLED;
754 836
755 switch (musb->xceiv->state) { 837 switch (musb->xceiv->otg->state) {
756 case OTG_STATE_A_HOST: 838 case OTG_STATE_A_HOST:
757 case OTG_STATE_A_SUSPEND: 839 case OTG_STATE_A_SUSPEND:
758 musb_host_resume_root_hub(musb); 840 musb_host_resume_root_hub(musb);
@@ -770,7 +852,7 @@ b_host:
770 musb_root_disconnect(musb); 852 musb_root_disconnect(musb);
771 if (musb->hcd) 853 if (musb->hcd)
772 musb->hcd->self.is_b_host = 0; 854 musb->hcd->self.is_b_host = 0;
773 musb->xceiv->state = OTG_STATE_B_PERIPHERAL; 855 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
774 MUSB_DEV_MODE(musb); 856 MUSB_DEV_MODE(musb);
775 musb_g_disconnect(musb); 857 musb_g_disconnect(musb);
776 break; 858 break;
@@ -786,7 +868,7 @@ b_host:
786 break; 868 break;
787 default: 869 default:
788 WARNING("unhandled DISCONNECT transition (%s)\n", 870 WARNING("unhandled DISCONNECT transition (%s)\n",
789 usb_otg_state_string(musb->xceiv->state)); 871 usb_otg_state_string(musb->xceiv->otg->state));
790 break; 872 break;
791 } 873 }
792 } 874 }
@@ -812,15 +894,15 @@ b_host:
812 } 894 }
813 } else { 895 } else {
814 dev_dbg(musb->controller, "BUS RESET as %s\n", 896 dev_dbg(musb->controller, "BUS RESET as %s\n",
815 usb_otg_state_string(musb->xceiv->state)); 897 usb_otg_state_string(musb->xceiv->otg->state));
816 switch (musb->xceiv->state) { 898 switch (musb->xceiv->otg->state) {
817 case OTG_STATE_A_SUSPEND: 899 case OTG_STATE_A_SUSPEND:
818 musb_g_reset(musb); 900 musb_g_reset(musb);
819 /* FALLTHROUGH */ 901 /* FALLTHROUGH */
820 case OTG_STATE_A_WAIT_BCON: /* OPT TD.4.7-900ms */ 902 case OTG_STATE_A_WAIT_BCON: /* OPT TD.4.7-900ms */
821 /* never use invalid T(a_wait_bcon) */ 903 /* never use invalid T(a_wait_bcon) */
822 dev_dbg(musb->controller, "HNP: in %s, %d msec timeout\n", 904 dev_dbg(musb->controller, "HNP: in %s, %d msec timeout\n",
823 usb_otg_state_string(musb->xceiv->state), 905 usb_otg_state_string(musb->xceiv->otg->state),
824 TA_WAIT_BCON(musb)); 906 TA_WAIT_BCON(musb));
825 mod_timer(&musb->otg_timer, jiffies 907 mod_timer(&musb->otg_timer, jiffies
826 + msecs_to_jiffies(TA_WAIT_BCON(musb))); 908 + msecs_to_jiffies(TA_WAIT_BCON(musb)));
@@ -831,27 +913,29 @@ b_host:
831 break; 913 break;
832 case OTG_STATE_B_WAIT_ACON: 914 case OTG_STATE_B_WAIT_ACON:
833 dev_dbg(musb->controller, "HNP: RESET (%s), to b_peripheral\n", 915 dev_dbg(musb->controller, "HNP: RESET (%s), to b_peripheral\n",
834 usb_otg_state_string(musb->xceiv->state)); 916 usb_otg_state_string(musb->xceiv->otg->state));
835 musb->xceiv->state = OTG_STATE_B_PERIPHERAL; 917 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
836 musb_g_reset(musb); 918 musb_g_reset(musb);
837 break; 919 break;
838 case OTG_STATE_B_IDLE: 920 case OTG_STATE_B_IDLE:
839 musb->xceiv->state = OTG_STATE_B_PERIPHERAL; 921 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
840 /* FALLTHROUGH */ 922 /* FALLTHROUGH */
841 case OTG_STATE_B_PERIPHERAL: 923 case OTG_STATE_B_PERIPHERAL:
842 musb_g_reset(musb); 924 musb_g_reset(musb);
843 break; 925 break;
844 default: 926 default:
845 dev_dbg(musb->controller, "Unhandled BUS RESET as %s\n", 927 dev_dbg(musb->controller, "Unhandled BUS RESET as %s\n",
846 usb_otg_state_string(musb->xceiv->state)); 928 usb_otg_state_string(musb->xceiv->otg->state));
847 } 929 }
848 } 930 }
849 } 931 }
850 932
851 /* handle babble condition */ 933 /* handle babble condition */
852 if (int_usb & MUSB_INTR_BABBLE && is_host_active(musb)) 934 if (int_usb & MUSB_INTR_BABBLE && is_host_active(musb)) {
935 musb_generic_disable(musb);
853 schedule_delayed_work(&musb->recover_work, 936 schedule_delayed_work(&musb->recover_work,
854 msecs_to_jiffies(100)); 937 msecs_to_jiffies(100));
938 }
855 939
856#if 0 940#if 0
857/* REVISIT ... this would be for multiplexing periodic endpoints, or 941/* REVISIT ... this would be for multiplexing periodic endpoints, or
@@ -1032,21 +1116,7 @@ static void musb_shutdown(struct platform_device *pdev)
1032 * We don't currently use dynamic fifo setup capability to do anything 1116 * We don't currently use dynamic fifo setup capability to do anything
1033 * more than selecting one of a bunch of predefined configurations. 1117 * more than selecting one of a bunch of predefined configurations.
1034 */ 1118 */
1035#if defined(CONFIG_USB_MUSB_TUSB6010) \ 1119static ushort fifo_mode;
1036 || defined(CONFIG_USB_MUSB_TUSB6010_MODULE) \
1037 || defined(CONFIG_USB_MUSB_OMAP2PLUS) \
1038 || defined(CONFIG_USB_MUSB_OMAP2PLUS_MODULE) \
1039 || defined(CONFIG_USB_MUSB_AM35X) \
1040 || defined(CONFIG_USB_MUSB_AM35X_MODULE) \
1041 || defined(CONFIG_USB_MUSB_DSPS) \
1042 || defined(CONFIG_USB_MUSB_DSPS_MODULE)
1043static ushort fifo_mode = 4;
1044#elif defined(CONFIG_USB_MUSB_UX500) \
1045 || defined(CONFIG_USB_MUSB_UX500_MODULE)
1046static ushort fifo_mode = 5;
1047#else
1048static ushort fifo_mode = 2;
1049#endif
1050 1120
1051/* "modprobe ... fifo_mode=1" etc */ 1121/* "modprobe ... fifo_mode=1" etc */
1052module_param(fifo_mode, ushort, 0); 1122module_param(fifo_mode, ushort, 0);
@@ -1456,20 +1526,25 @@ static int musb_core_init(u16 musb_type, struct musb *musb)
1456 for (i = 0; i < musb->nr_endpoints; i++) { 1526 for (i = 0; i < musb->nr_endpoints; i++) {
1457 struct musb_hw_ep *hw_ep = musb->endpoints + i; 1527 struct musb_hw_ep *hw_ep = musb->endpoints + i;
1458 1528
1459 hw_ep->fifo = MUSB_FIFO_OFFSET(i) + mbase; 1529 hw_ep->fifo = musb->io.fifo_offset(i) + mbase;
1460#if defined(CONFIG_USB_MUSB_TUSB6010) || defined (CONFIG_USB_MUSB_TUSB6010_MODULE) 1530#if IS_ENABLED(CONFIG_USB_MUSB_TUSB6010)
1461 hw_ep->fifo_async = musb->async + 0x400 + MUSB_FIFO_OFFSET(i); 1531 if (musb->io.quirks & MUSB_IN_TUSB) {
1462 hw_ep->fifo_sync = musb->sync + 0x400 + MUSB_FIFO_OFFSET(i); 1532 hw_ep->fifo_async = musb->async + 0x400 +
1463 hw_ep->fifo_sync_va = 1533 musb->io.fifo_offset(i);
1464 musb->sync_va + 0x400 + MUSB_FIFO_OFFSET(i); 1534 hw_ep->fifo_sync = musb->sync + 0x400 +
1465 1535 musb->io.fifo_offset(i);
1466 if (i == 0) 1536 hw_ep->fifo_sync_va =
1467 hw_ep->conf = mbase - 0x400 + TUSB_EP0_CONF; 1537 musb->sync_va + 0x400 + musb->io.fifo_offset(i);
1468 else 1538
1469 hw_ep->conf = mbase + 0x400 + (((i - 1) & 0xf) << 2); 1539 if (i == 0)
1540 hw_ep->conf = mbase - 0x400 + TUSB_EP0_CONF;
1541 else
1542 hw_ep->conf = mbase + 0x400 +
1543 (((i - 1) & 0xf) << 2);
1544 }
1470#endif 1545#endif
1471 1546
1472 hw_ep->regs = MUSB_EP_OFFSET(i, 0) + mbase; 1547 hw_ep->regs = musb->io.ep_offset(i, 0) + mbase;
1473 hw_ep->target_regs = musb_read_target_reg_base(i, mbase); 1548 hw_ep->target_regs = musb_read_target_reg_base(i, mbase);
1474 hw_ep->rx_reinit = 1; 1549 hw_ep->rx_reinit = 1;
1475 hw_ep->tx_reinit = 1; 1550 hw_ep->tx_reinit = 1;
@@ -1630,7 +1705,7 @@ musb_mode_show(struct device *dev, struct device_attribute *attr, char *buf)
1630 int ret = -EINVAL; 1705 int ret = -EINVAL;
1631 1706
1632 spin_lock_irqsave(&musb->lock, flags); 1707 spin_lock_irqsave(&musb->lock, flags);
1633 ret = sprintf(buf, "%s\n", usb_otg_state_string(musb->xceiv->state)); 1708 ret = sprintf(buf, "%s\n", usb_otg_state_string(musb->xceiv->otg->state));
1634 spin_unlock_irqrestore(&musb->lock, flags); 1709 spin_unlock_irqrestore(&musb->lock, flags);
1635 1710
1636 return ret; 1711 return ret;
@@ -1675,7 +1750,7 @@ musb_vbus_store(struct device *dev, struct device_attribute *attr,
1675 spin_lock_irqsave(&musb->lock, flags); 1750 spin_lock_irqsave(&musb->lock, flags);
1676 /* force T(a_wait_bcon) to be zero/unlimited *OR* valid */ 1751 /* force T(a_wait_bcon) to be zero/unlimited *OR* valid */
1677 musb->a_wait_bcon = val ? max_t(int, val, OTG_TIME_A_WAIT_BCON) : 0 ; 1752 musb->a_wait_bcon = val ? max_t(int, val, OTG_TIME_A_WAIT_BCON) : 0 ;
1678 if (musb->xceiv->state == OTG_STATE_A_WAIT_BCON) 1753 if (musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON)
1679 musb->is_active = 0; 1754 musb->is_active = 0;
1680 musb_platform_try_idle(musb, jiffies + msecs_to_jiffies(val)); 1755 musb_platform_try_idle(musb, jiffies + msecs_to_jiffies(val));
1681 spin_unlock_irqrestore(&musb->lock, flags); 1756 spin_unlock_irqrestore(&musb->lock, flags);
@@ -1743,8 +1818,8 @@ static void musb_irq_work(struct work_struct *data)
1743{ 1818{
1744 struct musb *musb = container_of(data, struct musb, irq_work); 1819 struct musb *musb = container_of(data, struct musb, irq_work);
1745 1820
1746 if (musb->xceiv->state != musb->xceiv_old_state) { 1821 if (musb->xceiv->otg->state != musb->xceiv_old_state) {
1747 musb->xceiv_old_state = musb->xceiv->state; 1822 musb->xceiv_old_state = musb->xceiv->otg->state;
1748 sysfs_notify(&musb->controller->kobj, NULL, "mode"); 1823 sysfs_notify(&musb->controller->kobj, NULL, "mode");
1749 } 1824 }
1750} 1825}
@@ -1903,6 +1978,18 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
1903 musb->ops = plat->platform_ops; 1978 musb->ops = plat->platform_ops;
1904 musb->port_mode = plat->mode; 1979 musb->port_mode = plat->mode;
1905 1980
1981 /*
1982 * Initialize the default IO functions. At least omap2430 needs
1983 * these early. We initialize the platform specific IO functions
1984 * later on.
1985 */
1986 musb_readb = musb_default_readb;
1987 musb_writeb = musb_default_writeb;
1988 musb_readw = musb_default_readw;
1989 musb_writew = musb_default_writew;
1990 musb_readl = musb_default_readl;
1991 musb_writel = musb_default_writel;
1992
1906 /* The musb_platform_init() call: 1993 /* The musb_platform_init() call:
1907 * - adjusts musb->mregs 1994 * - adjusts musb->mregs
1908 * - sets the musb->isr 1995 * - sets the musb->isr
@@ -1924,6 +2011,57 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
1924 goto fail2; 2011 goto fail2;
1925 } 2012 }
1926 2013
2014 if (musb->ops->quirks)
2015 musb->io.quirks = musb->ops->quirks;
2016
2017 /* At least tusb6010 has it's own offsets.. */
2018 if (musb->ops->ep_offset)
2019 musb->io.ep_offset = musb->ops->ep_offset;
2020 if (musb->ops->ep_select)
2021 musb->io.ep_select = musb->ops->ep_select;
2022
2023 /* ..and some devices use indexed offset or flat offset */
2024 if (musb->io.quirks & MUSB_INDEXED_EP) {
2025 musb->io.ep_offset = musb_indexed_ep_offset;
2026 musb->io.ep_select = musb_indexed_ep_select;
2027 } else {
2028 musb->io.ep_offset = musb_flat_ep_offset;
2029 musb->io.ep_select = musb_flat_ep_select;
2030 }
2031
2032 if (musb->ops->fifo_mode)
2033 fifo_mode = musb->ops->fifo_mode;
2034 else
2035 fifo_mode = 4;
2036
2037 if (musb->ops->fifo_offset)
2038 musb->io.fifo_offset = musb->ops->fifo_offset;
2039 else
2040 musb->io.fifo_offset = musb_default_fifo_offset;
2041
2042 if (musb->ops->readb)
2043 musb_readb = musb->ops->readb;
2044 if (musb->ops->writeb)
2045 musb_writeb = musb->ops->writeb;
2046 if (musb->ops->readw)
2047 musb_readw = musb->ops->readw;
2048 if (musb->ops->writew)
2049 musb_writew = musb->ops->writew;
2050 if (musb->ops->readl)
2051 musb_readl = musb->ops->readl;
2052 if (musb->ops->writel)
2053 musb_writel = musb->ops->writel;
2054
2055 if (musb->ops->read_fifo)
2056 musb->io.read_fifo = musb->ops->read_fifo;
2057 else
2058 musb->io.read_fifo = musb_default_read_fifo;
2059
2060 if (musb->ops->write_fifo)
2061 musb->io.write_fifo = musb->ops->write_fifo;
2062 else
2063 musb->io.write_fifo = musb_default_write_fifo;
2064
1927 if (!musb->xceiv->io_ops) { 2065 if (!musb->xceiv->io_ops) {
1928 musb->xceiv->io_dev = musb->controller; 2066 musb->xceiv->io_dev = musb->controller;
1929 musb->xceiv->io_priv = musb->mregs; 2067 musb->xceiv->io_priv = musb->mregs;
@@ -1983,10 +2121,10 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
1983 2121
1984 if (musb->xceiv->otg->default_a) { 2122 if (musb->xceiv->otg->default_a) {
1985 MUSB_HST_MODE(musb); 2123 MUSB_HST_MODE(musb);
1986 musb->xceiv->state = OTG_STATE_A_IDLE; 2124 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
1987 } else { 2125 } else {
1988 MUSB_DEV_MODE(musb); 2126 MUSB_DEV_MODE(musb);
1989 musb->xceiv->state = OTG_STATE_B_IDLE; 2127 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
1990 } 2128 }
1991 2129
1992 switch (musb->port_mode) { 2130 switch (musb->port_mode) {
@@ -2297,9 +2435,11 @@ static int musb_suspend(struct device *dev)
2297 return 0; 2435 return 0;
2298} 2436}
2299 2437
2300static int musb_resume_noirq(struct device *dev) 2438static int musb_resume(struct device *dev)
2301{ 2439{
2302 struct musb *musb = dev_to_musb(dev); 2440 struct musb *musb = dev_to_musb(dev);
2441 u8 devctl;
2442 u8 mask;
2303 2443
2304 /* 2444 /*
2305 * For static cmos like DaVinci, register values were preserved 2445 * For static cmos like DaVinci, register values were preserved
@@ -2313,6 +2453,23 @@ static int musb_resume_noirq(struct device *dev)
2313 2453
2314 musb_restore_context(musb); 2454 musb_restore_context(musb);
2315 2455
2456 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2457 mask = MUSB_DEVCTL_BDEVICE | MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV;
2458 if ((devctl & mask) != (musb->context.devctl & mask))
2459 musb->port1_status = 0;
2460 if (musb->need_finish_resume) {
2461 musb->need_finish_resume = 0;
2462 schedule_delayed_work(&musb->finish_resume_work,
2463 msecs_to_jiffies(20));
2464 }
2465
2466 /*
2467 * The USB HUB code expects the device to be in RPM_ACTIVE once it came
2468 * out of suspend
2469 */
2470 pm_runtime_disable(dev);
2471 pm_runtime_set_active(dev);
2472 pm_runtime_enable(dev);
2316 return 0; 2473 return 0;
2317} 2474}
2318 2475
@@ -2348,7 +2505,7 @@ static int musb_runtime_resume(struct device *dev)
2348 2505
2349static const struct dev_pm_ops musb_dev_pm_ops = { 2506static const struct dev_pm_ops musb_dev_pm_ops = {
2350 .suspend = musb_suspend, 2507 .suspend = musb_suspend,
2351 .resume_noirq = musb_resume_noirq, 2508 .resume = musb_resume,
2352 .runtime_suspend = musb_runtime_suspend, 2509 .runtime_suspend = musb_runtime_suspend,
2353 .runtime_resume = musb_runtime_resume, 2510 .runtime_resume = musb_runtime_resume,
2354}; 2511};
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index 414e57a984bb..5e65958f7915 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -124,41 +124,6 @@ enum musb_g_ep0_state {
124#define OTG_TIME_A_AIDL_BDIS 200 /* min 200 msec */ 124#define OTG_TIME_A_AIDL_BDIS 200 /* min 200 msec */
125#define OTG_TIME_B_ASE0_BRST 100 /* min 3.125 ms */ 125#define OTG_TIME_B_ASE0_BRST 100 /* min 3.125 ms */
126 126
127
128/*************************** REGISTER ACCESS ********************************/
129
130/* Endpoint registers (other than dynfifo setup) can be accessed either
131 * directly with the "flat" model, or after setting up an index register.
132 */
133
134#if defined(CONFIG_ARCH_DAVINCI) || defined(CONFIG_SOC_OMAP2430) \
135 || defined(CONFIG_SOC_OMAP3430) || defined(CONFIG_BLACKFIN) \
136 || defined(CONFIG_ARCH_OMAP4)
137/* REVISIT indexed access seemed to
138 * misbehave (on DaVinci) for at least peripheral IN ...
139 */
140#define MUSB_FLAT_REG
141#endif
142
143/* TUSB mapping: "flat" plus ep0 special cases */
144#if defined(CONFIG_USB_MUSB_TUSB6010) || \
145 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
146#define musb_ep_select(_mbase, _epnum) \
147 musb_writeb((_mbase), MUSB_INDEX, (_epnum))
148#define MUSB_EP_OFFSET MUSB_TUSB_OFFSET
149
150/* "flat" mapping: each endpoint has its own i/o address */
151#elif defined(MUSB_FLAT_REG)
152#define musb_ep_select(_mbase, _epnum) (((void)(_mbase)), ((void)(_epnum)))
153#define MUSB_EP_OFFSET MUSB_FLAT_OFFSET
154
155/* "indexed" mapping: INDEX register controls register bank select */
156#else
157#define musb_ep_select(_mbase, _epnum) \
158 musb_writeb((_mbase), MUSB_INDEX, (_epnum))
159#define MUSB_EP_OFFSET MUSB_INDEXED_OFFSET
160#endif
161
162/****************************** FUNCTIONS ********************************/ 127/****************************** FUNCTIONS ********************************/
163 128
164#define MUSB_HST_MODE(_musb)\ 129#define MUSB_HST_MODE(_musb)\
@@ -173,8 +138,25 @@ enum musb_g_ep0_state {
173 138
174/******************************** TYPES *************************************/ 139/******************************** TYPES *************************************/
175 140
141struct musb_io;
142
176/** 143/**
177 * struct musb_platform_ops - Operations passed to musb_core by HW glue layer 144 * struct musb_platform_ops - Operations passed to musb_core by HW glue layer
145 * @quirks: flags for platform specific quirks
146 * @enable: enable device
147 * @disable: disable device
148 * @ep_offset: returns the end point offset
149 * @ep_select: selects the specified end point
150 * @fifo_mode: sets the fifo mode
151 * @fifo_offset: returns the fifo offset
152 * @readb: read 8 bits
153 * @writeb: write 8 bits
154 * @readw: read 16 bits
155 * @writew: write 16 bits
156 * @readl: read 32 bits
157 * @writel: write 32 bits
158 * @read_fifo: reads the fifo
159 * @write_fifo: writes to fifo
178 * @init: turns on clocks, sets up platform-specific registers, etc 160 * @init: turns on clocks, sets up platform-specific registers, etc
179 * @exit: undoes @init 161 * @exit: undoes @init
180 * @set_mode: forcefully changes operating mode 162 * @set_mode: forcefully changes operating mode
@@ -184,12 +166,34 @@ enum musb_g_ep0_state {
184 * @adjust_channel_params: pre check for standard dma channel_program func 166 * @adjust_channel_params: pre check for standard dma channel_program func
185 */ 167 */
186struct musb_platform_ops { 168struct musb_platform_ops {
169
170#define MUSB_DMA_UX500 BIT(6)
171#define MUSB_DMA_CPPI41 BIT(5)
172#define MUSB_DMA_CPPI BIT(4)
173#define MUSB_DMA_TUSB_OMAP BIT(3)
174#define MUSB_DMA_INVENTRA BIT(2)
175#define MUSB_IN_TUSB BIT(1)
176#define MUSB_INDEXED_EP BIT(0)
177 u32 quirks;
178
187 int (*init)(struct musb *musb); 179 int (*init)(struct musb *musb);
188 int (*exit)(struct musb *musb); 180 int (*exit)(struct musb *musb);
189 181
190 void (*enable)(struct musb *musb); 182 void (*enable)(struct musb *musb);
191 void (*disable)(struct musb *musb); 183 void (*disable)(struct musb *musb);
192 184
185 u32 (*ep_offset)(u8 epnum, u16 offset);
186 void (*ep_select)(void __iomem *mbase, u8 epnum);
187 u16 fifo_mode;
188 u32 (*fifo_offset)(u8 epnum);
189 u8 (*readb)(const void __iomem *addr, unsigned offset);
190 void (*writeb)(void __iomem *addr, unsigned offset, u8 data);
191 u16 (*readw)(const void __iomem *addr, unsigned offset);
192 void (*writew)(void __iomem *addr, unsigned offset, u16 data);
193 u32 (*readl)(const void __iomem *addr, unsigned offset);
194 void (*writel)(void __iomem *addr, unsigned offset, u32 data);
195 void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf);
196 void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf);
193 int (*set_mode)(struct musb *musb, u8 mode); 197 int (*set_mode)(struct musb *musb, u8 mode);
194 void (*try_idle)(struct musb *musb, unsigned long timeout); 198 void (*try_idle)(struct musb *musb, unsigned long timeout);
195 int (*reset)(struct musb *musb); 199 int (*reset)(struct musb *musb);
@@ -212,8 +216,7 @@ struct musb_hw_ep {
212 void __iomem *fifo; 216 void __iomem *fifo;
213 void __iomem *regs; 217 void __iomem *regs;
214 218
215#if defined(CONFIG_USB_MUSB_TUSB6010) || \ 219#if IS_ENABLED(CONFIG_USB_MUSB_TUSB6010)
216 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
217 void __iomem *conf; 220 void __iomem *conf;
218#endif 221#endif
219 222
@@ -230,8 +233,7 @@ struct musb_hw_ep {
230 struct dma_channel *tx_channel; 233 struct dma_channel *tx_channel;
231 struct dma_channel *rx_channel; 234 struct dma_channel *rx_channel;
232 235
233#if defined(CONFIG_USB_MUSB_TUSB6010) || \ 236#if IS_ENABLED(CONFIG_USB_MUSB_TUSB6010)
234 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
235 /* TUSB has "asynchronous" and "synchronous" dma modes */ 237 /* TUSB has "asynchronous" and "synchronous" dma modes */
236 dma_addr_t fifo_async; 238 dma_addr_t fifo_async;
237 dma_addr_t fifo_sync; 239 dma_addr_t fifo_sync;
@@ -292,6 +294,7 @@ struct musb {
292 /* device lock */ 294 /* device lock */
293 spinlock_t lock; 295 spinlock_t lock;
294 296
297 struct musb_io io;
295 const struct musb_platform_ops *ops; 298 const struct musb_platform_ops *ops;
296 struct musb_context_registers context; 299 struct musb_context_registers context;
297 300
@@ -334,8 +337,7 @@ struct musb {
334 void __iomem *ctrl_base; 337 void __iomem *ctrl_base;
335 void __iomem *mregs; 338 void __iomem *mregs;
336 339
337#if defined(CONFIG_USB_MUSB_TUSB6010) || \ 340#if IS_ENABLED(CONFIG_USB_MUSB_TUSB6010)
338 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
339 dma_addr_t async; 341 dma_addr_t async;
340 dma_addr_t sync; 342 dma_addr_t sync;
341 void __iomem *sync_va; 343 void __iomem *sync_va;
@@ -390,6 +392,7 @@ struct musb {
390 392
391 /* is_suspended means USB B_PERIPHERAL suspend */ 393 /* is_suspended means USB B_PERIPHERAL suspend */
392 unsigned is_suspended:1; 394 unsigned is_suspended:1;
395 unsigned need_finish_resume :1;
393 396
394 /* may_wakeup means remote wakeup is enabled */ 397 /* may_wakeup means remote wakeup is enabled */
395 unsigned may_wakeup:1; 398 unsigned may_wakeup:1;
@@ -474,7 +477,7 @@ static inline int musb_read_fifosize(struct musb *musb,
474 u8 reg = 0; 477 u8 reg = 0;
475 478
476 /* read from core using indexed model */ 479 /* read from core using indexed model */
477 reg = musb_readb(mbase, MUSB_EP_OFFSET(epnum, MUSB_FIFOSIZE)); 480 reg = musb_readb(mbase, musb->io.ep_offset(epnum, MUSB_FIFOSIZE));
478 /* 0's returned when no more endpoints */ 481 /* 0's returned when no more endpoints */
479 if (!reg) 482 if (!reg)
480 return -ENODEV; 483 return -ENODEV;
diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c
index 5a9b977fbc19..f64fd964dc6d 100644
--- a/drivers/usb/musb/musb_cppi41.c
+++ b/drivers/usb/musb/musb_cppi41.c
@@ -253,6 +253,7 @@ static void cppi41_dma_callback(void *private_data)
253 cppi41_trans_done(cppi41_channel); 253 cppi41_trans_done(cppi41_channel);
254 } else { 254 } else {
255 struct cppi41_dma_controller *controller; 255 struct cppi41_dma_controller *controller;
256 int is_hs = 0;
256 /* 257 /*
257 * On AM335x it has been observed that the TX interrupt fires 258 * On AM335x it has been observed that the TX interrupt fires
258 * too early that means the TXFIFO is not yet empty but the DMA 259 * too early that means the TXFIFO is not yet empty but the DMA
@@ -265,7 +266,14 @@ static void cppi41_dma_callback(void *private_data)
265 */ 266 */
266 controller = cppi41_channel->controller; 267 controller = cppi41_channel->controller;
267 268
268 if (musb->g.speed == USB_SPEED_HIGH) { 269 if (is_host_active(musb)) {
270 if (musb->port1_status & USB_PORT_STAT_HIGH_SPEED)
271 is_hs = 1;
272 } else {
273 if (musb->g.speed == USB_SPEED_HIGH)
274 is_hs = 1;
275 }
276 if (is_hs) {
269 unsigned wait = 25; 277 unsigned wait = 25;
270 278
271 do { 279 do {
diff --git a/drivers/usb/musb/musb_debugfs.c b/drivers/usb/musb/musb_debugfs.c
index 4c216790e86b..ad3701a97389 100644
--- a/drivers/usb/musb/musb_debugfs.c
+++ b/drivers/usb/musb/musb_debugfs.c
@@ -49,33 +49,36 @@ struct musb_register_map {
49}; 49};
50 50
51static const struct musb_register_map musb_regmap[] = { 51static const struct musb_register_map musb_regmap[] = {
52 { "FAddr", 0x00, 8 }, 52 { "FAddr", MUSB_FADDR, 8 },
53 { "Power", 0x01, 8 }, 53 { "Power", MUSB_POWER, 8 },
54 { "Frame", 0x0c, 16 }, 54 { "Frame", MUSB_FRAME, 16 },
55 { "Index", 0x0e, 8 }, 55 { "Index", MUSB_INDEX, 8 },
56 { "Testmode", 0x0f, 8 }, 56 { "Testmode", MUSB_TESTMODE, 8 },
57 { "TxMaxPp", 0x10, 16 }, 57 { "TxMaxPp", MUSB_TXMAXP, 16 },
58 { "TxCSRp", 0x12, 16 }, 58 { "TxCSRp", MUSB_TXCSR, 16 },
59 { "RxMaxPp", 0x14, 16 }, 59 { "RxMaxPp", MUSB_RXMAXP, 16 },
60 { "RxCSR", 0x16, 16 }, 60 { "RxCSR", MUSB_RXCSR, 16 },
61 { "RxCount", 0x18, 16 }, 61 { "RxCount", MUSB_RXCOUNT, 16 },
62 { "ConfigData", 0x1f, 8 }, 62 { "ConfigData", MUSB_CONFIGDATA,8 },
63 { "DevCtl", 0x60, 8 }, 63 { "IntrRxE", MUSB_INTRRXE, 16 },
64 { "MISC", 0x61, 8 }, 64 { "IntrTxE", MUSB_INTRTXE, 16 },
65 { "TxFIFOsz", 0x62, 8 }, 65 { "IntrUsbE", MUSB_INTRUSBE, 8 },
66 { "RxFIFOsz", 0x63, 8 }, 66 { "DevCtl", MUSB_DEVCTL, 8 },
67 { "TxFIFOadd", 0x64, 16 }, 67 { "BabbleCtl", MUSB_BABBLE_CTL,8 },
68 { "RxFIFOadd", 0x66, 16 }, 68 { "TxFIFOsz", MUSB_TXFIFOSZ, 8 },
69 { "VControl", 0x68, 32 }, 69 { "RxFIFOsz", MUSB_RXFIFOSZ, 8 },
70 { "HWVers", 0x6C, 16 }, 70 { "TxFIFOadd", MUSB_TXFIFOADD, 16 },
71 { "EPInfo", 0x78, 8 }, 71 { "RxFIFOadd", MUSB_RXFIFOADD, 16 },
72 { "RAMInfo", 0x79, 8 }, 72 { "VControl", 0x68, 32 },
73 { "LinkInfo", 0x7A, 8 }, 73 { "HWVers", 0x69, 16 },
74 { "VPLen", 0x7B, 8 }, 74 { "EPInfo", MUSB_EPINFO, 8 },
75 { "HS_EOF1", 0x7C, 8 }, 75 { "RAMInfo", MUSB_RAMINFO, 8 },
76 { "FS_EOF1", 0x7D, 8 }, 76 { "LinkInfo", MUSB_LINKINFO, 8 },
77 { "LS_EOF1", 0x7E, 8 }, 77 { "VPLen", MUSB_VPLEN, 8 },
78 { "SOFT_RST", 0x7F, 8 }, 78 { "HS_EOF1", MUSB_HS_EOF1, 8 },
79 { "FS_EOF1", MUSB_FS_EOF1, 8 },
80 { "LS_EOF1", MUSB_LS_EOF1, 8 },
81 { "SOFT_RST", 0x7F, 8 },
79 { "DMA_CNTLch0", 0x204, 16 }, 82 { "DMA_CNTLch0", 0x204, 16 },
80 { "DMA_ADDRch0", 0x208, 32 }, 83 { "DMA_ADDRch0", 0x208, 32 },
81 { "DMA_COUNTch0", 0x20C, 32 }, 84 { "DMA_COUNTch0", 0x20C, 32 },
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 965c552f7035..53bd0e71d19f 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -179,9 +179,9 @@ static void dsps_musb_try_idle(struct musb *musb, unsigned long timeout)
179 179
180 /* Never idle if active, or when VBUS timeout is not set as host */ 180 /* Never idle if active, or when VBUS timeout is not set as host */
181 if (musb->is_active || (musb->a_wait_bcon == 0 && 181 if (musb->is_active || (musb->a_wait_bcon == 0 &&
182 musb->xceiv->state == OTG_STATE_A_WAIT_BCON)) { 182 musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON)) {
183 dev_dbg(musb->controller, "%s active, deleting timer\n", 183 dev_dbg(musb->controller, "%s active, deleting timer\n",
184 usb_otg_state_string(musb->xceiv->state)); 184 usb_otg_state_string(musb->xceiv->otg->state));
185 del_timer(&glue->timer); 185 del_timer(&glue->timer);
186 glue->last_timer = jiffies; 186 glue->last_timer = jiffies;
187 return; 187 return;
@@ -201,7 +201,7 @@ static void dsps_musb_try_idle(struct musb *musb, unsigned long timeout)
201 glue->last_timer = timeout; 201 glue->last_timer = timeout;
202 202
203 dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n", 203 dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n",
204 usb_otg_state_string(musb->xceiv->state), 204 usb_otg_state_string(musb->xceiv->otg->state),
205 jiffies_to_msecs(timeout - jiffies)); 205 jiffies_to_msecs(timeout - jiffies));
206 mod_timer(&glue->timer, timeout); 206 mod_timer(&glue->timer, timeout);
207} 207}
@@ -265,10 +265,10 @@ static void otg_timer(unsigned long _musb)
265 */ 265 */
266 devctl = dsps_readb(mregs, MUSB_DEVCTL); 266 devctl = dsps_readb(mregs, MUSB_DEVCTL);
267 dev_dbg(musb->controller, "Poll devctl %02x (%s)\n", devctl, 267 dev_dbg(musb->controller, "Poll devctl %02x (%s)\n", devctl,
268 usb_otg_state_string(musb->xceiv->state)); 268 usb_otg_state_string(musb->xceiv->otg->state));
269 269
270 spin_lock_irqsave(&musb->lock, flags); 270 spin_lock_irqsave(&musb->lock, flags);
271 switch (musb->xceiv->state) { 271 switch (musb->xceiv->otg->state) {
272 case OTG_STATE_A_WAIT_BCON: 272 case OTG_STATE_A_WAIT_BCON:
273 dsps_writeb(musb->mregs, MUSB_DEVCTL, 0); 273 dsps_writeb(musb->mregs, MUSB_DEVCTL, 0);
274 skip_session = 1; 274 skip_session = 1;
@@ -277,10 +277,10 @@ static void otg_timer(unsigned long _musb)
277 case OTG_STATE_A_IDLE: 277 case OTG_STATE_A_IDLE:
278 case OTG_STATE_B_IDLE: 278 case OTG_STATE_B_IDLE:
279 if (devctl & MUSB_DEVCTL_BDEVICE) { 279 if (devctl & MUSB_DEVCTL_BDEVICE) {
280 musb->xceiv->state = OTG_STATE_B_IDLE; 280 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
281 MUSB_DEV_MODE(musb); 281 MUSB_DEV_MODE(musb);
282 } else { 282 } else {
283 musb->xceiv->state = OTG_STATE_A_IDLE; 283 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
284 MUSB_HST_MODE(musb); 284 MUSB_HST_MODE(musb);
285 } 285 }
286 if (!(devctl & MUSB_DEVCTL_SESSION) && !skip_session) 286 if (!(devctl & MUSB_DEVCTL_SESSION) && !skip_session)
@@ -288,7 +288,7 @@ static void otg_timer(unsigned long _musb)
288 mod_timer(&glue->timer, jiffies + wrp->poll_seconds * HZ); 288 mod_timer(&glue->timer, jiffies + wrp->poll_seconds * HZ);
289 break; 289 break;
290 case OTG_STATE_A_WAIT_VFALL: 290 case OTG_STATE_A_WAIT_VFALL:
291 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 291 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
292 dsps_writel(musb->ctrl_base, wrp->coreintr_set, 292 dsps_writel(musb->ctrl_base, wrp->coreintr_set,
293 MUSB_INTR_VBUSERROR << wrp->usb_shift); 293 MUSB_INTR_VBUSERROR << wrp->usb_shift);
294 break; 294 break;
@@ -373,26 +373,26 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
373 * devctl. 373 * devctl.
374 */ 374 */
375 musb->int_usb &= ~MUSB_INTR_VBUSERROR; 375 musb->int_usb &= ~MUSB_INTR_VBUSERROR;
376 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; 376 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VFALL;
377 mod_timer(&glue->timer, 377 mod_timer(&glue->timer,
378 jiffies + wrp->poll_seconds * HZ); 378 jiffies + wrp->poll_seconds * HZ);
379 WARNING("VBUS error workaround (delay coming)\n"); 379 WARNING("VBUS error workaround (delay coming)\n");
380 } else if (drvvbus) { 380 } else if (drvvbus) {
381 MUSB_HST_MODE(musb); 381 MUSB_HST_MODE(musb);
382 musb->xceiv->otg->default_a = 1; 382 musb->xceiv->otg->default_a = 1;
383 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 383 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
384 del_timer(&glue->timer); 384 del_timer(&glue->timer);
385 } else { 385 } else {
386 musb->is_active = 0; 386 musb->is_active = 0;
387 MUSB_DEV_MODE(musb); 387 MUSB_DEV_MODE(musb);
388 musb->xceiv->otg->default_a = 0; 388 musb->xceiv->otg->default_a = 0;
389 musb->xceiv->state = OTG_STATE_B_IDLE; 389 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
390 } 390 }
391 391
392 /* NOTE: this must complete power-on within 100 ms. */ 392 /* NOTE: this must complete power-on within 100 ms. */
393 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n", 393 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n",
394 drvvbus ? "on" : "off", 394 drvvbus ? "on" : "off",
395 usb_otg_state_string(musb->xceiv->state), 395 usb_otg_state_string(musb->xceiv->otg->state),
396 err ? " ERROR" : "", 396 err ? " ERROR" : "",
397 devctl); 397 devctl);
398 ret = IRQ_HANDLED; 398 ret = IRQ_HANDLED;
@@ -402,7 +402,7 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
402 ret |= musb_interrupt(musb); 402 ret |= musb_interrupt(musb);
403 403
404 /* Poll for ID change in OTG port mode */ 404 /* Poll for ID change in OTG port mode */
405 if (musb->xceiv->state == OTG_STATE_B_IDLE && 405 if (musb->xceiv->otg->state == OTG_STATE_B_IDLE &&
406 musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE) 406 musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE)
407 mod_timer(&glue->timer, jiffies + wrp->poll_seconds * HZ); 407 mod_timer(&glue->timer, jiffies + wrp->poll_seconds * HZ);
408out: 408out:
@@ -633,6 +633,7 @@ static int dsps_musb_reset(struct musb *musb)
633} 633}
634 634
635static struct musb_platform_ops dsps_ops = { 635static struct musb_platform_ops dsps_ops = {
636 .quirks = MUSB_INDEXED_EP,
636 .init = dsps_musb_init, 637 .init = dsps_musb_init,
637 .exit = dsps_musb_exit, 638 .exit = dsps_musb_exit,
638 639
@@ -726,7 +727,6 @@ static int dsps_create_musb_pdev(struct dsps_glue *glue,
726 727
727 config = devm_kzalloc(&parent->dev, sizeof(*config), GFP_KERNEL); 728 config = devm_kzalloc(&parent->dev, sizeof(*config), GFP_KERNEL);
728 if (!config) { 729 if (!config) {
729 dev_err(dev, "failed to allocate musb hdrc config\n");
730 ret = -ENOMEM; 730 ret = -ENOMEM;
731 goto err; 731 goto err;
732 } 732 }
@@ -778,10 +778,8 @@ static int dsps_probe(struct platform_device *pdev)
778 778
779 /* allocate glue */ 779 /* allocate glue */
780 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL); 780 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL);
781 if (!glue) { 781 if (!glue)
782 dev_err(&pdev->dev, "unable to allocate glue memory\n");
783 return -ENOMEM; 782 return -ENOMEM;
784 }
785 783
786 glue->dev = &pdev->dev; 784 glue->dev = &pdev->dev;
787 glue->wrp = wrp; 785 glue->wrp = wrp;
@@ -903,7 +901,7 @@ static int dsps_resume(struct device *dev)
903 dsps_writel(mbase, wrp->mode, glue->context.mode); 901 dsps_writel(mbase, wrp->mode, glue->context.mode);
904 dsps_writel(mbase, wrp->tx_mode, glue->context.tx_mode); 902 dsps_writel(mbase, wrp->tx_mode, glue->context.tx_mode);
905 dsps_writel(mbase, wrp->rx_mode, glue->context.rx_mode); 903 dsps_writel(mbase, wrp->rx_mode, glue->context.rx_mode);
906 if (musb->xceiv->state == OTG_STATE_B_IDLE && 904 if (musb->xceiv->otg->state == OTG_STATE_B_IDLE &&
907 musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE) 905 musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE)
908 mod_timer(&glue->timer, jiffies + wrp->poll_seconds * HZ); 906 mod_timer(&glue->timer, jiffies + wrp->poll_seconds * HZ);
909 907
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index 24c8c0219790..49b04cb6f5ca 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -1546,7 +1546,7 @@ static int musb_gadget_wakeup(struct usb_gadget *gadget)
1546 1546
1547 spin_lock_irqsave(&musb->lock, flags); 1547 spin_lock_irqsave(&musb->lock, flags);
1548 1548
1549 switch (musb->xceiv->state) { 1549 switch (musb->xceiv->otg->state) {
1550 case OTG_STATE_B_PERIPHERAL: 1550 case OTG_STATE_B_PERIPHERAL:
1551 /* NOTE: OTG state machine doesn't include B_SUSPENDED; 1551 /* NOTE: OTG state machine doesn't include B_SUSPENDED;
1552 * that's part of the standard usb 1.1 state machine, and 1552 * that's part of the standard usb 1.1 state machine, and
@@ -1587,7 +1587,7 @@ static int musb_gadget_wakeup(struct usb_gadget *gadget)
1587 goto done; 1587 goto done;
1588 default: 1588 default:
1589 dev_dbg(musb->controller, "Unhandled wake: %s\n", 1589 dev_dbg(musb->controller, "Unhandled wake: %s\n",
1590 usb_otg_state_string(musb->xceiv->state)); 1590 usb_otg_state_string(musb->xceiv->otg->state));
1591 goto done; 1591 goto done;
1592 } 1592 }
1593 1593
@@ -1684,8 +1684,7 @@ static int musb_gadget_pullup(struct usb_gadget *gadget, int is_on)
1684 1684
1685static int musb_gadget_start(struct usb_gadget *g, 1685static int musb_gadget_start(struct usb_gadget *g,
1686 struct usb_gadget_driver *driver); 1686 struct usb_gadget_driver *driver);
1687static int musb_gadget_stop(struct usb_gadget *g, 1687static int musb_gadget_stop(struct usb_gadget *g);
1688 struct usb_gadget_driver *driver);
1689 1688
1690static const struct usb_gadget_ops musb_gadget_operations = { 1689static const struct usb_gadget_ops musb_gadget_operations = {
1691 .get_frame = musb_gadget_get_frame, 1690 .get_frame = musb_gadget_get_frame,
@@ -1792,7 +1791,7 @@ int musb_gadget_setup(struct musb *musb)
1792 1791
1793 MUSB_DEV_MODE(musb); 1792 MUSB_DEV_MODE(musb);
1794 musb->xceiv->otg->default_a = 0; 1793 musb->xceiv->otg->default_a = 0;
1795 musb->xceiv->state = OTG_STATE_B_IDLE; 1794 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
1796 1795
1797 /* this "gadget" abstracts/virtualizes the controller */ 1796 /* this "gadget" abstracts/virtualizes the controller */
1798 musb->g.name = musb_driver_name; 1797 musb->g.name = musb_driver_name;
@@ -1851,8 +1850,6 @@ static int musb_gadget_start(struct usb_gadget *g,
1851 1850
1852 pm_runtime_get_sync(musb->controller); 1851 pm_runtime_get_sync(musb->controller);
1853 1852
1854 dev_dbg(musb->controller, "registering driver %s\n", driver->function);
1855
1856 musb->softconnect = 0; 1853 musb->softconnect = 0;
1857 musb->gadget_driver = driver; 1854 musb->gadget_driver = driver;
1858 1855
@@ -1860,7 +1857,7 @@ static int musb_gadget_start(struct usb_gadget *g,
1860 musb->is_active = 1; 1857 musb->is_active = 1;
1861 1858
1862 otg_set_peripheral(otg, &musb->g); 1859 otg_set_peripheral(otg, &musb->g);
1863 musb->xceiv->state = OTG_STATE_B_IDLE; 1860 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
1864 spin_unlock_irqrestore(&musb->lock, flags); 1861 spin_unlock_irqrestore(&musb->lock, flags);
1865 1862
1866 musb_start(musb); 1863 musb_start(musb);
@@ -1925,8 +1922,7 @@ static void stop_activity(struct musb *musb, struct usb_gadget_driver *driver)
1925 * 1922 *
1926 * @param driver the gadget driver to unregister 1923 * @param driver the gadget driver to unregister
1927 */ 1924 */
1928static int musb_gadget_stop(struct usb_gadget *g, 1925static int musb_gadget_stop(struct usb_gadget *g)
1929 struct usb_gadget_driver *driver)
1930{ 1926{
1931 struct musb *musb = gadget_to_musb(g); 1927 struct musb *musb = gadget_to_musb(g);
1932 unsigned long flags; 1928 unsigned long flags;
@@ -1945,13 +1941,10 @@ static int musb_gadget_stop(struct usb_gadget *g,
1945 1941
1946 (void) musb_gadget_vbus_draw(&musb->g, 0); 1942 (void) musb_gadget_vbus_draw(&musb->g, 0);
1947 1943
1948 musb->xceiv->state = OTG_STATE_UNDEFINED; 1944 musb->xceiv->otg->state = OTG_STATE_UNDEFINED;
1949 stop_activity(musb, driver); 1945 stop_activity(musb, NULL);
1950 otg_set_peripheral(musb->xceiv->otg, NULL); 1946 otg_set_peripheral(musb->xceiv->otg, NULL);
1951 1947
1952 dev_dbg(musb->controller, "unregistering driver %s\n",
1953 driver ? driver->function : "(removed)");
1954
1955 musb->is_active = 0; 1948 musb->is_active = 0;
1956 musb->gadget_driver = NULL; 1949 musb->gadget_driver = NULL;
1957 musb_platform_try_idle(musb, 0); 1950 musb_platform_try_idle(musb, 0);
@@ -1975,7 +1968,7 @@ static int musb_gadget_stop(struct usb_gadget *g,
1975void musb_g_resume(struct musb *musb) 1968void musb_g_resume(struct musb *musb)
1976{ 1969{
1977 musb->is_suspended = 0; 1970 musb->is_suspended = 0;
1978 switch (musb->xceiv->state) { 1971 switch (musb->xceiv->otg->state) {
1979 case OTG_STATE_B_IDLE: 1972 case OTG_STATE_B_IDLE:
1980 break; 1973 break;
1981 case OTG_STATE_B_WAIT_ACON: 1974 case OTG_STATE_B_WAIT_ACON:
@@ -1989,7 +1982,7 @@ void musb_g_resume(struct musb *musb)
1989 break; 1982 break;
1990 default: 1983 default:
1991 WARNING("unhandled RESUME transition (%s)\n", 1984 WARNING("unhandled RESUME transition (%s)\n",
1992 usb_otg_state_string(musb->xceiv->state)); 1985 usb_otg_state_string(musb->xceiv->otg->state));
1993 } 1986 }
1994} 1987}
1995 1988
@@ -2001,10 +1994,10 @@ void musb_g_suspend(struct musb *musb)
2001 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); 1994 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2002 dev_dbg(musb->controller, "devctl %02x\n", devctl); 1995 dev_dbg(musb->controller, "devctl %02x\n", devctl);
2003 1996
2004 switch (musb->xceiv->state) { 1997 switch (musb->xceiv->otg->state) {
2005 case OTG_STATE_B_IDLE: 1998 case OTG_STATE_B_IDLE:
2006 if ((devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS) 1999 if ((devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS)
2007 musb->xceiv->state = OTG_STATE_B_PERIPHERAL; 2000 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
2008 break; 2001 break;
2009 case OTG_STATE_B_PERIPHERAL: 2002 case OTG_STATE_B_PERIPHERAL:
2010 musb->is_suspended = 1; 2003 musb->is_suspended = 1;
@@ -2019,7 +2012,7 @@ void musb_g_suspend(struct musb *musb)
2019 * A_PERIPHERAL may need care too 2012 * A_PERIPHERAL may need care too
2020 */ 2013 */
2021 WARNING("unhandled SUSPEND transition (%s)\n", 2014 WARNING("unhandled SUSPEND transition (%s)\n",
2022 usb_otg_state_string(musb->xceiv->state)); 2015 usb_otg_state_string(musb->xceiv->otg->state));
2023 } 2016 }
2024} 2017}
2025 2018
@@ -2050,22 +2043,22 @@ void musb_g_disconnect(struct musb *musb)
2050 spin_lock(&musb->lock); 2043 spin_lock(&musb->lock);
2051 } 2044 }
2052 2045
2053 switch (musb->xceiv->state) { 2046 switch (musb->xceiv->otg->state) {
2054 default: 2047 default:
2055 dev_dbg(musb->controller, "Unhandled disconnect %s, setting a_idle\n", 2048 dev_dbg(musb->controller, "Unhandled disconnect %s, setting a_idle\n",
2056 usb_otg_state_string(musb->xceiv->state)); 2049 usb_otg_state_string(musb->xceiv->otg->state));
2057 musb->xceiv->state = OTG_STATE_A_IDLE; 2050 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
2058 MUSB_HST_MODE(musb); 2051 MUSB_HST_MODE(musb);
2059 break; 2052 break;
2060 case OTG_STATE_A_PERIPHERAL: 2053 case OTG_STATE_A_PERIPHERAL:
2061 musb->xceiv->state = OTG_STATE_A_WAIT_BCON; 2054 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON;
2062 MUSB_HST_MODE(musb); 2055 MUSB_HST_MODE(musb);
2063 break; 2056 break;
2064 case OTG_STATE_B_WAIT_ACON: 2057 case OTG_STATE_B_WAIT_ACON:
2065 case OTG_STATE_B_HOST: 2058 case OTG_STATE_B_HOST:
2066 case OTG_STATE_B_PERIPHERAL: 2059 case OTG_STATE_B_PERIPHERAL:
2067 case OTG_STATE_B_IDLE: 2060 case OTG_STATE_B_IDLE:
2068 musb->xceiv->state = OTG_STATE_B_IDLE; 2061 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
2069 break; 2062 break;
2070 case OTG_STATE_B_SRP_INIT: 2063 case OTG_STATE_B_SRP_INIT:
2071 break; 2064 break;
@@ -2090,9 +2083,12 @@ __acquires(musb->lock)
2090 : NULL 2083 : NULL
2091 ); 2084 );
2092 2085
2093 /* report disconnect, if we didn't already (flushing EP state) */ 2086 /* report reset, if we didn't already (flushing EP state) */
2094 if (musb->g.speed != USB_SPEED_UNKNOWN) 2087 if (musb->gadget_driver && musb->g.speed != USB_SPEED_UNKNOWN) {
2095 musb_g_disconnect(musb); 2088 spin_unlock(&musb->lock);
2089 usb_gadget_udc_reset(&musb->g, musb->gadget_driver);
2090 spin_lock(&musb->lock);
2091 }
2096 2092
2097 /* clear HR */ 2093 /* clear HR */
2098 else if (devctl & MUSB_DEVCTL_HR) 2094 else if (devctl & MUSB_DEVCTL_HR)
@@ -2125,13 +2121,13 @@ __acquires(musb->lock)
2125 * In that case, do not rely on devctl for setting 2121 * In that case, do not rely on devctl for setting
2126 * peripheral mode. 2122 * peripheral mode.
2127 */ 2123 */
2128 musb->xceiv->state = OTG_STATE_B_PERIPHERAL; 2124 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
2129 musb->g.is_a_peripheral = 0; 2125 musb->g.is_a_peripheral = 0;
2130 } else if (devctl & MUSB_DEVCTL_BDEVICE) { 2126 } else if (devctl & MUSB_DEVCTL_BDEVICE) {
2131 musb->xceiv->state = OTG_STATE_B_PERIPHERAL; 2127 musb->xceiv->otg->state = OTG_STATE_B_PERIPHERAL;
2132 musb->g.is_a_peripheral = 0; 2128 musb->g.is_a_peripheral = 0;
2133 } else { 2129 } else {
2134 musb->xceiv->state = OTG_STATE_A_PERIPHERAL; 2130 musb->xceiv->otg->state = OTG_STATE_A_PERIPHERAL;
2135 musb->g.is_a_peripheral = 1; 2131 musb->g.is_a_peripheral = 1;
2136 } 2132 }
2137 2133
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 855793d701bb..23d474d3d7f4 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -2463,7 +2463,7 @@ static int musb_bus_suspend(struct usb_hcd *hcd)
2463 if (!is_host_active(musb)) 2463 if (!is_host_active(musb))
2464 return 0; 2464 return 0;
2465 2465
2466 switch (musb->xceiv->state) { 2466 switch (musb->xceiv->otg->state) {
2467 case OTG_STATE_A_SUSPEND: 2467 case OTG_STATE_A_SUSPEND:
2468 return 0; 2468 return 0;
2469 case OTG_STATE_A_WAIT_VRISE: 2469 case OTG_STATE_A_WAIT_VRISE:
@@ -2473,7 +2473,7 @@ static int musb_bus_suspend(struct usb_hcd *hcd)
2473 */ 2473 */
2474 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); 2474 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2475 if ((devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS) 2475 if ((devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS)
2476 musb->xceiv->state = OTG_STATE_A_WAIT_BCON; 2476 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON;
2477 break; 2477 break;
2478 default: 2478 default:
2479 break; 2479 break;
@@ -2481,7 +2481,7 @@ static int musb_bus_suspend(struct usb_hcd *hcd)
2481 2481
2482 if (musb->is_active) { 2482 if (musb->is_active) {
2483 WARNING("trying to suspend as %s while active\n", 2483 WARNING("trying to suspend as %s while active\n",
2484 usb_otg_state_string(musb->xceiv->state)); 2484 usb_otg_state_string(musb->xceiv->otg->state));
2485 return -EBUSY; 2485 return -EBUSY;
2486 } else 2486 } else
2487 return 0; 2487 return 0;
@@ -2678,7 +2678,7 @@ int musb_host_setup(struct musb *musb, int power_budget)
2678 2678
2679 MUSB_HST_MODE(musb); 2679 MUSB_HST_MODE(musb);
2680 musb->xceiv->otg->default_a = 1; 2680 musb->xceiv->otg->default_a = 1;
2681 musb->xceiv->state = OTG_STATE_A_IDLE; 2681 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
2682 2682
2683 otg_set_host(musb->xceiv->otg, &hcd->self); 2683 otg_set_host(musb->xceiv->otg, &hcd->self);
2684 hcd->self.otg_port = 1; 2684 hcd->self.otg_port = 1;
diff --git a/drivers/usb/musb/musb_io.h b/drivers/usb/musb/musb_io.h
index eebeed78edd6..8a57a6f4b3a6 100644
--- a/drivers/usb/musb/musb_io.h
+++ b/drivers/usb/musb/musb_io.h
@@ -37,86 +37,32 @@
37 37
38#include <linux/io.h> 38#include <linux/io.h>
39 39
40#ifndef CONFIG_BLACKFIN 40#define musb_ep_select(_mbase, _epnum) musb->io.ep_select((_mbase), (_epnum))
41 41
42/* NOTE: these offsets are all in bytes */ 42/**
43 43 * struct musb_io - IO functions for MUSB
44static inline u16 musb_readw(const void __iomem *addr, unsigned offset) 44 * @quirks: platform specific flags
45 { return __raw_readw(addr + offset); } 45 * @ep_offset: platform specific function to get end point offset
46 46 * @ep_select: platform specific function to select end point
47static inline u32 musb_readl(const void __iomem *addr, unsigned offset) 47 * @fifo_offset: platform specific function to get fifo offset
48 { return __raw_readl(addr + offset); } 48 * @read_fifo: platform specific function to read fifo
49 49 * @write_fifo: platform specific function to write fifo
50
51static inline void musb_writew(void __iomem *addr, unsigned offset, u16 data)
52 { __raw_writew(data, addr + offset); }
53
54static inline void musb_writel(void __iomem *addr, unsigned offset, u32 data)
55 { __raw_writel(data, addr + offset); }
56
57
58#if defined(CONFIG_USB_MUSB_TUSB6010) || defined (CONFIG_USB_MUSB_TUSB6010_MODULE)
59
60/*
61 * TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum.
62 */ 50 */
63static inline u8 musb_readb(const void __iomem *addr, unsigned offset) 51struct musb_io {
64{ 52 u32 quirks;
65 u16 tmp; 53 u32 (*ep_offset)(u8 epnum, u16 offset);
66 u8 val; 54 void (*ep_select)(void __iomem *mbase, u8 epnum);
67 55 u32 (*fifo_offset)(u8 epnum);
68 tmp = __raw_readw(addr + (offset & ~1)); 56 void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf);
69 if (offset & 1) 57 void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf);
70 val = (tmp >> 8); 58};
71 else 59
72 val = tmp & 0xff; 60/* Do not add new entries here, add them the struct musb_io instead */
73 61extern u8 (*musb_readb)(const void __iomem *addr, unsigned offset);
74 return val; 62extern void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data);
75} 63extern u16 (*musb_readw)(const void __iomem *addr, unsigned offset);
76 64extern void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data);
77static inline void musb_writeb(void __iomem *addr, unsigned offset, u8 data) 65extern u32 (*musb_readl)(const void __iomem *addr, unsigned offset);
78{ 66extern void (*musb_writel)(void __iomem *addr, unsigned offset, u32 data);
79 u16 tmp;
80
81 tmp = __raw_readw(addr + (offset & ~1));
82 if (offset & 1)
83 tmp = (data << 8) | (tmp & 0xff);
84 else
85 tmp = (tmp & 0xff00) | data;
86
87 __raw_writew(tmp, addr + (offset & ~1));
88}
89
90#else
91
92static inline u8 musb_readb(const void __iomem *addr, unsigned offset)
93 { return __raw_readb(addr + offset); }
94
95static inline void musb_writeb(void __iomem *addr, unsigned offset, u8 data)
96 { __raw_writeb(data, addr + offset); }
97
98#endif /* CONFIG_USB_MUSB_TUSB6010 */
99
100#else
101
102static inline u8 musb_readb(const void __iomem *addr, unsigned offset)
103 { return (u8) (bfin_read16(addr + offset)); }
104
105static inline u16 musb_readw(const void __iomem *addr, unsigned offset)
106 { return bfin_read16(addr + offset); }
107
108static inline u32 musb_readl(const void __iomem *addr, unsigned offset)
109 { return (u32) (bfin_read16(addr + offset)); }
110
111static inline void musb_writeb(void __iomem *addr, unsigned offset, u8 data)
112 { bfin_write16(addr + offset, (u16) data); }
113
114static inline void musb_writew(void __iomem *addr, unsigned offset, u16 data)
115 { bfin_write16(addr + offset, data); }
116
117static inline void musb_writel(void __iomem *addr, unsigned offset, u32 data)
118 { bfin_write16(addr + offset, (u16) data); }
119
120#endif /* CONFIG_BLACKFIN */
121 67
122#endif 68#endif
diff --git a/drivers/usb/musb/musb_regs.h b/drivers/usb/musb/musb_regs.h
index 37122a480bc1..11f0be07491e 100644
--- a/drivers/usb/musb/musb_regs.h
+++ b/drivers/usb/musb/musb_regs.h
@@ -239,14 +239,6 @@
239#define MUSB_INDEX 0x0E /* 8 bit */ 239#define MUSB_INDEX 0x0E /* 8 bit */
240#define MUSB_TESTMODE 0x0F /* 8 bit */ 240#define MUSB_TESTMODE 0x0F /* 8 bit */
241 241
242/* Get offset for a given FIFO from musb->mregs */
243#if defined(CONFIG_USB_MUSB_TUSB6010) || \
244 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
245#define MUSB_FIFO_OFFSET(epnum) (0x200 + ((epnum) * 0x20))
246#else
247#define MUSB_FIFO_OFFSET(epnum) (0x20 + ((epnum) * 4))
248#endif
249
250/* 242/*
251 * Additional Control Registers 243 * Additional Control Registers
252 */ 244 */
@@ -295,21 +287,7 @@
295#define MUSB_FIFOSIZE 0x0F 287#define MUSB_FIFOSIZE 0x0F
296#define MUSB_CONFIGDATA MUSB_FIFOSIZE /* Re-used for EP0 */ 288#define MUSB_CONFIGDATA MUSB_FIFOSIZE /* Re-used for EP0 */
297 289
298/* Offsets to endpoint registers in indexed model (using INDEX register) */
299#define MUSB_INDEXED_OFFSET(_epnum, _offset) \
300 (0x10 + (_offset))
301
302/* Offsets to endpoint registers in flat models */
303#define MUSB_FLAT_OFFSET(_epnum, _offset) \
304 (0x100 + (0x10*(_epnum)) + (_offset))
305
306#if defined(CONFIG_USB_MUSB_TUSB6010) || \
307 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
308/* TUSB6010 EP0 configuration register is special */
309#define MUSB_TUSB_OFFSET(_epnum, _offset) \
310 (0x10 + _offset)
311#include "tusb6010.h" /* Needed "only" for TUSB_EP0_CONF */ 290#include "tusb6010.h" /* Needed "only" for TUSB_EP0_CONF */
312#endif
313 291
314#define MUSB_TXCSR_MODE 0x2000 292#define MUSB_TXCSR_MODE 0x2000
315 293
@@ -480,10 +458,6 @@ static inline u8 musb_read_txhubport(void __iomem *mbase, u8 epnum)
480#define MUSB_INDEX USB_OFFSET(USB_INDEX) /* 8 bit */ 458#define MUSB_INDEX USB_OFFSET(USB_INDEX) /* 8 bit */
481#define MUSB_TESTMODE USB_OFFSET(USB_TESTMODE)/* 8 bit */ 459#define MUSB_TESTMODE USB_OFFSET(USB_TESTMODE)/* 8 bit */
482 460
483/* Get offset for a given FIFO from musb->mregs */
484#define MUSB_FIFO_OFFSET(epnum) \
485 (USB_OFFSET(USB_EP0_FIFO) + ((epnum) * 8))
486
487/* 461/*
488 * Additional Control Registers 462 * Additional Control Registers
489 */ 463 */
diff --git a/drivers/usb/musb/musb_virthub.c b/drivers/usb/musb/musb_virthub.c
index e2d2d8c9891b..b072420e44f5 100644
--- a/drivers/usb/musb/musb_virthub.c
+++ b/drivers/usb/musb/musb_virthub.c
@@ -69,9 +69,10 @@ void musb_host_finish_resume(struct work_struct *work)
69 musb->port1_status |= USB_PORT_STAT_C_SUSPEND << 16; 69 musb->port1_status |= USB_PORT_STAT_C_SUSPEND << 16;
70 usb_hcd_poll_rh_status(musb->hcd); 70 usb_hcd_poll_rh_status(musb->hcd);
71 /* NOTE: it might really be A_WAIT_BCON ... */ 71 /* NOTE: it might really be A_WAIT_BCON ... */
72 musb->xceiv->state = OTG_STATE_A_HOST; 72 musb->xceiv->otg->state = OTG_STATE_A_HOST;
73 73
74 spin_unlock_irqrestore(&musb->lock, flags); 74 spin_unlock_irqrestore(&musb->lock, flags);
75 musb_host_resume_root_hub(musb);
75} 76}
76 77
77void musb_port_suspend(struct musb *musb, bool do_suspend) 78void musb_port_suspend(struct musb *musb, bool do_suspend)
@@ -107,9 +108,9 @@ void musb_port_suspend(struct musb *musb, bool do_suspend)
107 dev_dbg(musb->controller, "Root port suspended, power %02x\n", power); 108 dev_dbg(musb->controller, "Root port suspended, power %02x\n", power);
108 109
109 musb->port1_status |= USB_PORT_STAT_SUSPEND; 110 musb->port1_status |= USB_PORT_STAT_SUSPEND;
110 switch (musb->xceiv->state) { 111 switch (musb->xceiv->otg->state) {
111 case OTG_STATE_A_HOST: 112 case OTG_STATE_A_HOST:
112 musb->xceiv->state = OTG_STATE_A_SUSPEND; 113 musb->xceiv->otg->state = OTG_STATE_A_SUSPEND;
113 musb->is_active = otg->host->b_hnp_enable; 114 musb->is_active = otg->host->b_hnp_enable;
114 if (musb->is_active) 115 if (musb->is_active)
115 mod_timer(&musb->otg_timer, jiffies 116 mod_timer(&musb->otg_timer, jiffies
@@ -118,13 +119,13 @@ void musb_port_suspend(struct musb *musb, bool do_suspend)
118 musb_platform_try_idle(musb, 0); 119 musb_platform_try_idle(musb, 0);
119 break; 120 break;
120 case OTG_STATE_B_HOST: 121 case OTG_STATE_B_HOST:
121 musb->xceiv->state = OTG_STATE_B_WAIT_ACON; 122 musb->xceiv->otg->state = OTG_STATE_B_WAIT_ACON;
122 musb->is_active = otg->host->b_hnp_enable; 123 musb->is_active = otg->host->b_hnp_enable;
123 musb_platform_try_idle(musb, 0); 124 musb_platform_try_idle(musb, 0);
124 break; 125 break;
125 default: 126 default:
126 dev_dbg(musb->controller, "bogus rh suspend? %s\n", 127 dev_dbg(musb->controller, "bogus rh suspend? %s\n",
127 usb_otg_state_string(musb->xceiv->state)); 128 usb_otg_state_string(musb->xceiv->otg->state));
128 } 129 }
129 } else if (power & MUSB_POWER_SUSPENDM) { 130 } else if (power & MUSB_POWER_SUSPENDM) {
130 power &= ~MUSB_POWER_SUSPENDM; 131 power &= ~MUSB_POWER_SUSPENDM;
@@ -145,7 +146,7 @@ void musb_port_reset(struct musb *musb, bool do_reset)
145 u8 power; 146 u8 power;
146 void __iomem *mbase = musb->mregs; 147 void __iomem *mbase = musb->mregs;
147 148
148 if (musb->xceiv->state == OTG_STATE_B_IDLE) { 149 if (musb->xceiv->otg->state == OTG_STATE_B_IDLE) {
149 dev_dbg(musb->controller, "HNP: Returning from HNP; no hub reset from b_idle\n"); 150 dev_dbg(musb->controller, "HNP: Returning from HNP; no hub reset from b_idle\n");
150 musb->port1_status &= ~USB_PORT_STAT_RESET; 151 musb->port1_status &= ~USB_PORT_STAT_RESET;
151 return; 152 return;
@@ -224,24 +225,24 @@ void musb_root_disconnect(struct musb *musb)
224 usb_hcd_poll_rh_status(musb->hcd); 225 usb_hcd_poll_rh_status(musb->hcd);
225 musb->is_active = 0; 226 musb->is_active = 0;
226 227
227 switch (musb->xceiv->state) { 228 switch (musb->xceiv->otg->state) {
228 case OTG_STATE_A_SUSPEND: 229 case OTG_STATE_A_SUSPEND:
229 if (otg->host->b_hnp_enable) { 230 if (otg->host->b_hnp_enable) {
230 musb->xceiv->state = OTG_STATE_A_PERIPHERAL; 231 musb->xceiv->otg->state = OTG_STATE_A_PERIPHERAL;
231 musb->g.is_a_peripheral = 1; 232 musb->g.is_a_peripheral = 1;
232 break; 233 break;
233 } 234 }
234 /* FALLTHROUGH */ 235 /* FALLTHROUGH */
235 case OTG_STATE_A_HOST: 236 case OTG_STATE_A_HOST:
236 musb->xceiv->state = OTG_STATE_A_WAIT_BCON; 237 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON;
237 musb->is_active = 0; 238 musb->is_active = 0;
238 break; 239 break;
239 case OTG_STATE_A_WAIT_VFALL: 240 case OTG_STATE_A_WAIT_VFALL:
240 musb->xceiv->state = OTG_STATE_B_IDLE; 241 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
241 break; 242 break;
242 default: 243 default:
243 dev_dbg(musb->controller, "host disconnect (%s)\n", 244 dev_dbg(musb->controller, "host disconnect (%s)\n",
244 usb_otg_state_string(musb->xceiv->state)); 245 usb_otg_state_string(musb->xceiv->otg->state));
245 } 246 }
246} 247}
247 248
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
index e8e9f9aab203..ab7ec09a8afe 100644
--- a/drivers/usb/musb/musbhsdma.c
+++ b/drivers/usb/musb/musbhsdma.c
@@ -195,6 +195,7 @@ static int dma_channel_abort(struct dma_channel *channel)
195{ 195{
196 struct musb_dma_channel *musb_channel = channel->private_data; 196 struct musb_dma_channel *musb_channel = channel->private_data;
197 void __iomem *mbase = musb_channel->controller->base; 197 void __iomem *mbase = musb_channel->controller->base;
198 struct musb *musb = musb_channel->controller->private_data;
198 199
199 u8 bchannel = musb_channel->idx; 200 u8 bchannel = musb_channel->idx;
200 int offset; 201 int offset;
@@ -202,7 +203,7 @@ static int dma_channel_abort(struct dma_channel *channel)
202 203
203 if (channel->status == MUSB_DMA_STATUS_BUSY) { 204 if (channel->status == MUSB_DMA_STATUS_BUSY) {
204 if (musb_channel->transmit) { 205 if (musb_channel->transmit) {
205 offset = MUSB_EP_OFFSET(musb_channel->epnum, 206 offset = musb->io.ep_offset(musb_channel->epnum,
206 MUSB_TXCSR); 207 MUSB_TXCSR);
207 208
208 /* 209 /*
@@ -215,7 +216,7 @@ static int dma_channel_abort(struct dma_channel *channel)
215 csr &= ~MUSB_TXCSR_DMAMODE; 216 csr &= ~MUSB_TXCSR_DMAMODE;
216 musb_writew(mbase, offset, csr); 217 musb_writew(mbase, offset, csr);
217 } else { 218 } else {
218 offset = MUSB_EP_OFFSET(musb_channel->epnum, 219 offset = musb->io.ep_offset(musb_channel->epnum,
219 MUSB_RXCSR); 220 MUSB_RXCSR);
220 221
221 csr = musb_readw(mbase, offset); 222 csr = musb_readw(mbase, offset);
@@ -326,7 +327,7 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data)
326 (musb_channel->max_packet_sz - 1))) 327 (musb_channel->max_packet_sz - 1)))
327 ) { 328 ) {
328 u8 epnum = musb_channel->epnum; 329 u8 epnum = musb_channel->epnum;
329 int offset = MUSB_EP_OFFSET(epnum, 330 int offset = musb->io.ep_offset(epnum,
330 MUSB_TXCSR); 331 MUSB_TXCSR);
331 u16 txcsr; 332 u16 txcsr;
332 333
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index d369bf1f3936..763649eb4987 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -65,15 +65,15 @@ static void musb_do_idle(unsigned long _musb)
65 65
66 spin_lock_irqsave(&musb->lock, flags); 66 spin_lock_irqsave(&musb->lock, flags);
67 67
68 switch (musb->xceiv->state) { 68 switch (musb->xceiv->otg->state) {
69 case OTG_STATE_A_WAIT_BCON: 69 case OTG_STATE_A_WAIT_BCON:
70 70
71 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); 71 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
72 if (devctl & MUSB_DEVCTL_BDEVICE) { 72 if (devctl & MUSB_DEVCTL_BDEVICE) {
73 musb->xceiv->state = OTG_STATE_B_IDLE; 73 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
74 MUSB_DEV_MODE(musb); 74 MUSB_DEV_MODE(musb);
75 } else { 75 } else {
76 musb->xceiv->state = OTG_STATE_A_IDLE; 76 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
77 MUSB_HST_MODE(musb); 77 MUSB_HST_MODE(musb);
78 } 78 }
79 break; 79 break;
@@ -90,15 +90,15 @@ static void musb_do_idle(unsigned long _musb)
90 musb->port1_status |= USB_PORT_STAT_C_SUSPEND << 16; 90 musb->port1_status |= USB_PORT_STAT_C_SUSPEND << 16;
91 usb_hcd_poll_rh_status(musb->hcd); 91 usb_hcd_poll_rh_status(musb->hcd);
92 /* NOTE: it might really be A_WAIT_BCON ... */ 92 /* NOTE: it might really be A_WAIT_BCON ... */
93 musb->xceiv->state = OTG_STATE_A_HOST; 93 musb->xceiv->otg->state = OTG_STATE_A_HOST;
94 } 94 }
95 break; 95 break;
96 case OTG_STATE_A_HOST: 96 case OTG_STATE_A_HOST:
97 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); 97 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
98 if (devctl & MUSB_DEVCTL_BDEVICE) 98 if (devctl & MUSB_DEVCTL_BDEVICE)
99 musb->xceiv->state = OTG_STATE_B_IDLE; 99 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
100 else 100 else
101 musb->xceiv->state = OTG_STATE_A_WAIT_BCON; 101 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON;
102 default: 102 default:
103 break; 103 break;
104 } 104 }
@@ -116,9 +116,9 @@ static void omap2430_musb_try_idle(struct musb *musb, unsigned long timeout)
116 116
117 /* Never idle if active, or when VBUS timeout is not set as host */ 117 /* Never idle if active, or when VBUS timeout is not set as host */
118 if (musb->is_active || ((musb->a_wait_bcon == 0) 118 if (musb->is_active || ((musb->a_wait_bcon == 0)
119 && (musb->xceiv->state == OTG_STATE_A_WAIT_BCON))) { 119 && (musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON))) {
120 dev_dbg(musb->controller, "%s active, deleting timer\n", 120 dev_dbg(musb->controller, "%s active, deleting timer\n",
121 usb_otg_state_string(musb->xceiv->state)); 121 usb_otg_state_string(musb->xceiv->otg->state));
122 del_timer(&musb_idle_timer); 122 del_timer(&musb_idle_timer);
123 last_timer = jiffies; 123 last_timer = jiffies;
124 return; 124 return;
@@ -135,7 +135,7 @@ static void omap2430_musb_try_idle(struct musb *musb, unsigned long timeout)
135 last_timer = timeout; 135 last_timer = timeout;
136 136
137 dev_dbg(musb->controller, "%s inactive, for idle timer for %lu ms\n", 137 dev_dbg(musb->controller, "%s inactive, for idle timer for %lu ms\n",
138 usb_otg_state_string(musb->xceiv->state), 138 usb_otg_state_string(musb->xceiv->otg->state),
139 (unsigned long)jiffies_to_msecs(timeout - jiffies)); 139 (unsigned long)jiffies_to_msecs(timeout - jiffies));
140 mod_timer(&musb_idle_timer, timeout); 140 mod_timer(&musb_idle_timer, timeout);
141} 141}
@@ -153,7 +153,7 @@ static void omap2430_musb_set_vbus(struct musb *musb, int is_on)
153 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); 153 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
154 154
155 if (is_on) { 155 if (is_on) {
156 if (musb->xceiv->state == OTG_STATE_A_IDLE) { 156 if (musb->xceiv->otg->state == OTG_STATE_A_IDLE) {
157 int loops = 100; 157 int loops = 100;
158 /* start the session */ 158 /* start the session */
159 devctl |= MUSB_DEVCTL_SESSION; 159 devctl |= MUSB_DEVCTL_SESSION;
@@ -162,7 +162,8 @@ static void omap2430_musb_set_vbus(struct musb *musb, int is_on)
162 * Wait for the musb to set as A device to enable the 162 * Wait for the musb to set as A device to enable the
163 * VBUS 163 * VBUS
164 */ 164 */
165 while (musb_readb(musb->mregs, MUSB_DEVCTL) & 0x80) { 165 while (musb_readb(musb->mregs, MUSB_DEVCTL) &
166 MUSB_DEVCTL_BDEVICE) {
166 167
167 mdelay(5); 168 mdelay(5);
168 cpu_relax(); 169 cpu_relax();
@@ -179,7 +180,7 @@ static void omap2430_musb_set_vbus(struct musb *musb, int is_on)
179 } else { 180 } else {
180 musb->is_active = 1; 181 musb->is_active = 1;
181 otg->default_a = 1; 182 otg->default_a = 1;
182 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 183 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
183 devctl |= MUSB_DEVCTL_SESSION; 184 devctl |= MUSB_DEVCTL_SESSION;
184 MUSB_HST_MODE(musb); 185 MUSB_HST_MODE(musb);
185 } 186 }
@@ -191,7 +192,7 @@ static void omap2430_musb_set_vbus(struct musb *musb, int is_on)
191 */ 192 */
192 193
193 otg->default_a = 0; 194 otg->default_a = 0;
194 musb->xceiv->state = OTG_STATE_B_IDLE; 195 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
195 devctl &= ~MUSB_DEVCTL_SESSION; 196 devctl &= ~MUSB_DEVCTL_SESSION;
196 197
197 MUSB_DEV_MODE(musb); 198 MUSB_DEV_MODE(musb);
@@ -200,7 +201,7 @@ static void omap2430_musb_set_vbus(struct musb *musb, int is_on)
200 201
201 dev_dbg(musb->controller, "VBUS %s, devctl %02x " 202 dev_dbg(musb->controller, "VBUS %s, devctl %02x "
202 /* otg %3x conf %08x prcm %08x */ "\n", 203 /* otg %3x conf %08x prcm %08x */ "\n",
203 usb_otg_state_string(musb->xceiv->state), 204 usb_otg_state_string(musb->xceiv->otg->state),
204 musb_readb(musb->mregs, MUSB_DEVCTL)); 205 musb_readb(musb->mregs, MUSB_DEVCTL));
205} 206}
206 207
@@ -265,7 +266,7 @@ static void omap_musb_set_mailbox(struct omap2430_glue *glue)
265 dev_dbg(dev, "ID GND\n"); 266 dev_dbg(dev, "ID GND\n");
266 267
267 otg->default_a = true; 268 otg->default_a = true;
268 musb->xceiv->state = OTG_STATE_A_IDLE; 269 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
269 musb->xceiv->last_event = USB_EVENT_ID; 270 musb->xceiv->last_event = USB_EVENT_ID;
270 if (musb->gadget_driver) { 271 if (musb->gadget_driver) {
271 pm_runtime_get_sync(dev); 272 pm_runtime_get_sync(dev);
@@ -279,7 +280,7 @@ static void omap_musb_set_mailbox(struct omap2430_glue *glue)
279 dev_dbg(dev, "VBUS Connect\n"); 280 dev_dbg(dev, "VBUS Connect\n");
280 281
281 otg->default_a = false; 282 otg->default_a = false;
282 musb->xceiv->state = OTG_STATE_B_IDLE; 283 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
283 musb->xceiv->last_event = USB_EVENT_VBUS; 284 musb->xceiv->last_event = USB_EVENT_VBUS;
284 if (musb->gadget_driver) 285 if (musb->gadget_driver)
285 pm_runtime_get_sync(dev); 286 pm_runtime_get_sync(dev);
@@ -518,10 +519,8 @@ static int omap2430_probe(struct platform_device *pdev)
518 int ret = -ENOMEM; 519 int ret = -ENOMEM;
519 520
520 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL); 521 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL);
521 if (!glue) { 522 if (!glue)
522 dev_err(&pdev->dev, "failed to allocate glue context\n");
523 goto err0; 523 goto err0;
524 }
525 524
526 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO); 525 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO);
527 if (!musb) { 526 if (!musb) {
@@ -543,25 +542,16 @@ static int omap2430_probe(struct platform_device *pdev)
543 struct platform_device *control_pdev; 542 struct platform_device *control_pdev;
544 543
545 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 544 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
546 if (!pdata) { 545 if (!pdata)
547 dev_err(&pdev->dev,
548 "failed to allocate musb platform data\n");
549 goto err2; 546 goto err2;
550 }
551 547
552 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); 548 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
553 if (!data) { 549 if (!data)
554 dev_err(&pdev->dev,
555 "failed to allocate musb board data\n");
556 goto err2; 550 goto err2;
557 }
558 551
559 config = devm_kzalloc(&pdev->dev, sizeof(*config), GFP_KERNEL); 552 config = devm_kzalloc(&pdev->dev, sizeof(*config), GFP_KERNEL);
560 if (!config) { 553 if (!config)
561 dev_err(&pdev->dev,
562 "failed to allocate musb hdrc config\n");
563 goto err2; 554 goto err2;
564 }
565 555
566 of_property_read_u32(np, "mode", (u32 *)&pdata->mode); 556 of_property_read_u32(np, "mode", (u32 *)&pdata->mode);
567 of_property_read_u32(np, "interface-type", 557 of_property_read_u32(np, "interface-type",
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
index 2daa779f1382..3a5ffd575438 100644
--- a/drivers/usb/musb/tusb6010.c
+++ b/drivers/usb/musb/tusb6010.c
@@ -126,6 +126,52 @@ static void tusb_wbus_quirk(struct musb *musb, int enabled)
126 } 126 }
127} 127}
128 128
129static u32 tusb_fifo_offset(u8 epnum)
130{
131 return 0x200 + (epnum * 0x20);
132}
133
134static u32 tusb_ep_offset(u8 epnum, u16 offset)
135{
136 return 0x10 + offset;
137}
138
139/* TUSB mapping: "flat" plus ep0 special cases */
140static void tusb_ep_select(void __iomem *mbase, u8 epnum)
141{
142 musb_writeb(mbase, MUSB_INDEX, epnum);
143}
144
145/*
146 * TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum.
147 */
148static u8 tusb_readb(const void __iomem *addr, unsigned offset)
149{
150 u16 tmp;
151 u8 val;
152
153 tmp = __raw_readw(addr + (offset & ~1));
154 if (offset & 1)
155 val = (tmp >> 8);
156 else
157 val = tmp & 0xff;
158
159 return val;
160}
161
162static void tusb_writeb(void __iomem *addr, unsigned offset, u8 data)
163{
164 u16 tmp;
165
166 tmp = __raw_readw(addr + (offset & ~1));
167 if (offset & 1)
168 tmp = (data << 8) | (tmp & 0xff);
169 else
170 tmp = (tmp & 0xff00) | data;
171
172 __raw_writew(tmp, addr + (offset & ~1));
173}
174
129/* 175/*
130 * TUSB 6010 may use a parallel bus that doesn't support byte ops; 176 * TUSB 6010 may use a parallel bus that doesn't support byte ops;
131 * so both loading and unloading FIFOs need explicit byte counts. 177 * so both loading and unloading FIFOs need explicit byte counts.
@@ -173,7 +219,7 @@ static inline void tusb_fifo_read_unaligned(void __iomem *fifo,
173 } 219 }
174} 220}
175 221
176void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf) 222static void tusb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf)
177{ 223{
178 struct musb *musb = hw_ep->musb; 224 struct musb *musb = hw_ep->musb;
179 void __iomem *ep_conf = hw_ep->conf; 225 void __iomem *ep_conf = hw_ep->conf;
@@ -223,7 +269,7 @@ void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf)
223 tusb_fifo_write_unaligned(fifo, buf, len); 269 tusb_fifo_write_unaligned(fifo, buf, len);
224} 270}
225 271
226void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *buf) 272static void tusb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *buf)
227{ 273{
228 struct musb *musb = hw_ep->musb; 274 struct musb *musb = hw_ep->musb;
229 void __iomem *ep_conf = hw_ep->conf; 275 void __iomem *ep_conf = hw_ep->conf;
@@ -415,13 +461,13 @@ static void musb_do_idle(unsigned long _musb)
415 461
416 spin_lock_irqsave(&musb->lock, flags); 462 spin_lock_irqsave(&musb->lock, flags);
417 463
418 switch (musb->xceiv->state) { 464 switch (musb->xceiv->otg->state) {
419 case OTG_STATE_A_WAIT_BCON: 465 case OTG_STATE_A_WAIT_BCON:
420 if ((musb->a_wait_bcon != 0) 466 if ((musb->a_wait_bcon != 0)
421 && (musb->idle_timeout == 0 467 && (musb->idle_timeout == 0
422 || time_after(jiffies, musb->idle_timeout))) { 468 || time_after(jiffies, musb->idle_timeout))) {
423 dev_dbg(musb->controller, "Nothing connected %s, turning off VBUS\n", 469 dev_dbg(musb->controller, "Nothing connected %s, turning off VBUS\n",
424 usb_otg_state_string(musb->xceiv->state)); 470 usb_otg_state_string(musb->xceiv->otg->state));
425 } 471 }
426 /* FALLTHROUGH */ 472 /* FALLTHROUGH */
427 case OTG_STATE_A_IDLE: 473 case OTG_STATE_A_IDLE:
@@ -474,9 +520,9 @@ static void tusb_musb_try_idle(struct musb *musb, unsigned long timeout)
474 520
475 /* Never idle if active, or when VBUS timeout is not set as host */ 521 /* Never idle if active, or when VBUS timeout is not set as host */
476 if (musb->is_active || ((musb->a_wait_bcon == 0) 522 if (musb->is_active || ((musb->a_wait_bcon == 0)
477 && (musb->xceiv->state == OTG_STATE_A_WAIT_BCON))) { 523 && (musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON))) {
478 dev_dbg(musb->controller, "%s active, deleting timer\n", 524 dev_dbg(musb->controller, "%s active, deleting timer\n",
479 usb_otg_state_string(musb->xceiv->state)); 525 usb_otg_state_string(musb->xceiv->otg->state));
480 del_timer(&musb_idle_timer); 526 del_timer(&musb_idle_timer);
481 last_timer = jiffies; 527 last_timer = jiffies;
482 return; 528 return;
@@ -493,7 +539,7 @@ static void tusb_musb_try_idle(struct musb *musb, unsigned long timeout)
493 last_timer = timeout; 539 last_timer = timeout;
494 540
495 dev_dbg(musb->controller, "%s inactive, for idle timer for %lu ms\n", 541 dev_dbg(musb->controller, "%s inactive, for idle timer for %lu ms\n",
496 usb_otg_state_string(musb->xceiv->state), 542 usb_otg_state_string(musb->xceiv->otg->state),
497 (unsigned long)jiffies_to_msecs(timeout - jiffies)); 543 (unsigned long)jiffies_to_msecs(timeout - jiffies));
498 mod_timer(&musb_idle_timer, timeout); 544 mod_timer(&musb_idle_timer, timeout);
499} 545}
@@ -524,7 +570,7 @@ static void tusb_musb_set_vbus(struct musb *musb, int is_on)
524 if (is_on) { 570 if (is_on) {
525 timer = OTG_TIMER_MS(OTG_TIME_A_WAIT_VRISE); 571 timer = OTG_TIMER_MS(OTG_TIME_A_WAIT_VRISE);
526 otg->default_a = 1; 572 otg->default_a = 1;
527 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 573 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
528 devctl |= MUSB_DEVCTL_SESSION; 574 devctl |= MUSB_DEVCTL_SESSION;
529 575
530 conf |= TUSB_DEV_CONF_USB_HOST_MODE; 576 conf |= TUSB_DEV_CONF_USB_HOST_MODE;
@@ -537,16 +583,16 @@ static void tusb_musb_set_vbus(struct musb *musb, int is_on)
537 /* If ID pin is grounded, we want to be a_idle */ 583 /* If ID pin is grounded, we want to be a_idle */
538 otg_stat = musb_readl(tbase, TUSB_DEV_OTG_STAT); 584 otg_stat = musb_readl(tbase, TUSB_DEV_OTG_STAT);
539 if (!(otg_stat & TUSB_DEV_OTG_STAT_ID_STATUS)) { 585 if (!(otg_stat & TUSB_DEV_OTG_STAT_ID_STATUS)) {
540 switch (musb->xceiv->state) { 586 switch (musb->xceiv->otg->state) {
541 case OTG_STATE_A_WAIT_VRISE: 587 case OTG_STATE_A_WAIT_VRISE:
542 case OTG_STATE_A_WAIT_BCON: 588 case OTG_STATE_A_WAIT_BCON:
543 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; 589 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VFALL;
544 break; 590 break;
545 case OTG_STATE_A_WAIT_VFALL: 591 case OTG_STATE_A_WAIT_VFALL:
546 musb->xceiv->state = OTG_STATE_A_IDLE; 592 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
547 break; 593 break;
548 default: 594 default:
549 musb->xceiv->state = OTG_STATE_A_IDLE; 595 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
550 } 596 }
551 musb->is_active = 0; 597 musb->is_active = 0;
552 otg->default_a = 1; 598 otg->default_a = 1;
@@ -554,7 +600,7 @@ static void tusb_musb_set_vbus(struct musb *musb, int is_on)
554 } else { 600 } else {
555 musb->is_active = 0; 601 musb->is_active = 0;
556 otg->default_a = 0; 602 otg->default_a = 0;
557 musb->xceiv->state = OTG_STATE_B_IDLE; 603 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
558 MUSB_DEV_MODE(musb); 604 MUSB_DEV_MODE(musb);
559 } 605 }
560 606
@@ -569,7 +615,7 @@ static void tusb_musb_set_vbus(struct musb *musb, int is_on)
569 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); 615 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
570 616
571 dev_dbg(musb->controller, "VBUS %s, devctl %02x otg %3x conf %08x prcm %08x\n", 617 dev_dbg(musb->controller, "VBUS %s, devctl %02x otg %3x conf %08x prcm %08x\n",
572 usb_otg_state_string(musb->xceiv->state), 618 usb_otg_state_string(musb->xceiv->otg->state),
573 musb_readb(musb->mregs, MUSB_DEVCTL), 619 musb_readb(musb->mregs, MUSB_DEVCTL),
574 musb_readl(tbase, TUSB_DEV_OTG_STAT), 620 musb_readl(tbase, TUSB_DEV_OTG_STAT),
575 conf, prcm); 621 conf, prcm);
@@ -668,23 +714,23 @@ tusb_otg_ints(struct musb *musb, u32 int_src, void __iomem *tbase)
668 714
669 if (otg_stat & TUSB_DEV_OTG_STAT_SESS_END) { 715 if (otg_stat & TUSB_DEV_OTG_STAT_SESS_END) {
670 dev_dbg(musb->controller, "Forcing disconnect (no interrupt)\n"); 716 dev_dbg(musb->controller, "Forcing disconnect (no interrupt)\n");
671 if (musb->xceiv->state != OTG_STATE_B_IDLE) { 717 if (musb->xceiv->otg->state != OTG_STATE_B_IDLE) {
672 /* INTR_DISCONNECT can hide... */ 718 /* INTR_DISCONNECT can hide... */
673 musb->xceiv->state = OTG_STATE_B_IDLE; 719 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
674 musb->int_usb |= MUSB_INTR_DISCONNECT; 720 musb->int_usb |= MUSB_INTR_DISCONNECT;
675 } 721 }
676 musb->is_active = 0; 722 musb->is_active = 0;
677 } 723 }
678 dev_dbg(musb->controller, "vbus change, %s, otg %03x\n", 724 dev_dbg(musb->controller, "vbus change, %s, otg %03x\n",
679 usb_otg_state_string(musb->xceiv->state), otg_stat); 725 usb_otg_state_string(musb->xceiv->otg->state), otg_stat);
680 idle_timeout = jiffies + (1 * HZ); 726 idle_timeout = jiffies + (1 * HZ);
681 schedule_work(&musb->irq_work); 727 schedule_work(&musb->irq_work);
682 728
683 } else /* A-dev state machine */ { 729 } else /* A-dev state machine */ {
684 dev_dbg(musb->controller, "vbus change, %s, otg %03x\n", 730 dev_dbg(musb->controller, "vbus change, %s, otg %03x\n",
685 usb_otg_state_string(musb->xceiv->state), otg_stat); 731 usb_otg_state_string(musb->xceiv->otg->state), otg_stat);
686 732
687 switch (musb->xceiv->state) { 733 switch (musb->xceiv->otg->state) {
688 case OTG_STATE_A_IDLE: 734 case OTG_STATE_A_IDLE:
689 dev_dbg(musb->controller, "Got SRP, turning on VBUS\n"); 735 dev_dbg(musb->controller, "Got SRP, turning on VBUS\n");
690 musb_platform_set_vbus(musb, 1); 736 musb_platform_set_vbus(musb, 1);
@@ -731,9 +777,9 @@ tusb_otg_ints(struct musb *musb, u32 int_src, void __iomem *tbase)
731 u8 devctl; 777 u8 devctl;
732 778
733 dev_dbg(musb->controller, "%s timer, %03x\n", 779 dev_dbg(musb->controller, "%s timer, %03x\n",
734 usb_otg_state_string(musb->xceiv->state), otg_stat); 780 usb_otg_state_string(musb->xceiv->otg->state), otg_stat);
735 781
736 switch (musb->xceiv->state) { 782 switch (musb->xceiv->otg->state) {
737 case OTG_STATE_A_WAIT_VRISE: 783 case OTG_STATE_A_WAIT_VRISE:
738 /* VBUS has probably been valid for a while now, 784 /* VBUS has probably been valid for a while now,
739 * but may well have bounced out of range a bit 785 * but may well have bounced out of range a bit
@@ -745,7 +791,7 @@ tusb_otg_ints(struct musb *musb, u32 int_src, void __iomem *tbase)
745 dev_dbg(musb->controller, "devctl %02x\n", devctl); 791 dev_dbg(musb->controller, "devctl %02x\n", devctl);
746 break; 792 break;
747 } 793 }
748 musb->xceiv->state = OTG_STATE_A_WAIT_BCON; 794 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON;
749 musb->is_active = 0; 795 musb->is_active = 0;
750 idle_timeout = jiffies 796 idle_timeout = jiffies
751 + msecs_to_jiffies(musb->a_wait_bcon); 797 + msecs_to_jiffies(musb->a_wait_bcon);
@@ -1135,9 +1181,17 @@ static int tusb_musb_exit(struct musb *musb)
1135} 1181}
1136 1182
1137static const struct musb_platform_ops tusb_ops = { 1183static const struct musb_platform_ops tusb_ops = {
1184 .quirks = MUSB_IN_TUSB,
1138 .init = tusb_musb_init, 1185 .init = tusb_musb_init,
1139 .exit = tusb_musb_exit, 1186 .exit = tusb_musb_exit,
1140 1187
1188 .ep_offset = tusb_ep_offset,
1189 .ep_select = tusb_ep_select,
1190 .fifo_offset = tusb_fifo_offset,
1191 .readb = tusb_readb,
1192 .writeb = tusb_writeb,
1193 .read_fifo = tusb_read_fifo,
1194 .write_fifo = tusb_write_fifo,
1141 .enable = tusb_musb_enable, 1195 .enable = tusb_musb_enable,
1142 .disable = tusb_musb_disable, 1196 .disable = tusb_musb_disable,
1143 1197
@@ -1164,10 +1218,8 @@ static int tusb_probe(struct platform_device *pdev)
1164 int ret; 1218 int ret;
1165 1219
1166 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL); 1220 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL);
1167 if (!glue) { 1221 if (!glue)
1168 dev_err(&pdev->dev, "failed to allocate glue context\n");
1169 return -ENOMEM; 1222 return -ENOMEM;
1170 }
1171 1223
1172 glue->dev = &pdev->dev; 1224 glue->dev = &pdev->dev;
1173 1225
diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c
index dc666e96f45f..abf72728825f 100644
--- a/drivers/usb/musb/ux500.c
+++ b/drivers/usb/musb/ux500.c
@@ -56,7 +56,7 @@ static void ux500_musb_set_vbus(struct musb *musb, int is_on)
56 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); 56 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
57 57
58 if (is_on) { 58 if (is_on) {
59 if (musb->xceiv->state == OTG_STATE_A_IDLE) { 59 if (musb->xceiv->otg->state == OTG_STATE_A_IDLE) {
60 /* start the session */ 60 /* start the session */
61 devctl |= MUSB_DEVCTL_SESSION; 61 devctl |= MUSB_DEVCTL_SESSION;
62 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); 62 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
@@ -76,7 +76,7 @@ static void ux500_musb_set_vbus(struct musb *musb, int is_on)
76 } else { 76 } else {
77 musb->is_active = 1; 77 musb->is_active = 1;
78 musb->xceiv->otg->default_a = 1; 78 musb->xceiv->otg->default_a = 1;
79 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; 79 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
80 devctl |= MUSB_DEVCTL_SESSION; 80 devctl |= MUSB_DEVCTL_SESSION;
81 MUSB_HST_MODE(musb); 81 MUSB_HST_MODE(musb);
82 } 82 }
@@ -102,7 +102,7 @@ static void ux500_musb_set_vbus(struct musb *musb, int is_on)
102 mdelay(200); 102 mdelay(200);
103 103
104 dev_dbg(musb->controller, "VBUS %s, devctl %02x\n", 104 dev_dbg(musb->controller, "VBUS %s, devctl %02x\n",
105 usb_otg_state_string(musb->xceiv->state), 105 usb_otg_state_string(musb->xceiv->otg->state),
106 musb_readb(musb->mregs, MUSB_DEVCTL)); 106 musb_readb(musb->mregs, MUSB_DEVCTL));
107} 107}
108 108
@@ -112,7 +112,7 @@ static int musb_otg_notifications(struct notifier_block *nb,
112 struct musb *musb = container_of(nb, struct musb, nb); 112 struct musb *musb = container_of(nb, struct musb, nb);
113 113
114 dev_dbg(musb->controller, "musb_otg_notifications %ld %s\n", 114 dev_dbg(musb->controller, "musb_otg_notifications %ld %s\n",
115 event, usb_otg_state_string(musb->xceiv->state)); 115 event, usb_otg_state_string(musb->xceiv->otg->state));
116 116
117 switch (event) { 117 switch (event) {
118 case UX500_MUSB_ID: 118 case UX500_MUSB_ID:
@@ -127,7 +127,7 @@ static int musb_otg_notifications(struct notifier_block *nb,
127 if (is_host_active(musb)) 127 if (is_host_active(musb))
128 ux500_musb_set_vbus(musb, 0); 128 ux500_musb_set_vbus(musb, 0);
129 else 129 else
130 musb->xceiv->state = OTG_STATE_B_IDLE; 130 musb->xceiv->otg->state = OTG_STATE_B_IDLE;
131 break; 131 break;
132 default: 132 default:
133 dev_dbg(musb->controller, "ID float\n"); 133 dev_dbg(musb->controller, "ID float\n");
@@ -188,8 +188,10 @@ static int ux500_musb_exit(struct musb *musb)
188} 188}
189 189
190static const struct musb_platform_ops ux500_ops = { 190static const struct musb_platform_ops ux500_ops = {
191 .quirks = MUSB_INDEXED_EP,
191 .init = ux500_musb_init, 192 .init = ux500_musb_init,
192 .exit = ux500_musb_exit, 193 .exit = ux500_musb_exit,
194 .fifo_mode = 5,
193 195
194 .set_vbus = ux500_musb_set_vbus, 196 .set_vbus = ux500_musb_set_vbus,
195}; 197};
@@ -247,10 +249,8 @@ static int ux500_probe(struct platform_device *pdev)
247 } 249 }
248 250
249 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL); 251 glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL);
250 if (!glue) { 252 if (!glue)
251 dev_err(&pdev->dev, "failed to allocate glue context\n");
252 goto err0; 253 goto err0;
253 }
254 254
255 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO); 255 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO);
256 if (!musb) { 256 if (!musb) {
diff --git a/drivers/usb/musb/ux500_dma.c b/drivers/usb/musb/ux500_dma.c
index 221faed9f074..e93845c26bdb 100644
--- a/drivers/usb/musb/ux500_dma.c
+++ b/drivers/usb/musb/ux500_dma.c
@@ -91,9 +91,9 @@ static bool ux500_configure_channel(struct dma_channel *channel,
91 struct scatterlist sg; 91 struct scatterlist sg;
92 struct dma_slave_config slave_conf; 92 struct dma_slave_config slave_conf;
93 enum dma_slave_buswidth addr_width; 93 enum dma_slave_buswidth addr_width;
94 dma_addr_t usb_fifo_addr = (MUSB_FIFO_OFFSET(hw_ep->epnum) +
95 ux500_channel->controller->phy_base);
96 struct musb *musb = ux500_channel->controller->private_data; 94 struct musb *musb = ux500_channel->controller->private_data;
95 dma_addr_t usb_fifo_addr = (musb->io.fifo_offset(hw_ep->epnum) +
96 ux500_channel->controller->phy_base);
97 97
98 dev_dbg(musb->controller, 98 dev_dbg(musb->controller,
99 "packet_sz=%d, mode=%d, dma_addr=0x%llx, len=%d is_tx=%d\n", 99 "packet_sz=%d, mode=%d, dma_addr=0x%llx, len=%d is_tx=%d\n",
@@ -121,8 +121,7 @@ static bool ux500_configure_channel(struct dma_channel *channel,
121 slave_conf.dst_maxburst = 16; 121 slave_conf.dst_maxburst = 16;
122 slave_conf.device_fc = false; 122 slave_conf.device_fc = false;
123 123
124 dma_chan->device->device_control(dma_chan, DMA_SLAVE_CONFIG, 124 dmaengine_slave_config(dma_chan, &slave_conf);
125 (unsigned long) &slave_conf);
126 125
127 dma_desc = dmaengine_prep_slave_sg(dma_chan, &sg, 1, direction, 126 dma_desc = dmaengine_prep_slave_sg(dma_chan, &sg, 1, direction,
128 DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 127 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
@@ -246,9 +245,7 @@ static int ux500_dma_channel_abort(struct dma_channel *channel)
246 musb_writew(epio, MUSB_RXCSR, csr); 245 musb_writew(epio, MUSB_RXCSR, csr);
247 } 246 }
248 247
249 ux500_channel->dma_chan->device-> 248 dmaengine_terminate_all(ux500_channel->dma_chan);
250 device_control(ux500_channel->dma_chan,
251 DMA_TERMINATE_ALL, 0);
252 channel->status = MUSB_DMA_STATUS_FREE; 249 channel->status = MUSB_DMA_STATUS_FREE;
253 } 250 }
254 return 0; 251 return 0;
diff --git a/drivers/usb/phy/phy-ab8500-usb.c b/drivers/usb/phy/phy-ab8500-usb.c
index 11ab2c45e462..8cd7d193c2ca 100644
--- a/drivers/usb/phy/phy-ab8500-usb.c
+++ b/drivers/usb/phy/phy-ab8500-usb.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * drivers/usb/otg/ab8500_usb.c
3 *
4 * USB transceiver driver for AB8500 family chips 2 * USB transceiver driver for AB8500 family chips
5 * 3 *
6 * Copyright (C) 2010-2013 ST-Ericsson AB 4 * Copyright (C) 2010-2013 ST-Ericsson AB
@@ -446,7 +444,8 @@ static int ab9540_usb_link_status_update(struct ab8500_usb *ab,
446 if (event != UX500_MUSB_RIDB) 444 if (event != UX500_MUSB_RIDB)
447 event = UX500_MUSB_NONE; 445 event = UX500_MUSB_NONE;
448 /* Fallback to default B_IDLE as nothing is connected. */ 446 /* Fallback to default B_IDLE as nothing is connected. */
449 ab->phy.state = OTG_STATE_B_IDLE; 447 ab->phy.otg->state = OTG_STATE_B_IDLE;
448 usb_phy_set_event(&ab->phy, USB_EVENT_NONE);
450 break; 449 break;
451 450
452 case USB_LINK_ACA_RID_C_NM_9540: 451 case USB_LINK_ACA_RID_C_NM_9540:
@@ -461,12 +460,14 @@ static int ab9540_usb_link_status_update(struct ab8500_usb *ab,
461 ab8500_usb_peri_phy_en(ab); 460 ab8500_usb_peri_phy_en(ab);
462 atomic_notifier_call_chain(&ab->phy.notifier, 461 atomic_notifier_call_chain(&ab->phy.notifier,
463 UX500_MUSB_PREPARE, &ab->vbus_draw); 462 UX500_MUSB_PREPARE, &ab->vbus_draw);
463 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED);
464 } 464 }
465 if (ab->mode == USB_IDLE) { 465 if (ab->mode == USB_IDLE) {
466 ab->mode = USB_PERIPHERAL; 466 ab->mode = USB_PERIPHERAL;
467 ab8500_usb_peri_phy_en(ab); 467 ab8500_usb_peri_phy_en(ab);
468 atomic_notifier_call_chain(&ab->phy.notifier, 468 atomic_notifier_call_chain(&ab->phy.notifier,
469 UX500_MUSB_PREPARE, &ab->vbus_draw); 469 UX500_MUSB_PREPARE, &ab->vbus_draw);
470 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED);
470 } 471 }
471 if (event != UX500_MUSB_RIDC) 472 if (event != UX500_MUSB_RIDC)
472 event = UX500_MUSB_VBUS; 473 event = UX500_MUSB_VBUS;
@@ -502,6 +503,7 @@ static int ab9540_usb_link_status_update(struct ab8500_usb *ab,
502 event = UX500_MUSB_CHARGER; 503 event = UX500_MUSB_CHARGER;
503 atomic_notifier_call_chain(&ab->phy.notifier, 504 atomic_notifier_call_chain(&ab->phy.notifier,
504 event, &ab->vbus_draw); 505 event, &ab->vbus_draw);
506 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER);
505 break; 507 break;
506 508
507 case USB_LINK_PHYEN_NO_VBUS_NO_IDGND_9540: 509 case USB_LINK_PHYEN_NO_VBUS_NO_IDGND_9540:
@@ -526,6 +528,7 @@ static int ab9540_usb_link_status_update(struct ab8500_usb *ab,
526 ab->mode = USB_IDLE; 528 ab->mode = USB_IDLE;
527 ab->phy.otg->default_a = false; 529 ab->phy.otg->default_a = false;
528 ab->vbus_draw = 0; 530 ab->vbus_draw = 0;
531 usb_phy_set_event(&ab->phy, USB_EVENT_NONE);
529 } 532 }
530 } 533 }
531 break; 534 break;
@@ -584,7 +587,8 @@ static int ab8540_usb_link_status_update(struct ab8500_usb *ab,
584 * Fallback to default B_IDLE as nothing 587 * Fallback to default B_IDLE as nothing
585 * is connected 588 * is connected
586 */ 589 */
587 ab->phy.state = OTG_STATE_B_IDLE; 590 ab->phy.otg->state = OTG_STATE_B_IDLE;
591 usb_phy_set_event(&ab->phy, USB_EVENT_NONE);
588 break; 592 break;
589 593
590 case USB_LINK_ACA_RID_C_NM_8540: 594 case USB_LINK_ACA_RID_C_NM_8540:
@@ -598,6 +602,7 @@ static int ab8540_usb_link_status_update(struct ab8500_usb *ab,
598 ab8500_usb_peri_phy_en(ab); 602 ab8500_usb_peri_phy_en(ab);
599 atomic_notifier_call_chain(&ab->phy.notifier, 603 atomic_notifier_call_chain(&ab->phy.notifier,
600 UX500_MUSB_PREPARE, &ab->vbus_draw); 604 UX500_MUSB_PREPARE, &ab->vbus_draw);
605 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED);
601 } 606 }
602 if (event != UX500_MUSB_RIDC) 607 if (event != UX500_MUSB_RIDC)
603 event = UX500_MUSB_VBUS; 608 event = UX500_MUSB_VBUS;
@@ -626,6 +631,7 @@ static int ab8540_usb_link_status_update(struct ab8500_usb *ab,
626 event = UX500_MUSB_CHARGER; 631 event = UX500_MUSB_CHARGER;
627 atomic_notifier_call_chain(&ab->phy.notifier, 632 atomic_notifier_call_chain(&ab->phy.notifier,
628 event, &ab->vbus_draw); 633 event, &ab->vbus_draw);
634 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER);
629 break; 635 break;
630 636
631 case USB_LINK_PHYEN_NO_VBUS_NO_IDGND_8540: 637 case USB_LINK_PHYEN_NO_VBUS_NO_IDGND_8540:
@@ -648,6 +654,7 @@ static int ab8540_usb_link_status_update(struct ab8500_usb *ab,
648 ab->mode = USB_IDLE; 654 ab->mode = USB_IDLE;
649 ab->phy.otg->default_a = false; 655 ab->phy.otg->default_a = false;
650 ab->vbus_draw = 0; 656 ab->vbus_draw = 0;
657 usb_phy_set_event(&ab->phy, USB_EVENT_NONE);
651 } 658 }
652 break; 659 break;
653 660
@@ -693,7 +700,8 @@ static int ab8505_usb_link_status_update(struct ab8500_usb *ab,
693 * Fallback to default B_IDLE as nothing 700 * Fallback to default B_IDLE as nothing
694 * is connected 701 * is connected
695 */ 702 */
696 ab->phy.state = OTG_STATE_B_IDLE; 703 ab->phy.otg->state = OTG_STATE_B_IDLE;
704 usb_phy_set_event(&ab->phy, USB_EVENT_NONE);
697 break; 705 break;
698 706
699 case USB_LINK_ACA_RID_C_NM_8505: 707 case USB_LINK_ACA_RID_C_NM_8505:
@@ -707,6 +715,7 @@ static int ab8505_usb_link_status_update(struct ab8500_usb *ab,
707 ab8500_usb_peri_phy_en(ab); 715 ab8500_usb_peri_phy_en(ab);
708 atomic_notifier_call_chain(&ab->phy.notifier, 716 atomic_notifier_call_chain(&ab->phy.notifier,
709 UX500_MUSB_PREPARE, &ab->vbus_draw); 717 UX500_MUSB_PREPARE, &ab->vbus_draw);
718 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED);
710 } 719 }
711 if (event != UX500_MUSB_RIDC) 720 if (event != UX500_MUSB_RIDC)
712 event = UX500_MUSB_VBUS; 721 event = UX500_MUSB_VBUS;
@@ -734,6 +743,7 @@ static int ab8505_usb_link_status_update(struct ab8500_usb *ab,
734 event = UX500_MUSB_CHARGER; 743 event = UX500_MUSB_CHARGER;
735 atomic_notifier_call_chain(&ab->phy.notifier, 744 atomic_notifier_call_chain(&ab->phy.notifier,
736 event, &ab->vbus_draw); 745 event, &ab->vbus_draw);
746 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER);
737 break; 747 break;
738 748
739 default: 749 default:
@@ -776,7 +786,8 @@ static int ab8500_usb_link_status_update(struct ab8500_usb *ab,
776 if (event != UX500_MUSB_RIDB) 786 if (event != UX500_MUSB_RIDB)
777 event = UX500_MUSB_NONE; 787 event = UX500_MUSB_NONE;
778 /* Fallback to default B_IDLE as nothing is connected */ 788 /* Fallback to default B_IDLE as nothing is connected */
779 ab->phy.state = OTG_STATE_B_IDLE; 789 ab->phy.otg->state = OTG_STATE_B_IDLE;
790 usb_phy_set_event(&ab->phy, USB_EVENT_NONE);
780 break; 791 break;
781 792
782 case USB_LINK_ACA_RID_C_NM_8500: 793 case USB_LINK_ACA_RID_C_NM_8500:
@@ -794,6 +805,7 @@ static int ab8500_usb_link_status_update(struct ab8500_usb *ab,
794 ab8500_usb_peri_phy_en(ab); 805 ab8500_usb_peri_phy_en(ab);
795 atomic_notifier_call_chain(&ab->phy.notifier, 806 atomic_notifier_call_chain(&ab->phy.notifier,
796 UX500_MUSB_PREPARE, &ab->vbus_draw); 807 UX500_MUSB_PREPARE, &ab->vbus_draw);
808 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED);
797 } 809 }
798 if (event != UX500_MUSB_RIDC) 810 if (event != UX500_MUSB_RIDC)
799 event = UX500_MUSB_VBUS; 811 event = UX500_MUSB_VBUS;
@@ -820,6 +832,7 @@ static int ab8500_usb_link_status_update(struct ab8500_usb *ab,
820 event = UX500_MUSB_CHARGER; 832 event = UX500_MUSB_CHARGER;
821 atomic_notifier_call_chain(&ab->phy.notifier, 833 atomic_notifier_call_chain(&ab->phy.notifier,
822 event, &ab->vbus_draw); 834 event, &ab->vbus_draw);
835 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER);
823 break; 836 break;
824 837
825 case USB_LINK_RESERVED_8500: 838 case USB_LINK_RESERVED_8500:
@@ -1056,7 +1069,7 @@ static int ab8500_usb_set_peripheral(struct usb_otg *otg,
1056 if (!otg) 1069 if (!otg)
1057 return -ENODEV; 1070 return -ENODEV;
1058 1071
1059 ab = phy_to_ab(otg->phy); 1072 ab = phy_to_ab(otg->usb_phy);
1060 1073
1061 ab->phy.otg->gadget = gadget; 1074 ab->phy.otg->gadget = gadget;
1062 1075
@@ -1080,7 +1093,7 @@ static int ab8500_usb_set_host(struct usb_otg *otg, struct usb_bus *host)
1080 if (!otg) 1093 if (!otg)
1081 return -ENODEV; 1094 return -ENODEV;
1082 1095
1083 ab = phy_to_ab(otg->phy); 1096 ab = phy_to_ab(otg->usb_phy);
1084 1097
1085 ab->phy.otg->host = host; 1098 ab->phy.otg->host = host;
1086 1099
@@ -1380,9 +1393,9 @@ static int ab8500_usb_probe(struct platform_device *pdev)
1380 ab->phy.label = "ab8500"; 1393 ab->phy.label = "ab8500";
1381 ab->phy.set_suspend = ab8500_usb_set_suspend; 1394 ab->phy.set_suspend = ab8500_usb_set_suspend;
1382 ab->phy.set_power = ab8500_usb_set_power; 1395 ab->phy.set_power = ab8500_usb_set_power;
1383 ab->phy.state = OTG_STATE_UNDEFINED; 1396 ab->phy.otg->state = OTG_STATE_UNDEFINED;
1384 1397
1385 otg->phy = &ab->phy; 1398 otg->usb_phy = &ab->phy;
1386 otg->set_host = ab8500_usb_set_host; 1399 otg->set_host = ab8500_usb_set_host;
1387 otg->set_peripheral = ab8500_usb_set_peripheral; 1400 otg->set_peripheral = ab8500_usb_set_peripheral;
1388 1401
diff --git a/drivers/usb/phy/phy-am335x-control.c b/drivers/usb/phy/phy-am335x-control.c
index 35b6083b7999..2e923c581809 100644
--- a/drivers/usb/phy/phy-am335x-control.c
+++ b/drivers/usb/phy/phy-am335x-control.c
@@ -147,10 +147,8 @@ static int am335x_control_usb_probe(struct platform_device *pdev)
147 phy_ctrl = of_id->data; 147 phy_ctrl = of_id->data;
148 148
149 ctrl_usb = devm_kzalloc(&pdev->dev, sizeof(*ctrl_usb), GFP_KERNEL); 149 ctrl_usb = devm_kzalloc(&pdev->dev, sizeof(*ctrl_usb), GFP_KERNEL);
150 if (!ctrl_usb) { 150 if (!ctrl_usb)
151 dev_err(&pdev->dev, "unable to alloc memory for control usb\n");
152 return -ENOMEM; 151 return -ENOMEM;
153 }
154 152
155 ctrl_usb->dev = &pdev->dev; 153 ctrl_usb->dev = &pdev->dev;
156 154
diff --git a/drivers/usb/phy/phy-fsl-usb.c b/drivers/usb/phy/phy-fsl-usb.c
index f1ea5990a50a..ab38aa32a6c1 100644
--- a/drivers/usb/phy/phy-fsl-usb.c
+++ b/drivers/usb/phy/phy-fsl-usb.c
@@ -274,7 +274,7 @@ void b_srp_end(unsigned long foo)
274 fsl_otg_dischrg_vbus(0); 274 fsl_otg_dischrg_vbus(0);
275 srp_wait_done = 1; 275 srp_wait_done = 1;
276 276
277 if ((fsl_otg_dev->phy.state == OTG_STATE_B_SRP_INIT) && 277 if ((fsl_otg_dev->phy.otg->state == OTG_STATE_B_SRP_INIT) &&
278 fsl_otg_dev->fsm.b_sess_vld) 278 fsl_otg_dev->fsm.b_sess_vld)
279 fsl_otg_dev->fsm.b_srp_done = 1; 279 fsl_otg_dev->fsm.b_srp_done = 1;
280} 280}
@@ -499,7 +499,8 @@ int fsl_otg_start_host(struct otg_fsm *fsm, int on)
499{ 499{
500 struct usb_otg *otg = fsm->otg; 500 struct usb_otg *otg = fsm->otg;
501 struct device *dev; 501 struct device *dev;
502 struct fsl_otg *otg_dev = container_of(otg->phy, struct fsl_otg, phy); 502 struct fsl_otg *otg_dev =
503 container_of(otg->usb_phy, struct fsl_otg, phy);
503 u32 retval = 0; 504 u32 retval = 0;
504 505
505 if (!otg->host) 506 if (!otg->host)
@@ -594,7 +595,7 @@ static int fsl_otg_set_host(struct usb_otg *otg, struct usb_bus *host)
594 if (!otg) 595 if (!otg)
595 return -ENODEV; 596 return -ENODEV;
596 597
597 otg_dev = container_of(otg->phy, struct fsl_otg, phy); 598 otg_dev = container_of(otg->usb_phy, struct fsl_otg, phy);
598 if (otg_dev != fsl_otg_dev) 599 if (otg_dev != fsl_otg_dev)
599 return -ENODEV; 600 return -ENODEV;
600 601
@@ -623,7 +624,7 @@ static int fsl_otg_set_host(struct usb_otg *otg, struct usb_bus *host)
623 /* Mini-A cable connected */ 624 /* Mini-A cable connected */
624 struct otg_fsm *fsm = &otg_dev->fsm; 625 struct otg_fsm *fsm = &otg_dev->fsm;
625 626
626 otg->phy->state = OTG_STATE_UNDEFINED; 627 otg->state = OTG_STATE_UNDEFINED;
627 fsm->protocol = PROTO_UNDEF; 628 fsm->protocol = PROTO_UNDEF;
628 } 629 }
629 } 630 }
@@ -644,7 +645,7 @@ static int fsl_otg_set_peripheral(struct usb_otg *otg,
644 if (!otg) 645 if (!otg)
645 return -ENODEV; 646 return -ENODEV;
646 647
647 otg_dev = container_of(otg->phy, struct fsl_otg, phy); 648 otg_dev = container_of(otg->usb_phy, struct fsl_otg, phy);
648 VDBG("otg_dev 0x%x\n", (int)otg_dev); 649 VDBG("otg_dev 0x%x\n", (int)otg_dev);
649 VDBG("fsl_otg_dev 0x%x\n", (int)fsl_otg_dev); 650 VDBG("fsl_otg_dev 0x%x\n", (int)fsl_otg_dev);
650 if (otg_dev != fsl_otg_dev) 651 if (otg_dev != fsl_otg_dev)
@@ -681,7 +682,7 @@ static int fsl_otg_set_power(struct usb_phy *phy, unsigned mA)
681{ 682{
682 if (!fsl_otg_dev) 683 if (!fsl_otg_dev)
683 return -ENODEV; 684 return -ENODEV;
684 if (phy->state == OTG_STATE_B_PERIPHERAL) 685 if (phy->otg->state == OTG_STATE_B_PERIPHERAL)
685 pr_info("FSL OTG: Draw %d mA\n", mA); 686 pr_info("FSL OTG: Draw %d mA\n", mA);
686 687
687 return 0; 688 return 0;
@@ -714,10 +715,10 @@ static int fsl_otg_start_srp(struct usb_otg *otg)
714{ 715{
715 struct fsl_otg *otg_dev; 716 struct fsl_otg *otg_dev;
716 717
717 if (!otg || otg->phy->state != OTG_STATE_B_IDLE) 718 if (!otg || otg->state != OTG_STATE_B_IDLE)
718 return -ENODEV; 719 return -ENODEV;
719 720
720 otg_dev = container_of(otg->phy, struct fsl_otg, phy); 721 otg_dev = container_of(otg->usb_phy, struct fsl_otg, phy);
721 if (otg_dev != fsl_otg_dev) 722 if (otg_dev != fsl_otg_dev)
722 return -ENODEV; 723 return -ENODEV;
723 724
@@ -735,7 +736,7 @@ static int fsl_otg_start_hnp(struct usb_otg *otg)
735 if (!otg) 736 if (!otg)
736 return -ENODEV; 737 return -ENODEV;
737 738
738 otg_dev = container_of(otg->phy, struct fsl_otg, phy); 739 otg_dev = container_of(otg->usb_phy, struct fsl_otg, phy);
739 if (otg_dev != fsl_otg_dev) 740 if (otg_dev != fsl_otg_dev)
740 return -ENODEV; 741 return -ENODEV;
741 742
@@ -857,7 +858,7 @@ static int fsl_otg_conf(struct platform_device *pdev)
857 fsl_otg_tc->phy.dev = &pdev->dev; 858 fsl_otg_tc->phy.dev = &pdev->dev;
858 fsl_otg_tc->phy.set_power = fsl_otg_set_power; 859 fsl_otg_tc->phy.set_power = fsl_otg_set_power;
859 860
860 fsl_otg_tc->phy.otg->phy = &fsl_otg_tc->phy; 861 fsl_otg_tc->phy.otg->usb_phy = &fsl_otg_tc->phy;
861 fsl_otg_tc->phy.otg->set_host = fsl_otg_set_host; 862 fsl_otg_tc->phy.otg->set_host = fsl_otg_set_host;
862 fsl_otg_tc->phy.otg->set_peripheral = fsl_otg_set_peripheral; 863 fsl_otg_tc->phy.otg->set_peripheral = fsl_otg_set_peripheral;
863 fsl_otg_tc->phy.otg->start_hnp = fsl_otg_start_hnp; 864 fsl_otg_tc->phy.otg->start_hnp = fsl_otg_start_hnp;
@@ -989,10 +990,10 @@ int usb_otg_start(struct platform_device *pdev)
989 * Also: record initial state of ID pin 990 * Also: record initial state of ID pin
990 */ 991 */
991 if (fsl_readl(&p_otg->dr_mem_map->otgsc) & OTGSC_STS_USB_ID) { 992 if (fsl_readl(&p_otg->dr_mem_map->otgsc) & OTGSC_STS_USB_ID) {
992 p_otg->phy.state = OTG_STATE_UNDEFINED; 993 p_otg->phy.otg->state = OTG_STATE_UNDEFINED;
993 p_otg->fsm.id = 1; 994 p_otg->fsm.id = 1;
994 } else { 995 } else {
995 p_otg->phy.state = OTG_STATE_A_IDLE; 996 p_otg->phy.otg->state = OTG_STATE_A_IDLE;
996 p_otg->fsm.id = 0; 997 p_otg->fsm.id = 0;
997 } 998 }
998 999
@@ -1047,7 +1048,7 @@ static int show_fsl_usb2_otg_state(struct device *dev,
1047 /* State */ 1048 /* State */
1048 t = scnprintf(next, size, 1049 t = scnprintf(next, size,
1049 "OTG state: %s\n\n", 1050 "OTG state: %s\n\n",
1050 usb_otg_state_string(fsl_otg_dev->phy.state)); 1051 usb_otg_state_string(fsl_otg_dev->phy.otg->state));
1051 size -= t; 1052 size -= t;
1052 next += t; 1053 next += t;
1053 1054
diff --git a/drivers/usb/phy/phy-fsl-usb.h b/drivers/usb/phy/phy-fsl-usb.h
index 5986c96354df..23149954a09c 100644
--- a/drivers/usb/phy/phy-fsl-usb.h
+++ b/drivers/usb/phy/phy-fsl-usb.h
@@ -298,7 +298,7 @@
298/* SE0 Time Before SRP */ 298/* SE0 Time Before SRP */
299#define TB_SE0_SRP (2) /* b_idle,minimum 2 ms, section:5.3.2 */ 299#define TB_SE0_SRP (2) /* b_idle,minimum 2 ms, section:5.3.2 */
300 300
301#define SET_OTG_STATE(otg_ptr, newstate) ((otg_ptr)->state = newstate) 301#define SET_OTG_STATE(phy, newstate) ((phy)->otg->state = newstate)
302 302
303struct usb_dr_mmap { 303struct usb_dr_mmap {
304 /* Capability register */ 304 /* Capability register */
diff --git a/drivers/usb/phy/phy-generic.c b/drivers/usb/phy/phy-generic.c
index 7594e5069ae5..4ba1f57220f6 100644
--- a/drivers/usb/phy/phy-generic.c
+++ b/drivers/usb/phy/phy-generic.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * drivers/usb/otg/nop-usb-xceiv.c
3 *
4 * NOP USB transceiver for all USB transceiver which are either built-in 2 * NOP USB transceiver for all USB transceiver which are either built-in
5 * into USB IP or which are mostly autonomous. 3 * into USB IP or which are mostly autonomous.
6 * 4 *
@@ -123,7 +121,7 @@ static int nop_set_peripheral(struct usb_otg *otg, struct usb_gadget *gadget)
123 } 121 }
124 122
125 otg->gadget = gadget; 123 otg->gadget = gadget;
126 otg->phy->state = OTG_STATE_B_IDLE; 124 otg->state = OTG_STATE_B_IDLE;
127 return 0; 125 return 0;
128} 126}
129 127
@@ -225,10 +223,10 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop,
225 nop->phy.dev = nop->dev; 223 nop->phy.dev = nop->dev;
226 nop->phy.label = "nop-xceiv"; 224 nop->phy.label = "nop-xceiv";
227 nop->phy.set_suspend = nop_set_suspend; 225 nop->phy.set_suspend = nop_set_suspend;
228 nop->phy.state = OTG_STATE_UNDEFINED;
229 nop->phy.type = type; 226 nop->phy.type = type;
230 227
231 nop->phy.otg->phy = &nop->phy; 228 nop->phy.otg->state = OTG_STATE_UNDEFINED;
229 nop->phy.otg->usb_phy = &nop->phy;
232 nop->phy.otg->set_host = nop_set_host; 230 nop->phy.otg->set_host = nop_set_host;
233 nop->phy.otg->set_peripheral = nop_set_peripheral; 231 nop->phy.otg->set_peripheral = nop_set_peripheral;
234 232
diff --git a/drivers/usb/phy/phy-gpio-vbus-usb.c b/drivers/usb/phy/phy-gpio-vbus-usb.c
index f4b14bd97e14..54511725caaf 100644
--- a/drivers/usb/phy/phy-gpio-vbus-usb.c
+++ b/drivers/usb/phy/phy-gpio-vbus-usb.c
@@ -121,7 +121,7 @@ static void gpio_vbus_work(struct work_struct *work)
121 121
122 if (vbus) { 122 if (vbus) {
123 status = USB_EVENT_VBUS; 123 status = USB_EVENT_VBUS;
124 gpio_vbus->phy.state = OTG_STATE_B_PERIPHERAL; 124 gpio_vbus->phy.otg->state = OTG_STATE_B_PERIPHERAL;
125 gpio_vbus->phy.last_event = status; 125 gpio_vbus->phy.last_event = status;
126 usb_gadget_vbus_connect(gpio_vbus->phy.otg->gadget); 126 usb_gadget_vbus_connect(gpio_vbus->phy.otg->gadget);
127 127
@@ -134,6 +134,7 @@ static void gpio_vbus_work(struct work_struct *work)
134 134
135 atomic_notifier_call_chain(&gpio_vbus->phy.notifier, 135 atomic_notifier_call_chain(&gpio_vbus->phy.notifier,
136 status, gpio_vbus->phy.otg->gadget); 136 status, gpio_vbus->phy.otg->gadget);
137 usb_phy_set_event(&gpio_vbus->phy, USB_EVENT_ENUMERATED);
137 } else { 138 } else {
138 /* optionally disable D+ pullup */ 139 /* optionally disable D+ pullup */
139 if (gpio_is_valid(gpio)) 140 if (gpio_is_valid(gpio))
@@ -143,11 +144,12 @@ static void gpio_vbus_work(struct work_struct *work)
143 144
144 usb_gadget_vbus_disconnect(gpio_vbus->phy.otg->gadget); 145 usb_gadget_vbus_disconnect(gpio_vbus->phy.otg->gadget);
145 status = USB_EVENT_NONE; 146 status = USB_EVENT_NONE;
146 gpio_vbus->phy.state = OTG_STATE_B_IDLE; 147 gpio_vbus->phy.otg->state = OTG_STATE_B_IDLE;
147 gpio_vbus->phy.last_event = status; 148 gpio_vbus->phy.last_event = status;
148 149
149 atomic_notifier_call_chain(&gpio_vbus->phy.notifier, 150 atomic_notifier_call_chain(&gpio_vbus->phy.notifier,
150 status, gpio_vbus->phy.otg->gadget); 151 status, gpio_vbus->phy.otg->gadget);
152 usb_phy_set_event(&gpio_vbus->phy, USB_EVENT_NONE);
151 } 153 }
152} 154}
153 155
@@ -180,7 +182,7 @@ static int gpio_vbus_set_peripheral(struct usb_otg *otg,
180 struct platform_device *pdev; 182 struct platform_device *pdev;
181 int gpio; 183 int gpio;
182 184
183 gpio_vbus = container_of(otg->phy, struct gpio_vbus_data, phy); 185 gpio_vbus = container_of(otg->usb_phy, struct gpio_vbus_data, phy);
184 pdev = to_platform_device(gpio_vbus->dev); 186 pdev = to_platform_device(gpio_vbus->dev);
185 pdata = dev_get_platdata(gpio_vbus->dev); 187 pdata = dev_get_platdata(gpio_vbus->dev);
186 gpio = pdata->gpio_pullup; 188 gpio = pdata->gpio_pullup;
@@ -196,7 +198,7 @@ static int gpio_vbus_set_peripheral(struct usb_otg *otg,
196 set_vbus_draw(gpio_vbus, 0); 198 set_vbus_draw(gpio_vbus, 0);
197 199
198 usb_gadget_vbus_disconnect(otg->gadget); 200 usb_gadget_vbus_disconnect(otg->gadget);
199 otg->phy->state = OTG_STATE_UNDEFINED; 201 otg->state = OTG_STATE_UNDEFINED;
200 202
201 otg->gadget = NULL; 203 otg->gadget = NULL;
202 return 0; 204 return 0;
@@ -218,7 +220,7 @@ static int gpio_vbus_set_power(struct usb_phy *phy, unsigned mA)
218 220
219 gpio_vbus = container_of(phy, struct gpio_vbus_data, phy); 221 gpio_vbus = container_of(phy, struct gpio_vbus_data, phy);
220 222
221 if (phy->state == OTG_STATE_B_PERIPHERAL) 223 if (phy->otg->state == OTG_STATE_B_PERIPHERAL)
222 set_vbus_draw(gpio_vbus, mA); 224 set_vbus_draw(gpio_vbus, mA);
223 return 0; 225 return 0;
224} 226}
@@ -269,9 +271,9 @@ static int gpio_vbus_probe(struct platform_device *pdev)
269 gpio_vbus->phy.dev = gpio_vbus->dev; 271 gpio_vbus->phy.dev = gpio_vbus->dev;
270 gpio_vbus->phy.set_power = gpio_vbus_set_power; 272 gpio_vbus->phy.set_power = gpio_vbus_set_power;
271 gpio_vbus->phy.set_suspend = gpio_vbus_set_suspend; 273 gpio_vbus->phy.set_suspend = gpio_vbus_set_suspend;
272 gpio_vbus->phy.state = OTG_STATE_UNDEFINED;
273 274
274 gpio_vbus->phy.otg->phy = &gpio_vbus->phy; 275 gpio_vbus->phy.otg->state = OTG_STATE_UNDEFINED;
276 gpio_vbus->phy.otg->usb_phy = &gpio_vbus->phy;
275 gpio_vbus->phy.otg->set_peripheral = gpio_vbus_set_peripheral; 277 gpio_vbus->phy.otg->set_peripheral = gpio_vbus_set_peripheral;
276 278
277 err = devm_gpio_request(&pdev->dev, gpio, "vbus_detect"); 279 err = devm_gpio_request(&pdev->dev, gpio, "vbus_detect");
diff --git a/drivers/usb/phy/phy-isp1301-omap.c b/drivers/usb/phy/phy-isp1301-omap.c
index 8eea56d3ded6..a2dfb2ae520e 100644
--- a/drivers/usb/phy/phy-isp1301-omap.c
+++ b/drivers/usb/phy/phy-isp1301-omap.c
@@ -234,7 +234,7 @@ isp1301_clear_bits(struct isp1301 *isp, u8 reg, u8 bits)
234 234
235static inline const char *state_name(struct isp1301 *isp) 235static inline const char *state_name(struct isp1301 *isp)
236{ 236{
237 return usb_otg_state_string(isp->phy.state); 237 return usb_otg_state_string(isp->phy.otg->state);
238} 238}
239 239
240/*-------------------------------------------------------------------------*/ 240/*-------------------------------------------------------------------------*/
@@ -249,7 +249,7 @@ static inline const char *state_name(struct isp1301 *isp)
249 249
250static void power_down(struct isp1301 *isp) 250static void power_down(struct isp1301 *isp)
251{ 251{
252 isp->phy.state = OTG_STATE_UNDEFINED; 252 isp->phy.otg->state = OTG_STATE_UNDEFINED;
253 253
254 // isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2, MC2_GLOBAL_PWR_DN); 254 // isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2, MC2_GLOBAL_PWR_DN);
255 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_SUSPEND); 255 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_SUSPEND);
@@ -339,7 +339,7 @@ static void a_idle(struct isp1301 *isp, const char *tag)
339{ 339{
340 u32 l; 340 u32 l;
341 341
342 if (isp->phy.state == OTG_STATE_A_IDLE) 342 if (isp->phy.otg->state == OTG_STATE_A_IDLE)
343 return; 343 return;
344 344
345 isp->phy.otg->default_a = 1; 345 isp->phy.otg->default_a = 1;
@@ -351,7 +351,7 @@ static void a_idle(struct isp1301 *isp, const char *tag)
351 isp->phy.otg->gadget->is_a_peripheral = 1; 351 isp->phy.otg->gadget->is_a_peripheral = 1;
352 gadget_suspend(isp); 352 gadget_suspend(isp);
353 } 353 }
354 isp->phy.state = OTG_STATE_A_IDLE; 354 isp->phy.otg->state = OTG_STATE_A_IDLE;
355 l = omap_readl(OTG_CTRL) & OTG_XCEIV_OUTPUTS; 355 l = omap_readl(OTG_CTRL) & OTG_XCEIV_OUTPUTS;
356 omap_writel(l, OTG_CTRL); 356 omap_writel(l, OTG_CTRL);
357 isp->last_otg_ctrl = l; 357 isp->last_otg_ctrl = l;
@@ -363,7 +363,7 @@ static void b_idle(struct isp1301 *isp, const char *tag)
363{ 363{
364 u32 l; 364 u32 l;
365 365
366 if (isp->phy.state == OTG_STATE_B_IDLE) 366 if (isp->phy.otg->state == OTG_STATE_B_IDLE)
367 return; 367 return;
368 368
369 isp->phy.otg->default_a = 0; 369 isp->phy.otg->default_a = 0;
@@ -375,7 +375,7 @@ static void b_idle(struct isp1301 *isp, const char *tag)
375 isp->phy.otg->gadget->is_a_peripheral = 0; 375 isp->phy.otg->gadget->is_a_peripheral = 0;
376 gadget_suspend(isp); 376 gadget_suspend(isp);
377 } 377 }
378 isp->phy.state = OTG_STATE_B_IDLE; 378 isp->phy.otg->state = OTG_STATE_B_IDLE;
379 l = omap_readl(OTG_CTRL) & OTG_XCEIV_OUTPUTS; 379 l = omap_readl(OTG_CTRL) & OTG_XCEIV_OUTPUTS;
380 omap_writel(l, OTG_CTRL); 380 omap_writel(l, OTG_CTRL);
381 isp->last_otg_ctrl = l; 381 isp->last_otg_ctrl = l;
@@ -474,7 +474,7 @@ static void check_state(struct isp1301 *isp, const char *tag)
474 default: 474 default:
475 break; 475 break;
476 } 476 }
477 if (isp->phy.state == state && !extra) 477 if (isp->phy.otg->state == state && !extra)
478 return; 478 return;
479 pr_debug("otg: %s FSM %s/%02x, %s, %06x\n", tag, 479 pr_debug("otg: %s FSM %s/%02x, %s, %06x\n", tag,
480 usb_otg_state_string(state), fsm, state_name(isp), 480 usb_otg_state_string(state), fsm, state_name(isp),
@@ -498,23 +498,23 @@ static void update_otg1(struct isp1301 *isp, u8 int_src)
498 498
499 if (int_src & INTR_SESS_VLD) 499 if (int_src & INTR_SESS_VLD)
500 otg_ctrl |= OTG_ASESSVLD; 500 otg_ctrl |= OTG_ASESSVLD;
501 else if (isp->phy.state == OTG_STATE_A_WAIT_VFALL) { 501 else if (isp->phy.otg->state == OTG_STATE_A_WAIT_VFALL) {
502 a_idle(isp, "vfall"); 502 a_idle(isp, "vfall");
503 otg_ctrl &= ~OTG_CTRL_BITS; 503 otg_ctrl &= ~OTG_CTRL_BITS;
504 } 504 }
505 if (int_src & INTR_VBUS_VLD) 505 if (int_src & INTR_VBUS_VLD)
506 otg_ctrl |= OTG_VBUSVLD; 506 otg_ctrl |= OTG_VBUSVLD;
507 if (int_src & INTR_ID_GND) { /* default-A */ 507 if (int_src & INTR_ID_GND) { /* default-A */
508 if (isp->phy.state == OTG_STATE_B_IDLE 508 if (isp->phy.otg->state == OTG_STATE_B_IDLE
509 || isp->phy.state 509 || isp->phy.otg->state
510 == OTG_STATE_UNDEFINED) { 510 == OTG_STATE_UNDEFINED) {
511 a_idle(isp, "init"); 511 a_idle(isp, "init");
512 return; 512 return;
513 } 513 }
514 } else { /* default-B */ 514 } else { /* default-B */
515 otg_ctrl |= OTG_ID; 515 otg_ctrl |= OTG_ID;
516 if (isp->phy.state == OTG_STATE_A_IDLE 516 if (isp->phy.otg->state == OTG_STATE_A_IDLE
517 || isp->phy.state == OTG_STATE_UNDEFINED) { 517 || isp->phy.otg->state == OTG_STATE_UNDEFINED) {
518 b_idle(isp, "init"); 518 b_idle(isp, "init");
519 return; 519 return;
520 } 520 }
@@ -548,14 +548,14 @@ static void otg_update_isp(struct isp1301 *isp)
548 isp->last_otg_ctrl = otg_ctrl; 548 isp->last_otg_ctrl = otg_ctrl;
549 otg_ctrl = otg_ctrl & OTG_XCEIV_INPUTS; 549 otg_ctrl = otg_ctrl & OTG_XCEIV_INPUTS;
550 550
551 switch (isp->phy.state) { 551 switch (isp->phy.otg->state) {
552 case OTG_STATE_B_IDLE: 552 case OTG_STATE_B_IDLE:
553 case OTG_STATE_B_PERIPHERAL: 553 case OTG_STATE_B_PERIPHERAL:
554 case OTG_STATE_B_SRP_INIT: 554 case OTG_STATE_B_SRP_INIT:
555 if (!(otg_ctrl & OTG_PULLUP)) { 555 if (!(otg_ctrl & OTG_PULLUP)) {
556 // if (otg_ctrl & OTG_B_HNPEN) { 556 // if (otg_ctrl & OTG_B_HNPEN) {
557 if (isp->phy.otg->gadget->b_hnp_enable) { 557 if (isp->phy.otg->gadget->b_hnp_enable) {
558 isp->phy.state = OTG_STATE_B_WAIT_ACON; 558 isp->phy.otg->state = OTG_STATE_B_WAIT_ACON;
559 pr_debug(" --> b_wait_acon\n"); 559 pr_debug(" --> b_wait_acon\n");
560 } 560 }
561 goto pulldown; 561 goto pulldown;
@@ -585,7 +585,7 @@ pulldown:
585 if (!(isp->phy.otg->host)) 585 if (!(isp->phy.otg->host))
586 otg_ctrl &= ~OTG_DRV_VBUS; 586 otg_ctrl &= ~OTG_DRV_VBUS;
587 587
588 switch (isp->phy.state) { 588 switch (isp->phy.otg->state) {
589 case OTG_STATE_A_SUSPEND: 589 case OTG_STATE_A_SUSPEND:
590 if (otg_ctrl & OTG_DRV_VBUS) { 590 if (otg_ctrl & OTG_DRV_VBUS) {
591 set |= OTG1_VBUS_DRV; 591 set |= OTG1_VBUS_DRV;
@@ -596,7 +596,7 @@ pulldown:
596 596
597 /* FALLTHROUGH */ 597 /* FALLTHROUGH */
598 case OTG_STATE_A_VBUS_ERR: 598 case OTG_STATE_A_VBUS_ERR:
599 isp->phy.state = OTG_STATE_A_WAIT_VFALL; 599 isp->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
600 pr_debug(" --> a_wait_vfall\n"); 600 pr_debug(" --> a_wait_vfall\n");
601 /* FALLTHROUGH */ 601 /* FALLTHROUGH */
602 case OTG_STATE_A_WAIT_VFALL: 602 case OTG_STATE_A_WAIT_VFALL:
@@ -605,7 +605,7 @@ pulldown:
605 break; 605 break;
606 case OTG_STATE_A_IDLE: 606 case OTG_STATE_A_IDLE:
607 if (otg_ctrl & OTG_DRV_VBUS) { 607 if (otg_ctrl & OTG_DRV_VBUS) {
608 isp->phy.state = OTG_STATE_A_WAIT_VRISE; 608 isp->phy.otg->state = OTG_STATE_A_WAIT_VRISE;
609 pr_debug(" --> a_wait_vrise\n"); 609 pr_debug(" --> a_wait_vrise\n");
610 } 610 }
611 /* FALLTHROUGH */ 611 /* FALLTHROUGH */
@@ -625,17 +625,17 @@ pulldown:
625 if (otg_change & OTG_PULLUP) { 625 if (otg_change & OTG_PULLUP) {
626 u32 l; 626 u32 l;
627 627
628 switch (isp->phy.state) { 628 switch (isp->phy.otg->state) {
629 case OTG_STATE_B_IDLE: 629 case OTG_STATE_B_IDLE:
630 if (clr & OTG1_DP_PULLUP) 630 if (clr & OTG1_DP_PULLUP)
631 break; 631 break;
632 isp->phy.state = OTG_STATE_B_PERIPHERAL; 632 isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
633 pr_debug(" --> b_peripheral\n"); 633 pr_debug(" --> b_peripheral\n");
634 break; 634 break;
635 case OTG_STATE_A_SUSPEND: 635 case OTG_STATE_A_SUSPEND:
636 if (clr & OTG1_DP_PULLUP) 636 if (clr & OTG1_DP_PULLUP)
637 break; 637 break;
638 isp->phy.state = OTG_STATE_A_PERIPHERAL; 638 isp->phy.otg->state = OTG_STATE_A_PERIPHERAL;
639 pr_debug(" --> a_peripheral\n"); 639 pr_debug(" --> a_peripheral\n");
640 break; 640 break;
641 default: 641 default:
@@ -673,7 +673,7 @@ static irqreturn_t omap_otg_irq(int irq, void *_isp)
673 * remote wakeup (SRP, normal) using their own timer 673 * remote wakeup (SRP, normal) using their own timer
674 * to give "check cable and A-device" messages. 674 * to give "check cable and A-device" messages.
675 */ 675 */
676 if (isp->phy.state == OTG_STATE_B_SRP_INIT) 676 if (isp->phy.otg->state == OTG_STATE_B_SRP_INIT)
677 b_idle(isp, "srp_timeout"); 677 b_idle(isp, "srp_timeout");
678 678
679 omap_writew(B_SRP_TMROUT, OTG_IRQ_SRC); 679 omap_writew(B_SRP_TMROUT, OTG_IRQ_SRC);
@@ -691,7 +691,7 @@ static irqreturn_t omap_otg_irq(int irq, void *_isp)
691 omap_writel(otg_ctrl, OTG_CTRL); 691 omap_writel(otg_ctrl, OTG_CTRL);
692 692
693 /* subset of b_peripheral()... */ 693 /* subset of b_peripheral()... */
694 isp->phy.state = OTG_STATE_B_PERIPHERAL; 694 isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
695 pr_debug(" --> b_peripheral\n"); 695 pr_debug(" --> b_peripheral\n");
696 696
697 omap_writew(B_HNP_FAIL, OTG_IRQ_SRC); 697 omap_writew(B_HNP_FAIL, OTG_IRQ_SRC);
@@ -703,7 +703,7 @@ static irqreturn_t omap_otg_irq(int irq, void *_isp)
703 state_name(isp), omap_readl(OTG_CTRL)); 703 state_name(isp), omap_readl(OTG_CTRL));
704 704
705 isp1301_defer_work(isp, WORK_UPDATE_OTG); 705 isp1301_defer_work(isp, WORK_UPDATE_OTG);
706 switch (isp->phy.state) { 706 switch (isp->phy.otg->state) {
707 case OTG_STATE_A_IDLE: 707 case OTG_STATE_A_IDLE:
708 if (!otg->host) 708 if (!otg->host)
709 break; 709 break;
@@ -734,7 +734,7 @@ static irqreturn_t omap_otg_irq(int irq, void *_isp)
734 otg_ctrl |= OTG_BUSDROP; 734 otg_ctrl |= OTG_BUSDROP;
735 otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK & ~OTG_XCEIV_INPUTS; 735 otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK & ~OTG_XCEIV_INPUTS;
736 omap_writel(otg_ctrl, OTG_CTRL); 736 omap_writel(otg_ctrl, OTG_CTRL);
737 isp->phy.state = OTG_STATE_A_WAIT_VFALL; 737 isp->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
738 738
739 omap_writew(A_REQ_TMROUT, OTG_IRQ_SRC); 739 omap_writew(A_REQ_TMROUT, OTG_IRQ_SRC);
740 ret = IRQ_HANDLED; 740 ret = IRQ_HANDLED;
@@ -748,7 +748,7 @@ static irqreturn_t omap_otg_irq(int irq, void *_isp)
748 otg_ctrl |= OTG_BUSDROP; 748 otg_ctrl |= OTG_BUSDROP;
749 otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK & ~OTG_XCEIV_INPUTS; 749 otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK & ~OTG_XCEIV_INPUTS;
750 omap_writel(otg_ctrl, OTG_CTRL); 750 omap_writel(otg_ctrl, OTG_CTRL);
751 isp->phy.state = OTG_STATE_A_VBUS_ERR; 751 isp->phy.otg->state = OTG_STATE_A_VBUS_ERR;
752 752
753 omap_writew(A_VBUS_ERR, OTG_IRQ_SRC); 753 omap_writew(A_VBUS_ERR, OTG_IRQ_SRC);
754 ret = IRQ_HANDLED; 754 ret = IRQ_HANDLED;
@@ -769,7 +769,7 @@ static irqreturn_t omap_otg_irq(int irq, void *_isp)
769 769
770 /* role is peripheral */ 770 /* role is peripheral */
771 if (otg_ctrl & OTG_DRIVER_SEL) { 771 if (otg_ctrl & OTG_DRIVER_SEL) {
772 switch (isp->phy.state) { 772 switch (isp->phy.otg->state) {
773 case OTG_STATE_A_IDLE: 773 case OTG_STATE_A_IDLE:
774 b_idle(isp, __func__); 774 b_idle(isp, __func__);
775 break; 775 break;
@@ -786,18 +786,18 @@ static irqreturn_t omap_otg_irq(int irq, void *_isp)
786 } 786 }
787 787
788 if (otg->host) { 788 if (otg->host) {
789 switch (isp->phy.state) { 789 switch (isp->phy.otg->state) {
790 case OTG_STATE_B_WAIT_ACON: 790 case OTG_STATE_B_WAIT_ACON:
791 isp->phy.state = OTG_STATE_B_HOST; 791 isp->phy.otg->state = OTG_STATE_B_HOST;
792 pr_debug(" --> b_host\n"); 792 pr_debug(" --> b_host\n");
793 kick = 1; 793 kick = 1;
794 break; 794 break;
795 case OTG_STATE_A_WAIT_BCON: 795 case OTG_STATE_A_WAIT_BCON:
796 isp->phy.state = OTG_STATE_A_HOST; 796 isp->phy.otg->state = OTG_STATE_A_HOST;
797 pr_debug(" --> a_host\n"); 797 pr_debug(" --> a_host\n");
798 break; 798 break;
799 case OTG_STATE_A_PERIPHERAL: 799 case OTG_STATE_A_PERIPHERAL:
800 isp->phy.state = OTG_STATE_A_WAIT_BCON; 800 isp->phy.otg->state = OTG_STATE_A_WAIT_BCON;
801 pr_debug(" --> a_wait_bcon\n"); 801 pr_debug(" --> a_wait_bcon\n");
802 break; 802 break;
803 default: 803 default:
@@ -937,7 +937,7 @@ static void b_peripheral(struct isp1301 *isp)
937 /* UDC driver just set OTG_BSESSVLD */ 937 /* UDC driver just set OTG_BSESSVLD */
938 isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_DP_PULLUP); 938 isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_DP_PULLUP);
939 isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_DP_PULLDOWN); 939 isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_DP_PULLDOWN);
940 isp->phy.state = OTG_STATE_B_PERIPHERAL; 940 isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
941 pr_debug(" --> b_peripheral\n"); 941 pr_debug(" --> b_peripheral\n");
942 dump_regs(isp, "2periph"); 942 dump_regs(isp, "2periph");
943#endif 943#endif
@@ -947,7 +947,7 @@ static void isp_update_otg(struct isp1301 *isp, u8 stat)
947{ 947{
948 struct usb_otg *otg = isp->phy.otg; 948 struct usb_otg *otg = isp->phy.otg;
949 u8 isp_stat, isp_bstat; 949 u8 isp_stat, isp_bstat;
950 enum usb_otg_state state = isp->phy.state; 950 enum usb_otg_state state = isp->phy.otg->state;
951 951
952 if (stat & INTR_BDIS_ACON) 952 if (stat & INTR_BDIS_ACON)
953 pr_debug("OTG: BDIS_ACON, %s\n", state_name(isp)); 953 pr_debug("OTG: BDIS_ACON, %s\n", state_name(isp));
@@ -970,7 +970,7 @@ static void isp_update_otg(struct isp1301 *isp, u8 stat)
970 * when HNP is used. 970 * when HNP is used.
971 */ 971 */
972 if (isp_stat & INTR_VBUS_VLD) 972 if (isp_stat & INTR_VBUS_VLD)
973 isp->phy.state = OTG_STATE_A_HOST; 973 isp->phy.otg->state = OTG_STATE_A_HOST;
974 break; 974 break;
975 case OTG_STATE_A_WAIT_VFALL: 975 case OTG_STATE_A_WAIT_VFALL:
976 if (!(isp_stat & INTR_SESS_VLD)) 976 if (!(isp_stat & INTR_SESS_VLD))
@@ -978,7 +978,7 @@ static void isp_update_otg(struct isp1301 *isp, u8 stat)
978 break; 978 break;
979 default: 979 default:
980 if (!(isp_stat & INTR_VBUS_VLD)) 980 if (!(isp_stat & INTR_VBUS_VLD))
981 isp->phy.state = OTG_STATE_A_VBUS_ERR; 981 isp->phy.otg->state = OTG_STATE_A_VBUS_ERR;
982 break; 982 break;
983 } 983 }
984 isp_bstat = isp1301_get_u8(isp, ISP1301_OTG_STATUS); 984 isp_bstat = isp1301_get_u8(isp, ISP1301_OTG_STATUS);
@@ -1007,7 +1007,7 @@ static void isp_update_otg(struct isp1301 *isp, u8 stat)
1007 if (otg->default_a) { 1007 if (otg->default_a) {
1008 switch (state) { 1008 switch (state) {
1009 default: 1009 default:
1010 isp->phy.state = OTG_STATE_A_WAIT_VFALL; 1010 isp->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
1011 break; 1011 break;
1012 case OTG_STATE_A_WAIT_VFALL: 1012 case OTG_STATE_A_WAIT_VFALL:
1013 state = OTG_STATE_A_IDLE; 1013 state = OTG_STATE_A_IDLE;
@@ -1020,7 +1020,7 @@ static void isp_update_otg(struct isp1301 *isp, u8 stat)
1020 host_suspend(isp); 1020 host_suspend(isp);
1021 isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1, 1021 isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1,
1022 MC1_BDIS_ACON_EN); 1022 MC1_BDIS_ACON_EN);
1023 isp->phy.state = OTG_STATE_B_IDLE; 1023 isp->phy.otg->state = OTG_STATE_B_IDLE;
1024 l = omap_readl(OTG_CTRL) & OTG_CTRL_MASK; 1024 l = omap_readl(OTG_CTRL) & OTG_CTRL_MASK;
1025 l &= ~OTG_CTRL_BITS; 1025 l &= ~OTG_CTRL_BITS;
1026 omap_writel(l, OTG_CTRL); 1026 omap_writel(l, OTG_CTRL);
@@ -1031,7 +1031,7 @@ static void isp_update_otg(struct isp1301 *isp, u8 stat)
1031 } 1031 }
1032 isp_bstat = isp1301_get_u8(isp, ISP1301_OTG_STATUS); 1032 isp_bstat = isp1301_get_u8(isp, ISP1301_OTG_STATUS);
1033 1033
1034 switch (isp->phy.state) { 1034 switch (isp->phy.otg->state) {
1035 case OTG_STATE_B_PERIPHERAL: 1035 case OTG_STATE_B_PERIPHERAL:
1036 case OTG_STATE_B_WAIT_ACON: 1036 case OTG_STATE_B_WAIT_ACON:
1037 case OTG_STATE_B_HOST: 1037 case OTG_STATE_B_HOST:
@@ -1071,7 +1071,7 @@ static void isp_update_otg(struct isp1301 *isp, u8 stat)
1071 } 1071 }
1072 } 1072 }
1073 1073
1074 if (state != isp->phy.state) 1074 if (state != isp->phy.otg->state)
1075 pr_debug(" isp, %s -> %s\n", 1075 pr_debug(" isp, %s -> %s\n",
1076 usb_otg_state_string(state), state_name(isp)); 1076 usb_otg_state_string(state), state_name(isp));
1077 1077
@@ -1129,10 +1129,10 @@ isp1301_work(struct work_struct *work)
1129 * skip A_WAIT_VRISE; hc transitions invisibly 1129 * skip A_WAIT_VRISE; hc transitions invisibly
1130 * skip A_WAIT_BCON; same. 1130 * skip A_WAIT_BCON; same.
1131 */ 1131 */
1132 switch (isp->phy.state) { 1132 switch (isp->phy.otg->state) {
1133 case OTG_STATE_A_WAIT_BCON: 1133 case OTG_STATE_A_WAIT_BCON:
1134 case OTG_STATE_A_WAIT_VRISE: 1134 case OTG_STATE_A_WAIT_VRISE:
1135 isp->phy.state = OTG_STATE_A_HOST; 1135 isp->phy.otg->state = OTG_STATE_A_HOST;
1136 pr_debug(" --> a_host\n"); 1136 pr_debug(" --> a_host\n");
1137 otg_ctrl = omap_readl(OTG_CTRL); 1137 otg_ctrl = omap_readl(OTG_CTRL);
1138 otg_ctrl |= OTG_A_BUSREQ; 1138 otg_ctrl |= OTG_A_BUSREQ;
@@ -1141,7 +1141,7 @@ isp1301_work(struct work_struct *work)
1141 omap_writel(otg_ctrl, OTG_CTRL); 1141 omap_writel(otg_ctrl, OTG_CTRL);
1142 break; 1142 break;
1143 case OTG_STATE_B_WAIT_ACON: 1143 case OTG_STATE_B_WAIT_ACON:
1144 isp->phy.state = OTG_STATE_B_HOST; 1144 isp->phy.otg->state = OTG_STATE_B_HOST;
1145 pr_debug(" --> b_host (acon)\n"); 1145 pr_debug(" --> b_host (acon)\n");
1146 break; 1146 break;
1147 case OTG_STATE_B_HOST: 1147 case OTG_STATE_B_HOST:
@@ -1275,7 +1275,7 @@ static int isp1301_otg_enable(struct isp1301 *isp)
1275static int 1275static int
1276isp1301_set_host(struct usb_otg *otg, struct usb_bus *host) 1276isp1301_set_host(struct usb_otg *otg, struct usb_bus *host)
1277{ 1277{
1278 struct isp1301 *isp = container_of(otg->phy, struct isp1301, phy); 1278 struct isp1301 *isp = container_of(otg->usb_phy, struct isp1301, phy);
1279 1279
1280 if (isp != the_transceiver) 1280 if (isp != the_transceiver)
1281 return -ENODEV; 1281 return -ENODEV;
@@ -1331,7 +1331,7 @@ isp1301_set_host(struct usb_otg *otg, struct usb_bus *host)
1331static int 1331static int
1332isp1301_set_peripheral(struct usb_otg *otg, struct usb_gadget *gadget) 1332isp1301_set_peripheral(struct usb_otg *otg, struct usb_gadget *gadget)
1333{ 1333{
1334 struct isp1301 *isp = container_of(otg->phy, struct isp1301, phy); 1334 struct isp1301 *isp = container_of(otg->usb_phy, struct isp1301, phy);
1335 1335
1336 if (isp != the_transceiver) 1336 if (isp != the_transceiver)
1337 return -ENODEV; 1337 return -ENODEV;
@@ -1368,7 +1368,7 @@ isp1301_set_peripheral(struct usb_otg *otg, struct usb_gadget *gadget)
1368 } 1368 }
1369 1369
1370 power_up(isp); 1370 power_up(isp);
1371 isp->phy.state = OTG_STATE_B_IDLE; 1371 isp->phy.otg->state = OTG_STATE_B_IDLE;
1372 1372
1373 if (machine_is_omap_h2() || machine_is_omap_h3()) 1373 if (machine_is_omap_h2() || machine_is_omap_h3())
1374 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0); 1374 isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
@@ -1403,7 +1403,7 @@ isp1301_set_power(struct usb_phy *dev, unsigned mA)
1403{ 1403{
1404 if (!the_transceiver) 1404 if (!the_transceiver)
1405 return -ENODEV; 1405 return -ENODEV;
1406 if (dev->state == OTG_STATE_B_PERIPHERAL) 1406 if (dev->otg->state == OTG_STATE_B_PERIPHERAL)
1407 enable_vbus_draw(the_transceiver, mA); 1407 enable_vbus_draw(the_transceiver, mA);
1408 return 0; 1408 return 0;
1409} 1409}
@@ -1411,10 +1411,10 @@ isp1301_set_power(struct usb_phy *dev, unsigned mA)
1411static int 1411static int
1412isp1301_start_srp(struct usb_otg *otg) 1412isp1301_start_srp(struct usb_otg *otg)
1413{ 1413{
1414 struct isp1301 *isp = container_of(otg->phy, struct isp1301, phy); 1414 struct isp1301 *isp = container_of(otg->usb_phy, struct isp1301, phy);
1415 u32 otg_ctrl; 1415 u32 otg_ctrl;
1416 1416
1417 if (isp != the_transceiver || isp->phy.state != OTG_STATE_B_IDLE) 1417 if (isp != the_transceiver || isp->phy.otg->state != OTG_STATE_B_IDLE)
1418 return -ENODEV; 1418 return -ENODEV;
1419 1419
1420 otg_ctrl = omap_readl(OTG_CTRL); 1420 otg_ctrl = omap_readl(OTG_CTRL);
@@ -1424,7 +1424,7 @@ isp1301_start_srp(struct usb_otg *otg)
1424 otg_ctrl |= OTG_B_BUSREQ; 1424 otg_ctrl |= OTG_B_BUSREQ;
1425 otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK; 1425 otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK;
1426 omap_writel(otg_ctrl, OTG_CTRL); 1426 omap_writel(otg_ctrl, OTG_CTRL);
1427 isp->phy.state = OTG_STATE_B_SRP_INIT; 1427 isp->phy.otg->state = OTG_STATE_B_SRP_INIT;
1428 1428
1429 pr_debug("otg: SRP, %s ... %06x\n", state_name(isp), 1429 pr_debug("otg: SRP, %s ... %06x\n", state_name(isp),
1430 omap_readl(OTG_CTRL)); 1430 omap_readl(OTG_CTRL));
@@ -1438,7 +1438,7 @@ static int
1438isp1301_start_hnp(struct usb_otg *otg) 1438isp1301_start_hnp(struct usb_otg *otg)
1439{ 1439{
1440#ifdef CONFIG_USB_OTG 1440#ifdef CONFIG_USB_OTG
1441 struct isp1301 *isp = container_of(otg->phy, struct isp1301, phy); 1441 struct isp1301 *isp = container_of(otg->usb_phy, struct isp1301, phy);
1442 u32 l; 1442 u32 l;
1443 1443
1444 if (isp != the_transceiver) 1444 if (isp != the_transceiver)
@@ -1452,9 +1452,9 @@ isp1301_start_hnp(struct usb_otg *otg)
1452 /* We want hardware to manage most HNP protocol timings. 1452 /* We want hardware to manage most HNP protocol timings.
1453 * So do this part as early as possible... 1453 * So do this part as early as possible...
1454 */ 1454 */
1455 switch (isp->phy.state) { 1455 switch (isp->phy.otg->state) {
1456 case OTG_STATE_B_HOST: 1456 case OTG_STATE_B_HOST:
1457 isp->phy.state = OTG_STATE_B_PERIPHERAL; 1457 isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
1458 /* caller will suspend next */ 1458 /* caller will suspend next */
1459 break; 1459 break;
1460 case OTG_STATE_A_HOST: 1460 case OTG_STATE_A_HOST:
@@ -1583,7 +1583,7 @@ isp1301_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
1583 isp->phy.label = DRIVER_NAME; 1583 isp->phy.label = DRIVER_NAME;
1584 isp->phy.set_power = isp1301_set_power, 1584 isp->phy.set_power = isp1301_set_power,
1585 1585
1586 isp->phy.otg->phy = &isp->phy; 1586 isp->phy.otg->usb_phy = &isp->phy;
1587 isp->phy.otg->set_host = isp1301_set_host, 1587 isp->phy.otg->set_host = isp1301_set_host,
1588 isp->phy.otg->set_peripheral = isp1301_set_peripheral, 1588 isp->phy.otg->set_peripheral = isp1301_set_peripheral,
1589 isp->phy.otg->start_srp = isp1301_start_srp, 1589 isp->phy.otg->start_srp = isp1301_start_srp,
diff --git a/drivers/usb/phy/phy-msm-usb.c b/drivers/usb/phy/phy-msm-usb.c
index 7843ef7dd0ff..e120d87778b2 100644
--- a/drivers/usb/phy/phy-msm-usb.c
+++ b/drivers/usb/phy/phy-msm-usb.c
@@ -708,7 +708,7 @@ static void msm_otg_start_host(struct usb_phy *phy, int on)
708 708
709static int msm_otg_set_host(struct usb_otg *otg, struct usb_bus *host) 709static int msm_otg_set_host(struct usb_otg *otg, struct usb_bus *host)
710{ 710{
711 struct msm_otg *motg = container_of(otg->phy, struct msm_otg, phy); 711 struct msm_otg *motg = container_of(otg->usb_phy, struct msm_otg, phy);
712 struct usb_hcd *hcd; 712 struct usb_hcd *hcd;
713 713
714 /* 714 /*
@@ -716,16 +716,16 @@ static int msm_otg_set_host(struct usb_otg *otg, struct usb_bus *host)
716 * only peripheral configuration. 716 * only peripheral configuration.
717 */ 717 */
718 if (motg->pdata->mode == USB_DR_MODE_PERIPHERAL) { 718 if (motg->pdata->mode == USB_DR_MODE_PERIPHERAL) {
719 dev_info(otg->phy->dev, "Host mode is not supported\n"); 719 dev_info(otg->usb_phy->dev, "Host mode is not supported\n");
720 return -ENODEV; 720 return -ENODEV;
721 } 721 }
722 722
723 if (!host) { 723 if (!host) {
724 if (otg->phy->state == OTG_STATE_A_HOST) { 724 if (otg->state == OTG_STATE_A_HOST) {
725 pm_runtime_get_sync(otg->phy->dev); 725 pm_runtime_get_sync(otg->usb_phy->dev);
726 msm_otg_start_host(otg->phy, 0); 726 msm_otg_start_host(otg->usb_phy, 0);
727 otg->host = NULL; 727 otg->host = NULL;
728 otg->phy->state = OTG_STATE_UNDEFINED; 728 otg->state = OTG_STATE_UNDEFINED;
729 schedule_work(&motg->sm_work); 729 schedule_work(&motg->sm_work);
730 } else { 730 } else {
731 otg->host = NULL; 731 otg->host = NULL;
@@ -738,14 +738,14 @@ static int msm_otg_set_host(struct usb_otg *otg, struct usb_bus *host)
738 hcd->power_budget = motg->pdata->power_budget; 738 hcd->power_budget = motg->pdata->power_budget;
739 739
740 otg->host = host; 740 otg->host = host;
741 dev_dbg(otg->phy->dev, "host driver registered w/ tranceiver\n"); 741 dev_dbg(otg->usb_phy->dev, "host driver registered w/ tranceiver\n");
742 742
743 /* 743 /*
744 * Kick the state machine work, if peripheral is not supported 744 * Kick the state machine work, if peripheral is not supported
745 * or peripheral is already registered with us. 745 * or peripheral is already registered with us.
746 */ 746 */
747 if (motg->pdata->mode == USB_DR_MODE_HOST || otg->gadget) { 747 if (motg->pdata->mode == USB_DR_MODE_HOST || otg->gadget) {
748 pm_runtime_get_sync(otg->phy->dev); 748 pm_runtime_get_sync(otg->usb_phy->dev);
749 schedule_work(&motg->sm_work); 749 schedule_work(&motg->sm_work);
750 } 750 }
751 751
@@ -782,23 +782,23 @@ static void msm_otg_start_peripheral(struct usb_phy *phy, int on)
782static int msm_otg_set_peripheral(struct usb_otg *otg, 782static int msm_otg_set_peripheral(struct usb_otg *otg,
783 struct usb_gadget *gadget) 783 struct usb_gadget *gadget)
784{ 784{
785 struct msm_otg *motg = container_of(otg->phy, struct msm_otg, phy); 785 struct msm_otg *motg = container_of(otg->usb_phy, struct msm_otg, phy);
786 786
787 /* 787 /*
788 * Fail peripheral registration if this board can support 788 * Fail peripheral registration if this board can support
789 * only host configuration. 789 * only host configuration.
790 */ 790 */
791 if (motg->pdata->mode == USB_DR_MODE_HOST) { 791 if (motg->pdata->mode == USB_DR_MODE_HOST) {
792 dev_info(otg->phy->dev, "Peripheral mode is not supported\n"); 792 dev_info(otg->usb_phy->dev, "Peripheral mode is not supported\n");
793 return -ENODEV; 793 return -ENODEV;
794 } 794 }
795 795
796 if (!gadget) { 796 if (!gadget) {
797 if (otg->phy->state == OTG_STATE_B_PERIPHERAL) { 797 if (otg->state == OTG_STATE_B_PERIPHERAL) {
798 pm_runtime_get_sync(otg->phy->dev); 798 pm_runtime_get_sync(otg->usb_phy->dev);
799 msm_otg_start_peripheral(otg->phy, 0); 799 msm_otg_start_peripheral(otg->usb_phy, 0);
800 otg->gadget = NULL; 800 otg->gadget = NULL;
801 otg->phy->state = OTG_STATE_UNDEFINED; 801 otg->state = OTG_STATE_UNDEFINED;
802 schedule_work(&motg->sm_work); 802 schedule_work(&motg->sm_work);
803 } else { 803 } else {
804 otg->gadget = NULL; 804 otg->gadget = NULL;
@@ -807,14 +807,15 @@ static int msm_otg_set_peripheral(struct usb_otg *otg,
807 return 0; 807 return 0;
808 } 808 }
809 otg->gadget = gadget; 809 otg->gadget = gadget;
810 dev_dbg(otg->phy->dev, "peripheral driver registered w/ tranceiver\n"); 810 dev_dbg(otg->usb_phy->dev,
811 "peripheral driver registered w/ tranceiver\n");
811 812
812 /* 813 /*
813 * Kick the state machine work, if host is not supported 814 * Kick the state machine work, if host is not supported
814 * or host is already registered with us. 815 * or host is already registered with us.
815 */ 816 */
816 if (motg->pdata->mode == USB_DR_MODE_PERIPHERAL || otg->host) { 817 if (motg->pdata->mode == USB_DR_MODE_PERIPHERAL || otg->host) {
817 pm_runtime_get_sync(otg->phy->dev); 818 pm_runtime_get_sync(otg->usb_phy->dev);
818 schedule_work(&motg->sm_work); 819 schedule_work(&motg->sm_work);
819 } 820 }
820 821
@@ -1170,20 +1171,20 @@ static void msm_otg_sm_work(struct work_struct *w)
1170 struct msm_otg *motg = container_of(w, struct msm_otg, sm_work); 1171 struct msm_otg *motg = container_of(w, struct msm_otg, sm_work);
1171 struct usb_otg *otg = motg->phy.otg; 1172 struct usb_otg *otg = motg->phy.otg;
1172 1173
1173 switch (otg->phy->state) { 1174 switch (otg->state) {
1174 case OTG_STATE_UNDEFINED: 1175 case OTG_STATE_UNDEFINED:
1175 dev_dbg(otg->phy->dev, "OTG_STATE_UNDEFINED state\n"); 1176 dev_dbg(otg->usb_phy->dev, "OTG_STATE_UNDEFINED state\n");
1176 msm_otg_reset(otg->phy); 1177 msm_otg_reset(otg->usb_phy);
1177 msm_otg_init_sm(motg); 1178 msm_otg_init_sm(motg);
1178 otg->phy->state = OTG_STATE_B_IDLE; 1179 otg->state = OTG_STATE_B_IDLE;
1179 /* FALL THROUGH */ 1180 /* FALL THROUGH */
1180 case OTG_STATE_B_IDLE: 1181 case OTG_STATE_B_IDLE:
1181 dev_dbg(otg->phy->dev, "OTG_STATE_B_IDLE state\n"); 1182 dev_dbg(otg->usb_phy->dev, "OTG_STATE_B_IDLE state\n");
1182 if (!test_bit(ID, &motg->inputs) && otg->host) { 1183 if (!test_bit(ID, &motg->inputs) && otg->host) {
1183 /* disable BSV bit */ 1184 /* disable BSV bit */
1184 writel(readl(USB_OTGSC) & ~OTGSC_BSVIE, USB_OTGSC); 1185 writel(readl(USB_OTGSC) & ~OTGSC_BSVIE, USB_OTGSC);
1185 msm_otg_start_host(otg->phy, 1); 1186 msm_otg_start_host(otg->usb_phy, 1);
1186 otg->phy->state = OTG_STATE_A_HOST; 1187 otg->state = OTG_STATE_A_HOST;
1187 } else if (test_bit(B_SESS_VLD, &motg->inputs)) { 1188 } else if (test_bit(B_SESS_VLD, &motg->inputs)) {
1188 switch (motg->chg_state) { 1189 switch (motg->chg_state) {
1189 case USB_CHG_STATE_UNDEFINED: 1190 case USB_CHG_STATE_UNDEFINED:
@@ -1198,14 +1199,16 @@ static void msm_otg_sm_work(struct work_struct *w)
1198 case USB_CDP_CHARGER: 1199 case USB_CDP_CHARGER:
1199 msm_otg_notify_charger(motg, 1200 msm_otg_notify_charger(motg,
1200 IDEV_CHG_MAX); 1201 IDEV_CHG_MAX);
1201 msm_otg_start_peripheral(otg->phy, 1); 1202 msm_otg_start_peripheral(otg->usb_phy,
1202 otg->phy->state 1203 1);
1204 otg->state
1203 = OTG_STATE_B_PERIPHERAL; 1205 = OTG_STATE_B_PERIPHERAL;
1204 break; 1206 break;
1205 case USB_SDP_CHARGER: 1207 case USB_SDP_CHARGER:
1206 msm_otg_notify_charger(motg, IUNIT); 1208 msm_otg_notify_charger(motg, IUNIT);
1207 msm_otg_start_peripheral(otg->phy, 1); 1209 msm_otg_start_peripheral(otg->usb_phy,
1208 otg->phy->state 1210 1);
1211 otg->state
1209 = OTG_STATE_B_PERIPHERAL; 1212 = OTG_STATE_B_PERIPHERAL;
1210 break; 1213 break;
1211 default: 1214 default:
@@ -1222,36 +1225,36 @@ static void msm_otg_sm_work(struct work_struct *w)
1222 * is incremented in charger detection work. 1225 * is incremented in charger detection work.
1223 */ 1226 */
1224 if (cancel_delayed_work_sync(&motg->chg_work)) { 1227 if (cancel_delayed_work_sync(&motg->chg_work)) {
1225 pm_runtime_put_sync(otg->phy->dev); 1228 pm_runtime_put_sync(otg->usb_phy->dev);
1226 msm_otg_reset(otg->phy); 1229 msm_otg_reset(otg->usb_phy);
1227 } 1230 }
1228 msm_otg_notify_charger(motg, 0); 1231 msm_otg_notify_charger(motg, 0);
1229 motg->chg_state = USB_CHG_STATE_UNDEFINED; 1232 motg->chg_state = USB_CHG_STATE_UNDEFINED;
1230 motg->chg_type = USB_INVALID_CHARGER; 1233 motg->chg_type = USB_INVALID_CHARGER;
1231 } 1234 }
1232 1235
1233 if (otg->phy->state == OTG_STATE_B_IDLE) 1236 if (otg->state == OTG_STATE_B_IDLE)
1234 pm_runtime_put_sync(otg->phy->dev); 1237 pm_runtime_put_sync(otg->usb_phy->dev);
1235 break; 1238 break;
1236 case OTG_STATE_B_PERIPHERAL: 1239 case OTG_STATE_B_PERIPHERAL:
1237 dev_dbg(otg->phy->dev, "OTG_STATE_B_PERIPHERAL state\n"); 1240 dev_dbg(otg->usb_phy->dev, "OTG_STATE_B_PERIPHERAL state\n");
1238 if (!test_bit(B_SESS_VLD, &motg->inputs) || 1241 if (!test_bit(B_SESS_VLD, &motg->inputs) ||
1239 !test_bit(ID, &motg->inputs)) { 1242 !test_bit(ID, &motg->inputs)) {
1240 msm_otg_notify_charger(motg, 0); 1243 msm_otg_notify_charger(motg, 0);
1241 msm_otg_start_peripheral(otg->phy, 0); 1244 msm_otg_start_peripheral(otg->usb_phy, 0);
1242 motg->chg_state = USB_CHG_STATE_UNDEFINED; 1245 motg->chg_state = USB_CHG_STATE_UNDEFINED;
1243 motg->chg_type = USB_INVALID_CHARGER; 1246 motg->chg_type = USB_INVALID_CHARGER;
1244 otg->phy->state = OTG_STATE_B_IDLE; 1247 otg->state = OTG_STATE_B_IDLE;
1245 msm_otg_reset(otg->phy); 1248 msm_otg_reset(otg->usb_phy);
1246 schedule_work(w); 1249 schedule_work(w);
1247 } 1250 }
1248 break; 1251 break;
1249 case OTG_STATE_A_HOST: 1252 case OTG_STATE_A_HOST:
1250 dev_dbg(otg->phy->dev, "OTG_STATE_A_HOST state\n"); 1253 dev_dbg(otg->usb_phy->dev, "OTG_STATE_A_HOST state\n");
1251 if (test_bit(ID, &motg->inputs)) { 1254 if (test_bit(ID, &motg->inputs)) {
1252 msm_otg_start_host(otg->phy, 0); 1255 msm_otg_start_host(otg->usb_phy, 0);
1253 otg->phy->state = OTG_STATE_B_IDLE; 1256 otg->state = OTG_STATE_B_IDLE;
1254 msm_otg_reset(otg->phy); 1257 msm_otg_reset(otg->usb_phy);
1255 schedule_work(w); 1258 schedule_work(w);
1256 } 1259 }
1257 break; 1260 break;
@@ -1303,7 +1306,7 @@ static int msm_otg_mode_show(struct seq_file *s, void *unused)
1303 struct msm_otg *motg = s->private; 1306 struct msm_otg *motg = s->private;
1304 struct usb_otg *otg = motg->phy.otg; 1307 struct usb_otg *otg = motg->phy.otg;
1305 1308
1306 switch (otg->phy->state) { 1309 switch (otg->state) {
1307 case OTG_STATE_A_HOST: 1310 case OTG_STATE_A_HOST:
1308 seq_puts(s, "host\n"); 1311 seq_puts(s, "host\n");
1309 break; 1312 break;
@@ -1353,7 +1356,7 @@ static ssize_t msm_otg_mode_write(struct file *file, const char __user *ubuf,
1353 1356
1354 switch (req_mode) { 1357 switch (req_mode) {
1355 case USB_DR_MODE_UNKNOWN: 1358 case USB_DR_MODE_UNKNOWN:
1356 switch (otg->phy->state) { 1359 switch (otg->state) {
1357 case OTG_STATE_A_HOST: 1360 case OTG_STATE_A_HOST:
1358 case OTG_STATE_B_PERIPHERAL: 1361 case OTG_STATE_B_PERIPHERAL:
1359 set_bit(ID, &motg->inputs); 1362 set_bit(ID, &motg->inputs);
@@ -1364,7 +1367,7 @@ static ssize_t msm_otg_mode_write(struct file *file, const char __user *ubuf,
1364 } 1367 }
1365 break; 1368 break;
1366 case USB_DR_MODE_PERIPHERAL: 1369 case USB_DR_MODE_PERIPHERAL:
1367 switch (otg->phy->state) { 1370 switch (otg->state) {
1368 case OTG_STATE_B_IDLE: 1371 case OTG_STATE_B_IDLE:
1369 case OTG_STATE_A_HOST: 1372 case OTG_STATE_A_HOST:
1370 set_bit(ID, &motg->inputs); 1373 set_bit(ID, &motg->inputs);
@@ -1375,7 +1378,7 @@ static ssize_t msm_otg_mode_write(struct file *file, const char __user *ubuf,
1375 } 1378 }
1376 break; 1379 break;
1377 case USB_DR_MODE_HOST: 1380 case USB_DR_MODE_HOST:
1378 switch (otg->phy->state) { 1381 switch (otg->state) {
1379 case OTG_STATE_B_IDLE: 1382 case OTG_STATE_B_IDLE:
1380 case OTG_STATE_B_PERIPHERAL: 1383 case OTG_STATE_B_PERIPHERAL:
1381 clear_bit(ID, &motg->inputs); 1384 clear_bit(ID, &motg->inputs);
@@ -1388,7 +1391,7 @@ static ssize_t msm_otg_mode_write(struct file *file, const char __user *ubuf,
1388 goto out; 1391 goto out;
1389 } 1392 }
1390 1393
1391 pm_runtime_get_sync(otg->phy->dev); 1394 pm_runtime_get_sync(otg->usb_phy->dev);
1392 schedule_work(&motg->sm_work); 1395 schedule_work(&motg->sm_work);
1393out: 1396out:
1394 return status; 1397 return status;
@@ -1505,10 +1508,8 @@ static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg)
1505 } 1508 }
1506 1509
1507 pdata->phy_init_seq = devm_kzalloc(&pdev->dev, len, GFP_KERNEL); 1510 pdata->phy_init_seq = devm_kzalloc(&pdev->dev, len, GFP_KERNEL);
1508 if (!pdata->phy_init_seq) { 1511 if (!pdata->phy_init_seq)
1509 dev_warn(&pdev->dev, "No space for PHY init sequence\n");
1510 return 0; 1512 return 0;
1511 }
1512 1513
1513 ret = of_property_read_u32_array(node, "qcom,phy-init-sequence", 1514 ret = of_property_read_u32_array(node, "qcom,phy-init-sequence",
1514 pdata->phy_init_seq, words); 1515 pdata->phy_init_seq, words);
@@ -1530,10 +1531,8 @@ static int msm_otg_probe(struct platform_device *pdev)
1530 void __iomem *phy_select; 1531 void __iomem *phy_select;
1531 1532
1532 motg = devm_kzalloc(&pdev->dev, sizeof(struct msm_otg), GFP_KERNEL); 1533 motg = devm_kzalloc(&pdev->dev, sizeof(struct msm_otg), GFP_KERNEL);
1533 if (!motg) { 1534 if (!motg)
1534 dev_err(&pdev->dev, "unable to allocate msm_otg\n");
1535 return -ENOMEM; 1535 return -ENOMEM;
1536 }
1537 1536
1538 pdata = dev_get_platdata(&pdev->dev); 1537 pdata = dev_get_platdata(&pdev->dev);
1539 if (!pdata) { 1538 if (!pdata) {
@@ -1546,10 +1545,8 @@ static int msm_otg_probe(struct platform_device *pdev)
1546 1545
1547 motg->phy.otg = devm_kzalloc(&pdev->dev, sizeof(struct usb_otg), 1546 motg->phy.otg = devm_kzalloc(&pdev->dev, sizeof(struct usb_otg),
1548 GFP_KERNEL); 1547 GFP_KERNEL);
1549 if (!motg->phy.otg) { 1548 if (!motg->phy.otg)
1550 dev_err(&pdev->dev, "unable to allocate msm_otg\n");
1551 return -ENOMEM; 1549 return -ENOMEM;
1552 }
1553 1550
1554 phy = &motg->phy; 1551 phy = &motg->phy;
1555 phy->dev = &pdev->dev; 1552 phy->dev = &pdev->dev;
@@ -1674,7 +1671,7 @@ static int msm_otg_probe(struct platform_device *pdev)
1674 1671
1675 phy->io_ops = &msm_otg_io_ops; 1672 phy->io_ops = &msm_otg_io_ops;
1676 1673
1677 phy->otg->phy = &motg->phy; 1674 phy->otg->usb_phy = &motg->phy;
1678 phy->otg->set_host = msm_otg_set_host; 1675 phy->otg->set_host = msm_otg_set_host;
1679 phy->otg->set_peripheral = msm_otg_set_peripheral; 1676 phy->otg->set_peripheral = msm_otg_set_peripheral;
1680 1677
@@ -1775,7 +1772,7 @@ static int msm_otg_runtime_idle(struct device *dev)
1775 * This 1 sec delay also prevents entering into LPM immediately 1772 * This 1 sec delay also prevents entering into LPM immediately
1776 * after asynchronous interrupt. 1773 * after asynchronous interrupt.
1777 */ 1774 */
1778 if (otg->phy->state != OTG_STATE_UNDEFINED) 1775 if (otg->state != OTG_STATE_UNDEFINED)
1779 pm_schedule_suspend(dev, 1000); 1776 pm_schedule_suspend(dev, 1000);
1780 1777
1781 return -EAGAIN; 1778 return -EAGAIN;
diff --git a/drivers/usb/phy/phy-mv-usb.c b/drivers/usb/phy/phy-mv-usb.c
index 7d80c54f0ac6..b234d46cd58b 100644
--- a/drivers/usb/phy/phy-mv-usb.c
+++ b/drivers/usb/phy/phy-mv-usb.c
@@ -56,7 +56,7 @@ static char *state_string[] = {
56 56
57static int mv_otg_set_vbus(struct usb_otg *otg, bool on) 57static int mv_otg_set_vbus(struct usb_otg *otg, bool on)
58{ 58{
59 struct mv_otg *mvotg = container_of(otg->phy, struct mv_otg, phy); 59 struct mv_otg *mvotg = container_of(otg->usb_phy, struct mv_otg, phy);
60 if (mvotg->pdata->set_vbus == NULL) 60 if (mvotg->pdata->set_vbus == NULL)
61 return -ENODEV; 61 return -ENODEV;
62 62
@@ -339,68 +339,68 @@ static void mv_otg_update_state(struct mv_otg *mvotg)
339{ 339{
340 struct mv_otg_ctrl *otg_ctrl = &mvotg->otg_ctrl; 340 struct mv_otg_ctrl *otg_ctrl = &mvotg->otg_ctrl;
341 struct usb_phy *phy = &mvotg->phy; 341 struct usb_phy *phy = &mvotg->phy;
342 int old_state = phy->state; 342 int old_state = mvotg->phy.otg->state;
343 343
344 switch (old_state) { 344 switch (old_state) {
345 case OTG_STATE_UNDEFINED: 345 case OTG_STATE_UNDEFINED:
346 phy->state = OTG_STATE_B_IDLE; 346 mvotg->phy.otg->state = OTG_STATE_B_IDLE;
347 /* FALL THROUGH */ 347 /* FALL THROUGH */
348 case OTG_STATE_B_IDLE: 348 case OTG_STATE_B_IDLE:
349 if (otg_ctrl->id == 0) 349 if (otg_ctrl->id == 0)
350 phy->state = OTG_STATE_A_IDLE; 350 mvotg->phy.otg->state = OTG_STATE_A_IDLE;
351 else if (otg_ctrl->b_sess_vld) 351 else if (otg_ctrl->b_sess_vld)
352 phy->state = OTG_STATE_B_PERIPHERAL; 352 mvotg->phy.otg->state = OTG_STATE_B_PERIPHERAL;
353 break; 353 break;
354 case OTG_STATE_B_PERIPHERAL: 354 case OTG_STATE_B_PERIPHERAL:
355 if (!otg_ctrl->b_sess_vld || otg_ctrl->id == 0) 355 if (!otg_ctrl->b_sess_vld || otg_ctrl->id == 0)
356 phy->state = OTG_STATE_B_IDLE; 356 mvotg->phy.otg->state = OTG_STATE_B_IDLE;
357 break; 357 break;
358 case OTG_STATE_A_IDLE: 358 case OTG_STATE_A_IDLE:
359 if (otg_ctrl->id) 359 if (otg_ctrl->id)
360 phy->state = OTG_STATE_B_IDLE; 360 mvotg->phy.otg->state = OTG_STATE_B_IDLE;
361 else if (!(otg_ctrl->a_bus_drop) && 361 else if (!(otg_ctrl->a_bus_drop) &&
362 (otg_ctrl->a_bus_req || otg_ctrl->a_srp_det)) 362 (otg_ctrl->a_bus_req || otg_ctrl->a_srp_det))
363 phy->state = OTG_STATE_A_WAIT_VRISE; 363 mvotg->phy.otg->state = OTG_STATE_A_WAIT_VRISE;
364 break; 364 break;
365 case OTG_STATE_A_WAIT_VRISE: 365 case OTG_STATE_A_WAIT_VRISE:
366 if (otg_ctrl->a_vbus_vld) 366 if (otg_ctrl->a_vbus_vld)
367 phy->state = OTG_STATE_A_WAIT_BCON; 367 mvotg->phy.otg->state = OTG_STATE_A_WAIT_BCON;
368 break; 368 break;
369 case OTG_STATE_A_WAIT_BCON: 369 case OTG_STATE_A_WAIT_BCON:
370 if (otg_ctrl->id || otg_ctrl->a_bus_drop 370 if (otg_ctrl->id || otg_ctrl->a_bus_drop
371 || otg_ctrl->a_wait_bcon_timeout) { 371 || otg_ctrl->a_wait_bcon_timeout) {
372 mv_otg_cancel_timer(mvotg, A_WAIT_BCON_TIMER); 372 mv_otg_cancel_timer(mvotg, A_WAIT_BCON_TIMER);
373 mvotg->otg_ctrl.a_wait_bcon_timeout = 0; 373 mvotg->otg_ctrl.a_wait_bcon_timeout = 0;
374 phy->state = OTG_STATE_A_WAIT_VFALL; 374 mvotg->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
375 otg_ctrl->a_bus_req = 0; 375 otg_ctrl->a_bus_req = 0;
376 } else if (!otg_ctrl->a_vbus_vld) { 376 } else if (!otg_ctrl->a_vbus_vld) {
377 mv_otg_cancel_timer(mvotg, A_WAIT_BCON_TIMER); 377 mv_otg_cancel_timer(mvotg, A_WAIT_BCON_TIMER);
378 mvotg->otg_ctrl.a_wait_bcon_timeout = 0; 378 mvotg->otg_ctrl.a_wait_bcon_timeout = 0;
379 phy->state = OTG_STATE_A_VBUS_ERR; 379 mvotg->phy.otg->state = OTG_STATE_A_VBUS_ERR;
380 } else if (otg_ctrl->b_conn) { 380 } else if (otg_ctrl->b_conn) {
381 mv_otg_cancel_timer(mvotg, A_WAIT_BCON_TIMER); 381 mv_otg_cancel_timer(mvotg, A_WAIT_BCON_TIMER);
382 mvotg->otg_ctrl.a_wait_bcon_timeout = 0; 382 mvotg->otg_ctrl.a_wait_bcon_timeout = 0;
383 phy->state = OTG_STATE_A_HOST; 383 mvotg->phy.otg->state = OTG_STATE_A_HOST;
384 } 384 }
385 break; 385 break;
386 case OTG_STATE_A_HOST: 386 case OTG_STATE_A_HOST:
387 if (otg_ctrl->id || !otg_ctrl->b_conn 387 if (otg_ctrl->id || !otg_ctrl->b_conn
388 || otg_ctrl->a_bus_drop) 388 || otg_ctrl->a_bus_drop)
389 phy->state = OTG_STATE_A_WAIT_BCON; 389 mvotg->phy.otg->state = OTG_STATE_A_WAIT_BCON;
390 else if (!otg_ctrl->a_vbus_vld) 390 else if (!otg_ctrl->a_vbus_vld)
391 phy->state = OTG_STATE_A_VBUS_ERR; 391 mvotg->phy.otg->state = OTG_STATE_A_VBUS_ERR;
392 break; 392 break;
393 case OTG_STATE_A_WAIT_VFALL: 393 case OTG_STATE_A_WAIT_VFALL:
394 if (otg_ctrl->id 394 if (otg_ctrl->id
395 || (!otg_ctrl->b_conn && otg_ctrl->a_sess_vld) 395 || (!otg_ctrl->b_conn && otg_ctrl->a_sess_vld)
396 || otg_ctrl->a_bus_req) 396 || otg_ctrl->a_bus_req)
397 phy->state = OTG_STATE_A_IDLE; 397 mvotg->phy.otg->state = OTG_STATE_A_IDLE;
398 break; 398 break;
399 case OTG_STATE_A_VBUS_ERR: 399 case OTG_STATE_A_VBUS_ERR:
400 if (otg_ctrl->id || otg_ctrl->a_clr_err 400 if (otg_ctrl->id || otg_ctrl->a_clr_err
401 || otg_ctrl->a_bus_drop) { 401 || otg_ctrl->a_bus_drop) {
402 otg_ctrl->a_clr_err = 0; 402 otg_ctrl->a_clr_err = 0;
403 phy->state = OTG_STATE_A_WAIT_VFALL; 403 mvotg->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
404 } 404 }
405 break; 405 break;
406 default: 406 default:
@@ -420,8 +420,8 @@ static void mv_otg_work(struct work_struct *work)
420run: 420run:
421 /* work queue is single thread, or we need spin_lock to protect */ 421 /* work queue is single thread, or we need spin_lock to protect */
422 phy = &mvotg->phy; 422 phy = &mvotg->phy;
423 otg = phy->otg; 423 otg = mvotg->phy.otg;
424 old_state = phy->state; 424 old_state = otg->state;
425 425
426 if (!mvotg->active) 426 if (!mvotg->active)
427 return; 427 return;
@@ -429,22 +429,24 @@ run:
429 mv_otg_update_inputs(mvotg); 429 mv_otg_update_inputs(mvotg);
430 mv_otg_update_state(mvotg); 430 mv_otg_update_state(mvotg);
431 431
432 if (old_state != phy->state) { 432 if (old_state != mvotg->phy.otg->state) {
433 dev_info(&mvotg->pdev->dev, "change from state %s to %s\n", 433 dev_info(&mvotg->pdev->dev, "change from state %s to %s\n",
434 state_string[old_state], 434 state_string[old_state],
435 state_string[phy->state]); 435 state_string[mvotg->phy.otg->state]);
436 436
437 switch (phy->state) { 437 switch (mvotg->phy.otg->state) {
438 case OTG_STATE_B_IDLE: 438 case OTG_STATE_B_IDLE:
439 otg->default_a = 0; 439 otg->default_a = 0;
440 if (old_state == OTG_STATE_B_PERIPHERAL) 440 if (old_state == OTG_STATE_B_PERIPHERAL)
441 mv_otg_start_periphrals(mvotg, 0); 441 mv_otg_start_periphrals(mvotg, 0);
442 mv_otg_reset(mvotg); 442 mv_otg_reset(mvotg);
443 mv_otg_disable(mvotg); 443 mv_otg_disable(mvotg);
444 usb_phy_set_event(&mvotg->phy, USB_EVENT_NONE);
444 break; 445 break;
445 case OTG_STATE_B_PERIPHERAL: 446 case OTG_STATE_B_PERIPHERAL:
446 mv_otg_enable(mvotg); 447 mv_otg_enable(mvotg);
447 mv_otg_start_periphrals(mvotg, 1); 448 mv_otg_start_periphrals(mvotg, 1);
449 usb_phy_set_event(&mvotg->phy, USB_EVENT_ENUMERATED);
448 break; 450 break;
449 case OTG_STATE_A_IDLE: 451 case OTG_STATE_A_IDLE:
450 otg->default_a = 1; 452 otg->default_a = 1;
@@ -545,8 +547,8 @@ set_a_bus_req(struct device *dev, struct device_attribute *attr,
545 return -1; 547 return -1;
546 548
547 /* We will use this interface to change to A device */ 549 /* We will use this interface to change to A device */
548 if (mvotg->phy.state != OTG_STATE_B_IDLE 550 if (mvotg->phy.otg->state != OTG_STATE_B_IDLE
549 && mvotg->phy.state != OTG_STATE_A_IDLE) 551 && mvotg->phy.otg->state != OTG_STATE_A_IDLE)
550 return -1; 552 return -1;
551 553
552 /* The clock may disabled and we need to set irq for ID detected */ 554 /* The clock may disabled and we need to set irq for ID detected */
@@ -686,10 +688,8 @@ static int mv_otg_probe(struct platform_device *pdev)
686 } 688 }
687 689
688 mvotg = devm_kzalloc(&pdev->dev, sizeof(*mvotg), GFP_KERNEL); 690 mvotg = devm_kzalloc(&pdev->dev, sizeof(*mvotg), GFP_KERNEL);
689 if (!mvotg) { 691 if (!mvotg)
690 dev_err(&pdev->dev, "failed to allocate memory!\n");
691 return -ENOMEM; 692 return -ENOMEM;
692 }
693 693
694 otg = devm_kzalloc(&pdev->dev, sizeof(*otg), GFP_KERNEL); 694 otg = devm_kzalloc(&pdev->dev, sizeof(*otg), GFP_KERNEL);
695 if (!otg) 695 if (!otg)
@@ -717,9 +717,9 @@ static int mv_otg_probe(struct platform_device *pdev)
717 mvotg->phy.dev = &pdev->dev; 717 mvotg->phy.dev = &pdev->dev;
718 mvotg->phy.otg = otg; 718 mvotg->phy.otg = otg;
719 mvotg->phy.label = driver_name; 719 mvotg->phy.label = driver_name;
720 mvotg->phy.state = OTG_STATE_UNDEFINED;
721 720
722 otg->phy = &mvotg->phy; 721 otg->state = OTG_STATE_UNDEFINED;
722 otg->usb_phy = &mvotg->phy;
723 otg->set_host = mv_otg_set_host; 723 otg->set_host = mv_otg_set_host;
724 otg->set_peripheral = mv_otg_set_peripheral; 724 otg->set_peripheral = mv_otg_set_peripheral;
725 otg->set_vbus = mv_otg_set_vbus; 725 otg->set_vbus = mv_otg_set_vbus;
diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
index 0e0c41587a08..a55dadcd47f3 100644
--- a/drivers/usb/phy/phy-mxs-usb.c
+++ b/drivers/usb/phy/phy-mxs-usb.c
@@ -390,10 +390,8 @@ static int mxs_phy_probe(struct platform_device *pdev)
390 } 390 }
391 391
392 mxs_phy = devm_kzalloc(&pdev->dev, sizeof(*mxs_phy), GFP_KERNEL); 392 mxs_phy = devm_kzalloc(&pdev->dev, sizeof(*mxs_phy), GFP_KERNEL);
393 if (!mxs_phy) { 393 if (!mxs_phy)
394 dev_err(&pdev->dev, "Failed to allocate USB PHY structure!\n");
395 return -ENOMEM; 394 return -ENOMEM;
396 }
397 395
398 /* Some SoCs don't have anatop registers */ 396 /* Some SoCs don't have anatop registers */
399 if (of_get_property(np, "fsl,anatop", NULL)) { 397 if (of_get_property(np, "fsl,anatop", NULL)) {
diff --git a/drivers/usb/phy/phy-rcar-gen2-usb.c b/drivers/usb/phy/phy-rcar-gen2-usb.c
index 388d89f6b141..f83808413ba2 100644
--- a/drivers/usb/phy/phy-rcar-gen2-usb.c
+++ b/drivers/usb/phy/phy-rcar-gen2-usb.c
@@ -195,10 +195,8 @@ static int rcar_gen2_usb_phy_probe(struct platform_device *pdev)
195 return PTR_ERR(base); 195 return PTR_ERR(base);
196 196
197 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); 197 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
198 if (!priv) { 198 if (!priv)
199 dev_err(dev, "Memory allocation failed\n");
200 return -ENOMEM; 199 return -ENOMEM;
201 }
202 200
203 spin_lock_init(&priv->lock); 201 spin_lock_init(&priv->lock);
204 priv->clk = clk; 202 priv->clk = clk;
diff --git a/drivers/usb/phy/phy-rcar-usb.c b/drivers/usb/phy/phy-rcar-usb.c
index e9f3a93e42b7..1e09b8377885 100644
--- a/drivers/usb/phy/phy-rcar-usb.c
+++ b/drivers/usb/phy/phy-rcar-usb.c
@@ -200,10 +200,8 @@ static int rcar_usb_phy_probe(struct platform_device *pdev)
200 return PTR_ERR(reg1); 200 return PTR_ERR(reg1);
201 201
202 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); 202 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
203 if (!priv) { 203 if (!priv)
204 dev_err(dev, "priv data allocation error\n");
205 return -ENOMEM; 204 return -ENOMEM;
206 }
207 205
208 priv->reg0 = reg0; 206 priv->reg0 = reg0;
209 priv->reg1 = reg1; 207 priv->reg1 = reg1;
diff --git a/drivers/usb/phy/phy-tahvo.c b/drivers/usb/phy/phy-tahvo.c
index cc61ee44b911..d391c79a542a 100644
--- a/drivers/usb/phy/phy-tahvo.c
+++ b/drivers/usb/phy/phy-tahvo.c
@@ -81,33 +81,35 @@ static void check_vbus_state(struct tahvo_usb *tu)
81 81
82 reg = retu_read(rdev, TAHVO_REG_IDSR); 82 reg = retu_read(rdev, TAHVO_REG_IDSR);
83 if (reg & TAHVO_STAT_VBUS) { 83 if (reg & TAHVO_STAT_VBUS) {
84 switch (tu->phy.state) { 84 switch (tu->phy.otg->state) {
85 case OTG_STATE_B_IDLE: 85 case OTG_STATE_B_IDLE:
86 /* Enable the gadget driver */ 86 /* Enable the gadget driver */
87 if (tu->phy.otg->gadget) 87 if (tu->phy.otg->gadget)
88 usb_gadget_vbus_connect(tu->phy.otg->gadget); 88 usb_gadget_vbus_connect(tu->phy.otg->gadget);
89 tu->phy.state = OTG_STATE_B_PERIPHERAL; 89 tu->phy.otg->state = OTG_STATE_B_PERIPHERAL;
90 usb_phy_set_event(&tu->phy, USB_EVENT_ENUMERATED);
90 break; 91 break;
91 case OTG_STATE_A_IDLE: 92 case OTG_STATE_A_IDLE:
92 /* 93 /*
93 * Session is now valid assuming the USB hub is driving 94 * Session is now valid assuming the USB hub is driving
94 * Vbus. 95 * Vbus.
95 */ 96 */
96 tu->phy.state = OTG_STATE_A_HOST; 97 tu->phy.otg->state = OTG_STATE_A_HOST;
97 break; 98 break;
98 default: 99 default:
99 break; 100 break;
100 } 101 }
101 dev_info(&tu->pt_dev->dev, "USB cable connected\n"); 102 dev_info(&tu->pt_dev->dev, "USB cable connected\n");
102 } else { 103 } else {
103 switch (tu->phy.state) { 104 switch (tu->phy.otg->state) {
104 case OTG_STATE_B_PERIPHERAL: 105 case OTG_STATE_B_PERIPHERAL:
105 if (tu->phy.otg->gadget) 106 if (tu->phy.otg->gadget)
106 usb_gadget_vbus_disconnect(tu->phy.otg->gadget); 107 usb_gadget_vbus_disconnect(tu->phy.otg->gadget);
107 tu->phy.state = OTG_STATE_B_IDLE; 108 tu->phy.otg->state = OTG_STATE_B_IDLE;
109 usb_phy_set_event(&tu->phy, USB_EVENT_NONE);
108 break; 110 break;
109 case OTG_STATE_A_HOST: 111 case OTG_STATE_A_HOST:
110 tu->phy.state = OTG_STATE_A_IDLE; 112 tu->phy.otg->state = OTG_STATE_A_IDLE;
111 break; 113 break;
112 default: 114 default:
113 break; 115 break;
@@ -132,14 +134,14 @@ static void tahvo_usb_become_host(struct tahvo_usb *tu)
132 /* Power up the transceiver in USB host mode */ 134 /* Power up the transceiver in USB host mode */
133 retu_write(rdev, TAHVO_REG_USBR, USBR_REGOUT | USBR_NSUSPEND | 135 retu_write(rdev, TAHVO_REG_USBR, USBR_REGOUT | USBR_NSUSPEND |
134 USBR_MASTER_SW2 | USBR_MASTER_SW1); 136 USBR_MASTER_SW2 | USBR_MASTER_SW1);
135 tu->phy.state = OTG_STATE_A_IDLE; 137 tu->phy.otg->state = OTG_STATE_A_IDLE;
136 138
137 check_vbus_state(tu); 139 check_vbus_state(tu);
138} 140}
139 141
140static void tahvo_usb_stop_host(struct tahvo_usb *tu) 142static void tahvo_usb_stop_host(struct tahvo_usb *tu)
141{ 143{
142 tu->phy.state = OTG_STATE_A_IDLE; 144 tu->phy.otg->state = OTG_STATE_A_IDLE;
143} 145}
144 146
145static void tahvo_usb_become_peripheral(struct tahvo_usb *tu) 147static void tahvo_usb_become_peripheral(struct tahvo_usb *tu)
@@ -151,7 +153,7 @@ static void tahvo_usb_become_peripheral(struct tahvo_usb *tu)
151 /* Power up transceiver and set it in USB peripheral mode */ 153 /* Power up transceiver and set it in USB peripheral mode */
152 retu_write(rdev, TAHVO_REG_USBR, USBR_SLAVE_CONTROL | USBR_REGOUT | 154 retu_write(rdev, TAHVO_REG_USBR, USBR_SLAVE_CONTROL | USBR_REGOUT |
153 USBR_NSUSPEND | USBR_SLAVE_SW); 155 USBR_NSUSPEND | USBR_SLAVE_SW);
154 tu->phy.state = OTG_STATE_B_IDLE; 156 tu->phy.otg->state = OTG_STATE_B_IDLE;
155 157
156 check_vbus_state(tu); 158 check_vbus_state(tu);
157} 159}
@@ -160,7 +162,7 @@ static void tahvo_usb_stop_peripheral(struct tahvo_usb *tu)
160{ 162{
161 if (tu->phy.otg->gadget) 163 if (tu->phy.otg->gadget)
162 usb_gadget_vbus_disconnect(tu->phy.otg->gadget); 164 usb_gadget_vbus_disconnect(tu->phy.otg->gadget);
163 tu->phy.state = OTG_STATE_B_IDLE; 165 tu->phy.otg->state = OTG_STATE_B_IDLE;
164} 166}
165 167
166static void tahvo_usb_power_off(struct tahvo_usb *tu) 168static void tahvo_usb_power_off(struct tahvo_usb *tu)
@@ -173,7 +175,7 @@ static void tahvo_usb_power_off(struct tahvo_usb *tu)
173 175
174 /* Power off transceiver */ 176 /* Power off transceiver */
175 retu_write(rdev, TAHVO_REG_USBR, 0); 177 retu_write(rdev, TAHVO_REG_USBR, 0);
176 tu->phy.state = OTG_STATE_UNDEFINED; 178 tu->phy.otg->state = OTG_STATE_UNDEFINED;
177} 179}
178 180
179static int tahvo_usb_set_suspend(struct usb_phy *dev, int suspend) 181static int tahvo_usb_set_suspend(struct usb_phy *dev, int suspend)
@@ -196,7 +198,8 @@ static int tahvo_usb_set_suspend(struct usb_phy *dev, int suspend)
196 198
197static int tahvo_usb_set_host(struct usb_otg *otg, struct usb_bus *host) 199static int tahvo_usb_set_host(struct usb_otg *otg, struct usb_bus *host)
198{ 200{
199 struct tahvo_usb *tu = container_of(otg->phy, struct tahvo_usb, phy); 201 struct tahvo_usb *tu = container_of(otg->usb_phy, struct tahvo_usb,
202 phy);
200 203
201 dev_dbg(&tu->pt_dev->dev, "%s %p\n", __func__, host); 204 dev_dbg(&tu->pt_dev->dev, "%s %p\n", __func__, host);
202 205
@@ -225,7 +228,8 @@ static int tahvo_usb_set_host(struct usb_otg *otg, struct usb_bus *host)
225static int tahvo_usb_set_peripheral(struct usb_otg *otg, 228static int tahvo_usb_set_peripheral(struct usb_otg *otg,
226 struct usb_gadget *gadget) 229 struct usb_gadget *gadget)
227{ 230{
228 struct tahvo_usb *tu = container_of(otg->phy, struct tahvo_usb, phy); 231 struct tahvo_usb *tu = container_of(otg->usb_phy, struct tahvo_usb,
232 phy);
229 233
230 dev_dbg(&tu->pt_dev->dev, "%s %p\n", __func__, gadget); 234 dev_dbg(&tu->pt_dev->dev, "%s %p\n", __func__, gadget);
231 235
@@ -379,11 +383,11 @@ static int tahvo_usb_probe(struct platform_device *pdev)
379 /* Create OTG interface */ 383 /* Create OTG interface */
380 tahvo_usb_power_off(tu); 384 tahvo_usb_power_off(tu);
381 tu->phy.dev = &pdev->dev; 385 tu->phy.dev = &pdev->dev;
382 tu->phy.state = OTG_STATE_UNDEFINED; 386 tu->phy.otg->state = OTG_STATE_UNDEFINED;
383 tu->phy.label = DRIVER_NAME; 387 tu->phy.label = DRIVER_NAME;
384 tu->phy.set_suspend = tahvo_usb_set_suspend; 388 tu->phy.set_suspend = tahvo_usb_set_suspend;
385 389
386 tu->phy.otg->phy = &tu->phy; 390 tu->phy.otg->usb_phy = &tu->phy;
387 tu->phy.otg->set_host = tahvo_usb_set_host; 391 tu->phy.otg->set_host = tahvo_usb_set_host;
388 tu->phy.otg->set_peripheral = tahvo_usb_set_peripheral; 392 tu->phy.otg->set_peripheral = tahvo_usb_set_peripheral;
389 393
diff --git a/drivers/usb/phy/phy-tegra-usb.c b/drivers/usb/phy/phy-tegra-usb.c
index 886f1807a67b..fa2bfa4ee34e 100644
--- a/drivers/usb/phy/phy-tegra-usb.c
+++ b/drivers/usb/phy/phy-tegra-usb.c
@@ -880,11 +880,8 @@ static int utmi_phy_probe(struct tegra_usb_phy *tegra_phy,
880 880
881 tegra_phy->config = devm_kzalloc(&pdev->dev, sizeof(*config), 881 tegra_phy->config = devm_kzalloc(&pdev->dev, sizeof(*config),
882 GFP_KERNEL); 882 GFP_KERNEL);
883 if (!tegra_phy->config) { 883 if (!tegra_phy->config)
884 dev_err(&pdev->dev,
885 "unable to allocate memory for USB UTMIP config\n");
886 return -ENOMEM; 884 return -ENOMEM;
887 }
888 885
889 config = tegra_phy->config; 886 config = tegra_phy->config;
890 887
@@ -979,10 +976,8 @@ static int tegra_usb_phy_probe(struct platform_device *pdev)
979 int err; 976 int err;
980 977
981 tegra_phy = devm_kzalloc(&pdev->dev, sizeof(*tegra_phy), GFP_KERNEL); 978 tegra_phy = devm_kzalloc(&pdev->dev, sizeof(*tegra_phy), GFP_KERNEL);
982 if (!tegra_phy) { 979 if (!tegra_phy)
983 dev_err(&pdev->dev, "unable to allocate memory for USB2 PHY\n");
984 return -ENOMEM; 980 return -ENOMEM;
985 }
986 981
987 match = of_match_device(tegra_usb_phy_id_table, &pdev->dev); 982 match = of_match_device(tegra_usb_phy_id_table, &pdev->dev);
988 if (!match) { 983 if (!match) {
diff --git a/drivers/usb/phy/phy-ulpi.c b/drivers/usb/phy/phy-ulpi.c
index 4e3877c329f2..f48a7a21e3c2 100644
--- a/drivers/usb/phy/phy-ulpi.c
+++ b/drivers/usb/phy/phy-ulpi.c
@@ -211,7 +211,7 @@ static int ulpi_init(struct usb_phy *phy)
211 211
212static int ulpi_set_host(struct usb_otg *otg, struct usb_bus *host) 212static int ulpi_set_host(struct usb_otg *otg, struct usb_bus *host)
213{ 213{
214 struct usb_phy *phy = otg->phy; 214 struct usb_phy *phy = otg->usb_phy;
215 unsigned int flags = usb_phy_io_read(phy, ULPI_IFC_CTRL); 215 unsigned int flags = usb_phy_io_read(phy, ULPI_IFC_CTRL);
216 216
217 if (!host) { 217 if (!host) {
@@ -237,7 +237,7 @@ static int ulpi_set_host(struct usb_otg *otg, struct usb_bus *host)
237 237
238static int ulpi_set_vbus(struct usb_otg *otg, bool on) 238static int ulpi_set_vbus(struct usb_otg *otg, bool on)
239{ 239{
240 struct usb_phy *phy = otg->phy; 240 struct usb_phy *phy = otg->usb_phy;
241 unsigned int flags = usb_phy_io_read(phy, ULPI_OTG_CTRL); 241 unsigned int flags = usb_phy_io_read(phy, ULPI_OTG_CTRL);
242 242
243 flags &= ~(ULPI_OTG_CTRL_DRVVBUS | ULPI_OTG_CTRL_DRVVBUS_EXT); 243 flags &= ~(ULPI_OTG_CTRL_DRVVBUS | ULPI_OTG_CTRL_DRVVBUS_EXT);
@@ -276,7 +276,7 @@ otg_ulpi_create(struct usb_phy_io_ops *ops,
276 phy->otg = otg; 276 phy->otg = otg;
277 phy->init = ulpi_init; 277 phy->init = ulpi_init;
278 278
279 otg->phy = phy; 279 otg->usb_phy = phy;
280 otg->set_host = ulpi_set_host; 280 otg->set_host = ulpi_set_host;
281 otg->set_vbus = ulpi_set_vbus; 281 otg->set_vbus = ulpi_set_vbus;
282 282
diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c
index 045cd309367a..b4066a001ba0 100644
--- a/drivers/usb/phy/phy.c
+++ b/drivers/usb/phy/phy.c
@@ -191,7 +191,9 @@ struct usb_phy *devm_usb_get_phy_by_phandle(struct device *dev,
191 191
192 phy = __of_usb_find_phy(node); 192 phy = __of_usb_find_phy(node);
193 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) { 193 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
194 phy = ERR_PTR(-EPROBE_DEFER); 194 if (!IS_ERR(phy))
195 phy = ERR_PTR(-EPROBE_DEFER);
196
195 devres_free(ptr); 197 devres_free(ptr);
196 goto err1; 198 goto err1;
197 } 199 }
@@ -444,3 +446,15 @@ int usb_bind_phy(const char *dev_name, u8 index,
444 return 0; 446 return 0;
445} 447}
446EXPORT_SYMBOL_GPL(usb_bind_phy); 448EXPORT_SYMBOL_GPL(usb_bind_phy);
449
450/**
451 * usb_phy_set_event - set event to phy event
452 * @x: the phy returned by usb_get_phy();
453 *
454 * This sets event to phy event
455 */
456void usb_phy_set_event(struct usb_phy *x, unsigned long event)
457{
458 x->last_event = event;
459}
460EXPORT_SYMBOL_GPL(usb_phy_set_event);
diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
index 169307ba08b7..371478704899 100644
--- a/drivers/usb/renesas_usbhs/common.c
+++ b/drivers/usb/renesas_usbhs/common.c
@@ -126,13 +126,15 @@ void usbhs_sys_host_ctrl(struct usbhs_priv *priv, int enable)
126void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable) 126void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable)
127{ 127{
128 u16 mask = DCFM | DRPD | DPRPU | HSE | USBE; 128 u16 mask = DCFM | DRPD | DPRPU | HSE | USBE;
129 u16 val = DPRPU | HSE | USBE; 129 u16 val = HSE | USBE;
130 130
131 /* 131 /*
132 * if enable 132 * if enable
133 * 133 *
134 * - select Function mode 134 * - select Function mode
135 * - D+ Line Pull-up 135 * - D+ Line Pull-up is disabled
136 * When D+ Line Pull-up is enabled,
137 * calling usbhs_sys_function_pullup(,1)
136 */ 138 */
137 usbhs_bset(priv, SYSCFG, mask, enable ? val : 0); 139 usbhs_bset(priv, SYSCFG, mask, enable ? val : 0);
138} 140}
diff --git a/drivers/usb/renesas_usbhs/common.h b/drivers/usb/renesas_usbhs/common.h
index a7996da6a1bd..0427cdd1a483 100644
--- a/drivers/usb/renesas_usbhs/common.h
+++ b/drivers/usb/renesas_usbhs/common.h
@@ -102,6 +102,10 @@ struct usbhs_priv;
102#define DEVADD8 0x00E0 102#define DEVADD8 0x00E0
103#define DEVADD9 0x00E2 103#define DEVADD9 0x00E2
104#define DEVADDA 0x00E4 104#define DEVADDA 0x00E4
105#define D2FIFOSEL 0x00F0 /* for R-Car Gen2 */
106#define D2FIFOCTR 0x00F2 /* for R-Car Gen2 */
107#define D3FIFOSEL 0x00F4 /* for R-Car Gen2 */
108#define D3FIFOCTR 0x00F6 /* for R-Car Gen2 */
105 109
106/* SYSCFG */ 110/* SYSCFG */
107#define SCKE (1 << 10) /* USB Module Clock Enable */ 111#define SCKE (1 << 10) /* USB Module Clock Enable */
@@ -269,7 +273,8 @@ struct usbhs_priv {
269 */ 273 */
270 struct usbhs_fifo_info fifo_info; 274 struct usbhs_fifo_info fifo_info;
271 275
272 struct usb_phy *phy; 276 struct usb_phy *usb_phy;
277 struct phy *phy;
273}; 278};
274 279
275/* 280/*
diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
index b0c97a3f1bfe..f46271ce1b15 100644
--- a/drivers/usb/renesas_usbhs/fifo.c
+++ b/drivers/usb/renesas_usbhs/fifo.c
@@ -21,8 +21,6 @@
21#include "pipe.h" 21#include "pipe.h"
22 22
23#define usbhsf_get_cfifo(p) (&((p)->fifo_info.cfifo)) 23#define usbhsf_get_cfifo(p) (&((p)->fifo_info.cfifo))
24#define usbhsf_get_d0fifo(p) (&((p)->fifo_info.d0fifo))
25#define usbhsf_get_d1fifo(p) (&((p)->fifo_info.d1fifo))
26#define usbhsf_is_cfifo(p, f) (usbhsf_get_cfifo(p) == f) 24#define usbhsf_is_cfifo(p, f) (usbhsf_get_cfifo(p) == f)
27 25
28#define usbhsf_fifo_is_busy(f) ((f)->pipe) /* see usbhs_pipe_select_fifo */ 26#define usbhsf_fifo_is_busy(f) ((f)->pipe) /* see usbhs_pipe_select_fifo */
@@ -577,14 +575,6 @@ static int usbhsf_pio_try_push(struct usbhs_pkt *pkt, int *is_done)
577 usbhs_pipe_number(pipe), 575 usbhs_pipe_number(pipe),
578 pkt->length, pkt->actual, *is_done, pkt->zero); 576 pkt->length, pkt->actual, *is_done, pkt->zero);
579 577
580 /*
581 * Transmission end
582 */
583 if (*is_done) {
584 if (usbhs_pipe_is_dcp(pipe))
585 usbhs_dcp_control_transfer_done(pipe);
586 }
587
588 usbhsf_fifo_unselect(pipe, fifo); 578 usbhsf_fifo_unselect(pipe, fifo);
589 579
590 return 0; 580 return 0;
@@ -722,14 +712,6 @@ usbhs_fifo_read_end:
722 usbhs_pipe_number(pipe), 712 usbhs_pipe_number(pipe),
723 pkt->length, pkt->actual, *is_done, pkt->zero); 713 pkt->length, pkt->actual, *is_done, pkt->zero);
724 714
725 /*
726 * Transmission end
727 */
728 if (*is_done) {
729 if (usbhs_pipe_is_dcp(pipe))
730 usbhs_dcp_control_transfer_done(pipe);
731 }
732
733usbhs_fifo_read_busy: 715usbhs_fifo_read_busy:
734 usbhsf_fifo_unselect(pipe, fifo); 716 usbhsf_fifo_unselect(pipe, fifo);
735 717
@@ -777,18 +759,13 @@ static struct usbhs_fifo *usbhsf_get_dma_fifo(struct usbhs_priv *priv,
777 struct usbhs_pkt *pkt) 759 struct usbhs_pkt *pkt)
778{ 760{
779 struct usbhs_fifo *fifo; 761 struct usbhs_fifo *fifo;
762 int i;
780 763
781 /* DMA :: D0FIFO */ 764 usbhs_for_each_dfifo(priv, fifo, i) {
782 fifo = usbhsf_get_d0fifo(priv); 765 if (usbhsf_dma_chan_get(fifo, pkt) &&
783 if (usbhsf_dma_chan_get(fifo, pkt) && 766 !usbhsf_fifo_is_busy(fifo))
784 !usbhsf_fifo_is_busy(fifo)) 767 return fifo;
785 return fifo; 768 }
786
787 /* DMA :: D1FIFO */
788 fifo = usbhsf_get_d1fifo(priv);
789 if (usbhsf_dma_chan_get(fifo, pkt) &&
790 !usbhsf_fifo_is_busy(fifo))
791 return fifo;
792 769
793 return NULL; 770 return NULL;
794} 771}
@@ -1176,6 +1153,24 @@ static void usbhsf_dma_complete(void *arg)
1176 usbhs_pipe_number(pipe), ret); 1153 usbhs_pipe_number(pipe), ret);
1177} 1154}
1178 1155
1156void usbhs_fifo_clear_dcp(struct usbhs_pipe *pipe)
1157{
1158 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
1159 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
1160
1161 /* clear DCP FIFO of transmission */
1162 if (usbhsf_fifo_select(pipe, fifo, 1) < 0)
1163 return;
1164 usbhsf_fifo_clear(pipe, fifo);
1165 usbhsf_fifo_unselect(pipe, fifo);
1166
1167 /* clear DCP FIFO of reception */
1168 if (usbhsf_fifo_select(pipe, fifo, 0) < 0)
1169 return;
1170 usbhsf_fifo_clear(pipe, fifo);
1171 usbhsf_fifo_unselect(pipe, fifo);
1172}
1173
1179/* 1174/*
1180 * fifo init 1175 * fifo init
1181 */ 1176 */
@@ -1183,8 +1178,8 @@ void usbhs_fifo_init(struct usbhs_priv *priv)
1183{ 1178{
1184 struct usbhs_mod *mod = usbhs_mod_get_current(priv); 1179 struct usbhs_mod *mod = usbhs_mod_get_current(priv);
1185 struct usbhs_fifo *cfifo = usbhsf_get_cfifo(priv); 1180 struct usbhs_fifo *cfifo = usbhsf_get_cfifo(priv);
1186 struct usbhs_fifo *d0fifo = usbhsf_get_d0fifo(priv); 1181 struct usbhs_fifo *dfifo;
1187 struct usbhs_fifo *d1fifo = usbhsf_get_d1fifo(priv); 1182 int i;
1188 1183
1189 mod->irq_empty = usbhsf_irq_empty; 1184 mod->irq_empty = usbhsf_irq_empty;
1190 mod->irq_ready = usbhsf_irq_ready; 1185 mod->irq_ready = usbhsf_irq_ready;
@@ -1192,8 +1187,8 @@ void usbhs_fifo_init(struct usbhs_priv *priv)
1192 mod->irq_brdysts = 0; 1187 mod->irq_brdysts = 0;
1193 1188
1194 cfifo->pipe = NULL; 1189 cfifo->pipe = NULL;
1195 d0fifo->pipe = NULL; 1190 usbhs_for_each_dfifo(priv, dfifo, i)
1196 d1fifo->pipe = NULL; 1191 dfifo->pipe = NULL;
1197} 1192}
1198 1193
1199void usbhs_fifo_quit(struct usbhs_priv *priv) 1194void usbhs_fifo_quit(struct usbhs_priv *priv)
@@ -1206,6 +1201,25 @@ void usbhs_fifo_quit(struct usbhs_priv *priv)
1206 mod->irq_brdysts = 0; 1201 mod->irq_brdysts = 0;
1207} 1202}
1208 1203
1204#define __USBHS_DFIFO_INIT(priv, fifo, channel, fifo_port) \
1205do { \
1206 fifo = usbhsf_get_dnfifo(priv, channel); \
1207 fifo->name = "D"#channel"FIFO"; \
1208 fifo->port = fifo_port; \
1209 fifo->sel = D##channel##FIFOSEL; \
1210 fifo->ctr = D##channel##FIFOCTR; \
1211 fifo->tx_slave.shdma_slave.slave_id = \
1212 usbhs_get_dparam(priv, d##channel##_tx_id); \
1213 fifo->rx_slave.shdma_slave.slave_id = \
1214 usbhs_get_dparam(priv, d##channel##_rx_id); \
1215 usbhsf_dma_init(priv, fifo); \
1216} while (0)
1217
1218#define USBHS_DFIFO_INIT(priv, fifo, channel) \
1219 __USBHS_DFIFO_INIT(priv, fifo, channel, D##channel##FIFO)
1220#define USBHS_DFIFO_INIT_NO_PORT(priv, fifo, channel) \
1221 __USBHS_DFIFO_INIT(priv, fifo, channel, 0)
1222
1209int usbhs_fifo_probe(struct usbhs_priv *priv) 1223int usbhs_fifo_probe(struct usbhs_priv *priv)
1210{ 1224{
1211 struct usbhs_fifo *fifo; 1225 struct usbhs_fifo *fifo;
@@ -1217,31 +1231,20 @@ int usbhs_fifo_probe(struct usbhs_priv *priv)
1217 fifo->sel = CFIFOSEL; 1231 fifo->sel = CFIFOSEL;
1218 fifo->ctr = CFIFOCTR; 1232 fifo->ctr = CFIFOCTR;
1219 1233
1220 /* D0FIFO */ 1234 /* DFIFO */
1221 fifo = usbhsf_get_d0fifo(priv); 1235 USBHS_DFIFO_INIT(priv, fifo, 0);
1222 fifo->name = "D0FIFO"; 1236 USBHS_DFIFO_INIT(priv, fifo, 1);
1223 fifo->port = D0FIFO; 1237 USBHS_DFIFO_INIT_NO_PORT(priv, fifo, 2);
1224 fifo->sel = D0FIFOSEL; 1238 USBHS_DFIFO_INIT_NO_PORT(priv, fifo, 3);
1225 fifo->ctr = D0FIFOCTR;
1226 fifo->tx_slave.shdma_slave.slave_id = usbhs_get_dparam(priv, d0_tx_id);
1227 fifo->rx_slave.shdma_slave.slave_id = usbhs_get_dparam(priv, d0_rx_id);
1228 usbhsf_dma_init(priv, fifo);
1229
1230 /* D1FIFO */
1231 fifo = usbhsf_get_d1fifo(priv);
1232 fifo->name = "D1FIFO";
1233 fifo->port = D1FIFO;
1234 fifo->sel = D1FIFOSEL;
1235 fifo->ctr = D1FIFOCTR;
1236 fifo->tx_slave.shdma_slave.slave_id = usbhs_get_dparam(priv, d1_tx_id);
1237 fifo->rx_slave.shdma_slave.slave_id = usbhs_get_dparam(priv, d1_rx_id);
1238 usbhsf_dma_init(priv, fifo);
1239 1239
1240 return 0; 1240 return 0;
1241} 1241}
1242 1242
1243void usbhs_fifo_remove(struct usbhs_priv *priv) 1243void usbhs_fifo_remove(struct usbhs_priv *priv)
1244{ 1244{
1245 usbhsf_dma_quit(priv, usbhsf_get_d0fifo(priv)); 1245 struct usbhs_fifo *fifo;
1246 usbhsf_dma_quit(priv, usbhsf_get_d1fifo(priv)); 1246 int i;
1247
1248 usbhs_for_each_dfifo(priv, fifo, i)
1249 usbhsf_dma_quit(priv, fifo);
1247} 1250}
diff --git a/drivers/usb/renesas_usbhs/fifo.h b/drivers/usb/renesas_usbhs/fifo.h
index a168a1760fce..f07037c1185f 100644
--- a/drivers/usb/renesas_usbhs/fifo.h
+++ b/drivers/usb/renesas_usbhs/fifo.h
@@ -38,11 +38,16 @@ struct usbhs_fifo {
38 struct sh_dmae_slave rx_slave; 38 struct sh_dmae_slave rx_slave;
39}; 39};
40 40
41#define USBHS_MAX_NUM_DFIFO 4
41struct usbhs_fifo_info { 42struct usbhs_fifo_info {
42 struct usbhs_fifo cfifo; 43 struct usbhs_fifo cfifo;
43 struct usbhs_fifo d0fifo; 44 struct usbhs_fifo dfifo[USBHS_MAX_NUM_DFIFO];
44 struct usbhs_fifo d1fifo;
45}; 45};
46#define usbhsf_get_dnfifo(p, n) (&((p)->fifo_info.dfifo[n]))
47#define usbhs_for_each_dfifo(priv, dfifo, i) \
48 for ((i) = 0, dfifo = usbhsf_get_dnfifo(priv, (i)); \
49 ((i) < USBHS_MAX_NUM_DFIFO); \
50 (i)++, dfifo = usbhsf_get_dnfifo(priv, (i)))
46 51
47struct usbhs_pkt_handle; 52struct usbhs_pkt_handle;
48struct usbhs_pkt { 53struct usbhs_pkt {
@@ -74,6 +79,7 @@ int usbhs_fifo_probe(struct usbhs_priv *priv);
74void usbhs_fifo_remove(struct usbhs_priv *priv); 79void usbhs_fifo_remove(struct usbhs_priv *priv);
75void usbhs_fifo_init(struct usbhs_priv *priv); 80void usbhs_fifo_init(struct usbhs_priv *priv);
76void usbhs_fifo_quit(struct usbhs_priv *priv); 81void usbhs_fifo_quit(struct usbhs_priv *priv);
82void usbhs_fifo_clear_dcp(struct usbhs_pipe *pipe);
77 83
78/* 84/*
79 * packet info 85 * packet info
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c
index 2d17c10a0428..8697e6efcabf 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -56,6 +56,7 @@ struct usbhsg_gpriv {
56#define USBHSG_STATUS_REGISTERD (1 << 1) 56#define USBHSG_STATUS_REGISTERD (1 << 1)
57#define USBHSG_STATUS_WEDGE (1 << 2) 57#define USBHSG_STATUS_WEDGE (1 << 2)
58#define USBHSG_STATUS_SELF_POWERED (1 << 3) 58#define USBHSG_STATUS_SELF_POWERED (1 << 3)
59#define USBHSG_STATUS_SOFT_CONNECT (1 << 4)
59}; 60};
60 61
61struct usbhsg_recip_handle { 62struct usbhsg_recip_handle {
@@ -484,6 +485,9 @@ static int usbhsg_irq_ctrl_stage(struct usbhs_priv *priv,
484 case NODATA_STATUS_STAGE: 485 case NODATA_STATUS_STAGE:
485 pipe->handler = &usbhs_ctrl_stage_end_handler; 486 pipe->handler = &usbhs_ctrl_stage_end_handler;
486 break; 487 break;
488 case READ_STATUS_STAGE:
489 case WRITE_STATUS_STAGE:
490 usbhs_dcp_control_transfer_done(pipe);
487 default: 491 default:
488 return ret; 492 return ret;
489 } 493 }
@@ -602,6 +606,9 @@ static int usbhsg_ep_disable(struct usb_ep *ep)
602 struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep); 606 struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
603 struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep); 607 struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
604 608
609 if (!pipe)
610 return -EINVAL;
611
605 usbhsg_pipe_disable(uep); 612 usbhsg_pipe_disable(uep);
606 usbhs_pipe_free(pipe); 613 usbhs_pipe_free(pipe);
607 614
@@ -723,6 +730,25 @@ static struct usb_ep_ops usbhsg_ep_ops = {
723}; 730};
724 731
725/* 732/*
733 * pullup control
734 */
735static int usbhsg_can_pullup(struct usbhs_priv *priv)
736{
737 struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
738
739 return gpriv->driver &&
740 usbhsg_status_has(gpriv, USBHSG_STATUS_SOFT_CONNECT);
741}
742
743static void usbhsg_update_pullup(struct usbhs_priv *priv)
744{
745 if (usbhsg_can_pullup(priv))
746 usbhs_sys_function_pullup(priv, 1);
747 else
748 usbhs_sys_function_pullup(priv, 0);
749}
750
751/*
726 * usb module start/end 752 * usb module start/end
727 */ 753 */
728static int usbhsg_try_start(struct usbhs_priv *priv, u32 status) 754static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
@@ -756,9 +782,9 @@ static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
756 /* 782 /*
757 * pipe initialize and enable DCP 783 * pipe initialize and enable DCP
758 */ 784 */
785 usbhs_fifo_init(priv);
759 usbhs_pipe_init(priv, 786 usbhs_pipe_init(priv,
760 usbhsg_dma_map_ctrl); 787 usbhsg_dma_map_ctrl);
761 usbhs_fifo_init(priv);
762 788
763 /* dcp init instead of usbhsg_ep_enable() */ 789 /* dcp init instead of usbhsg_ep_enable() */
764 dcp->pipe = usbhs_dcp_malloc(priv); 790 dcp->pipe = usbhs_dcp_malloc(priv);
@@ -772,6 +798,7 @@ static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
772 * - usb module 798 * - usb module
773 */ 799 */
774 usbhs_sys_function_ctrl(priv, 1); 800 usbhs_sys_function_ctrl(priv, 1);
801 usbhsg_update_pullup(priv);
775 802
776 /* 803 /*
777 * enable irq callback 804 * enable irq callback
@@ -851,8 +878,7 @@ static int usbhsg_gadget_start(struct usb_gadget *gadget,
851 return usbhsg_try_start(priv, USBHSG_STATUS_REGISTERD); 878 return usbhsg_try_start(priv, USBHSG_STATUS_REGISTERD);
852} 879}
853 880
854static int usbhsg_gadget_stop(struct usb_gadget *gadget, 881static int usbhsg_gadget_stop(struct usb_gadget *gadget)
855 struct usb_gadget_driver *driver)
856{ 882{
857 struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget); 883 struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
858 struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv); 884 struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
@@ -878,8 +904,15 @@ static int usbhsg_pullup(struct usb_gadget *gadget, int is_on)
878{ 904{
879 struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget); 905 struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
880 struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv); 906 struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
907 unsigned long flags;
881 908
882 usbhs_sys_function_pullup(priv, is_on); 909 usbhs_lock(priv, flags);
910 if (is_on)
911 usbhsg_status_set(gpriv, USBHSG_STATUS_SOFT_CONNECT);
912 else
913 usbhsg_status_clr(gpriv, USBHSG_STATUS_SOFT_CONNECT);
914 usbhsg_update_pullup(priv);
915 usbhs_unlock(priv, flags);
883 916
884 return 0; 917 return 0;
885} 918}
diff --git a/drivers/usb/renesas_usbhs/mod_host.c b/drivers/usb/renesas_usbhs/mod_host.c
index 10e1ded9c9cc..f0d323125871 100644
--- a/drivers/usb/renesas_usbhs/mod_host.c
+++ b/drivers/usb/renesas_usbhs/mod_host.c
@@ -1474,9 +1474,9 @@ static int usbhsh_start(struct usbhs_priv *priv)
1474 /* 1474 /*
1475 * pipe initialize and enable DCP 1475 * pipe initialize and enable DCP
1476 */ 1476 */
1477 usbhs_fifo_init(priv);
1477 usbhs_pipe_init(priv, 1478 usbhs_pipe_init(priv,
1478 usbhsh_dma_map_ctrl); 1479 usbhsh_dma_map_ctrl);
1479 usbhs_fifo_init(priv);
1480 usbhsh_pipe_init_for_host(priv); 1480 usbhsh_pipe_init_for_host(priv);
1481 1481
1482 /* 1482 /*
diff --git a/drivers/usb/renesas_usbhs/pipe.c b/drivers/usb/renesas_usbhs/pipe.c
index 040bcefcb040..007f45abe96c 100644
--- a/drivers/usb/renesas_usbhs/pipe.c
+++ b/drivers/usb/renesas_usbhs/pipe.c
@@ -618,8 +618,12 @@ void usbhs_pipe_data_sequence(struct usbhs_pipe *pipe, int sequence)
618 618
619void usbhs_pipe_clear(struct usbhs_pipe *pipe) 619void usbhs_pipe_clear(struct usbhs_pipe *pipe)
620{ 620{
621 usbhsp_pipectrl_set(pipe, ACLRM, ACLRM); 621 if (usbhs_pipe_is_dcp(pipe)) {
622 usbhsp_pipectrl_set(pipe, ACLRM, 0); 622 usbhs_fifo_clear_dcp(pipe);
623 } else {
624 usbhsp_pipectrl_set(pipe, ACLRM, ACLRM);
625 usbhsp_pipectrl_set(pipe, ACLRM, 0);
626 }
623} 627}
624 628
625static struct usbhs_pipe *usbhsp_get_pipe(struct usbhs_priv *priv, u32 type) 629static struct usbhs_pipe *usbhsp_get_pipe(struct usbhs_priv *priv, u32 type)
diff --git a/drivers/usb/renesas_usbhs/rcar2.c b/drivers/usb/renesas_usbhs/rcar2.c
index e6b9dcc1c289..8fc15c0ba339 100644
--- a/drivers/usb/renesas_usbhs/rcar2.c
+++ b/drivers/usb/renesas_usbhs/rcar2.c
@@ -12,6 +12,7 @@
12 12
13#include <linux/gpio.h> 13#include <linux/gpio.h>
14#include <linux/of_gpio.h> 14#include <linux/of_gpio.h>
15#include <linux/phy/phy.h>
15#include <linux/platform_data/gpio-rcar.h> 16#include <linux/platform_data/gpio-rcar.h>
16#include <linux/usb/phy.h> 17#include <linux/usb/phy.h>
17#include "common.h" 18#include "common.h"
@@ -20,25 +21,43 @@
20static int usbhs_rcar2_hardware_init(struct platform_device *pdev) 21static int usbhs_rcar2_hardware_init(struct platform_device *pdev)
21{ 22{
22 struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev); 23 struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev);
23 struct usb_phy *phy;
24 24
25 phy = usb_get_phy_dev(&pdev->dev, 0); 25 if (IS_ENABLED(CONFIG_GENERIC_PHY)) {
26 if (IS_ERR(phy)) 26 struct phy *phy = phy_get(&pdev->dev, "usb");
27 return PTR_ERR(phy);
28 27
29 priv->phy = phy; 28 if (IS_ERR(phy))
30 return 0; 29 return PTR_ERR(phy);
30
31 priv->phy = phy;
32 return 0;
33 }
34
35 if (IS_ENABLED(CONFIG_USB_PHY)) {
36 struct usb_phy *usb_phy = usb_get_phy_dev(&pdev->dev, 0);
37
38 if (IS_ERR(usb_phy))
39 return PTR_ERR(usb_phy);
40
41 priv->usb_phy = usb_phy;
42 return 0;
43 }
44
45 return -ENXIO;
31} 46}
32 47
33static int usbhs_rcar2_hardware_exit(struct platform_device *pdev) 48static int usbhs_rcar2_hardware_exit(struct platform_device *pdev)
34{ 49{
35 struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev); 50 struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev);
36 51
37 if (!priv->phy) 52 if (priv->phy) {
38 return 0; 53 phy_put(priv->phy);
54 priv->phy = NULL;
55 }
39 56
40 usb_put_phy(priv->phy); 57 if (priv->usb_phy) {
41 priv->phy = NULL; 58 usb_put_phy(priv->usb_phy);
59 priv->usb_phy = NULL;
60 }
42 61
43 return 0; 62 return 0;
44} 63}
@@ -47,21 +66,35 @@ static int usbhs_rcar2_power_ctrl(struct platform_device *pdev,
47 void __iomem *base, int enable) 66 void __iomem *base, int enable)
48{ 67{
49 struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev); 68 struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev);
69 int retval = -ENODEV;
70
71 if (priv->phy) {
72 if (enable) {
73 retval = phy_init(priv->phy);
50 74
51 if (!priv->phy) 75 if (!retval)
52 return -ENODEV; 76 retval = phy_power_on(priv->phy);
77 } else {
78 phy_power_off(priv->phy);
79 phy_exit(priv->phy);
80 retval = 0;
81 }
82 }
53 83
54 if (enable) { 84 if (priv->usb_phy) {
55 int retval = usb_phy_init(priv->phy); 85 if (enable) {
86 retval = usb_phy_init(priv->usb_phy);
56 87
57 if (!retval) 88 if (!retval)
58 retval = usb_phy_set_suspend(priv->phy, 0); 89 retval = usb_phy_set_suspend(priv->usb_phy, 0);
59 return retval; 90 } else {
91 usb_phy_set_suspend(priv->usb_phy, 1);
92 usb_phy_shutdown(priv->usb_phy);
93 retval = 0;
94 }
60 } 95 }
61 96
62 usb_phy_set_suspend(priv->phy, 1); 97 return retval;
63 usb_phy_shutdown(priv->phy);
64 return 0;
65} 98}
66 99
67static int usbhs_rcar2_get_id(struct platform_device *pdev) 100static int usbhs_rcar2_get_id(struct platform_device *pdev)
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 1fa99a301817..5decad77d8ed 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -562,6 +562,7 @@
562#define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450 562#define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450
563#define PCI_DEVICE_ID_AMD_8131_APIC 0x7451 563#define PCI_DEVICE_ID_AMD_8131_APIC 0x7451
564#define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458 564#define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458
565#define PCI_DEVICE_ID_AMD_NL_USB 0x7912
565#define PCI_DEVICE_ID_AMD_CS5535_IDE 0x208F 566#define PCI_DEVICE_ID_AMD_CS5535_IDE 0x208F
566#define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090 567#define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090
567#define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091 568#define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091
diff --git a/include/linux/platform_data/dwc3-exynos.h b/include/linux/platform_data/dwc3-exynos.h
deleted file mode 100644
index 5eb7da9b3772..000000000000
--- a/include/linux/platform_data/dwc3-exynos.h
+++ /dev/null
@@ -1,24 +0,0 @@
1/**
2 * dwc3-exynos.h - Samsung EXYNOS DWC3 Specific Glue layer, header.
3 *
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * http://www.samsung.com
6 *
7 * Author: Anton Tikhomirov <av.tikhomirov@samsung.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 */
14
15#ifndef _DWC3_EXYNOS_H_
16#define _DWC3_EXYNOS_H_
17
18struct dwc3_exynos_data {
19 int phy_type;
20 int (*phy_init)(struct platform_device *pdev, int type);
21 int (*phy_exit)(struct platform_device *pdev, int type);
22};
23
24#endif /* _DWC3_EXYNOS_H_ */
diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
index e14c09a45c5a..c01bf4ea27b9 100644
--- a/include/linux/usb/chipidea.h
+++ b/include/linux/usb/chipidea.h
@@ -13,7 +13,9 @@ struct ci_hdrc_platform_data {
13 /* offset of the capability registers */ 13 /* offset of the capability registers */
14 uintptr_t capoffset; 14 uintptr_t capoffset;
15 unsigned power_budget; 15 unsigned power_budget;
16 struct usb_phy *phy; 16 struct phy *phy;
17 /* old usb_phy interface */
18 struct usb_phy *usb_phy;
17 enum usb_phy_interface phy_mode; 19 enum usb_phy_interface phy_mode;
18 unsigned long flags; 20 unsigned long flags;
19#define CI_HDRC_REGS_SHARED BIT(0) 21#define CI_HDRC_REGS_SHARED BIT(0)
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index c330f5ef42cf..3d87defcc527 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -427,6 +427,8 @@ static inline struct usb_composite_driver *to_cdriver(
427 * @b_vendor_code: bMS_VendorCode part of the OS string 427 * @b_vendor_code: bMS_VendorCode part of the OS string
428 * @use_os_string: false by default, interested gadgets set it 428 * @use_os_string: false by default, interested gadgets set it
429 * @os_desc_config: the configuration to be used with OS descriptors 429 * @os_desc_config: the configuration to be used with OS descriptors
430 * @setup_pending: true when setup request is queued but not completed
431 * @os_desc_pending: true when os_desc request is queued but not completed
430 * 432 *
431 * One of these devices is allocated and initialized before the 433 * One of these devices is allocated and initialized before the
432 * associated device driver's bind() is called. 434 * associated device driver's bind() is called.
@@ -488,6 +490,9 @@ struct usb_composite_dev {
488 490
489 /* protects deactivations and delayed_status counts*/ 491 /* protects deactivations and delayed_status counts*/
490 spinlock_t lock; 492 spinlock_t lock;
493
494 unsigned setup_pending:1;
495 unsigned os_desc_pending:1;
491}; 496};
492 497
493extern int usb_string_id(struct usb_composite_dev *c); 498extern int usb_string_id(struct usb_composite_dev *c);
@@ -501,6 +506,8 @@ extern int usb_string_ids_n(struct usb_composite_dev *c, unsigned n);
501extern void composite_disconnect(struct usb_gadget *gadget); 506extern void composite_disconnect(struct usb_gadget *gadget);
502extern int composite_setup(struct usb_gadget *gadget, 507extern int composite_setup(struct usb_gadget *gadget,
503 const struct usb_ctrlrequest *ctrl); 508 const struct usb_ctrlrequest *ctrl);
509extern void composite_suspend(struct usb_gadget *gadget);
510extern void composite_resume(struct usb_gadget *gadget);
504 511
505/* 512/*
506 * Some systems will need runtime overrides for the product identifiers 513 * Some systems will need runtime overrides for the product identifiers
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 522cafe26790..70ddb3943b62 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -490,8 +490,7 @@ struct usb_gadget_ops {
490 void (*get_config_params)(struct usb_dcd_config_params *); 490 void (*get_config_params)(struct usb_dcd_config_params *);
491 int (*udc_start)(struct usb_gadget *, 491 int (*udc_start)(struct usb_gadget *,
492 struct usb_gadget_driver *); 492 struct usb_gadget_driver *);
493 int (*udc_stop)(struct usb_gadget *, 493 int (*udc_stop)(struct usb_gadget *);
494 struct usb_gadget_driver *);
495}; 494};
496 495
497/** 496/**
@@ -925,7 +924,7 @@ extern int usb_add_gadget_udc_release(struct device *parent,
925 struct usb_gadget *gadget, void (*release)(struct device *dev)); 924 struct usb_gadget *gadget, void (*release)(struct device *dev));
926extern int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget); 925extern int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget);
927extern void usb_del_gadget_udc(struct usb_gadget *gadget); 926extern void usb_del_gadget_udc(struct usb_gadget *gadget);
928extern int udc_attach_driver(const char *name, 927extern int usb_udc_attach_driver(const char *name,
929 struct usb_gadget_driver *driver); 928 struct usb_gadget_driver *driver);
930 929
931/*-------------------------------------------------------------------------*/ 930/*-------------------------------------------------------------------------*/
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index 154332b7c8c0..52661c5da690 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -9,15 +9,20 @@
9#ifndef __LINUX_USB_OTG_H 9#ifndef __LINUX_USB_OTG_H
10#define __LINUX_USB_OTG_H 10#define __LINUX_USB_OTG_H
11 11
12#include <linux/phy/phy.h>
12#include <linux/usb/phy.h> 13#include <linux/usb/phy.h>
13 14
14struct usb_otg { 15struct usb_otg {
15 u8 default_a; 16 u8 default_a;
16 17
17 struct usb_phy *phy; 18 struct phy *phy;
19 /* old usb_phy interface */
20 struct usb_phy *usb_phy;
18 struct usb_bus *host; 21 struct usb_bus *host;
19 struct usb_gadget *gadget; 22 struct usb_gadget *gadget;
20 23
24 enum usb_otg_state state;
25
21 /* bind/unbind the host controller */ 26 /* bind/unbind the host controller */
22 int (*set_host)(struct usb_otg *otg, struct usb_bus *host); 27 int (*set_host)(struct usb_otg *otg, struct usb_bus *host);
23 28
diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h
index 353053a33f21..f499c23e6342 100644
--- a/include/linux/usb/phy.h
+++ b/include/linux/usb/phy.h
@@ -77,7 +77,6 @@ struct usb_phy {
77 unsigned int flags; 77 unsigned int flags;
78 78
79 enum usb_phy_type type; 79 enum usb_phy_type type;
80 enum usb_otg_state state;
81 enum usb_phy_events last_event; 80 enum usb_phy_events last_event;
82 81
83 struct usb_otg *otg; 82 struct usb_otg *otg;
@@ -210,6 +209,7 @@ extern void usb_put_phy(struct usb_phy *);
210extern void devm_usb_put_phy(struct device *dev, struct usb_phy *x); 209extern void devm_usb_put_phy(struct device *dev, struct usb_phy *x);
211extern int usb_bind_phy(const char *dev_name, u8 index, 210extern int usb_bind_phy(const char *dev_name, u8 index,
212 const char *phy_dev_name); 211 const char *phy_dev_name);
212extern void usb_phy_set_event(struct usb_phy *x, unsigned long event);
213#else 213#else
214static inline struct usb_phy *usb_get_phy(enum usb_phy_type type) 214static inline struct usb_phy *usb_get_phy(enum usb_phy_type type)
215{ 215{
@@ -251,6 +251,10 @@ static inline int usb_bind_phy(const char *dev_name, u8 index,
251{ 251{
252 return -EOPNOTSUPP; 252 return -EOPNOTSUPP;
253} 253}
254
255static inline void usb_phy_set_event(struct usb_phy *x, unsigned long event)
256{
257}
254#endif 258#endif
255 259
256static inline int 260static inline int
diff --git a/include/linux/usb/renesas_usbhs.h b/include/linux/usb/renesas_usbhs.h
index d5952bb66752..9fd9e481ea98 100644
--- a/include/linux/usb/renesas_usbhs.h
+++ b/include/linux/usb/renesas_usbhs.h
@@ -145,6 +145,10 @@ struct renesas_usbhs_driver_param {
145 int d0_rx_id; 145 int d0_rx_id;
146 int d1_tx_id; 146 int d1_tx_id;
147 int d1_rx_id; 147 int d1_rx_id;
148 int d2_tx_id;
149 int d2_rx_id;
150 int d3_tx_id;
151 int d3_rx_id;
148 152
149 /* 153 /*
150 * option: 154 * option: