gpiolib: Pass array info to get/set array functions
In order to make use of array info obtained from gpiod_get_array() and speed up processing of arrays matching single GPIO chip layout, that information must be passed to get/set array functions. Extend the functions' API with that additional parameter and update all users. Pass NULL if a user builds an array itself from single GPIOs. Cc: Jonathan Corbet <corbet@lwn.net> Cc: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Sebastien Bourdelin <sebastien.bourdelin@savoirfairelinux.com> Cc: Lukas Wunner <lukas@wunner.de> Cc: Peter Korsgaard <peter.korsgaard@barco.com> Cc: Peter Rosin <peda@axentia.se> Cc: Andrew Lunn <andrew@lunn.ch> Cc: Florian Fainelli <f.fainelli@gmail.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: Rojhalat Ibrahim <imr@rtschenk.de> Cc: Dominik Brodowski <linux@dominikbrodowski.net> Cc: Russell King <rmk+kernel@armlinux.org.uk> Cc: Kishon Vijay Abraham I <kishon@ti.com> Cc: Tony Lindgren <tony@atomide.com> Cc: Lars-Peter Clausen <lars@metafoo.de> Cc: Michael Hennerich <Michael.Hennerich@analog.com> Cc: Jonathan Cameron <jic23@kernel.org> Cc: Hartmut Knaack <knaack.h@gmx.de> Cc: Peter Meerwald-Stadler <pmeerw@pmeerw.net> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Jiri Slaby <jslaby@suse.com> Cc: Yegor Yefremov <yegorslists@googlemail.com> Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com> Acked-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:

zatwierdzone przez
Linus Walleij

