diff options
Diffstat (limited to 'arch/mips/kernel/gpio_txx9.c')
-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, | |||
47 | 47 | ||
48 | static int txx9_gpio_dir_in(struct gpio_chip *chip, unsigned int offset) | 48 | static int txx9_gpio_dir_in(struct gpio_chip *chip, unsigned int offset) |
49 | { | 49 | { |
50 | spin_lock_irq(&txx9_gpio_lock); | 50 | unsigned long flags; |
51 | spin_lock_irqsave(&txx9_gpio_lock, flags); | ||
51 | __raw_writel(__raw_readl(&txx9_pioptr->dir) & ~(1 << offset), | 52 | __raw_writel(__raw_readl(&txx9_pioptr->dir) & ~(1 << offset), |
52 | &txx9_pioptr->dir); | 53 | &txx9_pioptr->dir); |
53 | mmiowb(); | 54 | mmiowb(); |
54 | spin_unlock_irq(&txx9_gpio_lock); | 55 | spin_unlock_irqrestore(&txx9_gpio_lock, flags); |
55 | return 0; | 56 | return 0; |
56 | } | 57 | } |
57 | 58 | ||
58 | static int txx9_gpio_dir_out(struct gpio_chip *chip, unsigned int offset, | 59 | static int txx9_gpio_dir_out(struct gpio_chip *chip, unsigned int offset, |
59 | int value) | 60 | int value) |
60 | { | 61 | { |
61 | spin_lock_irq(&txx9_gpio_lock); | 62 | unsigned long flags; |
63 | spin_lock_irqsave(&txx9_gpio_lock, flags); | ||
62 | txx9_gpio_set_raw(offset, value); | 64 | txx9_gpio_set_raw(offset, value); |
63 | __raw_writel(__raw_readl(&txx9_pioptr->dir) | (1 << offset), | 65 | __raw_writel(__raw_readl(&txx9_pioptr->dir) | (1 << offset), |
64 | &txx9_pioptr->dir); | 66 | &txx9_pioptr->dir); |
65 | mmiowb(); | 67 | mmiowb(); |
66 | spin_unlock_irq(&txx9_gpio_lock); | 68 | spin_unlock_irqrestore(&txx9_gpio_lock, flags); |
67 | return 0; | 69 | return 0; |
68 | } | 70 | } |
69 | 71 | ||