Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 212436
b: refs/heads/master
c: 7e3f7e5
h: refs/heads/master
v: v3
  • Loading branch information
Rabin Vincent authored and Russell King committed Sep 2, 2010
1 parent e401171 commit d4ec92c
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e3726fcf263adf764a4f1b9428082837662a41c4
refs/heads/master: 7e3f7e59ccc6ed8b243de9941ffd09d2ad7a5b9c
30 changes: 27 additions & 3 deletions trunk/arch/arm/plat-nomadik/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ static void __nmk_config_pin(struct nmk_gpio_chip *nmk_chip, unsigned offset,
[3] /* illegal */ = "??"
};
static const char *slpmnames[] = {
[NMK_GPIO_SLPM_INPUT] = "input",
[NMK_GPIO_SLPM_NOCHANGE] = "no-change",
[NMK_GPIO_SLPM_INPUT] = "input/wakeup",
[NMK_GPIO_SLPM_NOCHANGE] = "no-change/no-wakeup",
};

int pin = PIN_NUM(cfg);
Expand Down Expand Up @@ -200,6 +200,10 @@ EXPORT_SYMBOL(nmk_config_pins);
* changed to an input (with pullup/down enabled) in sleep and deep sleep. If
* @mode is NMK_GPIO_SLPM_NOCHANGE, the pin remains in the state it was
* configured even when in sleep and deep sleep.
*
* On DB8500v2 onwards, this setting loses the previous meaning and instead
* indicates if wakeup detection is enabled on the pin. Note that
* enable_irq_wake() will automatically enable wakeup detection.
*/
int nmk_gpio_set_slpm(int gpio, enum nmk_gpio_slpm mode)
{
Expand Down Expand Up @@ -367,7 +371,27 @@ static void nmk_gpio_irq_unmask(unsigned int irq)

static int nmk_gpio_irq_set_wake(unsigned int irq, unsigned int on)
{
return nmk_gpio_irq_modify(irq, WAKE, on);
struct nmk_gpio_chip *nmk_chip;
unsigned long flags;
int gpio;

gpio = NOMADIK_IRQ_TO_GPIO(irq);
nmk_chip = get_irq_chip_data(irq);
if (!nmk_chip)
return -EINVAL;

spin_lock_irqsave(&nmk_chip->lock, flags);
#ifdef CONFIG_ARCH_U8500
if (cpu_is_u8500v2()) {
__nmk_gpio_set_slpm(nmk_chip, gpio,
on ? NMK_GPIO_SLPM_WAKEUP_ENABLE
: NMK_GPIO_SLPM_WAKEUP_DISABLE);
}
#endif
__nmk_gpio_irq_modify(nmk_chip, gpio, WAKE, on);
spin_unlock_irqrestore(&nmk_chip->lock, flags);

return 0;
}

static int nmk_gpio_irq_set_type(unsigned int irq, unsigned int type)
Expand Down
2 changes: 2 additions & 0 deletions trunk/arch/arm/plat-nomadik/include/plat/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ enum nmk_gpio_pull {
/* Sleep mode */
enum nmk_gpio_slpm {
NMK_GPIO_SLPM_INPUT,
NMK_GPIO_SLPM_WAKEUP_ENABLE = NMK_GPIO_SLPM_INPUT,
NMK_GPIO_SLPM_NOCHANGE,
NMK_GPIO_SLPM_WAKEUP_DISABLE = NMK_GPIO_SLPM_NOCHANGE,
};

extern int nmk_gpio_set_slpm(int gpio, enum nmk_gpio_slpm mode);
Expand Down
5 changes: 4 additions & 1 deletion trunk/arch/arm/plat-nomadik/include/plat/pincfg.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
*
* PIN_CFG_DEFAULT - default config (0):
* pull up/down = disabled
* sleep mode = input
* sleep mode = input/wakeup
*
* PIN_CFG - default config with alternate function
* PIN_CFG_PULL - default config with alternate function and pull up/down
Expand Down Expand Up @@ -55,6 +55,9 @@ typedef unsigned long pin_cfg_t;
#define PIN_SLPM(x) (((x) & PIN_SLPM_MASK) >> PIN_SLPM_SHIFT)
#define PIN_SLPM_INPUT (NMK_GPIO_SLPM_INPUT << PIN_SLPM_SHIFT)
#define PIN_SLPM_NOCHANGE (NMK_GPIO_SLPM_NOCHANGE << PIN_SLPM_SHIFT)
/* These two replace the above in DB8500v2+ */
#define PIN_SLPM_WAKEUP_ENABLE (NMK_GPIO_SLPM_WAKEUP_ENABLE << PIN_SLPM_SHIFT)
#define PIN_SLPM_WAKEUP_DISABLE (NMK_GPIO_SLPM_WAKEUP_DISABLE << PIN_SLPM_SHIFT)

#define PIN_CFG_DEFAULT (PIN_PULL_NONE | PIN_SLPM_INPUT)

Expand Down

0 comments on commit d4ec92c

Please sign in to comment.