rodzic
bf9346f5d4
commit
77588c14ac
@@ -436,6 +436,7 @@ static long linehandle_ioctl(struct file *filep, unsigned int cmd,
|
||||
true,
|
||||
lh->numdescs,
|
||||
lh->descs,
|
||||
NULL,
|
||||
vals);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -468,6 +469,7 @@ static long linehandle_ioctl(struct file *filep, unsigned int cmd,
|
||||
true,
|
||||
lh->numdescs,
|
||||
lh->descs,
|
||||
NULL,
|
||||
vals);
|
||||
}
|
||||
return -EINVAL;
|
||||
@@ -2784,6 +2786,7 @@ static int gpio_chip_get_multiple(struct gpio_chip *chip,
|
||||
int gpiod_get_array_value_complex(bool raw, bool can_sleep,
|
||||
unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
int i = 0;
|
||||
@@ -2897,6 +2900,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_value);
|
||||
* gpiod_get_raw_array_value() - read raw values from an array of GPIOs
|
||||
* @array_size: number of elements in the descriptor array / value bitmap
|
||||
* @desc_array: array of GPIO descriptors whose values will be read
|
||||
* @array_info: information on applicability of fast bitmap processing path
|
||||
* @value_bitmap: bitmap to store the read values
|
||||
*
|
||||
* Read the raw values of the GPIOs, i.e. the values of the physical lines
|
||||
@@ -2908,12 +2912,14 @@ EXPORT_SYMBOL_GPL(gpiod_get_value);
|
||||
*/
|
||||
int gpiod_get_raw_array_value(unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
if (!desc_array)
|
||||
return -EINVAL;
|
||||
return gpiod_get_array_value_complex(true, false, array_size,
|
||||
desc_array, value_bitmap);
|
||||
desc_array, array_info,
|
||||
value_bitmap);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_get_raw_array_value);
|
||||
|
||||
@@ -2921,6 +2927,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_raw_array_value);
|
||||
* gpiod_get_array_value() - read values from an array of GPIOs
|
||||
* @array_size: number of elements in the descriptor array / value bitmap
|
||||
* @desc_array: array of GPIO descriptors whose values will be read
|
||||
* @array_info: information on applicability of fast bitmap processing path
|
||||
* @value_bitmap: bitmap to store the read values
|
||||
*
|
||||
* Read the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
|
||||
@@ -2931,12 +2938,14 @@ EXPORT_SYMBOL_GPL(gpiod_get_raw_array_value);
|
||||
*/
|
||||
int gpiod_get_array_value(unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
if (!desc_array)
|
||||
return -EINVAL;
|
||||
return gpiod_get_array_value_complex(false, false, array_size,
|
||||
desc_array, value_bitmap);
|
||||
desc_array, array_info,
|
||||
value_bitmap);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_get_array_value);
|
||||
|
||||
@@ -3029,6 +3038,7 @@ static void gpio_chip_set_multiple(struct gpio_chip *chip,
|
||||
int gpiod_set_array_value_complex(bool raw, bool can_sleep,
|
||||
unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
int i = 0;
|
||||
@@ -3156,6 +3166,7 @@ EXPORT_SYMBOL_GPL(gpiod_set_value);
|
||||
* gpiod_set_raw_array_value() - assign values to an array of GPIOs
|
||||
* @array_size: number of elements in the descriptor array / value bitmap
|
||||
* @desc_array: array of GPIO descriptors whose values will be assigned
|
||||
* @array_info: information on applicability of fast bitmap processing path
|
||||
* @value_bitmap: bitmap of values to assign
|
||||
*
|
||||
* Set the raw values of the GPIOs, i.e. the values of the physical lines
|
||||
@@ -3166,12 +3177,13 @@ EXPORT_SYMBOL_GPL(gpiod_set_value);
|
||||
*/
|
||||
int gpiod_set_raw_array_value(unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
if (!desc_array)
|
||||
return -EINVAL;
|
||||
return gpiod_set_array_value_complex(true, false, array_size,
|
||||
desc_array, value_bitmap);
|
||||
desc_array, array_info, value_bitmap);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_set_raw_array_value);
|
||||
|
||||
@@ -3179,6 +3191,7 @@ EXPORT_SYMBOL_GPL(gpiod_set_raw_array_value);
|
||||
* gpiod_set_array_value() - assign values to an array of GPIOs
|
||||
* @array_size: number of elements in the descriptor array / value bitmap
|
||||
* @desc_array: array of GPIO descriptors whose values will be assigned
|
||||
* @array_info: information on applicability of fast bitmap processing path
|
||||
* @value_bitmap: bitmap of values to assign
|
||||
*
|
||||
* Set the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
|
||||
@@ -3189,12 +3202,13 @@ EXPORT_SYMBOL_GPL(gpiod_set_raw_array_value);
|
||||
*/
|
||||
void gpiod_set_array_value(unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
if (!desc_array)
|
||||
return;
|
||||
gpiod_set_array_value_complex(false, false, array_size, desc_array,
|
||||
value_bitmap);
|
||||
array_info, value_bitmap);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_set_array_value);
|
||||
|
||||
@@ -3416,6 +3430,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_value_cansleep);
|
||||
* gpiod_get_raw_array_value_cansleep() - read raw values from an array of GPIOs
|
||||
* @array_size: number of elements in the descriptor array / value bitmap
|
||||
* @desc_array: array of GPIO descriptors whose values will be read
|
||||
* @array_info: information on applicability of fast bitmap processing path
|
||||
* @value_bitmap: bitmap to store the read values
|
||||
*
|
||||
* Read the raw values of the GPIOs, i.e. the values of the physical lines
|
||||
@@ -3426,13 +3441,15 @@ EXPORT_SYMBOL_GPL(gpiod_get_value_cansleep);
|
||||
*/
|
||||
int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
might_sleep_if(extra_checks);
|
||||
if (!desc_array)
|
||||
return -EINVAL;
|
||||
return gpiod_get_array_value_complex(true, true, array_size,
|
||||
desc_array, value_bitmap);
|
||||
desc_array, array_info,
|
||||
value_bitmap);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_get_raw_array_value_cansleep);
|
||||
|
||||
@@ -3440,6 +3457,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_raw_array_value_cansleep);
|
||||
* gpiod_get_array_value_cansleep() - read values from an array of GPIOs
|
||||
* @array_size: number of elements in the descriptor array / value bitmap
|
||||
* @desc_array: array of GPIO descriptors whose values will be read
|
||||
* @array_info: information on applicability of fast bitmap processing path
|
||||
* @value_bitmap: bitmap to store the read values
|
||||
*
|
||||
* Read the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
|
||||
@@ -3449,13 +3467,15 @@ EXPORT_SYMBOL_GPL(gpiod_get_raw_array_value_cansleep);
|
||||
*/
|
||||
int gpiod_get_array_value_cansleep(unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
might_sleep_if(extra_checks);
|
||||
if (!desc_array)
|
||||
return -EINVAL;
|
||||
return gpiod_get_array_value_complex(false, true, array_size,
|
||||
desc_array, value_bitmap);
|
||||
desc_array, array_info,
|
||||
value_bitmap);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_get_array_value_cansleep);
|
||||
|
||||
@@ -3499,6 +3519,7 @@ EXPORT_SYMBOL_GPL(gpiod_set_value_cansleep);
|
||||
* gpiod_set_raw_array_value_cansleep() - assign values to an array of GPIOs
|
||||
* @array_size: number of elements in the descriptor array / value bitmap
|
||||
* @desc_array: array of GPIO descriptors whose values will be assigned
|
||||
* @array_info: information on applicability of fast bitmap processing path
|
||||
* @value_bitmap: bitmap of values to assign
|
||||
*
|
||||
* Set the raw values of the GPIOs, i.e. the values of the physical lines
|
||||
@@ -3508,13 +3529,14 @@ EXPORT_SYMBOL_GPL(gpiod_set_value_cansleep);
|
||||
*/
|
||||
int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
might_sleep_if(extra_checks);
|
||||
if (!desc_array)
|
||||
return -EINVAL;
|
||||
return gpiod_set_array_value_complex(true, true, array_size, desc_array,
|
||||
value_bitmap);
|
||||
array_info, value_bitmap);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_set_raw_array_value_cansleep);
|
||||
|
||||
@@ -3539,6 +3561,7 @@ void gpiod_add_lookup_tables(struct gpiod_lookup_table **tables, size_t n)
|
||||
* gpiod_set_array_value_cansleep() - assign values to an array of GPIOs
|
||||
* @array_size: number of elements in the descriptor array / value bitmap
|
||||
* @desc_array: array of GPIO descriptors whose values will be assigned
|
||||
* @array_info: information on applicability of fast bitmap processing path
|
||||
* @value_bitmap: bitmap of values to assign
|
||||
*
|
||||
* Set the logical values of the GPIOs, i.e. taking their ACTIVE_LOW status
|
||||
@@ -3548,13 +3571,14 @@ void gpiod_add_lookup_tables(struct gpiod_lookup_table **tables, size_t n)
|
||||
*/
|
||||
void gpiod_set_array_value_cansleep(unsigned int array_size,
|
||||
struct gpio_desc **desc_array,
|
||||
struct gpio_array *array_info,
|
||||
unsigned long *value_bitmap)
|
||||
{
|
||||
might_sleep_if(extra_checks);
|
||||
if (!desc_array)
|
||||
return;
|
||||
gpiod_set_array_value_complex(false, true, array_size, desc_array,
|
||||
value_bitmap);
|
||||
array_info, value_bitmap);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_set_array_value_cansleep);
|
||||
|
||||
|
Reference in New Issue
Block a user