All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chanwoo Choi <cwchoi00@gmail.com>
To: Guru Das Srinagesh <gurus@codeaurora.org>,
	Andy Gross <agross@kernel.org>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	linux-arm-msm@vger.kernel.org, Rob Herring <robh+dt@kernel.org>
Cc: Subbaraman Narayanamurthy <subbaram@codeaurora.org>,
	David Collins <collinsd@codeaurora.org>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	Stephen Boyd <sboyd@kernel.org>,
	Anirudh Ghayal <aghayal@codeaurora.org>,
	Kavya Nunna <knunna@codeaurora.org>
Subject: Re: [RESEND PATCH v6 3/3] extcon: qcom-spmi: Add support for VBUS detection
Date: Thu, 25 Feb 2021 01:54:11 +0900	[thread overview]
Message-ID: <bb573757-11fc-7a05-c89b-710eaaa3d6d0@gmail.com> (raw)
In-Reply-To: <683693bdfaa14a72550f466da8b26a6126317c4d.1611621365.git.gurus@codeaurora.org>

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

  parent reply	other threads:[~2021-02-24 16:56 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
2021-05-26 19:03 ` [RESEND PATCH v6 0/3] " patchwork-bot+linux-arm-msm

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bb573757-11fc-7a05-c89b-710eaaa3d6d0@gmail.com \
    --to=cwchoi00@gmail.com \
    --cc=aghayal@codeaurora.org \
    --cc=agross@kernel.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=collinsd@codeaurora.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gurus@codeaurora.org \
    --cc=knunna@codeaurora.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@kernel.org \
    --cc=subbaram@codeaurora.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.