Re: [PATCH] iio-trig-gpio:Remove redundant gpio_request

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/08/10 11:38, Hennerich, Michael wrote:
> Hi Jonathan,
> Jonathan Cameron wrote on 2010-03-08:
>> Hi Michael,
>>
>> I'm wondering about this one.  Are you sure all platforms have the
>> correct gpio setup when doing the request_irq?
>> (those that need it obviously, basically the question is whether all
>> platforms default to having gpio's as inputs).
>>
>> If the do there is certainly a lot of redundant code about based on a
>> quick bit of grepping. (loads of it in arm/mach-pxa for starters).  In
>> that particular case all gpio's are configured as inputs, but I'm not
>> sure other platforms are so well behaved.
>>
>>
>> Unless I'm completely wrong that means we have run into a rather
>> general issue.
> 
> By no means - you have to first configure a GPIO_IRQ as GPIO-Input and then as IRQ.
> irq_type takes care of it. In your case you gave the IRQF_TRIGGER_RISING flag with request_irq().
> In case such a IRQF_TRIGGER_XXX flag is present the common IRQ infrastructure will call the associated irq_chips irq_type() function.
> This function is supposed to take care for all of it.(GPIO input, setting the level, edge and polarity)
> 
> As an alternative you can request_irq() without the  IRQF_TRIGGER_XXX flags and use set_irq_type() anytime later, or even in advance.
Ah fair enough. Thanks for cleaning that up for me.

Acked-by: Jonathan Cameron <jic23@xxxxxxxxx>

Please send it on to Greg KH
> 
>>
>> Also, if this is fine, the right fix is probably to have the interrupt
>> as the platform data parameter rather than the gpio.  It makes the
>> code more general and moves a lot of these direction issues etc into
>> the board specific areas rather than here.
> 
> Of course this is an option.
> 
> Regards,
> Michael
> 
>>
>> Also, CC Greg KH on any patches like this which are fixes.
>>
>> Jonathan
>>
>>> Remove redundant gpio_request. The GPIO used as trigger IRQ, is also
>>> requested as gpio, but actually never read. On some platforms a GPIO
>>> requested as IRQ can't be requested as GPIO as well.
>>>
>>> From: Michael Hennerich <Michael.Hennerich@xxxxxxxxxx>
>>>
>>> Index: drivers/staging/iio/trigger/iio-trig-gpio.c
>>> ===================================================================
>>> --- drivers/staging/iio/trigger/iio-trig-gpio.c (revision 8368)
>>> +++ drivers/staging/iio/trigger/iio-trig-gpio.c (working copy)
>>> @@ -94,18 +94,11 @@
>>>                          IIO_TRIGGER_NAME_LENGTH,
>>>                          "gpiotrig%d",
>>>                          pdata[i]);
>>> -               ret = gpio_request(trig_info->gpio, trig->name);
>>> -               if (ret)
>>> -                       goto error_free_name;
>>>
>>> -               ret = gpio_direction_input(trig_info->gpio);
>>> -               if (ret)
>>> -                       goto error_release_gpio;
>>> -
>>>                 irq = gpio_to_irq(trig_info->gpio);
>>>                 if (irq < 0) {
>>>                         ret = irq;
>>> -                       goto error_release_gpio;
>>> +                       goto error_free_name;
>>>                 }
>>>
>>>                 ret = request_irq(irq, iio_gpio_trigger_poll, @@
>>> -113,7 +106,7 @@
>>>                                   trig->name,
>>>                                   trig);
>>>                 if (ret)
>>> -                       goto error_release_gpio;
>>> +                       goto error_free_name;
>>>
>>>                 ret = iio_trigger_register(trig);
>>>                 if (ret)
>>> @@ -127,8 +120,6 @@
>>>  /* First clean up the partly allocated trigger */
>>>  error_release_irq:
>>>         free_irq(irq, trig);
>>> -error_release_gpio:
>>> -       gpio_free(trig_info->gpio);
>>>  error_free_name:
>>>         kfree(trig->name);
>>>  error_free_trig_info:
>>> @@ -143,7 +134,6 @@
>>>                                  alloc_list) {
>>>                 trig_info = trig->private_data;
>>>                 free_irq(gpio_to_irq(trig_info->gpio), trig); -
>>>                       gpio_free(trig_info->gpio); kfree(trig->name);
>>>                 kfree(trig_info); iio_trigger_unregister(trig); @@
>>>                 -166,7 +156,6 @@ trig_info = trig->private_data;
>>>                 iio_trigger_unregister(trig);
>>>                 free_irq(gpio_to_irq(trig_info->gpio), trig); -
>>>                       gpio_free(trig_info->gpio); kfree(trig->name);
>>>                 kfree(trig_info); iio_put_trigger(trig);
>>>
>>>
>>> ------------------------------------------------------------------
>>> ********* Analog Devices GmbH              Open Platform Solutions
>>> **  *****
>>> **     ** Wilhelm-Wagenfeld-Strasse 6
>>> **  ***** D-80807 Munich
>>> ********* Germany
>>> Registergericht München HRB 40368,  Geschäftsführer: Thomas Wessel,
>>> William A. Martin, Margaret K. Seif
>>>
> Greetings,
> Michael
> 
> Analog Devices GmbH      Wilhelm-Wagenfeld-Str. 6      80807 Muenchen
> Sitz der Gesellschaft Muenchen, Registergericht Muenchen HRB 4036 Geschaeftsfuehrer Thomas Wessel, William A. Martin, Margaret Seif
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux