diff mbox

arm: omap2plus: fix ads7846 pendown gpio request

Message ID 1304521495-20578-1-git-send-email-grinberg@compulab.co.il (mailing list archive)
State New, archived
Headers show

Commit Message

Igor Grinberg May 4, 2011, 3:04 p.m. UTC
introduced by: 96974a24
(omap: consolidate touch screen initialization among different boards)

ads7846 driver can use either gpio_pendown or get_pendown_state()
callback. In case of gpio_pendown, it requests the provided gpio_pendown
thus resulting in double requesting that gpio:

ads7846 spi1.0: failed to request pendown GPIO57
ads7846: probe of spi1.0 failed with error -16

Fix this by restricting the gpio request to the case of
get_pendown_state() callback is used.

Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
---
 arch/arm/mach-omap2/common-board-devices.c |   20 ++++++++++----------
 1 files changed, 10 insertions(+), 10 deletions(-)

Comments

Thomas Weber May 4, 2011, 5:22 p.m. UTC | #1
Am 04.05.2011 17:04, schrieb Igor Grinberg:
> introduced by: 96974a24
> (omap: consolidate touch screen initialization among different boards)
>
> ads7846 driver can use either gpio_pendown or get_pendown_state()
> callback. In case of gpio_pendown, it requests the provided gpio_pendown
> thus resulting in double requesting that gpio:
>
> ads7846 spi1.0: failed to request pendown GPIO57
> ads7846: probe of spi1.0 failed with error -16
>
> Fix this by restricting the gpio request to the case of
> get_pendown_state() callback is used.
>
> Signed-off-by: Igor Grinberg<grinberg@compulab.co.il>
> ---
>   arch/arm/mach-omap2/common-board-devices.c |   20 ++++++++++----------
>   1 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c
> index d57c71d..61fee80 100644
> --- a/arch/arm/mach-omap2/common-board-devices.c
> +++ b/arch/arm/mach-omap2/common-board-devices.c
> @@ -83,17 +83,17 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
>   	struct spi_board_info *spi_bi =&ads7846_spi_board_info;
>   	int err;
>
> -	err = gpio_request(gpio_pendown, "TS PenDown");
> -	if (err) {
> -		pr_err("Could not obtain gpio for TS PenDown: %d\n", err);
> -		return;
> -	}
> -
> -	gpio_direction_input(gpio_pendown);
> -	gpio_export(gpio_pendown, 0);
> +	if (board_pdata&&  board_pdata->get_pendown_state) {
> +		err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown");
> +		if (err) {
> +			pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err);
> +			return;
> +		}
> +		gpio_export(gpio_pendown, 0);
>
> -	if (gpio_debounce)
> -		gpio_set_debounce(gpio_pendown, gpio_debounce);
> +		if (gpio_debounce)
> +			gpio_set_debounce(gpio_pendown, gpio_debounce);
> +	}
>
>   	ads7846_config.gpio_pendown = gpio_pendown;
>
Tested-by: Thomas Weber <weber@corscience.de>

On Devkit8000.

Thanks.

Thomas
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Igor Grinberg May 11, 2011, 7:35 a.m. UTC | #2
Tony,


You can fold this one to the original patch from Mike as well,

or do you want it into the rc1?



On 05/04/11 20:22, Thomas Weber wrote:

