2022-11-02 16:34:34

by Philippe Schenker

[permalink] [raw]
Subject: [PATCH] ARM: dts: colibri-imx6ull: Enable dual-role switching

From: Philippe Schenker <[email protected]>

The Colibri standard provides a GPIO called USBC_DET to switch from
USB Host to USB Device and back. The Colibri iMX6ULL does have the SoC
ball USB_OTG1_VBUS connected in series with a capacitor to ground.

This means that we need to provide to the extcon framework VBUS and ID
events using the single GPIO we have. The Extcon USB GPIO driver does
use id-gpio also for VBUS event, as in our case where vbus-gpio is
absent.

Signed-off-by: Philippe Schenker <[email protected]>

---

arch/arm/boot/dts/imx6ull-colibri.dtsi | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/arch/arm/boot/dts/imx6ull-colibri.dtsi b/arch/arm/boot/dts/imx6ull-colibri.dtsi
index 577a424b0e1d..feb1fcd9a684 100644
--- a/arch/arm/boot/dts/imx6ull-colibri.dtsi
+++ b/arch/arm/boot/dts/imx6ull-colibri.dtsi
@@ -24,6 +24,13 @@ backlight: backlight {
status = "okay";
};

+ extcon_usbc_det: usbc-det {
+ compatible = "linux,extcon-usb-gpio";
+ id-gpio = <&gpio5 2 GPIO_ACTIVE_HIGH>; /* SODIMM 137 / USBC_DET */
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_snvs_usbc_det>;
+ };
+
gpio-keys {
compatible = "gpio-keys";
pinctrl-names = "default";
@@ -275,6 +282,7 @@ &uart5 {
/* Colibri USBC */
&usbotg1 {
dr_mode = "otg";
+ extcon = <&extcon_usbc_det>, <&extcon_usbc_det>;
srp-disable;
hnp-disable;
adp-disable;
--
2.38.1



2022-11-03 08:51:27

by Alexander Stein

[permalink] [raw]
Subject: Re: [PATCH] ARM: dts: colibri-imx6ull: Enable dual-role switching

Hi Philippe,

Am Mittwoch, 2. November 2022, 16:52:26 CET schrieb Philippe Schenker:
> From: Philippe Schenker <[email protected]>
>
> The Colibri standard provides a GPIO called USBC_DET to switch from
> USB Host to USB Device and back. The Colibri iMX6ULL does have the SoC
> ball USB_OTG1_VBUS connected in series with a capacitor to ground.
>
> This means that we need to provide to the extcon framework VBUS and ID
> events using the single GPIO we have. The Extcon USB GPIO driver does
> use id-gpio also for VBUS event, as in our case where vbus-gpio is
> absent.
>
> Signed-off-by: Philippe Schenker <[email protected]>
>
> ---
>
> arch/arm/boot/dts/imx6ull-colibri.dtsi | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm/boot/dts/imx6ull-colibri.dtsi
> b/arch/arm/boot/dts/imx6ull-colibri.dtsi index 577a424b0e1d..feb1fcd9a684
> 100644
> --- a/arch/arm/boot/dts/imx6ull-colibri.dtsi
> +++ b/arch/arm/boot/dts/imx6ull-colibri.dtsi
> @@ -24,6 +24,13 @@ backlight: backlight {
> status = "okay";
> };
>
> + extcon_usbc_det: usbc-det {
> + compatible = "linux,extcon-usb-gpio";
> + id-gpio = <&gpio5 2 GPIO_ACTIVE_HIGH>; /* SODIMM 137 /
USBC_DET */
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_snvs_usbc_det>;
> + };
> +
> gpio-keys {
> compatible = "gpio-keys";
> pinctrl-names = "default";
> @@ -275,6 +282,7 @@ &uart5 {
> /* Colibri USBC */
> &usbotg1 {
> dr_mode = "otg";
> + extcon = <&extcon_usbc_det>, <&extcon_usbc_det>;

How came you up with this double entries? Is there some documentation you need
two phandles?
I have a problem on imx8mm (same USB host controller) where on USB device mode
no device is attached on host side. I fixed it by using usb-role-switch
instead [1].
But it also works on imx8mm using extcon with two phandles instead of just
one.

Regards,
Alexander

[1] https://patchwork.kernel.org/project/linux-arm-kernel/patch/
[email protected]/
> srp-disable;
> hnp-disable;
> adp-disable;





2022-11-03 09:08:03

by Francesco Dolcini

[permalink] [raw]
Subject: Re: [PATCH] ARM: dts: colibri-imx6ull: Enable dual-role switching

On Thu, Nov 03, 2022 at 08:46:58AM +0100, Alexander Stein wrote:
> Hi Philippe,
>
> Am Mittwoch, 2. November 2022, 16:52:26 CET schrieb Philippe Schenker:
> > From: Philippe Schenker <[email protected]>
> >
> > The Colibri standard provides a GPIO called USBC_DET to switch from
> > USB Host to USB Device and back. The Colibri iMX6ULL does have the SoC
> > ball USB_OTG1_VBUS connected in series with a capacitor to ground.
> >
> > This means that we need to provide to the extcon framework VBUS and ID
> > events using the single GPIO we have. The Extcon USB GPIO driver does
> > use id-gpio also for VBUS event, as in our case where vbus-gpio is
> > absent.
> >
> > Signed-off-by: Philippe Schenker <[email protected]>
> >
> > ---
> >
> > arch/arm/boot/dts/imx6ull-colibri.dtsi | 8 ++++++++
> > 1 file changed, 8 insertions(+)
> >
> > diff --git a/arch/arm/boot/dts/imx6ull-colibri.dtsi
> > b/arch/arm/boot/dts/imx6ull-colibri.dtsi index 577a424b0e1d..feb1fcd9a684
> > 100644
> > --- a/arch/arm/boot/dts/imx6ull-colibri.dtsi
> > +++ b/arch/arm/boot/dts/imx6ull-colibri.dtsi
> > @@ -24,6 +24,13 @@ backlight: backlight {
> > status = "okay";
> > };
> >
> > + extcon_usbc_det: usbc-det {
> > + compatible = "linux,extcon-usb-gpio";
> > + id-gpio = <&gpio5 2 GPIO_ACTIVE_HIGH>; /* SODIMM 137 /
> USBC_DET */
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&pinctrl_snvs_usbc_det>;
> > + };
> > +
> > gpio-keys {
> > compatible = "gpio-keys";
> > pinctrl-names = "default";
> > @@ -275,6 +282,7 @@ &uart5 {
> > /* Colibri USBC */
> > &usbotg1 {
> > dr_mode = "otg";
> > + extcon = <&extcon_usbc_det>, <&extcon_usbc_det>;
>
> How came you up with this double entries? Is there some documentation you need
> two phandles?

extcon-usb-gpio provides both vbus/otg_id with a single handle, however
the integration in chipidea is somehow weird, the first entry is supposed to be
used to read the vbus, the second one to read the otg_id.

So if you need to read both you really need to have the handle twice ...

Francesco


2022-11-11 05:32:37

by Shawn Guo

[permalink] [raw]
Subject: Re: [PATCH] ARM: dts: colibri-imx6ull: Enable dual-role switching

On Thu, Nov 03, 2022 at 09:04:53AM +0100, Francesco Dolcini wrote:
> On Thu, Nov 03, 2022 at 08:46:58AM +0100, Alexander Stein wrote:
> > Hi Philippe,
> >
> > Am Mittwoch, 2. November 2022, 16:52:26 CET schrieb Philippe Schenker:
> > > From: Philippe Schenker <[email protected]>
> > >
> > > The Colibri standard provides a GPIO called USBC_DET to switch from
> > > USB Host to USB Device and back. The Colibri iMX6ULL does have the SoC
> > > ball USB_OTG1_VBUS connected in series with a capacitor to ground.
> > >
> > > This means that we need to provide to the extcon framework VBUS and ID
> > > events using the single GPIO we have. The Extcon USB GPIO driver does
> > > use id-gpio also for VBUS event, as in our case where vbus-gpio is
> > > absent.
> > >
> > > Signed-off-by: Philippe Schenker <[email protected]>
> > >
> > > ---
> > >
> > > arch/arm/boot/dts/imx6ull-colibri.dtsi | 8 ++++++++
> > > 1 file changed, 8 insertions(+)
> > >
> > > diff --git a/arch/arm/boot/dts/imx6ull-colibri.dtsi
> > > b/arch/arm/boot/dts/imx6ull-colibri.dtsi index 577a424b0e1d..feb1fcd9a684
> > > 100644
> > > --- a/arch/arm/boot/dts/imx6ull-colibri.dtsi
> > > +++ b/arch/arm/boot/dts/imx6ull-colibri.dtsi
> > > @@ -24,6 +24,13 @@ backlight: backlight {
> > > status = "okay";
> > > };
> > >
> > > + extcon_usbc_det: usbc-det {
> > > + compatible = "linux,extcon-usb-gpio";
> > > + id-gpio = <&gpio5 2 GPIO_ACTIVE_HIGH>; /* SODIMM 137 /
> > USBC_DET */
> > > + pinctrl-names = "default";
> > > + pinctrl-0 = <&pinctrl_snvs_usbc_det>;
> > > + };
> > > +
> > > gpio-keys {
> > > compatible = "gpio-keys";
> > > pinctrl-names = "default";
> > > @@ -275,6 +282,7 @@ &uart5 {
> > > /* Colibri USBC */
> > > &usbotg1 {
> > > dr_mode = "otg";
> > > + extcon = <&extcon_usbc_det>, <&extcon_usbc_det>;
> >
> > How came you up with this double entries? Is there some documentation you need
> > two phandles?
>
> extcon-usb-gpio provides both vbus/otg_id with a single handle, however
> the integration in chipidea is somehow weird, the first entry is supposed to be
> used to read the vbus, the second one to read the otg_id.
>
> So if you need to read both you really need to have the handle twice ...

Thanks for the input, Francesco!

Philippe,

Do you consider to use usb-role-switch as suggested by Alexander,
considering the weirdness of how chipidea driver supports extcon-usb-gpio?

Shawn