From 85ab1ab6a965675e9a23934c5b415faf6d96cb10 Mon Sep 17 00:00:00 2001 From: Tarun Kanti DebBarma Date: Thu, 24 Nov 2011 03:58:54 +0530 Subject: [PATCH] --- yaml --- r: 295651 b: refs/heads/master c: 6fd9c421649961a9d6d30b149e0128dde1b806b4 h: refs/heads/master i: 295649: d32c40a64dce0d1ada912986217724fed913f55c 295647: 5f1c534ab7bcbcd34341754760d90868842d2bf3 v: v3 --- [refs] | 2 +- trunk/drivers/gpio/gpio-omap.c | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index c02b182b720e..4e24c299e220 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 72f83af99838bb663f85b65386db5b875748f379 +refs/heads/master: 6fd9c421649961a9d6d30b149e0128dde1b806b4 diff --git a/trunk/drivers/gpio/gpio-omap.c b/trunk/drivers/gpio/gpio-omap.c index 69e61aecab71..8aeb8dd4342b 100644 --- a/trunk/drivers/gpio/gpio-omap.c +++ b/trunk/drivers/gpio/gpio-omap.c @@ -203,22 +203,30 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio, l = GPIO_BIT(bank, gpio); + clk_enable(bank->dbck); reg = bank->base + bank->regs->debounce; __raw_writel(debounce, reg); reg = bank->base + bank->regs->debounce_en; val = __raw_readl(reg); - if (debounce) { + if (debounce) val |= l; - clk_enable(bank->dbck); - } else { + else val &= ~l; - clk_disable(bank->dbck); - } bank->dbck_enable_mask = val; __raw_writel(val, reg); + clk_disable(bank->dbck); + /* + * Enable debounce clock per module. + * This call is mandatory because in omap_gpio_request() when + * *_runtime_get_sync() is called, _gpio_dbck_enable() within + * runtime callbck fails to turn on dbck because dbck_enable_mask + * used within _gpio_dbck_enable() is still not initialized at + * that point. Therefore we have to enable dbck here. + */ + _gpio_dbck_enable(bank); } static inline void set_gpio_trigger(struct gpio_bank *bank, int gpio,