Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

gpiolib: add gpiod_multi_set_value_cansleep

Merge series from David Lechner <dlechner@baylibre.com>:

This series was inspired by some minor annoyance I have experienced a
few times in recent reviews.

Calling gpiod_set_array_value_cansleep() can be quite verbose due to
having so many parameters. In most cases, we already have a struct
gpio_descs that contains the first 3 parameters so we end up with 3 (or
often even 6) pointer indirections at each call site. Also, people have
a tendency to want to hard-code the first argument instead of using
struct gpio_descs.ndescs, often without checking that ndescs >= the
hard-coded value.

So I'm proposing that we add a gpiod_multi_set_value_cansleep()
function that is a wrapper around gpiod_set_array_value_cansleep()
that has struct gpio_descs as the first parameter to make it a bit
easier to read the code and avoid the hard-coding temptation.

I've just done gpiod_multi_set_value_cansleep() for now since there
were over 10 callers of this one. There aren't as many callers of
the get and atomic variants, but we can add those too if this seems
like a useful thing to do.

Maintainers, if you prefer to have this go through the gpio tree, please
give your Acked-by:. Several maintainers have also requested an
immutable branch, so I expect that will be made available. And if there
is anything leftover after the next kernel release, I will resend it.

+12 -3
+11
include/linux/gpio/consumer.h
··· 3 3 #define __LINUX_GPIO_CONSUMER_H 4 4 5 5 #include <linux/bits.h> 6 + #include <linux/err.h> 6 7 #include <linux/types.h> 7 8 8 9 struct acpi_device; ··· 655 654 } 656 655 657 656 #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ 657 + 658 + static inline int gpiod_multi_set_value_cansleep(struct gpio_descs *descs, 659 + unsigned long *value_bitmap) 660 + { 661 + if (IS_ERR_OR_NULL(descs)) 662 + return PTR_ERR_OR_ZERO(descs); 663 + 664 + return gpiod_set_array_value_cansleep(descs->ndescs, descs->desc, 665 + descs->info, value_bitmap); 666 + } 658 667 659 668 #endif
+1 -3
sound/soc/codecs/adau1701.c
··· 325 325 __assign_bit(1, values, 1); 326 326 break; 327 327 } 328 - gpiod_set_array_value_cansleep(adau1701->gpio_pll_mode->ndescs, 329 - adau1701->gpio_pll_mode->desc, adau1701->gpio_pll_mode->info, 330 - values); 328 + gpiod_multi_set_value_cansleep(adau1701->gpio_pll_mode, values); 331 329 } 332 330 333 331 adau1701->pll_clkdiv = clkdiv;