Skip to content

Commit

Permalink
gpiolib: annotate gpio-intialization with __must_check
Browse files Browse the repository at this point in the history
Because GPIOs can have crucial functions especially in embedded systems,
we are better safe than sorry regarding their configuration.  For
gpio_request, the documentation is simply enforced: <quote>"The return
value of gpio_request() must be checked."</quote> For gpio_direction_* and
gpio_request_*, we now act accordingly.

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Cc: Greg KH <gregkh@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Wolfram Sang authored and Linus Torvalds committed Jan 13, 2011
1 parent 49a3679 commit 0fdae42
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 9 deletions.
2 changes: 1 addition & 1 deletion Documentation/gpio.txt
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ setting up a platform_device using the GPIO, is mark its direction:
int gpio_direction_input(unsigned gpio);
int gpio_direction_output(unsigned gpio, int value);

The return value is zero for success, else a negative errno. It should
The return value is zero for success, else a negative errno. It must
be checked, since the get/set calls don't have error returns and since
misconfiguration is possible. You should normally issue these calls from
a task context. However, for spinlock-safe GPIOs it's OK to use them
Expand Down
10 changes: 5 additions & 5 deletions include/asm-generic/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,11 @@ extern struct gpio_chip *gpiochip_find(void *data,
/* Always use the library code for GPIO management calls,
* or when sleeping may be involved.
*/
extern int gpio_request(unsigned gpio, const char *label);
extern int __must_check gpio_request(unsigned gpio, const char *label);
extern void gpio_free(unsigned gpio);

extern int gpio_direction_input(unsigned gpio);
extern int gpio_direction_output(unsigned gpio, int value);
extern int __must_check gpio_direction_input(unsigned gpio);
extern int __must_check gpio_direction_output(unsigned gpio, int value);

extern int gpio_set_debounce(unsigned gpio, unsigned debounce);

Expand Down Expand Up @@ -192,8 +192,8 @@ struct gpio {
const char *label;
};

extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
extern int gpio_request_array(struct gpio *array, size_t num);
extern int __must_check gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
extern int __must_check gpio_request_array(struct gpio *array, size_t num);
extern void gpio_free_array(struct gpio *array, size_t num);

#ifdef CONFIG_GPIO_SYSFS
Expand Down
6 changes: 3 additions & 3 deletions include/linux/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ static inline int gpio_is_valid(int number)
return 0;
}

static inline int gpio_request(unsigned gpio, const char *label)
static inline int __must_check gpio_request(unsigned gpio, const char *label)
{
return -ENOSYS;
}
Expand All @@ -42,12 +42,12 @@ static inline void gpio_free(unsigned gpio)
WARN_ON(1);
}

static inline int gpio_direction_input(unsigned gpio)
static inline int __must_check gpio_direction_input(unsigned gpio)
{
return -ENOSYS;
}

static inline int gpio_direction_output(unsigned gpio, int value)
static inline int __must_check gpio_direction_output(unsigned gpio, int value)
{
return -ENOSYS;
}
Expand Down

0 comments on commit 0fdae42

Please sign in to comment.