> Am 04.05.2011 17:04, schrieb Igor Grinberg:
>> introduced by: 96974a24
>> (omap: consolidate touch screen initialization among different boards)
>>
>> ads7846 driver can use either gpio_pendown or get_pendown_state()
>> callback. In case of gpio_pendown, it requests the provided gpio_pendown
>> thus resulting in double requesting that gpio:
>>
>> ads7846 spi1.0: failed to request pendown GPIO57
>> ads7846: probe of spi1.0 failed with error -16
>>
>> Fix this by restricting the gpio request to the case of
>> get_pendown_state() callback is used.
>>
>> Signed-off-by: Igor Grinberg<grinberg@compulab.co.il>
>> ---
>>   arch/arm/mach-omap2/common-board-devices.c |   20 ++++++++++----------
>>   1 files changed, 10 insertions(+), 10 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c
>> index d57c71d..61fee80 100644
>> --- a/arch/arm/mach-omap2/common-board-devices.c
>> +++ b/arch/arm/mach-omap2/common-board-devices.c
>> @@ -83,17 +83,17 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
>>       struct spi_board_info *spi_bi =&ads7846_spi_board_info;
>>       int err;
>>
>> -    err = gpio_request(gpio_pendown, "TS PenDown");
>> -    if (err) {
>> -        pr_err("Could not obtain gpio for TS PenDown: %d\n", err);
>> -        return;
>> -    }
>> -
>> -    gpio_direction_input(gpio_pendown);
>> -    gpio_export(gpio_pendown, 0);
>> +    if (board_pdata&&  board_pdata->get_pendown_state) {
>> +        err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown");
>> +        if (err) {
>> +            pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err);
>> +            return;
>> +        }
>> +        gpio_export(gpio_pendown, 0);
>>
>> -    if (gpio_debounce)
>> -        gpio_set_debounce(gpio_pendown, gpio_debounce);
>> +        if (gpio_debounce)
>> +            gpio_set_debounce(gpio_pendown, gpio_debounce);
>> +    }
>>
>>       ads7846_config.gpio_pendown = gpio_pendown;
>>
> Tested-by: Thomas Weber <weber@corscience.de>
>
> On Devkit8000.
>
Igor Grinberg May 26, 2011, 1:58 p.m. UTC | #3
ping

On 05/11/11 10:35, Igor Grinberg wrote:

> Tony,
>
>
> You can fold this one to the original patch from Mike as well,
>
> or do you want it into the rc1?
>
>
>
> On 05/04/11 20:22, Thomas Weber wrote:
>
>> Am 04.05.2011 17:04, schrieb Igor Grinberg:
>>> introduced by: 96974a24
>>> (omap: consolidate touch screen initialization among different boards)
>>>
>>> ads7846 driver can use either gpio_pendown or get_pendown_state()
>>> callback. In case of gpio_pendown, it requests the provided gpio_pendown
>>> thus resulting in double requesting that gpio:
>>>
>>> ads7846 spi1.0: failed to request pendown GPIO57
>>> ads7846: probe of spi1.0 failed with error -16
>>>
>>> Fix this by restricting the gpio request to the case of
>>> get_pendown_state() callback is used.
>>>
>>> Signed-off-by: Igor Grinberg<grinberg@compulab.co.il>
>>> ---
>>>   arch/arm/mach-omap2/common-board-devices.c |   20 ++++++++++----------
>>>   1 files changed, 10 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c
>>> index d57c71d..61fee80 100644
>>> --- a/arch/arm/mach-omap2/common-board-devices.c
>>> +++ b/arch/arm/mach-omap2/common-board-devices.c
>>> @@ -83,17 +83,17 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
>>>       struct spi_board_info *spi_bi =&ads7846_spi_board_info;
>>>       int err;
>>>
>>> -    err = gpio_request(gpio_pendown, "TS PenDown");
>>> -    if (err) {
>>> -        pr_err("Could not obtain gpio for TS PenDown: %d\n", err);
>>> -        return;
>>> -    }
>>> -
>>> -    gpio_direction_input(gpio_pendown);
>>> -    gpio_export(gpio_pendown, 0);
>>> +    if (board_pdata&&  board_pdata->get_pendown_state) {
>>> +        err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown");
>>> +        if (err) {
>>> +            pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err);
>>> +            return;
>>> +        }
>>> +        gpio_export(gpio_pendown, 0);
>>>
>>> -    if (gpio_debounce)
>>> -        gpio_set_debounce(gpio_pendown, gpio_debounce);
>>> +        if (gpio_debounce)
>>> +            gpio_set_debounce(gpio_pendown, gpio_debounce);
>>> +    }
>>>
>>>       ads7846_config.gpio_pendown = gpio_pendown;
>>>
>> Tested-by: Thomas Weber <weber@corscience.de>
>>
>> On Devkit8000.
>>
Tony Lindgren May 31, 2011, 11:12 a.m. UTC | #4
* Igor Grinberg <grinberg@compulab.co.il> [110526 06:54]:
> ping
> 
> On 05/11/11 10:35, Igor Grinberg wrote:
> 
> > Tony,
> >
> >
> > You can fold this one to the original patch from Mike as well,
> >
> > or do you want it into the rc1?

