Message ID | 1576083014-5842-1-git-send-email-loic.poulain@linaro.org |
---|---|
State | Accepted |
Commit | 4868f573a754f992a06f30f5f860bb57e3739ffb |
Headers | show |
Series | arm: dts: qcom: db410c: Enable USB OTG support | expand |
On Wed 11 Dec 08:50 PST 2019, Loic Poulain wrote: > 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.poulain@linaro.org> Applied Thanks, Bjorn > --- > arch/arm64/boot/dts/qcom/apq8016-sbc-pmic-pins.dtsi | 19 +++++++++++++++++++ > arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi | 11 ++++++----- > 2 files changed, 25 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..aff218c 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,15 @@ > 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; > output-low; > }; > }; > @@ -22,6 +31,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 e12a36c..037e26b 100644 > --- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi > +++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi > @@ -358,14 +358,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>; > @@ -504,7 +505,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 >
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..aff218c 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,15 @@ 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; output-low; }; }; @@ -22,6 +31,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 e12a36c..037e26b 100644 --- a/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi +++ b/arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi @@ -358,14 +358,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>; @@ -504,7 +505,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>; };
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.poulain@linaro.org> --- arch/arm64/boot/dts/qcom/apq8016-sbc-pmic-pins.dtsi | 19 +++++++++++++++++++ arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi | 11 ++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) -- 2.7.4