diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2008-07-10 01:02:08 +0900 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2008-07-15 18:44:34 +0100 |
commit | 14476007c90005c8992b786c15a59cca31f53268 (patch) | |
tree | 625733f5555d157f9c304d889fce1d2e521dd3b4 /arch | |
parent | 315806cb19f9d375dccbc2d60fa14e16afdcd5ac (diff) | |
download | linux-14476007c90005c8992b786c15a59cca31f53268.tar.bz2 |
[MIPS] txx9: Make gpio_txx9 entirely spinlock-safe
TXx9 GPIO set/get routines are spinlock-safe. This patch make
gpio_direction_{input,output} routines also spinlock-safe so that they
can be used during early board setup.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/kernel/gpio_txx9.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/mips/kernel/gpio_txx9.c b/arch/mips/kernel/gpio_txx9.c index b1436a857998..c6854d9df926 100644 --- a/arch/mips/kernel/gpio_txx9.c +++ b/arch/mips/kernel/gpio_txx9.c @@ -47,23 +47,25 @@ static void txx9_gpio_set(struct gpio_chip *chip, unsigned int offset, static int txx9_gpio_dir_in(struct gpio_chip *chip, unsigned int offset) { - spin_lock_irq(&txx9_gpio_lock); + unsigned long flags; + spin_lock_irqsave(&txx9_gpio_lock, flags); __raw_writel(__raw_readl(&txx9_pioptr->dir) & ~(1 << offset), &txx9_pioptr->dir); mmiowb(); - spin_unlock_irq(&txx9_gpio_lock); + spin_unlock_irqrestore(&txx9_gpio_lock, flags); return 0; } static int txx9_gpio_dir_out(struct gpio_chip *chip, unsigned int offset, int value) { - spin_lock_irq(&txx9_gpio_lock); + unsigned long flags; + spin_lock_irqsave(&txx9_gpio_lock, flags); txx9_gpio_set_raw(offset, value); __raw_writel(__raw_readl(&txx9_pioptr->dir) | (1 << offset), &txx9_pioptr->dir); mmiowb(); - spin_unlock_irq(&txx9_gpio_lock); + spin_unlock_irqrestore(&txx9_gpio_lock, flags); return 0; } |