diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2013-04-09 16:54:27 +0200 | 
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2013-04-09 16:54:27 +0200 | 
| commit | 3afeb0a046af159f0ff97a20cf6ebc44d0d2bd64 (patch) | |
| tree | 49bbe7b27f8571c7716e9cbc7fbbe462ea82077a /drivers/gpio/gpio-tegra.c | |
| parent | d93bea007ab3d77b796eb99fb4ff4eeb013e0dfa (diff) | |
| parent | 38be85de698ef3f2755ee0eabf520530757860aa (diff) | |
| download | olio-linux-3.10-3afeb0a046af159f0ff97a20cf6ebc44d0d2bd64.tar.xz olio-linux-3.10-3afeb0a046af159f0ff97a20cf6ebc44d0d2bd64.zip  | |
Merge branch 'tegra/soc' into next/multiplatform
This is a dependency for the tegra multiplatform series.
Conflicts:
	drivers/clocksource/tegra20_timer.c
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'drivers/gpio/gpio-tegra.c')
| -rw-r--r-- | drivers/gpio/gpio-tegra.c | 21 | 
1 files changed, 19 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c index 414ad912232..e3956359202 100644 --- a/drivers/gpio/gpio-tegra.c +++ b/drivers/gpio/gpio-tegra.c @@ -72,6 +72,7 @@ struct tegra_gpio_bank {  	u32 oe[4];  	u32 int_enb[4];  	u32 int_lvl[4]; +	u32 wake_enb[4];  #endif  }; @@ -333,15 +334,31 @@ static int tegra_gpio_suspend(struct device *dev)  			bank->oe[p] = tegra_gpio_readl(GPIO_OE(gpio));  			bank->int_enb[p] = tegra_gpio_readl(GPIO_INT_ENB(gpio));  			bank->int_lvl[p] = tegra_gpio_readl(GPIO_INT_LVL(gpio)); + +			/* Enable gpio irq for wake up source */ +			tegra_gpio_writel(bank->wake_enb[p], +					  GPIO_INT_ENB(gpio));  		}  	}  	local_irq_restore(flags);  	return 0;  } -static int tegra_gpio_wake_enable(struct irq_data *d, unsigned int enable) +static int tegra_gpio_irq_set_wake(struct irq_data *d, unsigned int enable)  {  	struct tegra_gpio_bank *bank = irq_data_get_irq_chip_data(d); +	int gpio = d->hwirq; +	u32 port, bit, mask; + +	port = GPIO_PORT(gpio); +	bit = GPIO_BIT(gpio); +	mask = BIT(bit); + +	if (enable) +		bank->wake_enb[port] |= mask; +	else +		bank->wake_enb[port] &= ~mask; +  	return irq_set_irq_wake(bank->irq, enable);  }  #endif @@ -353,7 +370,7 @@ static struct irq_chip tegra_gpio_irq_chip = {  	.irq_unmask	= tegra_gpio_irq_unmask,  	.irq_set_type	= tegra_gpio_irq_set_type,  #ifdef CONFIG_PM_SLEEP -	.irq_set_wake	= tegra_gpio_wake_enable, +	.irq_set_wake	= tegra_gpio_irq_set_wake,  #endif  };  |