Thanks adding to fixes.

Tony

> >
> >
> >
> > On 05/04/11 20:22, Thomas Weber wrote:
> >
> >> Am 04.05.2011 17:04, schrieb Igor Grinberg:
> >>> introduced by: 96974a24
> >>> (omap: consolidate touch screen initialization among different boards)
> >>>
> >>> ads7846 driver can use either gpio_pendown or get_pendown_state()
> >>> callback. In case of gpio_pendown, it requests the provided gpio_pendown
> >>> thus resulting in double requesting that gpio:
> >>>
> >>> ads7846 spi1.0: failed to request pendown GPIO57
> >>> ads7846: probe of spi1.0 failed with error -16
> >>>
> >>> Fix this by restricting the gpio request to the case of
> >>> get_pendown_state() callback is used.
> >>>
> >>> Signed-off-by: Igor Grinberg<grinberg@compulab.co.il>
> >>> ---
> >>>   arch/arm/mach-omap2/common-board-devices.c |   20 ++++++++++----------
> >>>   1 files changed, 10 insertions(+), 10 deletions(-)
> >>>
> >>> diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c
> >>> index d57c71d..61fee80 100644
> >>> --- a/arch/arm/mach-omap2/common-board-devices.c
> >>> +++ b/arch/arm/mach-omap2/common-board-devices.c
> >>> @@ -83,17 +83,17 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
> >>>       struct spi_board_info *spi_bi =&ads7846_spi_board_info;
> >>>       int err;
> >>>
> >>> -    err = gpio_request(gpio_pendown, "TS PenDown");
> >>> -    if (err) {
> >>> -        pr_err("Could not obtain gpio for TS PenDown: %d\n", err);
> >>> -        return;
> >>> -    }
> >>> -
> >>> -    gpio_direction_input(gpio_pendown);
> >>> -    gpio_export(gpio_pendown, 0);
> >>> +    if (board_pdata&&  board_pdata->get_pendown_state) {
> >>> +        err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown");
> >>> +        if (err) {
> >>> +            pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err);
> >>> +            return;
> >>> +        }
> >>> +        gpio_export(gpio_pendown, 0);
> >>>
> >>> -    if (gpio_debounce)
> >>> -        gpio_set_debounce(gpio_pendown, gpio_debounce);
> >>> +        if (gpio_debounce)
> >>> +            gpio_set_debounce(gpio_pendown, gpio_debounce);
> >>> +    }
> >>>
> >>>       ads7846_config.gpio_pendown = gpio_pendown;
> >>>
> >> Tested-by: Thomas Weber <weber@corscience.de>
> >>
> >> On Devkit8000.
> >>
> 
> -- 
> Regards,
> Igor.
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c
index d57c71d..61fee80 100644
--- a/arch/arm/mach-omap2/common-board-devices.c
+++ b/arch/arm/mach-omap2/common-board-devices.c
@@ -83,17 +83,17 @@  void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
 	struct spi_board_info *spi_bi = &ads7846_spi_board_info;
 	int err;
 
-	err = gpio_request(gpio_pendown, "TS PenDown");
-	if (err) {
-		pr_err("Could not obtain gpio for TS PenDown: %d\n", err);
-		return;
-	}
-
-	gpio_direction_input(gpio_pendown);
-	gpio_export(gpio_pendown, 0);
+	if (board_pdata && board_pdata->get_pendown_state) {
+		err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown");
+		if (err) {
+			pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err);
+			return;
+		}
+		gpio_export(gpio_pendown, 0);
 
-	if (gpio_debounce)
-		gpio_set_debounce(gpio_pendown, gpio_debounce);
+		if (gpio_debounce)
+			gpio_set_debounce(gpio_pendown, gpio_debounce);
+	}
 
 	ads7846_config.gpio_pendown = gpio_pendown;