linux-mips
[Top] [All Lists]

[PATCH] Make gpio_txx9 entirely spinlock-safe

To: linux-mips@linux-mips.org
Subject: [PATCH] Make gpio_txx9 entirely spinlock-safe
From: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Date: Thu, 10 Jul 2008 01:02:08 +0900 (JST)
Cc: ralf@linux-mips.org
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
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>
---
diff --git a/arch/mips/kernel/gpio_txx9.c b/arch/mips/kernel/gpio_txx9.c
index b1436a8..c6854d9 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;
 }
 

<Prev in Thread] Current Thread [Next in Thread>