Add support for VBUS detection
v2 cover Add support for VBUS detection
(Re-sending to add devicetree mailing list)
Add support to enable VBUS detection in the pm8941 extcon driver.
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 | 56 ++++++++++++ drivers/extcon/extcon-qcom-spmi-misc.c | 100 +++++++++++++++++---- 3 files changed, 137 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 RESEND v2 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 | 56 ++++++++++++++++++++++ 2 files changed, 56 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 +56 -0
56 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
Rob Herring
maintainerRe: [RESEND PATCH v2 1/2] bindings: pm8941-misc: Convert to YAML and add support for VBUS detection
Quoted 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 | 56 ++++++++++++++++++++++ 2 files changed, 56 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:
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml: properties:compatible:oneOf:0:const: ['qcom,pm8941-misc', 'qcom,pmd-vbus-det'] is not of type 'string' /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml: properties:interrupt-names:anyOf:0:const: ['usb_id', 'usb_vbus'] is not of type 'string' /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml: ignoring, error in schema: properties: compatible: oneOf: 0: const
warning: no schema found in file: ./Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml
Error: Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.example.dts:23.49-50 syntax error
FATAL ERROR: Unable to parse input tree
make[1]: *** [scripts/Makefile.lib:342: Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.example.dt.yaml] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:1366: dt_binding_check] Error 2
See https://patchwork.ozlabs.org/patch/1385252
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.
PATCH RESEND v2 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