linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2/2 v2] gpio/stmpe: support no-irq mode
@ 2012-01-26 21:17 Linus Walleij
  2012-01-27  4:19 ` Viresh Kumar
  2012-02-20 17:14 ` Samuel Ortiz
  0 siblings, 2 replies; 3+ messages in thread
From: Linus Walleij @ 2012-01-26 21:17 UTC (permalink / raw)
  To: Samuel Ortiz, linux-kernel; +Cc: Viresh Kumar, Chris Blair, Grant Likely

From: Chris Blair <chris.blair@stericsson.com>

Adds support for boards which have an STMPE GPIO device without the
interrupt pin connected. This means that no interrupt can be received
but the GPIO pins can still be driven and read.

Cc: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Viresh Kumar <viresh.kumar@st.com>
Tested-by: Michel Jaouen <michel.jaouen@stericsson.com>
Signed-off-by: Chris Blair <chris.blair@stericsson.com>
---
ChangeLog v1->v2:
- Removes the use of the new no_irq platform data member and
  instead uses the value obtained for the cell irq to know if irqs
  are supported or not. If irqs are not supported, the device
  will not have been given an irq resource and the irq value
  will be invalid.

This depends on the previous patch to the MFD
code so should better be merged into the MFD tree with the
previous patch.
---
 drivers/gpio/gpio-stmpe.c |   41 +++++++++++++++++++++++++----------------
 1 files changed, 25 insertions(+), 16 deletions(-)

diff --git a/drivers/gpio/gpio-stmpe.c b/drivers/gpio/gpio-stmpe.c
index 87a68a8..094c5c4 100644
--- a/drivers/gpio/gpio-stmpe.c
+++ b/drivers/gpio/gpio-stmpe.c
@@ -307,13 +307,11 @@ static int __devinit stmpe_gpio_probe(struct platform_device *pdev)
 	struct stmpe_gpio_platform_data *pdata;
 	struct stmpe_gpio *stmpe_gpio;
 	int ret;
-	int irq;
+	int irq = 0;
 
 	pdata = stmpe->pdata->gpio;
 
 	irq = platform_get_irq(pdev, 0);
-	if (irq < 0)
-		return irq;
 
 	stmpe_gpio = kzalloc(sizeof(struct stmpe_gpio), GFP_KERNEL);
 	if (!stmpe_gpio)
@@ -330,21 +328,28 @@ static int __devinit stmpe_gpio_probe(struct platform_device *pdev)
 	stmpe_gpio->chip.dev = &pdev->dev;
 	stmpe_gpio->chip.base = pdata ? pdata->gpio_base : -1;
 
-	stmpe_gpio->irq_base = stmpe->irq_base + STMPE_INT_GPIO(0);
+	if (irq >= 0)
+		stmpe_gpio->irq_base = stmpe->irq_base + STMPE_INT_GPIO(0);
+	else
+		dev_info(&pdev->dev,
+			"device configured in no-irq mode; "
+			"irqs are not available\n");
 
 	ret = stmpe_enable(stmpe, STMPE_BLOCK_GPIO);
 	if (ret)
 		goto out_free;
 
-	ret = stmpe_gpio_irq_init(stmpe_gpio);
-	if (ret)
-		goto out_disable;
+	if (irq >= 0) {
+		ret = stmpe_gpio_irq_init(stmpe_gpio);
+		if (ret)
+			goto out_disable;
 
-	ret = request_threaded_irq(irq, NULL, stmpe_gpio_irq, IRQF_ONESHOT,
-				   "stmpe-gpio", stmpe_gpio);
-	if (ret) {
-		dev_err(&pdev->dev, "unable to get irq: %d\n", ret);
-		goto out_removeirq;
+		ret = request_threaded_irq(irq, NULL, stmpe_gpio_irq,
+				IRQF_ONESHOT, "stmpe-gpio", stmpe_gpio);
+		if (ret) {
+			dev_err(&pdev->dev, "unable to get irq: %d\n", ret);
+			goto out_removeirq;
+		}
 	}
 
 	ret = gpiochip_add(&stmpe_gpio->chip);
@@ -361,9 +366,11 @@ static int __devinit stmpe_gpio_probe(struct platform_device *pdev)
 	return 0;
 
 out_freeirq:
-	free_irq(irq, stmpe_gpio);
+	if (irq >= 0)
+		free_irq(irq, stmpe_gpio);
 out_removeirq:
-	stmpe_gpio_irq_remove(stmpe_gpio);
+	if (irq >= 0)
+		stmpe_gpio_irq_remove(stmpe_gpio);
 out_disable:
 	stmpe_disable(stmpe, STMPE_BLOCK_GPIO);
 out_free:
@@ -391,8 +398,10 @@ static int __devexit stmpe_gpio_remove(struct platform_device *pdev)
 
 	stmpe_disable(stmpe, STMPE_BLOCK_GPIO);
 
-	free_irq(irq, stmpe_gpio);
-	stmpe_gpio_irq_remove(stmpe_gpio);
+	if (irq >= 0) {
+		free_irq(irq, stmpe_gpio);
+		stmpe_gpio_irq_remove(stmpe_gpio);
+	}
 	platform_set_drvdata(pdev, NULL);
 	kfree(stmpe_gpio);
 
-- 
1.7.8


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 2/2 v2] gpio/stmpe: support no-irq mode
  2012-01-26 21:17 [PATCH 2/2 v2] gpio/stmpe: support no-irq mode Linus Walleij
