[PATCH RFC 15/15 v5] gpio-ucb1400: Add block GPIO API

2012-10-17 Thread Roland Stigge
This patch adds block GPIO API support to the gpio-ucb1400 driver.

Signed-off-by: Roland Stigge 
---
 drivers/gpio/gpio-ucb1400.c |   23 +++
 1 file changed, 23 insertions(+)

--- linux-2.6.orig/drivers/gpio/gpio-ucb1400.c
+++ linux-2.6/drivers/gpio/gpio-ucb1400.c
@@ -45,6 +45,27 @@ static void ucb1400_gpio_set(struct gpio
ucb1400_gpio_set_value(gpio->ac97, off, val);
 }
 
+static unsigned long ucb1400_gpio_get_block(struct gpio_chip *gc,
+   unsigned long mask)
+{
+   struct ucb1400_gpio *gpio;
+   gpio = container_of(gc, struct ucb1400_gpio, gc);
+   return ucb1400_reg_read(gpio->ac97, UCB_IO_DATA) & mask;
+}
+
+static void ucb1400_gpio_set_block(struct gpio_chip *gc, unsigned long mask,
+  unsigned long values)
+{
+   struct ucb1400_gpio *gpio;
+   u16 tmp;
+   gpio = container_of(gc, struct ucb1400_gpio, gc);
+
+   tmp = ucb1400_reg_read(gpio->ac97, UCB_IO_DATA) & ~mask;
+   tmp |= values & mask;
+
+   ucb1400_reg_write(gpio->ac97, UCB_IO_DATA, tmp);
+}
+
 static int ucb1400_gpio_probe(struct platform_device *dev)
 {
struct ucb1400_gpio *ucb = dev->dev.platform_data;
@@ -66,6 +87,8 @@ static int ucb1400_gpio_probe(struct pla
ucb->gc.direction_output = ucb1400_gpio_dir_out;
ucb->gc.get = ucb1400_gpio_get;
ucb->gc.set = ucb1400_gpio_set;
+   ucb->gc.get_block = ucb1400_gpio_get_block;
+   ucb->gc.set_block = ucb1400_gpio_set_block;
ucb->gc.can_sleep = 1;
 
err = gpiochip_add(>gc);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH RFC 15/15 v5] gpio-ucb1400: Add block GPIO API

2012-10-17 Thread Roland Stigge
This patch adds block GPIO API support to the gpio-ucb1400 driver.

Signed-off-by: Roland Stigge sti...@antcom.de
---
 drivers/gpio/gpio-ucb1400.c |   23 +++
 1 file changed, 23 insertions(+)

--- linux-2.6.orig/drivers/gpio/gpio-ucb1400.c
+++ linux-2.6/drivers/gpio/gpio-ucb1400.c
@@ -45,6 +45,27 @@ static void ucb1400_gpio_set(struct gpio
ucb1400_gpio_set_value(gpio-ac97, off, val);
 }
 
+static unsigned long ucb1400_gpio_get_block(struct gpio_chip *gc,
+   unsigned long mask)
+{
+   struct ucb1400_gpio *gpio;
+   gpio = container_of(gc, struct ucb1400_gpio, gc);
+   return ucb1400_reg_read(gpio-ac97, UCB_IO_DATA)  mask;
+}
+
+static void ucb1400_gpio_set_block(struct gpio_chip *gc, unsigned long mask,
+  unsigned long values)
+{
+   struct ucb1400_gpio *gpio;
+   u16 tmp;
+   gpio = container_of(gc, struct ucb1400_gpio, gc);
+
+   tmp = ucb1400_reg_read(gpio-ac97, UCB_IO_DATA)  ~mask;
+   tmp |= values  mask;
+
+   ucb1400_reg_write(gpio-ac97, UCB_IO_DATA, tmp);
+}
+
 static int ucb1400_gpio_probe(struct platform_device *dev)
 {
struct ucb1400_gpio *ucb = dev-dev.platform_data;
@@ -66,6 +87,8 @@ static int ucb1400_gpio_probe(struct pla
ucb-gc.direction_output = ucb1400_gpio_dir_out;
ucb-gc.get = ucb1400_gpio_get;
ucb-gc.set = ucb1400_gpio_set;
+   ucb-gc.get_block = ucb1400_gpio_get_block;
+   ucb-gc.set_block = ucb1400_gpio_set_block;
ucb-gc.can_sleep = 1;
 
err = gpiochip_add(ucb-gc);
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/