All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chanwoo Choi <cw00.choi@samsung.com>
To: Venkat Reddy Talla <vreddytalla@nvidia.com>,
	MyungJoo Ham <myungjoo.ham@samsung.com>,
	Rob Herring <robh+dt@kernel.org>, Pawel Moll <pawel.moll@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	Ian Campbell <ijc+devicetree@hellion.org.uk>,
	devicetree@vger.kernel.org, Kumar Gala <galak@codeaurora.org>,
	linux-kernel@vger.kernel.org,
	Laxman Dewangan <ldewangan@nvidia.com>
Subject: Re: [PATCH v2 1/2] extcon: gpio: add device tree support for extcon-gpio
Date: Wed, 25 May 2016 21:32:01 +0900	[thread overview]
Message-ID: <57459B41.3060507@samsung.com> (raw)
In-Reply-To: <1464176133-10742-1-git-send-email-vreddytalla@nvidia.com>

Hi Venkat,

I'm already working the support the device-tree for extcon-gpio [1].
[1] https://lkml.org/lkml/2015/10/21/8
- [PATCH v3] extcon: gpio: Add the support for Device tree bindings

So, I just apply this patch the temporay extcon-test[2] branch on extcon.git.
[2] https://git.kernel.org/cgit/linux/kernel/git/chanwoo/extcon.git/commit/?h=extcon-test&id=294d13e8d79fb0997e1bb146892cd75ec02221c0

But, Rob Herring gave me the some comment[2]. 
[3] https://lkml.org/lkml/2015/10/21/906
[4] https://lkml.org/lkml/2015/10/26/80

So, if you possible, do you improve the extcon-gpio.c for device-tree using by my patch[1]?
I think that you could improve the extcon-gpio.c driver as comment of Rob Herring.

I'm sorry for late reply.

Thanks,
Chanwoo Choi

