Add support for VBUS detection
v3 cover Add support for VBUS detection
Add support to enable VBUS detection in the pm8941 extcon driver.
Changes from v2:
- Fix YAML errors in dt binding document.
Changes from v1:
- Change bindings from txt to YAML.
Anirudh Ghayal (2):
bindings: pm8941-misc: Convert to YAML and add support for VBUS
detection
extcon: qcom-spmi: Add support for VBUS detection
.../bindings/extcon/qcom,pm8941-misc.txt | 41 --------- .../bindings/extcon/qcom,pm8941-misc.yaml | 65 ++++++++++++++ drivers/extcon/extcon-qcom-spmi-misc.c | 100 +++++++++++++++++---- 3 files changed, 146 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 v3 1/2 bindings: pm8941-misc: Convert to YAML and add support for VBUS detection
From: Anirudh Ghayal <[email protected]>
Convert bindings to YAML. Also add compatible string that adds support for reporting the VBUS status that can be detected via a dedicated PMIC pin.
--- .../bindings/extcon/qcom,pm8941-misc.txt | 41 -------------- .../bindings/extcon/qcom,pm8941-misc.yaml | 65 ++++++++++++++++++++++ 2 files changed, 65 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 +65 -0
65 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 v3 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
Rob Herring
maintainerRe: [PATCH v3 1/2] bindings: pm8941-misc: Convert to YAML and add support for VBUS detection
In reply to Guru Das SrinageshQuoted 6 lines · Guru Das Srinagesh
From: Anirudh Ghayal <[email protected]>
Convert bindings to YAML. Also add compatible string that adds support for reporting the VBUS status that can be detected via a dedicated PMIC pin.
Quoted 9 lines
Signed-off-by Anirudh Ghayal <[email protected]>Signed-off-by Guru Das Srinagesh <[email protected]>--- .../bindings/extcon/qcom,pm8941-misc.txt | 41 -------------- .../bindings/extcon/qcom,pm8941-misc.yaml | 65 ++++++++++++++++++++++ 2 files changed, 65 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
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.example.dt.yaml: misc@900: interrupts: [[0, 9, 0, 3]] is too short
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml
See https://patchwork.ozlabs.org/patch/1386438
The base for the patch is generally the last rc1. Any dependencies should be noted.
If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date:
pip3 install dtschema --upgrade
Please check and re-submit.
Rob Herring
maintainerRe: [PATCH v3 1/2] bindings: pm8941-misc: Convert to YAML and add support for VBUS detection
In reply to Guru Das SrinageshQuoted 5 lines · Guru Das Srinagesh
From: Anirudh Ghayal <[email protected]>
Convert bindings to YAML. Also add compatible string that adds support for reporting the VBUS status that can be detected via a dedicated PMIC pin.
Converting to yaml and add Vbus support should be 2 patches.
Really, the main pm8941 needs to be converted and then this one referenced by it.
Quoted 72 lines
Signed-off-by Anirudh Ghayal <[email protected]>Signed-off-by Guru Das Srinagesh <[email protected]>--- .../bindings/extcon/qcom,pm8941-misc.txt | 41 -------------- .../bindings/extcon/qcom,pm8941-misc.yaml | 65 ++++++++++++++++++++++ 2 files changed, 65 insertions(+), 41 deletions(-) delete mode 100644 Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt create mode 100644 Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yamlDocumentation/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 +9
-0@@ -0,0 +1,65 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/extcon/qcom,pm8941-misc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Technologies, Inc. PM8941 USB ID Extcon device + +maintainers:
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml line 19
Quoted 10 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +10
-0+ - Guru Das Srinagesh <[email protected]> + +description: | + 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: + oneOf: + - items:
Don't need oneOf for a single entry.
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml line 28
Quoted 9 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +9
-0+ - enum: + - qcom,pm8941-misc + - qcom,pmd-vbus-det + + reg: + maxItems: 1 + + interrupts: + maxItems: 2
Need 'minItems: 1' if 1 or 2 interrupts is valid.
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml line 32
Quoted 4 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +4
-0+ + interrupt-names: + anyOf: + - items:
Don't need 'anyOf'
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml line 35
Quoted 3 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +3
-0+ - enum: + - usb_id + - usb_vbus
I think what you want here is:
minItems: 1
items:
- const: usb_id
- const: usb_vbus
Meaning 'usb_id' is always present and 'usb_vbus' is optional 2nd interrupt.
Quoted 34 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +30
-0+ +required: + - compatible + - reg + - interrupts + - interrupt-names + +additionalProperties: false + +examples: + - | + #include <dt-bindings/interrupt-controller/irq.h> + + pmic { + #address-cells = <1>; + #size-cells = <0>; + interrupt-controller; + #interrupt-cells = <4>; + + 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>; + };Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v3 1/2] bindings: pm8941-misc: Convert to YAML and add support for VBUS detection
Quoted 8 lines · Rob Herring
Quoted 5 lines · Guru Das Srinagesh
From: Anirudh Ghayal <[email protected]>
Convert bindings to YAML. Also add compatible string that adds support for reporting the VBUS status that can be detected via a dedicated PMIC pin.
Converting to yaml and add Vbus support should be 2 patches.
Done.
Quoted 3 lines
Really, the main pm8941 needs to be converted and then this one referenced by it.
Could you please explain a bit more on what this might look like?
Quoted 1 line
...
Quoted 11 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml line 19
Quoted 9 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +9
-0+ +description: | + 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: + oneOf: + - items:Don't need oneOf for a single entry.
Done.
Quoted 12 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml line 28
Quoted 10 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +9
-0+ - enum: + - qcom,pm8941-misc + - qcom,pmd-vbus-det + + reg: + maxItems: 1 + + interrupts: + maxItems: 2Need 'minItems: 1' if 1 or 2 interrupts is valid.
Done.
Quoted 7 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml line 32
Quoted 5 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +4
-0+ + interrupt-names: + anyOf: + - items:Don't need 'anyOf'
Done.
Quoted 7 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml line 35
Quoted 4 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +3
-0+ - enum: + - usb_id + - usb_vbusI think what you want here is:
Quoted 7 lines
minItems: 1
items:
- const:usb_id
- const:usb_vbusMeaning '
usb_id' is always present and 'usb_vbus' is optional 2nd interrupt.
Done.
Quoted 35 lines
Quoted 35 lines
Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file +30
-0+ +required: + - compatible + - reg + - interrupts + - interrupt-names + +additionalProperties: false + +examples: + - | + #include <dt-bindings/interrupt-controller/irq.h> + + pmic { + #address-cells = <1>; + #size-cells = <0>; + interrupt-controller; + #interrupt-cells = <4>; + + 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>; + };Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project