Message ID | 20221102155226.51587-1-dev@pschenker.ch (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ARM: dts: colibri-imx6ull: Enable dual-role switching | expand |
Hi Philippe, Am Mittwoch, 2. November 2022, 16:52:26 CET schrieb Philippe Schenker: > From: Philippe Schenker <philippe.schenker@toradex.com> > > 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 <philippe.schenker@toradex.com> > > --- > > 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/ 20221101093031.278241-1-alexander.stein@ew.tq-group.com/ > srp-disable; > hnp-disable; > adp-disable;
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 <philippe.schenker@toradex.com> > > > > 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 <philippe.schenker@toradex.com> > > > > --- > > > > 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
On Thu, 2022-11-03 at 09:04 +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 <philippe.schenker@toradex.com> > > > > > > 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 <philippe.schenker@toradex.com> > > > > > > --- > > > > > > 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 suggestion Alex and Francesco for answering. I cannot add much more, we tried a lot back and forth due to the really special hardware-design this solution was the best we found for the colibri- imx6ull. Regards, Philippe > > Francesco >
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 <philippe.schenker@toradex.com> > > > > > > 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 <philippe.schenker@toradex.com> > > > > > > --- > > > > > > 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
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;