On 2016년 05월 25일 20:35, Venkat Reddy Talla wrote:
> Adding device tree support for extcon-gpio driver.
> 
> Signed-off-by: Venkat Reddy Talla <vreddytalla@nvidia.com>
> 
> ---
> changes in v2:
> - using gpio flag cell to handle gpio active state
> - change dts property name gpio to gpios
> - removed prefix for debounce
> ---
> ---
>  drivers/extcon/extcon-gpio.c       | 80 +++++++++++++++++++++++++++++++++++---
>  include/linux/extcon/extcon-gpio.h |  4 +-
>  2 files changed, 77 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/extcon/extcon-gpio.c b/drivers/extcon/extcon-gpio.c
> index d023789..f29032c 100644
> --- a/drivers/extcon/extcon-gpio.c
> +++ b/drivers/extcon/extcon-gpio.c
> @@ -28,6 +28,8 @@
>  #include <linux/platform_device.h>
>  #include <linux/slab.h>
>  #include <linux/workqueue.h>
> +#include <linux/of.h>
> +#include <linux/of_gpio.h>
>  
>  struct gpio_extcon_data {
>  	struct extcon_dev *edev;
> @@ -90,21 +92,80 @@ static int gpio_extcon_init(struct device *dev, struct gpio_extcon_data *data)
>  	return 0;
>  }
>  
> +static struct gpio_extcon_pdata *gpio_extcon_of_pdata(
> +		struct platform_device *pdev)
> +{
> +	struct gpio_extcon_pdata *pdata;
> +	struct device_node *np = pdev->dev.of_node;
> +	enum of_gpio_flags flags;
> +	int gpio;
> +	u32 pval;
> +	int ret;
> +
> +	pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
> +	if (!pdata)
> +		return ERR_PTR(-ENOMEM);
> +
> +	gpio = of_get_named_gpio_flags(np, "gpios", 0, &flags);
> +	if (gpio < 0)
> +		return ERR_PTR(gpio);
> +
> +	pdata->gpio = gpio;
> +
> +	if (flags & OF_GPIO_ACTIVE_LOW)
> +		pdata->gpio_active_low = 1;
> +
> +	ret = of_property_read_u32(np, "extcon-gpio,irq-flags", &pval);
> +	if (!ret)
> +		pdata->irq_flags = pval;
> +	else
> +		pdata->irq_flags = IRQF_TRIGGER_RISING |
> +					IRQF_TRIGGER_FALLING;
> +
> +	ret = of_property_read_u32(np, "debounce-ms", &pval);
> +	if (!ret)
> +		pdata->debounce = pval;
> +
> +	pdata->extcon_cable_cnt = of_property_count_u32_elems(np,
> +					"extcon-gpio,cable-names");
> +	if (pdata->extcon_cable_cnt <= 0) {
> +		dev_err(&pdev->dev, "not found out cable names\n");
> +		return ERR_PTR(-EINVAL);
> +	}
> +
> +	pdata->extcon_id = devm_kzalloc(&pdev->dev,
> +			(pdata->extcon_cable_cnt) *
> +			sizeof(*pdata->extcon_id), GFP_KERNEL);
> +	if (!pdata->extcon_id)
> +		return ERR_PTR(-ENOMEM);
> +
> +	ret = of_property_read_u32_array(np, "extcon-gpio,cable-names",
> +			pdata->extcon_id, pdata->extcon_cable_cnt);
> +	if (ret)
> +		return ERR_PTR(-EINVAL);
> +
> +	return pdata;
> +}
> +
>  static int gpio_extcon_probe(struct platform_device *pdev)
>  {
>  	struct gpio_extcon_pdata *pdata = dev_get_platdata(&pdev->dev);
>  	struct gpio_extcon_data *data;
>  	int ret;
>  
> -	if (!pdata)
> -		return -EBUSY;
> -	if (!pdata->irq_flags || pdata->extcon_id > EXTCON_NONE)
> -		return -EINVAL;
> -
>  	data = devm_kzalloc(&pdev->dev, sizeof(struct gpio_extcon_data),
>  				   GFP_KERNEL);
>  	if (!data)
>  		return -ENOMEM;
> +
> +	if (!pdata && pdev->dev.of_node)
> +		pdata = gpio_extcon_of_pdata(pdev);
> +
> +	if (IS_ERR(pdata))
> +		return PTR_ERR(pdata);
> +	if (!pdata->irq_flags || !pdata->extcon_id)
> +		return -EINVAL;
> +
>  	data->pdata = pdata;
>  
>  	/* Initialize the gpio */
> @@ -113,7 +174,7 @@ static int gpio_extcon_probe(struct platform_device *pdev)
>  		return ret;
>  
>  	/* Allocate the memory of extcon devie and register extcon device */
> -	data->edev = devm_extcon_dev_allocate(&pdev->dev, &pdata->extcon_id);
> +	data->edev = devm_extcon_dev_allocate(&pdev->dev, pdata->extcon_id);
>  	if (IS_ERR(data->edev)) {
>  		dev_err(&pdev->dev, "failed to allocate extcon device\n");
>  		return -ENOMEM;
> @@ -167,12 +228,19 @@ static int gpio_extcon_resume(struct device *dev)
>  
>  static SIMPLE_DEV_PM_OPS(gpio_extcon_pm_ops, NULL, gpio_extcon_resume);
>  
> +static const struct of_device_id of_extcon_gpio_tbl[] = {
> +	{ .compatible = "extcon-gpio", },
> +	{ /* end */ }
> +};
> +MODULE_DEVICE_TABLE(of, of_extcon_gpio_tbl);
> +
>  static struct platform_driver gpio_extcon_driver = {
>  	.probe		= gpio_extcon_probe,
>  	.remove		= gpio_extcon_remove,
>  	.driver		= {
>  		.name	= "extcon-gpio",
>  		.pm	= &gpio_extcon_pm_ops,
> +		.of_match_table = of_extcon_gpio_tbl,
>  	},
>  };
>  
> diff --git a/include/linux/extcon/extcon-gpio.h b/include/linux/extcon/extcon-gpio.h
> index 7cacafb..1914894 100644
> --- a/include/linux/extcon/extcon-gpio.h
> +++ b/include/linux/extcon/extcon-gpio.h
> @@ -31,15 +31,17 @@
>   *			If false, high state of gpio means active.
>   * @debounce:		Debounce time for GPIO IRQ in ms.
>   * @irq_flags:		IRQ Flags (e.g., IRQF_TRIGGER_LOW).
> + * extcon_cable_cnt:    External cable count.
>   * @check_on_resume:	Boolean describing whether to check the state of gpio
>   *			while resuming from sleep.
>   */
>  struct gpio_extcon_pdata {
> -	unsigned int extcon_id;
> +	unsigned int *extcon_id;
>  	unsigned gpio;
>  	bool gpio_active_low;
>  	unsigned long debounce;
>  	unsigned long irq_flags;
> +	int extcon_cable_cnt;
>  
>  	bool check_on_resume;
>  };
> 

      parent reply	other threads:[~2016-05-25 12:32 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20160525113554epcas1p1d75cdfe7b480576e34b222fe6e8339e5@epcas1p1.samsung.com>
2016-05-25 11:35 ` [PATCH v2 1/2] extcon: gpio: add device tree support for extcon-gpio Venkat Reddy Talla
2016-05-25 11:35   ` Venkat Reddy Talla
     [not found]   ` <1464176133-10742-1-git-send-email-vreddytalla-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-05-25 11:35     ` [PATCH v2 2/2] extcon: gpio: add DT binding doc " Venkat Reddy Talla
2016-05-25 11:35       ` Venkat Reddy Talla
2016-05-25 12:33       ` Rob Herring
2016-05-25 12:32   ` Chanwoo Choi [this message]

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=57459B41.3060507@samsung.com \
    --to=cw00.choi@samsung.com \
    --cc=devicetree@vger.kernel.org \
    --cc=galak@codeaurora.org \
    --cc=ijc+devicetree@hellion.org.uk \
    --cc=ldewangan@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=myungjoo.ham@samsung.com \
    --cc=pawel.moll@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=vreddytalla@nvidia.com \
    /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.