[v2,3/7] usb: chipidea: Support generic usb extcon

Message ID 1535362415-16559-3-git-send-email-loic.poulain@linaro.org
State New
Headers show
Series
  • [v2,1/7] usb: chipidea: Add dynamic pinctrl selection
Related show

Commit Message

Loic Poulain Aug. 27, 2018, 9:33 a.m.
Add compatibility for extcon-usb-gpio which can handle more
than one cable per instance, allowing coherency of USB cable
states (USB/USB-HOST). These states can be generated from ID
or/and VBUS pins.

In case only one extcon device is associated to the USB device,
and this device supports USB and USB-HOST cable states, we now
use it for both VBUS (USB) and ID (USB-HOST) notifier.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>

---
 v2: no change

 drivers/usb/chipidea/core.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

-- 
2.7.4

Comments

Peter Chen Aug. 28, 2018, 6:33 a.m. | #1
> Add compatibility for extcon-usb-gpio which can handle more than one cable per

> instance, allowing coherency of USB cable states (USB/USB-HOST). These states

> can be generated from ID or/and VBUS pins.

> 

> In case only one extcon device is associated to the USB device, and this device

> supports USB and USB-HOST cable states, we now use it for both VBUS (USB) and

> ID (USB-HOST) notifier.

> 

> Signed-off-by: Loic Poulain <loic.poulain@linaro.org>

> ---

>  v2: no change

> 

>  drivers/usb/chipidea/core.c | 11 +++++++++++

>  1 file changed, 11 insertions(+)

> 

> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c index

> cdac778..afe85e2 100644

> --- a/drivers/usb/chipidea/core.c

> +++ b/drivers/usb/chipidea/core.c

> @@ -702,6 +702,17 @@ static int ci_get_platdata(struct device *dev,

>  		ext_id = extcon_get_edev_by_phandle(dev, 1);

>  		if (IS_ERR(ext_id) && PTR_ERR(ext_id) != -ENODEV)

>  			return PTR_ERR(ext_id);

> +

> +		/*

> +		 * Some extcon devices like extcon-usb-gpio have only one

> +		 * instance for both USB and USB-HOST cable states.

> +		 */

> +		if (!IS_ERR(ext_vbus) && IS_ERR(ext_id)) {

> +			if (extcon_get_state(ext_vbus, EXTCON_USB) >= 0 &&

> +			    extcon_get_state(ext_vbus, EXTCON_USB_HOST) >= 0) {

> +				ext_id = ext_vbus;

> +			}

> +		}

>  	}

> 


Hi Loic,

For your case, I suggest changing dts instead of changing source code, you would have both
vbus and id phandle at your controller dts, and both point to the same extcon device.

Other patches are ok for me.

Peter
Loic Poulain Aug. 29, 2018, 8:06 a.m. | #2
Hi Peter,

On 28 August 2018 at 08:33, Peter Chen <peter.chen@nxp.com> wrote:
>

>> Add compatibility for extcon-usb-gpio which can handle more than one cable per

>> instance, allowing coherency of USB cable states (USB/USB-HOST). These states

>> can be generated from ID or/and VBUS pins.

>>

>> In case only one extcon device is associated to the USB device, and this device

>> supports USB and USB-HOST cable states, we now use it for both VBUS (USB) and

>> ID (USB-HOST) notifier.

>>

>> Signed-off-by: Loic Poulain <loic.poulain@linaro.org>

>> ---

>>  v2: no change

>>

>>  drivers/usb/chipidea/core.c | 11 +++++++++++

>>  1 file changed, 11 insertions(+)

>>

>> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c index

>> cdac778..afe85e2 100644

>> --- a/drivers/usb/chipidea/core.c

>> +++ b/drivers/usb/chipidea/core.c

>> @@ -702,6 +702,17 @@ static int ci_get_platdata(struct device *dev,

>>               ext_id = extcon_get_edev_by_phandle(dev, 1);

>>               if (IS_ERR(ext_id) && PTR_ERR(ext_id) != -ENODEV)

>>                       return PTR_ERR(ext_id);

>> +

>> +             /*

>> +              * Some extcon devices like extcon-usb-gpio have only one

>> +              * instance for both USB and USB-HOST cable states.

>> +              */

>> +             if (!IS_ERR(ext_vbus) && IS_ERR(ext_id)) {

>> +                     if (extcon_get_state(ext_vbus, EXTCON_USB) >= 0 &&

>> +                         extcon_get_state(ext_vbus, EXTCON_USB_HOST) >= 0) {

>> +                             ext_id = ext_vbus;

>> +                     }

>> +             }

>>       }

>>

>

> Hi Loic,

>

> For your case, I suggest changing dts instead of changing source code, you would have both

> vbus and id phandle at your controller dts, and both point to the same extcon device.


Good point, will do.

Regards,
Loic

Patch

diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index cdac778..afe85e2 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -702,6 +702,17 @@  static int ci_get_platdata(struct device *dev,
 		ext_id = extcon_get_edev_by_phandle(dev, 1);
 		if (IS_ERR(ext_id) && PTR_ERR(ext_id) != -ENODEV)
 			return PTR_ERR(ext_id);
+
+		/*
+		 * Some extcon devices like extcon-usb-gpio have only one
+		 * instance for both USB and USB-HOST cable states.
+		 */
+		if (!IS_ERR(ext_vbus) && IS_ERR(ext_id)) {
+			if (extcon_get_state(ext_vbus, EXTCON_USB) >= 0 &&
+			    extcon_get_state(ext_vbus, EXTCON_USB_HOST) >= 0) {
+				ext_id = ext_vbus;
+			}
+		}
 	}
 
 	cable = &platdata->vbus_extcon;