@ 2012-01-27  4:19 ` Viresh Kumar
  2012-02-20 17:14 ` Samuel Ortiz
  1 sibling, 0 replies; 3+ messages in thread
From: Viresh Kumar @ 2012-01-27  4:19 UTC (permalink / raw)
  To: Linus WALLEIJ; +Cc: Samuel Ortiz, linux-kernel, Christopher BLAIR, Grant Likely

On 1/27/2012 2:47 AM, Linus WALLEIJ wrote:
> From: Chris Blair <chris.blair@stericsson.com>
> 
> Adds support for boards which have an STMPE GPIO device without the
> interrupt pin connected. This means that no interrupt can be received
> but the GPIO pins can still be driven and read.
> 
> Cc: Grant Likely <grant.likely@secretlab.ca>
> Acked-by: Viresh Kumar <viresh.kumar@st.com>
> Tested-by: Michel Jaouen <michel.jaouen@stericsson.com>
> Signed-off-by: Chris Blair <chris.blair@stericsson.com>
> ---
> ChangeLog v1->v2:
> - Removes the use of the new no_irq platform data member and
>   instead uses the value obtained for the cell irq to know if irqs
>   are supported or not. If irqs are not supported, the device
>   will not have been given an irq resource and the irq value
>   will be invalid.
> 
> This depends on the previous patch to the MFD
> code so should better be merged into the MFD tree with the
> previous patch.
> ---
>  drivers/gpio/gpio-stmpe.c |   41 +++++++++++++++++++++++++----------------
>  1 files changed, 25 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpio/gpio-stmpe.c b/drivers/gpio/gpio-stmpe.c
> index 87a68a8..094c5c4 100644
> --- a/drivers/gpio/gpio-stmpe.c
> +++ b/drivers/gpio/gpio-stmpe.c
> @@ -307,13 +307,11 @@ static int __devinit stmpe_gpio_probe(struct platform_device *pdev)
>  	struct stmpe_gpio_platform_data *pdata;
>  	struct stmpe_gpio *stmpe_gpio;
>  	int ret;
> -	int irq;
> +	int irq = 0;
>  
>  	pdata = stmpe->pdata->gpio;
>  
>  	irq = platform_get_irq(pdev, 0);
> -	if (irq < 0)
> -		return irq;
>  
>  	stmpe_gpio = kzalloc(sizeof(struct stmpe_gpio), GFP_KERNEL);
>  	if (!stmpe_gpio)
> @@ -330,21 +328,28 @@ static int __devinit stmpe_gpio_probe(struct platform_device *pdev)
>  	stmpe_gpio->chip.dev = &pdev->dev;
>  	stmpe_gpio->chip.base = pdata ? pdata->gpio_base : -1;
>  
> -	stmpe_gpio->irq_base = stmpe->irq_base + STMPE_INT_GPIO(0);
> +	if (irq >= 0)
> +		stmpe_gpio->irq_base = stmpe->irq_base + STMPE_INT_GPIO(0);
> +	else
> +		dev_info(&pdev->dev,
> +			"device configured in no-irq mode; "
> +			"irqs are not available\n");
>  
>  	ret = stmpe_enable(stmpe, STMPE_BLOCK_GPIO);
>  	if (ret)
>  		goto out_free;
>  
> -	ret = stmpe_gpio_irq_init(stmpe_gpio);
> -	if (ret)
> -		goto out_disable;
> +	if (irq >= 0) {
> +		ret = stmpe_gpio_irq_init(stmpe_gpio);
> +		if (ret)
> +			goto out_disable;
>  
> -	ret = request_threaded_irq(irq, NULL, stmpe_gpio_irq, IRQF_ONESHOT,
> -				   "stmpe-gpio", stmpe_gpio);
> -	if (ret) {
> -		dev_err(&pdev->dev, "unable to get irq: %d\n", ret);
> -		goto out_removeirq;
> +		ret = request_threaded_irq(irq, NULL, stmpe_gpio_irq,
> +				IRQF_ONESHOT, "stmpe-gpio", stmpe_gpio);
> +		if (ret) {
> +			dev_err(&pdev->dev, "unable to get irq: %d\n", ret);
> +			goto out_removeirq;
> +		}
>  	}
>  
>  	ret = gpiochip_add(&stmpe_gpio->chip);
> @@ -361,9 +366,11 @@ static int __devinit stmpe_gpio_probe(struct platform_device *pdev)
>  	return 0;
>  
>  out_freeirq:
> -	free_irq(irq, stmpe_gpio);
> +	if (irq >= 0)
> +		free_irq(irq, stmpe_gpio);
>  out_removeirq:
> -	stmpe_gpio_irq_remove(stmpe_gpio);
> +	if (irq >= 0)
> +		stmpe_gpio_irq_remove(stmpe_gpio);
>  out_disable:
>  	stmpe_disable(stmpe, STMPE_BLOCK_GPIO);
>  out_free:
> @@ -391,8 +398,10 @@ static int __devexit stmpe_gpio_remove(struct platform_device *pdev)
>  
>  	stmpe_disable(stmpe, STMPE_BLOCK_GPIO);
>  
> -	free_irq(irq, stmpe_gpio);
> -	stmpe_gpio_irq_remove(stmpe_gpio);
> +	if (irq >= 0) {
> +		free_irq(irq, stmpe_gpio);
> +		stmpe_gpio_irq_remove(stmpe_gpio);
> +	}
>  	platform_set_drvdata(pdev, NULL);
>  	kfree(stmpe_gpio);
>  

Acked-by: Viresh Kumar <viresh.kumar@st.com>

-- 
viresh

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 2/2 v2] gpio/stmpe: support no-irq mode
  2012-01-26 21:17 [PATCH 2/2 v2] gpio/stmpe: support no-irq mode Linus Walleij
  2012-01-27  4:19 ` Viresh Kumar
@ 2012-02-20 17:14 ` Samuel Ortiz
  1 sibling, 0 replies; 3+ messages in thread
