Re: [patch 2.6.28-rc3-omap git 2/2] twl4030-gpio debounce cleanup

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

 



On Fri, Nov 07, 2008 at 11:59:49AM -0800, David Brownell wrote:
> From: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx>
> 
> Provide a static debounce configuration mechanism for twl4030 GPIOs,
> replacing the previous dynamic one.  The single user of that mechanism
> was for MMC card detect debouncing.
> 
> Boards can provide a bitmask saying which GPIOs to debounce (30 msec).
> It's always enabled for pins with the MMC card-detect/VMMCx link active,
> so most boards won't need to set the debounce mask.
> 
> This is a net code shrink, including runtime footprint.
> 
> Signed-off-by: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx>
> ---
> I'll submit this to mainline as soon as I get appropriate
> acks/signoffs here.

Shouldn't you update hsmmc.c as well ??

> 
>  drivers/gpio/twl4030-gpio.c |   54 +++++++++++++++++-------------------------
>  include/linux/i2c/twl4030.h |    9 ++-----
>  2 files changed, 26 insertions(+), 37 deletions(-)
> 
> --- a/drivers/gpio/twl4030-gpio.c
> +++ b/drivers/gpio/twl4030-gpio.c
> @@ -202,37 +202,6 @@ static int twl4030_get_gpio_datain(int g
>  	return ret;
>  }
>  
> -/*
> - * Configure debounce timing value for a GPIO pin on TWL4030
> - */
> -int twl4030_set_gpio_debounce(int gpio, int enable)
> -{
> -	u8 d_bnk = gpio >> 3;
> -	u8 d_msk = BIT(gpio & 0x7);
> -	u8 reg = 0;
> -	u8 base = 0;
> -	int ret = 0;
> -
> -	if (unlikely((gpio >= TWL4030_GPIO_MAX)
> -		|| !(gpio_usage_count & BIT(gpio))))
> -		return -EPERM;
> -
> -	base = REG_GPIO_DEBEN1 + d_bnk;
> -	mutex_lock(&gpio_lock);
> -	ret = gpio_twl4030_read(base);
> -	if (ret >= 0) {
> -		if (enable)
> -			reg = ret | d_msk;
> -		else
> -			reg = ret & ~d_msk;
> -
> -		ret = gpio_twl4030_write(base, reg);
> -	}
> -	mutex_unlock(&gpio_lock);
> -	return ret;
> -}
> -EXPORT_SYMBOL(twl4030_set_gpio_debounce);
> -
>  /*----------------------------------------------------------------------*/
>  
>  static int twl_request(struct gpio_chip *chip, unsigned offset)
> @@ -405,6 +374,23 @@ static int __devinit gpio_twl4030_pulls(
>  				REG_GPIOPUPDCTR1, 5);
>  }
>  
> +static int __devinit gpio_twl4030_debounce(u32 debounce, u8 mmc_cd)
> +{
> +	u8		message[4];
> +
> +	/* 30 msec of debouncing is always used for MMC card detect,
> +	 * and is optional for everything else.
> +	 */
> +	message[1] = (debounce & 0xff) | (mmc_cd & 0x03);
> +	debounce >>= 8;
> +	message[2] = (debounce & 0xff);
> +	debounce >>= 8;
> +	message[3] = (debounce & 0x03);
> +
> +	return twl4030_i2c_write(TWL4030_MODULE_GPIO, message,
> +				REG_GPIO_DEBEN1, 3);
> +}
> +
>  static int gpio_twl4030_remove(struct platform_device *pdev);
>  
>  static int __devinit gpio_twl4030_probe(struct platform_device *pdev)
> @@ -439,6 +425,12 @@ no_irqs:
>  				pdata->pullups, pdata->pulldowns,
>  				ret);
>  
> +	ret = gpio_twl4030_debounce(pdata->debounce, pdata->mmc_cd);
> +	if (ret)
> +		dev_dbg(&pdev->dev, "debounce %.03x %.01x --> %d\n",
> +				pdata->debounce, pdata->mmc_cd,
> +				ret);
> +
>  	twl_gpiochip.base = pdata->gpio_base;
>  	twl_gpiochip.ngpio = TWL4030_GPIO_MAX;
>  	twl_gpiochip.dev = &pdev->dev;
> --- a/include/linux/i2c/twl4030.h
> +++ b/include/linux/i2c/twl4030.h
> @@ -234,6 +234,9 @@ struct twl4030_gpio_platform_data {
>  	/* gpio-n should control VMMC(n+1) if BIT(n) in mmc_cd is set */
>  	u8		mmc_cd;
>  
> +	/* if BIT(N) is set, or VMMC(n+1) is linked, debounce GPIO-N */
> +	u32		debounce;
> +
>  	/* For gpio-N, bit (1 << N) in "pullups" is set if that pullup
>  	 * should be enabled.  Else, if that bit is set in "pulldowns",
>  	 * that pulldown is enabled.  Don't waste power by letting any
> @@ -390,12 +393,6 @@ int twl4030_sih_setup(int module);
>  
>  #define TWL4030_GPIO_IRQ_NO(n)		(TWL4030_GPIO_IRQ_BASE + (n))
>  
> -/*
> - * Exported TWL4030 GPIO APIs
> - *
> - * WARNING -- use standard GPIO and IRQ calls instead; these will vanish.
> - */
> -int twl4030_set_gpio_debounce(int gpio, int enable);
>  
>  #if defined(CONFIG_TWL4030_BCI_BATTERY) || \
>  	defined(CONFIG_TWL4030_BCI_BATTERY_MODULE)
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux