gpiolib: Split fastpath array to two
Split fastpath array to two, i.e. for mask and for bits. At the same time declare them as bitmaps. This makes code better to read and gives a clue about use of bitmap API. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
This commit is contained in:
parent
bc3aca5393
commit
c80c44352d
@ -2540,21 +2540,24 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
|
||||
|
||||
while (i < array_size) {
|
||||
struct gpio_chip *gc = desc_array[i]->gdev->chip;
|
||||
unsigned long fastpath[2 * BITS_TO_LONGS(FASTPATH_NGPIO)];
|
||||
DECLARE_BITMAP(fastpath_mask, FASTPATH_NGPIO);
|
||||
DECLARE_BITMAP(fastpath_bits, FASTPATH_NGPIO);
|
||||
unsigned long *mask, *bits;
|
||||
int first, j;
|
||||
|
||||
if (likely(gc->ngpio <= FASTPATH_NGPIO)) {
|
||||
mask = fastpath;
|
||||
mask = fastpath_mask;
|
||||
bits = fastpath_bits;
|
||||
} else {
|
||||
mask = kmalloc_array(2 * BITS_TO_LONGS(gc->ngpio),
|
||||
sizeof(*mask),
|
||||
can_sleep ? GFP_KERNEL : GFP_ATOMIC);
|
||||
if (!mask)
|
||||
return -ENOMEM;
|
||||
|
||||
bits = mask + BITS_TO_LONGS(gc->ngpio);
|
||||
}
|
||||
|
||||
bits = mask + BITS_TO_LONGS(gc->ngpio);
|
||||
bitmap_zero(mask, gc->ngpio);
|
||||
|
||||
if (!can_sleep)
|
||||
@ -2577,7 +2580,7 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
|
||||
|
||||
ret = gpio_chip_get_multiple(gc, mask, bits);
|
||||
if (ret) {
|
||||
if (mask != fastpath)
|
||||
if (mask != fastpath_mask)
|
||||
kfree(mask);
|
||||
return ret;
|
||||
}
|
||||
@ -2598,7 +2601,7 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
|
||||
j);
|
||||
}
|
||||
|
||||
if (mask != fastpath)
|
||||
if (mask != fastpath_mask)
|
||||
kfree(mask);
|
||||
}
|
||||
return 0;
|
||||
@ -2823,21 +2826,24 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep,
|
||||
|
||||
while (i < array_size) {
|
||||
struct gpio_chip *gc = desc_array[i]->gdev->chip;
|
||||
unsigned long fastpath[2 * BITS_TO_LONGS(FASTPATH_NGPIO)];
|
||||
DECLARE_BITMAP(fastpath_mask, FASTPATH_NGPIO);
|
||||
DECLARE_BITMAP(fastpath_bits, FASTPATH_NGPIO);
|
||||
unsigned long *mask, *bits;
|
||||
int count = 0;
|
||||
|
||||
if (likely(gc->ngpio <= FASTPATH_NGPIO)) {
|
||||
mask = fastpath;
|
||||
mask = fastpath_mask;
|
||||
bits = fastpath_bits;
|
||||
} else {
|
||||
mask = kmalloc_array(2 * BITS_TO_LONGS(gc->ngpio),
|
||||
sizeof(*mask),
|
||||
can_sleep ? GFP_KERNEL : GFP_ATOMIC);
|
||||
if (!mask)
|
||||
return -ENOMEM;
|
||||
|
||||
bits = mask + BITS_TO_LONGS(gc->ngpio);
|
||||
}
|
||||
|
||||
bits = mask + BITS_TO_LONGS(gc->ngpio);
|
||||
bitmap_zero(mask, gc->ngpio);
|
||||
|
||||
if (!can_sleep)
|
||||
@ -2882,7 +2888,7 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep,
|
||||
if (count != 0)
|
||||
gpio_chip_set_multiple(gc, mask, bits);
|
||||
|
||||
if (mask != fastpath)
|
||||
if (mask != fastpath_mask)
|
||||
kfree(mask);
|
||||
}
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user