From: Samuel Ortiz @ 2012-02-20 17:14 UTC (permalink / raw)
  To: Linus Walleij; +Cc: linux-kernel, Viresh Kumar, Chris Blair, Grant Likely

Hi Linus,

On Thu, Jan 26, 2012 at 10:17:15PM +0100, Linus Walleij wrote:
> From: Chris Blair <chris.blair@stericsson.com>
> 
> Adds support for boards which have an STMPE GPIO device without the
> interrupt pin connected. This means that no interrupt can be received
> but the GPIO pins can still be driven and read.
> 
> Cc: Grant Likely <grant.likely@secretlab.ca>
> Acked-by: Viresh Kumar <viresh.kumar@st.com>
> Tested-by: Michel Jaouen <michel.jaouen@stericsson.com>
> Signed-off-by: Chris Blair <chris.blair@stericsson.com>
> ---
> ChangeLog v1->v2:
> - Removes the use of the new no_irq platform data member and
>   instead uses the value obtained for the cell irq to know if irqs
>   are supported or not. If irqs are not supported, the device
>   will not have been given an irq resource and the irq value
>   will be invalid.
> 
> This depends on the previous patch to the MFD
> code so should better be merged into the MFD tree with the
> previous patch.
Ok, I'm taking this one. It would be nice to get Grant's ACK as well.
Linus, you did not SOB this one. Did you simply forget ?

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-02-20 17:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-26 21:17 [PATCH 2/2 v2] gpio/stmpe: support no-irq mode Linus Walleij
2012-01-27  4:19 ` Viresh Kumar
2012-02-20 17:14 ` Samuel Ortiz

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).