The Dragonboard-410c is able to act either as USB Host or Device.
The role can be determined at runtime via the USB_HS_ID pin which is
derived from the micro-usb port VBUS pin.

In Host role, SoC USB D+/D- are routed to the onboard USB 2.0 HUB.
In Device role, SoC USB D+/D- are routed to the USB 2.0 micro B port.
Routing is selected via USB_SW_SEL_PM gpio.

In device role USB HUB can be held in reset.

chipidea driver expects two extcon device pointers, one for the
EXTCON_USB event and one for the EXTCON_USB_HOST event. Since
the extcon-usb-gpio device is capable of generating both these
events, point two times to this extcon device.

Signed-off-by: Loic Poulain <loic.poul...@linaro.org>
---
 v2: no change
 v3: Point two times to the same extcon-usb-device

 arch/arm64/boot/dts/qcom/apq8016-sbc-pmic-pins.dtsi | 20 ++++++++++++++++++++
 arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi           | 11 ++++++-----
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc-pmic-pins.dtsi 
b/arch/arm64/boot/dts/qcom/apq8016-sbc-pmic-pins.dtsi
index ec2f0de..99787cc 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc-pmic-pins.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc-pmic-pins.dtsi
@@ -8,6 +8,16 @@
                pinconf {
                        pins = "gpio3";
                        function = PMIC_GPIO_FUNC_NORMAL;
+                       input-disable;
+                       output-high;
+               };
+       };
+
+       usb_hub_reset_pm_device: usb_hub_reset_pm_device {
+               pinconf {
+                       pins = "gpio3";
+                       function = PMIC_GPIO_FUNC_NORMAL;
+                       input-disable;
                        output-low;
                };
        };
@@ -22,6 +32,16 @@
                };
        };
 
+       usb_sw_sel_pm_device: usb_sw_sel_pm_device {
+               pinconf {
+                       pins = "gpio4";
+                       function = PMIC_GPIO_FUNC_NORMAL;
+                       power-source = <PM8916_GPIO_VPH>;
+                       input-disable;
+                       output-low;
+               };
+       };
+
        pm8916_gpios_leds: pm8916_gpios_leds {
                pinconf {
                        pins = "gpio1", "gpio2";
diff --git a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi 
b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
index 78ce397..1f7dc1c 100644
--- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
@@ -366,14 +366,15 @@
                };
 
                usb@78d9000 {
-                       extcon = <&usb_id>;
+                       extcon = <&usb_id>, <&usb_id>;
                        status = "okay";
                        adp-disable;
                        hnp-disable;
                        srp-disable;
-                       dr_mode = "host";
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&usb_sw_sel_pm>;
+                       dr_mode = "otg";
+                       pinctrl-names = "default", "device";
+                       pinctrl-0 = <&usb_sw_sel_pm &usb_hub_reset_pm>;
+                       pinctrl-1 = <&usb_sw_sel_pm_device 
&usb_hub_reset_pm_device>;
                        ulpi {
                                phy {
                                        v1p8-supply = <&pm8916_l7>;
@@ -512,7 +513,7 @@
 
        usb_id: usb-id {
                compatible = "linux,extcon-usb-gpio";
-               vbus-gpio = <&msmgpio 121 GPIO_ACTIVE_HIGH>;
+               id-gpio = <&msmgpio 121 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&usb_id_default>;
        };
-- 
2.7.4

Reply via email to