[MIPS] txx9: Make gpio_txx9 entirely spinlock-safe
authorAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Wed, 9 Jul 2008 16:02:08 +0000 (01:02 +0900)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 15 Jul 2008 17:44:34 +0000 (18:44 +0100)
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>
arch/mips/kernel/gpio_txx9.c

index b1436a8..c6854d9 100644 (file)
@@ -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;
 }