gpio: introduce gpio_request_one() and friends
gpio_request() without initial configuration of the GPIO is normally useless, introduce gpio_request_one() together with GPIOF_ flags for input/output direction and initial output level. gpio_{request,free}_array() for multiple GPIOs. Signed-off-by: Eric Miao <eric.y.miao@gmail.com> Cc: David Brownell <dbrownell@users.sourceforge.net> Cc: Ben Nizette <bn@niasdigital.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
62fecb70cf
commit
3e45f1d115
@@ -1237,6 +1237,64 @@ void gpio_free(unsigned gpio)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpio_free);
|
||||
|
||||
/**
|
||||
* gpio_request_one - request a single GPIO with initial configuration
|
||||
* @gpio: the GPIO number
|
||||
* @flags: GPIO configuration as specified by GPIOF_*
|
||||
* @label: a literal description string of this GPIO
|
||||
*/
|
||||
int gpio_request_one(unsigned gpio, unsigned long flags, const char *label)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = gpio_request(gpio, label);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (flags & GPIOF_DIR_IN)
|
||||
err = gpio_direction_input(gpio);
|
||||
else
|
||||
err = gpio_direction_output(gpio,
|
||||
(flags & GPIOF_INIT_HIGH) ? 1 : 0);
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpio_request_one);
|
||||
|
||||
/**
|
||||
* gpio_request_array - request multiple GPIOs in a single call
|
||||
* @array: array of the 'struct gpio'
|
||||
* @num: how many GPIOs in the array
|
||||
*/
|
||||
int gpio_request_array(struct gpio *array, size_t num)
|
||||
{
|
||||
int i, err;
|
||||
|
||||
for (i = 0; i < num; i++, array++) {
|
||||
err = gpio_request_one(array->gpio, array->flags, array->label);
|
||||
if (err)
|
||||
goto err_free;
|
||||
}
|
||||
return 0;
|
||||
|
||||
err_free:
|
||||
while (i--)
|
||||
gpio_free((--array)->gpio);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpio_request_array);
|
||||
|
||||
/**
|
||||
* gpio_free_array - release multiple GPIOs in a single call
|
||||
* @array: array of the 'struct gpio'
|
||||
* @num: how many GPIOs in the array
|
||||
*/
|
||||
void gpio_free_array(struct gpio *array, size_t num)
|
||||
{
|
||||
while (num--)
|
||||
gpio_free((array++)->gpio);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpio_free_array);
|
||||
|
||||
/**
|
||||
* gpiochip_is_requested - return string iff signal was requested
|
||||
|
Reference in New Issue
Block a user