Add support for VBUS detection
PATCH v6 2/3 bindings: pm8941-misc: Add support for VBUS detection
In reply to Guru Das SrinageshAdd interrupt support for reporting VBUS detection status that can be detected via a dedicated PMIC pin.
--- Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml +4 -1
@@ -22,11 +22,14 @@ properties: maxItems: 1 interrupts: - maxItems: 1 + minItems: 1 + maxItems: 2 interrupt-names: + minItems: 1 items: - const: usb_id + - const: usb_vbus required: - compatible
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
v6 cover Add support for VBUS detection
[REQUEST]
Thanks Rob for reviewing the dt patches.
Would it be possible for the maintainers and reviewers to review the code as well?
[COVER LETTER]
Add support to enable VBUS detection in the pm8941 extcon driver.
Changes from v5:
- Gathered Rob H's Acked-by for the dt-bindings patch.
Changes from v4:
- Drop addition of new compatible string in both bindings and driver.
Changes from v3:
- Split bindings into direct conversion of txt file, and addition of VBUS detection support.
Changes from v2:
- Fix YAML errors in dt binding document.
Changes from v1:
- Change bindings from txt to YAML.
Anirudh Ghayal (1):
extcon: qcom-spmi: Add support for VBUS detection
Guru Das Srinagesh (2):
bindings: pm8941-misc: Convert bindings to YAML
bindings: pm8941-misc: Add support for VBUS detection
.../bindings/extcon/qcom,pm8941-misc.txt | 41 --------- .../bindings/extcon/qcom,pm8941-misc.yaml | 62 ++++++++++++++ drivers/extcon/extcon-qcom-spmi-misc.c | 99 +++++++++++++++++----- 3 files changed, 142 insertions(+), 60 deletions(-) delete mode 100644 Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt create mode 100644 Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v6 1/3 bindings: pm8941-misc: Convert bindings to YAML
Convert bindings from txt to YAML.
--- .../bindings/extcon/qcom,pm8941-misc.txt | 41 --------------- .../bindings/extcon/qcom,pm8941-misc.yaml | 59 ++++++++++++++++++++++ 2 files changed, 59 insertions(+), 41 deletions(-) delete mode 100644 Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt create mode 100644 Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt deleted +0 -41
@@ -1,41 +0,0 @@ -Qualcomm's PM8941 USB ID Extcon device - -Some Qualcomm PMICs have a "misc" module that can be used to detect when -the USB ID pin has been pulled low or high. - -PROPERTIES - -- compatible: - Usage: required - Value type: <string> - Definition: Should contain "qcom,pm8941-misc"; - -- reg: - Usage: required - Value type: <u32> - Definition: Should contain the offset to the misc address space - -- interrupts: - Usage: required - Value type: <prop-encoded-array> - Definition: Should contain the usb id interrupt - -- interrupt-names: - Usage: required - Value type: <stringlist> - Definition: Should contain the string "usb_id" for the usb id interrupt - -Example: - - pmic { - usb_id: misc@900 { - compatible = "qcom,pm8941-misc"; - reg = <0x900>; - interrupts = <0x0 0x9 0 IRQ_TYPE_EDGE_BOTH>; - interrupt-names = "usb_id"; - }; - } - - usb-controller { - extcon = <&usb_id>; - };
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +59 -0
59 lines not on this page · raw message
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH v6 3/3 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 | 99 +++++++++++++++++++++++++++------- 1 file changed, 80 insertions(+), 19 deletions(-)
drivers/extcon/extcon-qcom-spmi-misc.c +80 -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; }
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project