* [RESEND PATCH v6 0/3] Add support for VBUS detection @ 2021-01-26 0:38 Guru Das Srinagesh 2021-01-26 0:38 ` [RESEND PATCH v6 1/3] bindings: pm8941-misc: Convert bindings to YAML Guru Das Srinagesh ` (3 more replies) 0 siblings, 4 replies; 10+ messages in thread From: Guru Das Srinagesh @ 2021-01-26 0:38 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, linux-arm-msm, Rob Herring Cc: Subbaraman Narayanamurthy, David Collins, devicetree, linux-kernel, Stephen Boyd, Guru Das Srinagesh [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 -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 10+ messages in thread
* [RESEND PATCH v6 1/3] bindings: pm8941-misc: Convert bindings to YAML 2021-01-26 0:38 [RESEND PATCH v6 0/3] Add support for VBUS detection Guru Das Srinagesh @ 2021-01-26 0:38 ` Guru Das Srinagesh 2021-02-24 16:54 ` Chanwoo Choi 2021-01-26 0:38 ` [RESEND PATCH v6 2/3] bindings: pm8941-misc: Add support for VBUS detection Guru Das Srinagesh ` (2 subsequent siblings) 3 siblings, 1 reply; 10+ messages in thread From: Guru Das Srinagesh @ 2021-01-26 0:38 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, linux-arm-msm, Rob Herring Cc: Subbaraman Narayanamurthy, David Collins, devicetree, linux-kernel, Stephen Boyd, Guru Das Srinagesh Convert bindings from txt to YAML. Signed-off-by: Guru Das Srinagesh <gurus@codeaurora.org> Reviewed-by: Rob Herring <robh@kernel.org> --- .../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 diff --git a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt deleted file mode 100644 index 35383adb..0000000 --- a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt +++ /dev/null @@ -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>; - }; diff --git a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml new file mode 100644 index 0000000..e8eea83 --- /dev/null +++ b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml @@ -0,0 +1,59 @@ +# 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: + - Guru Das Srinagesh <gurus@codeaurora.org> + +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: + items: + - const: qcom,pm8941-misc + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-names: + items: + - const: usb_id + +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>; + }; -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [RESEND PATCH v6 1/3] bindings: pm8941-misc: Convert bindings to YAML 2021-01-26 0:38 ` [RESEND PATCH v6 1/3] bindings: pm8941-misc: Convert bindings to YAML Guru Das Srinagesh @ 2021-02-24 16:54 ` Chanwoo Choi 0 siblings, 0 replies; 10+ messages in thread From: Chanwoo Choi @ 2021-02-24 16:54 UTC (permalink / raw) To: Guru Das Srinagesh, Andy Gross, Bjorn Andersson, linux-arm-msm, Rob Herring Cc: Subbaraman Narayanamurthy, David Collins, devicetree, linux-kernel, Stephen Boyd On 21. 1. 26. 오전 9:38, Guru Das Srinagesh wrote: > Convert bindings from txt to YAML. > > Signed-off-by: Guru Das Srinagesh <gurus@codeaurora.org> > Reviewed-by: Rob Herring <robh@kernel.org> > --- > .../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 > > diff --git a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt > deleted file mode 100644 > index 35383adb..0000000 > --- a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.txt > +++ /dev/null > @@ -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>; > - }; > diff --git a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml > new file mode 100644 > index 0000000..e8eea83 > --- /dev/null > +++ b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml > @@ -0,0 +1,59 @@ > +# 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: > + - Guru Das Srinagesh <gurus@codeaurora.org> > + > +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: > + items: > + - const: qcom,pm8941-misc > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + interrupt-names: > + items: > + - const: usb_id > + > +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>; > + }; > Applied it. Thanks, Chanwoo Choi ^ permalink raw reply [flat|nested] 10+ messages in thread
* [RESEND PATCH v6 2/3] bindings: pm8941-misc: Add support for VBUS detection 2021-01-26 0:38 [RESEND PATCH v6 0/3] Add support for VBUS detection Guru Das Srinagesh 2021-01-26 0:38 ` [RESEND PATCH v6 1/3] bindings: pm8941-misc: Convert bindings to YAML Guru Das Srinagesh @ 2021-01-26 0:38 ` Guru Das Srinagesh 2021-02-24 16:55 ` Chanwoo Choi 2021-01-26 0:38 ` [RESEND PATCH v6 3/3] extcon: qcom-spmi: " Guru Das Srinagesh 2021-05-26 19:03 ` [RESEND PATCH v6 0/3] " patchwork-bot+linux-arm-msm 3 siblings, 1 reply; 10+ messages in thread From: Guru Das Srinagesh @ 2021-01-26 0:38 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, linux-arm-msm, Rob Herring Cc: Subbaraman Narayanamurthy, David Collins, devicetree, linux-kernel, Stephen Boyd, Guru Das Srinagesh, Anirudh Ghayal Add interrupt support for reporting VBUS detection status that can be detected via a dedicated PMIC pin. Signed-off-by: Anirudh Ghayal <aghayal@codeaurora.org> Signed-off-by: Guru Das Srinagesh <gurus@codeaurora.org> Reviewed-by: Rob Herring <robh@kernel.org> --- Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml index e8eea83..6a9c96f 100644 --- a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml +++ b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml @@ -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 -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [RESEND PATCH v6 2/3] bindings: pm8941-misc: Add support for VBUS detection 2021-01-26 0:38 ` [RESEND PATCH v6 2/3] bindings: pm8941-misc: Add support for VBUS detection Guru Das Srinagesh @ 2021-02-24 16:55 ` Chanwoo Choi 0 siblings, 0 replies; 10+ messages in thread From: Chanwoo Choi @ 2021-02-24 16:55 UTC (permalink / raw) To: Guru Das Srinagesh, Andy Gross, Bjorn Andersson, linux-arm-msm, Rob Herring Cc: Subbaraman Narayanamurthy, David Collins, devicetree, linux-kernel, Stephen Boyd, Anirudh Ghayal On 21. 1. 26. 오전 9:38, Guru Das Srinagesh wrote: > Add interrupt support for reporting VBUS detection status that can be > detected via a dedicated PMIC pin. > > Signed-off-by: Anirudh Ghayal <aghayal@codeaurora.org> > Signed-off-by: Guru Das Srinagesh <gurus@codeaurora.org> > Reviewed-by: Rob Herring <robh@kernel.org> > --- > Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml > index e8eea83..6a9c96f 100644 > --- a/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml > +++ b/Documentation/devicetree/bindings/extcon/qcom,pm8941-misc.yaml > @@ -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 > Applied it. Thanks, Chanwoo Choi ^ permalink raw reply [flat|nested] 10+ messages in thread
* [RESEND PATCH v6 3/3] extcon: qcom-spmi: Add support for VBUS detection 2021-01-26 0:38 [RESEND PATCH v6 0/3] Add support for VBUS detection Guru Das Srinagesh 2021-01-26 0:38 ` [RESEND PATCH v6 1/3] bindings: pm8941-misc: Convert bindings to YAML Guru Das Srinagesh 2021-01-26 0:38 ` [RESEND PATCH v6 2/3] bindings: pm8941-misc: Add support for VBUS detection Guru Das Srinagesh @ 2021-01-26 0:38 ` Guru Das Srinagesh 2021-02-20 6:34 ` Chanwoo Choi 2021-02-24 16:54 ` Chanwoo Choi 2021-05-26 19:03 ` [RESEND PATCH v6 0/3] " patchwork-bot+linux-arm-msm 3 siblings, 2 replies; 10+ messages in thread From: Guru Das Srinagesh @ 2021-01-26 0:38 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, linux-arm-msm, Rob Herring Cc: Subbaraman Narayanamurthy, David Collins, devicetree, linux-kernel, Stephen Boyd, Anirudh Ghayal, Kavya Nunna, Guru Das Srinagesh From: Anirudh Ghayal <aghayal@codeaurora.org> VBUS can be detected via a dedicated PMIC pin. Add support for reporting the VBUS status. Signed-off-by: Anirudh Ghayal <aghayal@codeaurora.org> Signed-off-by: Kavya Nunna <knunna@codeaurora.org> Signed-off-by: Guru Das Srinagesh <gurus@codeaurora.org> --- drivers/extcon/extcon-qcom-spmi-misc.c | 99 +++++++++++++++++++++++++++------- 1 file changed, 80 insertions(+), 19 deletions(-) diff --git a/drivers/extcon/extcon-qcom-spmi-misc.c b/drivers/extcon/extcon-qcom-spmi-misc.c index 6b836ae..9e8ccfb 100644 --- a/drivers/extcon/extcon-qcom-spmi-misc.c +++ b/drivers/extcon/extcon-qcom-spmi-misc.c @@ -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 <stephen.boyd@linaro.org> @@ -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; } -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [RESEND PATCH v6 3/3] extcon: qcom-spmi: Add support for VBUS detection 2021-01-26 0:38 ` [RESEND PATCH v6 3/3] extcon: qcom-spmi: " Guru Das Srinagesh @ 2021-02-20 6:34 ` Chanwoo Choi 2021-02-24 19:50 ` Guru Das Srinagesh 2021-02-24 16:54 ` Chanwoo Choi 1 sibling, 1 reply; 10+ messages in thread From: Chanwoo Choi @ 2021-02-20 6:34 UTC (permalink / raw) To: Guru Das Srinagesh, Andy Gross, Bjorn Andersson, linux-arm-msm, Rob Herring Cc: Subbaraman Narayanamurthy, David Collins, devicetree, linux-kernel, Stephen Boyd, Anirudh Ghayal, Kavya Nunna Hi, Please use get_maintainer.pl script when you send the patches. I didn't receive the patches. I'll review. Thanks, Chanwoo Choi On 21. 1. 26. 오전 9:38, Guru Das Srinagesh wrote: > From: Anirudh Ghayal <aghayal@codeaurora.org> > > VBUS can be detected via a dedicated PMIC pin. Add support > for reporting the VBUS status. > > Signed-off-by: Anirudh Ghayal <aghayal@codeaurora.org> > Signed-off-by: Kavya Nunna <knunna@codeaurora.org> > Signed-off-by: Guru Das Srinagesh <gurus@codeaurora.org> > --- > drivers/extcon/extcon-qcom-spmi-misc.c | 99 +++++++++++++++++++++++++++------- > 1 file changed, 80 insertions(+), 19 deletions(-) > > diff --git a/drivers/extcon/extcon-qcom-spmi-misc.c b/drivers/extcon/extcon-qcom-spmi-misc.c > index 6b836ae..9e8ccfb 100644 > --- a/drivers/extcon/extcon-qcom-spmi-misc.c > +++ b/drivers/extcon/extcon-qcom-spmi-misc.c > @@ -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 <stephen.boyd@linaro.org> > @@ -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; > } > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RESEND PATCH v6 3/3] extcon: qcom-spmi: Add support for VBUS detection 2021-02-20 6:34 ` Chanwoo Choi @ 2021-02-24 19:50 ` Guru Das Srinagesh 0 siblings, 0 replies; 10+ messages in thread From: Guru Das Srinagesh @ 2021-02-24 19:50 UTC (permalink / raw) To: Chanwoo Choi Cc: Andy Gross, Bjorn Andersson, linux-arm-msm, Rob Herring, Subbaraman Narayanamurthy, David Collins, devicetree, linux-kernel, Stephen Boyd, Anirudh Ghayal, Kavya Nunna On Sat, Feb 20, 2021 at 03:34:52PM +0900, Chanwoo Choi wrote: > Hi, > > Please use get_maintainer.pl script when you send the patches. > I didn't receive the patches. I'll review. > > Thanks, > Chanwoo Choi Thanks for reviewing and accepting the patches, Chanwoo. Sorry, I missed out on using the get_maintainer.pl script - instead, I sent it to those listed under "ARM/QUALCOMM SUPPORT" in the MAINTAINERS file as drivers/extcon/extcon-qcom* is listed in that section. Thank you. Guru Das. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RESEND PATCH v6 3/3] extcon: qcom-spmi: Add support for VBUS detection 2021-01-26 0:38 ` [RESEND PATCH v6 3/3] extcon: qcom-spmi: " Guru Das Srinagesh 2021-02-20 6:34 ` Chanwoo Choi @ 2021-02-24 16:54 ` Chanwoo Choi 1 sibling, 0 replies; 10+ messages in thread From: Chanwoo Choi @ 2021-02-24 16:54 UTC (permalink / raw) To: Guru Das Srinagesh, Andy Gross, Bjorn Andersson, linux-arm-msm, Rob Herring Cc: Subbaraman Narayanamurthy, David Collins, devicetree, linux-kernel, Stephen Boyd, Anirudh Ghayal, Kavya Nunna Hi, On 21. 1. 26. 오전 9:38, Guru Das Srinagesh wrote: > From: Anirudh Ghayal <aghayal@codeaurora.org> > > VBUS can be detected via a dedicated PMIC pin. Add support > for reporting the VBUS status. > > Signed-off-by: Anirudh Ghayal <aghayal@codeaurora.org> > Signed-off-by: Kavya Nunna <knunna@codeaurora.org> > Signed-off-by: Guru Das Srinagesh <gurus@codeaurora.org> > --- > drivers/extcon/extcon-qcom-spmi-misc.c | 99 +++++++++++++++++++++++++++------- > 1 file changed, 80 insertions(+), 19 deletions(-) > > diff --git a/drivers/extcon/extcon-qcom-spmi-misc.c b/drivers/extcon/extcon-qcom-spmi-misc.c > index 6b836ae..9e8ccfb 100644 > --- a/drivers/extcon/extcon-qcom-spmi-misc.c > +++ b/drivers/extcon/extcon-qcom-spmi-misc.c > @@ -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 <stephen.boyd@linaro.org> > @@ -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; > } > Looks good to me. Apply it. for v5.13-rc1. Thanks, Chanwoo Choi ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [RESEND PATCH v6 0/3] Add support for VBUS detection 2021-01-26 0:38 [RESEND PATCH v6 0/3] Add support for VBUS detection Guru Das Srinagesh ` (2 preceding siblings ...) 2021-01-26 0:38 ` [RESEND PATCH v6 3/3] extcon: qcom-spmi: " Guru Das Srinagesh @ 2021-05-26 19:03 ` patchwork-bot+linux-arm-msm 3 siblings, 0 replies; 10+ messages in thread From: patchwork-bot+linux-arm-msm @ 2021-05-26 19:03 UTC (permalink / raw) To: Guru Das Srinagesh; +Cc: linux-arm-msm Hello: This series was applied to qcom/linux.git (refs/heads/for-next): On Mon, 25 Jan 2021 16:38:29 -0800 you wrote: > [REQUEST] > > Thanks Rob for reviewing the dt patches. > > Would it be possible for the maintainers and reviewers to review the code as > well? > > [...] Here is the summary with links: - [RESEND,v6,1/3] bindings: pm8941-misc: Convert bindings to YAML https://git.kernel.org/qcom/c/dd6f5afb1c2d - [RESEND,v6,2/3] bindings: pm8941-misc: Add support for VBUS detection https://git.kernel.org/qcom/c/4fcdd677c4ea - [RESEND,v6,3/3] extcon: qcom-spmi: Add support for VBUS detection https://git.kernel.org/qcom/c/7b1222b224af You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-05-26 19:03 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-01-26 0:38 [RESEND PATCH v6 0/3] Add support for VBUS detection Guru Das Srinagesh 2021-01-26 0:38 ` [RESEND PATCH v6 1/3] bindings: pm8941-misc: Convert bindings to YAML Guru Das Srinagesh 2021-02-24 16:54 ` Chanwoo Choi 2021-01-26 0:38 ` [RESEND PATCH v6 2/3] bindings: pm8941-misc: Add support for VBUS detection Guru Das Srinagesh 2021-02-24 16:55 ` Chanwoo Choi 2021-01-26 0:38 ` [RESEND PATCH v6 3/3] extcon: qcom-spmi: " Guru Das Srinagesh 2021-02-20 6:34 ` Chanwoo Choi 2021-02-24 19:50 ` Guru Das Srinagesh 2021-02-24 16:54 ` Chanwoo Choi 2021-05-26 19:03 ` [RESEND PATCH v6 0/3] " patchwork-bot+linux-arm-msm
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).