[PATCH 0/7] Exynos4412-based Trats2 USB gadget (DWC2) fixes

Marek Szyprowski
2015-08-21T12:39:18Z

Dear All,

Since v3.19 s3c-hsotg (DWC2) USB controller stopped working on
Exynos4412-based Trats2 platform. However on Odroid-U3 (which is also
Exynos4412-based) it worked fine all the time. After long investigation
it turned out that this was caused by 2 independent issues.

First issue was caused by patch 7eec1266751bd3a25e35ce88686634c768fedc24
("ARM: dts: Add Maxim 77693 PMIC to exynos4412-trats2") added support
for Maxim 77693 regulators, but without defining consumers for them.
This causes regulator core to disable them. However SAFEOUT1 regulator
provides power supply to VBUS signal, which also power some USB phy
related parts of Exynos SoC core. This has been fixed by patches 1-3,
which adds support for VBUS regulator, defines them in DTS for all
Exynos platforms and changes probe sequence of the drivers to ensure no
deferred probe occurs (USB gadget subsystem doesn't support deferred
probe yet).

Second issue is related to DWC2 driver rewrite and host/gadget/dual-role
integration code. DWC2 module on some platforms needs three additional
hardware resources: phy, clock and power supply. All of them must be
enabled/activated to properly initialize and operate. This was initially
handled in s3c-hsotg driver, which has been converted to 'gadget' part
of dwc2 driver. Unfortunately, not all of this code got moved to common
platform code, what resulted in accessing DWC2 registers without
enabling power supply regulators and clock. This caused initialization
failure on Exynos4412-based Trats2. Odroid U3 board worked fine, because
power supplies used by DWC2 module are marked there as 'always-on',
because they are also used by other modules (USB hub) and clock was
shared with USB2 PHY, so it was already enabled. This initialization
issue has been fixed by the last patch. While preparing it I've also
fixed a few minor issues found in nearby code (patches 4-6).

I would like to get those patches merged separately to respective
subsystem trees:
patch 1: phy subsystem tree
patch 2: Samsung Exynos tree
patch 3: regulator subsystem tree
patch 4-7: USB gadget subsystem tree

Patches have been prepared on top of linux-next from 20150821.

Best regards
Marek Szyprowski
Samsung R&D Institute Poland

Patch summary:

Marek Szyprowski (7):
phy: exynos-usb2: add vbus regulator support
arm: dts: exynos: add vbus regulator to USB2 phy nodes
regulators: max77693: register driver earlier to avoid deferred probe
usb: dwc2: remove double call to s3c_hsotg_of_probe
usb: dwc2: remove non-functional clock gating
usb: dwc2: fix unbalanced phy control
usb: dwc2: refactor common low-level hw code to platform.c

.../devicetree/bindings/phy/samsung-phy.txt | 3 +
arch/arm/boot/dts/exynos3250-monk.dts | 1 +
arch/arm/boot/dts/exynos3250-rinato.dts | 1 +
arch/arm/boot/dts/exynos4210-trats.dts | 2 +-
arch/arm/boot/dts/exynos4210-universal_c210.dts | 2 +-
arch/arm/boot/dts/exynos4412-trats2.dts | 1 +
drivers/phy/phy-samsung-usb2.c | 25 ++-
drivers/phy/phy-samsung-usb2.h | 2 +
drivers/regulator/max77693.c | 12 +-
drivers/usb/dwc2/core.h | 4 +-
drivers/usb/dwc2/gadget.c | 196 +++----------------
drivers/usb/dwc2/platform.c | 209 +++++++++++++++++----
12 files changed, 239 insertions(+), 219 deletions(-)

--
1.9.2