[PATCH] ep93xx: implement gpiolib set_debounce for built-in GPIOs

Ryan Mallon ryan at bluewatersys.com
Wed Jan 26 19:06:29 EST 2011


On 01/27/2011 12:59 PM, H Hartley Sweeten wrote:
> On Wednesday, January 26, 2011 4:48 PM, Ryan Mallon wrote:
>> On 01/27/2011 12:22 PM, H Hartley Sweeten wrote:
>>> GPIO Ports A, B, and F on the ep93xx provide interrupt capability.  It is
>>> possible to debounce the input signal on these ports when interrupts are
>>> enabled.
>>>
>>> Support for this debounce capability was provided with an ep93xx internal
>>> function.  Now that gpiolib knows about gpio debounce, use the gpiolib
>>> method and do not export the internal function.
>>>
>>> Signed-off-by: H Hartley Sweeten <hsweeten at visionengravers.com>
>>> Cc: Ryan Mallon <ryan at bluewatersys.com>
>>>
>>> ---
>>>
>>> diff --git a/arch/arm/mach-ep93xx/gpio.c b/arch/arm/mach-ep93xx/gpio.c
>>> index bec34b8..a889fa7 100644
>>> --- a/arch/arm/mach-ep93xx/gpio.c
>>> +++ b/arch/arm/mach-ep93xx/gpio.c
>>> @@ -61,7 +61,7 @@ static inline void ep93xx_gpio_int_mask(unsigned line)
>>>  	gpio_int_unmasked[line >> 3] &= ~(1 << (line & 7));
>>>  }
>>>  
>>> -void ep93xx_gpio_int_debounce(unsigned int irq, int enable)
>>> +static void ep93xx_gpio_int_debounce(unsigned int irq, bool enable)
>>>  {
>>>  	int line = irq_to_gpio(irq);
>>>  	int port = line >> 3;
>>> @@ -75,7 +75,6 @@ void ep93xx_gpio_int_debounce(unsigned int irq, int enable)
>>>  	__raw_writeb(gpio_int_debounce[port],
>>>  		EP93XX_GPIO_REG(int_debounce_register_offset[port]));
>>>  }
>>> -EXPORT_SYMBOL(ep93xx_gpio_int_debounce);
>>>  
>>>  static void ep93xx_gpio_ab_irq_handler(unsigned int irq, struct irq_desc *desc)
>>>  {
>>> @@ -335,6 +334,20 @@ static void ep93xx_gpio_set(struct gpio_chip *chip, unsigned offset, int val)
>>>  	local_irq_restore(flags);
>>>  }
>>>  
>>> +static int ep93xx_gpio_set_debounce(struct gpio_chip *chip,
>>> +				    unsigned offset, unsigned debounce)
>>> +{
>>> +	int gpio = chip->base + offset;
>>> +	int irq = gpio_to_irq(gpio);
>>> +
>>> +	if (irq < 0)
>>> +		return -EINVAL;
>>> +
>>> +	ep93xx_gpio_int_debounce(irq, debounce ? true : false);
>>
>> We should just move the code from ep93xx_gpio_int_debounce here. Why
>> have two functions to do one thing?
> 
> The reason I left the original function it that it messes with the cached gpio_int_debounce
> values.  Also, the 'debounce' feature is interrupt specific.  If the gpio pin is no enabled
> as an interrupt the debounce has no effect.  As such I figured it was cleaner to leave it
> in place.

That's a valid reason. It is fine as is.

~Ryan

-- 
Bluewater Systems Ltd - ARM Technology Solution Centre

Ryan Mallon         		5 Amuri Park, 404 Barbadoes St
ryan at bluewatersys.com         	PO Box 13 889, Christchurch 8013
http://www.bluewatersys.com	New Zealand
Phone: +64 3 3779127		Freecall: Australia 1800 148 751
Fax:   +64 3 3779135			  USA 1800 261 2934



More information about the linux-arm-kernel mailing list