Add support for VBUS detection
cover Add support for VBUS detection
Add support to enable VBUS detection in the pm8941 extcon driver.
Anirudh Ghayal (2):
bindings: pm8941-misc: Add support for VBUS detection
extcon: qcom-spmi: Add support for VBUS detection
.../bindings/extcon/qcom,pm8941-misc.txt | 2 +- drivers/extcon/extcon-qcom-spmi-misc.c | 100 +++++++++++++++++---- 2 files changed, 82 insertions(+), 20 deletions(-)
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH RESEND 1/2 bindings: pm8941-misc: Add support for VBUS detection
From: Anirudh Ghayal <[email protected]>
VBUS can be detected via a dedicated PMIC pin. Enable compatible string that adds support for reporting the VBUS status.
--- Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt +1 -1
@@ -8,7 +8,7 @@ PROPERTIES - compatible: Usage: required Value type: <string> - Definition: Should contain "qcom,pm8941-misc"; + Definition: Should contain "qcom,pm8941-misc" or "qcom,pmd-vbus-det"; - reg: Usage: required
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [RESEND PATCH v1 1/2] bindings: pm8941-misc: Add support for VBUS detection
Quoting Guru Das Srinagesh (2020-09-28 15:49:08)
Quoted 9 lines
From: Anirudh Ghayal <[email protected]>
VBUS can be detected via a dedicated PMIC pin. Enable compatible string that adds support for reporting the VBUS status.
Signed-off-by Anirudh Ghayal <[email protected]>Signed-off-by Guru Das Srinagesh <[email protected]>--- Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt | 2 +-
Can this be converted to YAML?
Quoted 19 lines
1 file changed, 1 insertion(+), 1 deletion(-)Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt +1
-1@@ -8,7 +8,7 @@ PROPERTIES - compatible: Usage: required Value type: <string> - Definition: Should contain "qcom,pm8941-misc"; + Definition: Should contain "qcom,pm8941-misc" or "qcom,pmd-vbus-det"; - reg: Usage: requiredSignature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [RESEND PATCH v1 1/2] bindings: pm8941-misc: Add support for VBUS detection
Quoted 6 lines · Stephen Boyd
Quoting Guru Das Srinagesh (2020-09-28 15:49:08)
Quoted 5 lines
From: Anirudh Ghayal <[email protected]>
VBUS can be detected via a dedicated PMIC pin. Enable compatible string that adds support for reporting the VBUS status.
Quoted 6 lines
Quoted 4 lines
Signed-off-by Anirudh Ghayal <[email protected]>Signed-off-by Guru Das Srinagesh <[email protected]>--- Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt | 2 +-Can this be converted to YAML?
Sure, will fix this in the next patchset.
Quoted 20 lines
Quoted 20 lines
1 file changed, 1 insertion(+), 1 deletion(-)Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt +1
-1@@ -8,7 +8,7 @@ PROPERTIES - compatible: Usage: required Value type: <string> - Definition: Should contain "qcom,pm8941-misc"; + Definition: Should contain "qcom,pm8941-misc" or "qcom,pmd-vbus-det"; - reg: Usage: requiredSignature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH RESEND 2/2 extcon: qcom-spmi: Add support for VBUS detection
In reply to Guru Das SrinageshFrom: Anirudh Ghayal <[email protected]>
VBUS can be detected via a dedicated PMIC pin. Add support for reporting the VBUS status.
--- drivers/extcon/extcon-qcom-spmi-misc.c | 100 ++++++++++++++++++++++++++------- 1 file changed, 81 insertions(+), 19 deletions(-)
drivers/extcon/extcon-qcom-spmi-misc.c +81 -19
@@ -1,7 +1,7 @@// SPDX-License-Identifier: GPL-2.0-only /** * extcon-qcom-spmi-misc.c - Qualcomm USB extcon driver to support USB ID -* detection based on extcon-usb-gpio.c. +* and VBUS detection based on extcon-usb-gpio.c. * * Copyright (C) 2016 Linaro, Ltd. * Stephen Boyd <[email protected]>
@@ -21,30 +21,56 @@struct qcom_usb_extcon_info {struct extcon_dev *edev; -int irq; +int id_irq; +int vbus_irq;struct delayed_work wq_detcable;unsigned long debounce_jiffies; };static const unsigned int qcom_usb_extcon_cable[] = { +EXTCON_USB ,EXTCON_USB_HOST ,EXTCON_NONE , };static void qcom_usb_extcon_detect_cable (struct work_struct *work) { -bool id; +bool state = false;int ret; +union extcon_property_value val;struct qcom_usb_extcon_info *info =container_of (to_delayed_work (work), struct qcom_usb_extcon_info, wq_detcable); -/* check ID and update cable state */ - ret =irq_get_irqchip_state (info->irq,IRQCHIP_STATE_LINE_LEVEL , &id); -if (ret) -return ; +if (info->id_irq >0 ) { +/* check ID and update cable state */ + ret =irq_get_irqchip_state (info->id_irq, +IRQCHIP_STATE_LINE_LEVEL , &state); +if (ret) +return ; + +if (!state) { + val.intval = true; +extcon_set_property (info->edev,EXTCON_USB_HOST , +EXTCON_PROP_USB_SS , val); + } +extcon_set_state_sync (info->edev,EXTCON_USB_HOST , !state); + } -extcon_set_state_sync (info->edev,EXTCON_USB_HOST , !id); +if (info->vbus_irq >0 ) { +/* check VBUS and update cable state */ + ret =irq_get_irqchip_state (info->vbus_irq, +IRQCHIP_STATE_LINE_LEVEL , &state); +if (ret) +return ; + +if (state) { + val.intval = true; +extcon_set_property (info->edev,EXTCON_USB , +EXTCON_PROP_USB_SS , val); + } +extcon_set_state_sync (info->edev,EXTCON_USB , state); + } }static irqreturn_t qcom_usb_irq_handler (int irq,void *dev_id)
@@ -79,21 +105,48 @@ static int qcom_usb_extcon_probe(struct platform_device *pdev)return ret; } + ret =extcon_set_property_capability (info->edev, +EXTCON_USB ,EXTCON_PROP_USB_SS ); + ret |=extcon_set_property_capability (info->edev, +EXTCON_USB_HOST ,EXTCON_PROP_USB_SS ); +if (ret) { +dev_err (dev,"failed to register extcon props rc=%d\n" , + ret); +return ret; + } + info->debounce_jiffies =msecs_to_jiffies (USB_ID_DEBOUNCE_MS );INIT_DELAYED_WORK (&info->wq_detcable, qcom_usb_extcon_detect_cable); - info->irq =platform_get_irq_byname (pdev,"usb_id" ); -if (info->irq <0 ) -return info->irq; + info->id_irq =platform_get_irq_byname (pdev,"usb_id" ); +if (info->id_irq >0 ) { + ret =devm_request_threaded_irq (dev, info->id_irq,NULL , + qcom_usb_irq_handler, +IRQF_TRIGGER_RISING | +IRQF_TRIGGER_FALLING |IRQF_ONESHOT , + pdev->name, info); +if (ret <0 ) { +dev_err (dev,"failed to request handler for ID IRQ\n" ); +return ret; + } + } - ret =devm_request_threaded_irq (dev, info->irq,NULL , + info->vbus_irq =platform_get_irq_byname (pdev,"usb_vbus" ); +if (info->vbus_irq >0 ) { + ret =devm_request_threaded_irq (dev, info->vbus_irq,NULL , qcom_usb_irq_handler,IRQF_TRIGGER_RISING |IRQF_TRIGGER_FALLING |IRQF_ONESHOT , pdev->name, info); -if (ret <0 ) { -dev_err (dev,"failed to request handler for ID IRQ\n" ); -return ret; +if (ret <0 ) { +dev_err (dev,"failed to request handler for VBUS IRQ\n" ); +return ret; + } + } + +if (info->id_irq <0 && info->vbus_irq <0 ) { +dev_err (dev,"ID and VBUS IRQ not found\n" ); +return -EINVAL ; }platform_set_drvdata (pdev, info);
@@ -120,8 +173,12 @@ static int qcom_usb_extcon_suspend(struct device *dev)struct qcom_usb_extcon_info *info =dev_get_drvdata (dev);int ret =0 ; -if (device_may_wakeup (dev)) - ret =enable_irq_wake (info->irq); +if (device_may_wakeup (dev)) { +if (info->id_irq >0 ) + ret =enable_irq_wake (info->id_irq); +if (info->vbus_irq >0 ) + ret =enable_irq_wake (info->vbus_irq); + }return ret; }
@@ -131,8 +188,12 @@ static int qcom_usb_extcon_resume(struct device *dev)struct qcom_usb_extcon_info *info =dev_get_drvdata (dev);int ret =0 ; -if (device_may_wakeup (dev)) - ret =disable_irq_wake (info->irq); +if (device_may_wakeup (dev)) { +if (info->id_irq >0 ) + ret =disable_irq_wake (info->id_irq); +if (info->vbus_irq >0 ) + ret =disable_irq_wake (info->vbus_irq); + }return ret; }
@@ -143,6 +204,7 @@ static SIMPLE_DEV_PM_OPS(qcom_usb_extcon_pm_ops,static const struct of_device_id qcom_usb_extcon_dt_match[] = { { .compatible ="qcom,pm8941-misc" , }, + { .compatible ="qcom,pmd-vbus-det" , }, { } };MODULE_DEVICE_TABLE (of, qcom_usb_extcon_dt_match);
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project