Commit 40bb5d72 authored by Morten Hein Tiljeset's avatar Morten Hein Tiljeset Committed by Linus Walleij

gpio-pisosr: add support for get_multiple

Signed-off-by: default avatarMorten Hein Tiljeset <morten.tiljeset@prevas.dk>
Reviewed-by: default avatarSean Nyekjaer <sean.nyekjaer@prevas.dk>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 2b955b34
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
* GNU General Public License version 2 for more details. * GNU General Public License version 2 for more details.
*/ */
#include <linux/bitmap.h>
#include <linux/bitops.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gpio/consumer.h> #include <linux/gpio/consumer.h>
#include <linux/gpio/driver.h> #include <linux/gpio/driver.h>
...@@ -90,6 +92,25 @@ static int pisosr_gpio_get(struct gpio_chip *chip, unsigned offset) ...@@ -90,6 +92,25 @@ static int pisosr_gpio_get(struct gpio_chip *chip, unsigned offset)
return (gpio->buffer[offset / 8] >> (offset % 8)) & 0x1; return (gpio->buffer[offset / 8] >> (offset % 8)) & 0x1;
} }
static int pisosr_gpio_get_multiple(struct gpio_chip *chip,
unsigned long *mask, unsigned long *bits)
{
struct pisosr_gpio *gpio = gpiochip_get_data(chip);
unsigned int nbytes = DIV_ROUND_UP(chip->ngpio, 8);
unsigned int i, j;
pisosr_gpio_refresh(gpio);
bitmap_zero(bits, chip->ngpio);
for (i = 0; i < nbytes; i++) {
j = i / sizeof(unsigned long);
bits[j] |= ((unsigned long) gpio->buffer[i])
<< (8 * (i % sizeof(unsigned long)));
}
return 0;
}
static const struct gpio_chip template_chip = { static const struct gpio_chip template_chip = {
.label = "pisosr-gpio", .label = "pisosr-gpio",
.owner = THIS_MODULE, .owner = THIS_MODULE,
...@@ -97,6 +118,7 @@ static const struct gpio_chip template_chip = { ...@@ -97,6 +118,7 @@ static const struct gpio_chip template_chip = {
.direction_input = pisosr_gpio_direction_input, .direction_input = pisosr_gpio_direction_input,
.direction_output = pisosr_gpio_direction_output, .direction_output = pisosr_gpio_direction_output,
.get = pisosr_gpio_get, .get = pisosr_gpio_get,
.get_multiple = pisosr_gpio_get_multiple,
.base = -1, .base = -1,
.ngpio = DEFAULT_NGPIO, .ngpio = DEFAULT_NGPIO,
.can_sleep = true, .can_sleep = true,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment