Skip to content

Commit

Permalink
[ARM] gpio_free might sleep, arm architecture
Browse files Browse the repository at this point in the history
According to the documentation gpio_free should only be called from task
context only.  To make this more explicit add a might sleep to all
implementations.

This patch changes the gpio_free implementations for the arm architecture.
 DaVinci is skipped on purpose to simplify the merge process for patches
switching it over to use gpiolib as per request by David Brownell.

Signed-off-by: Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
Cc: David Brownell <david-b@pacbell.net>
Cc: Andrew Victor <linux@maxim.org.za>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Uwe Kleine-König authored and Russell King committed Oct 30, 2008
1 parent 63890a0 commit 9c65685
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 0 deletions.
2 changes: 2 additions & 0 deletions arch/arm/mach-at91/include/mach/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#ifndef __ASM_ARCH_AT91RM9200_GPIO_H
#define __ASM_ARCH_AT91RM9200_GPIO_H

#include <linux/kernel.h>
#include <asm/irq.h>

#define PIN_BASE NR_AIC_IRQS
Expand Down Expand Up @@ -220,6 +221,7 @@ static inline int gpio_request(unsigned gpio, const char *label)

static inline void gpio_free(unsigned gpio)
{
might_sleep();
}

extern int gpio_direction_input(unsigned gpio);
Expand Down
3 changes: 3 additions & 0 deletions arch/arm/mach-imx/include/mach/gpio.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#ifndef _IMX_GPIO_H

#include <linux/kernel.h>
#include <mach/imx-regs.h>

#define IMX_GPIO_ALLOC_MODE_NORMAL 0
Expand Down Expand Up @@ -63,6 +64,8 @@ static inline int gpio_request(unsigned gpio, const char *label)

static inline void gpio_free(unsigned gpio)
{
might_sleep();

imx_gpio_free(gpio);
}

Expand Down
3 changes: 3 additions & 0 deletions arch/arm/mach-ixp4xx/include/mach/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#ifndef __ASM_ARCH_IXP4XX_GPIO_H
#define __ASM_ARCH_IXP4XX_GPIO_H

#include <linux/kernel.h>
#include <mach/hardware.h>

static inline int gpio_request(unsigned gpio, const char *label)
Expand All @@ -34,6 +35,8 @@ static inline int gpio_request(unsigned gpio, const char *label)

static inline void gpio_free(unsigned gpio)
{
might_sleep();

return;
}

Expand Down
3 changes: 3 additions & 0 deletions arch/arm/mach-ks8695/include/mach/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
#ifndef __ASM_ARCH_GPIO_H_
#define __ASM_ARCH_GPIO_H_

#include <linux/kernel.h>

#define KS8695_GPIO_0 0
#define KS8695_GPIO_1 1
#define KS8695_GPIO_2 2
Expand Down Expand Up @@ -74,6 +76,7 @@ static inline int gpio_request(unsigned int pin, const char *label)

static inline void gpio_free(unsigned int pin)
{
might_sleep();
}

#endif
2 changes: 2 additions & 0 deletions arch/arm/mach-ns9xxx/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation.
*/
#include <linux/kernel.h>
#include <linux/compiler.h>
#include <linux/init.h>
#include <linux/spinlock.h>
Expand Down Expand Up @@ -63,6 +64,7 @@ EXPORT_SYMBOL(gpio_request);

void gpio_free(unsigned gpio)
{
might_sleep();
clear_bit(gpio, gpiores);
return;
}
Expand Down
2 changes: 2 additions & 0 deletions arch/arm/mach-orion5x/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,8 @@ EXPORT_SYMBOL(gpio_request);

void gpio_free(unsigned pin)
{
might_sleep();

if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
return;
Expand Down

0 comments on commit 9c65685

Please sign in to comment.