gpio: timberdale: use gpiochip data pointer
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 7 Dec 2015 13:43:28 +0000 (14:43 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 5 Jan 2016 10:21:15 +0000 (11:21 +0100)
This makes the driver use the data pointer added to the gpio_chip
to store a pointer to the state container instead of relying on
container_of().

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-timberdale.c

index dda8f21..a6de10c 100644 (file)
@@ -53,7 +53,7 @@ struct timbgpio {
 static int timbgpio_update_bit(struct gpio_chip *gpio, unsigned index,
        unsigned offset, bool enabled)
 {
-       struct timbgpio *tgpio = container_of(gpio, struct timbgpio, gpio);
+       struct timbgpio *tgpio = gpiochip_get_data(gpio);
        u32 reg;
 
        spin_lock(&tgpio->lock);
@@ -77,7 +77,7 @@ static int timbgpio_gpio_direction_input(struct gpio_chip *gpio, unsigned nr)
 
 static int timbgpio_gpio_get(struct gpio_chip *gpio, unsigned nr)
 {
-       struct timbgpio *tgpio = container_of(gpio, struct timbgpio, gpio);
+       struct timbgpio *tgpio = gpiochip_get_data(gpio);
        u32 value;
 
        value = ioread32(tgpio->membase + TGPIOVAL);
@@ -98,7 +98,7 @@ static void timbgpio_gpio_set(struct gpio_chip *gpio,
 
 static int timbgpio_to_irq(struct gpio_chip *gpio, unsigned offset)
 {
-       struct timbgpio *tgpio = container_of(gpio, struct timbgpio, gpio);
+       struct timbgpio *tgpio = gpiochip_get_data(gpio);
 
        if (tgpio->irq_base <= 0)
                return -EINVAL;
@@ -279,7 +279,7 @@ static int timbgpio_probe(struct platform_device *pdev)
        gc->ngpio = pdata->nr_pins;
        gc->can_sleep = false;
 
-       err = gpiochip_add(gc);
+       err = gpiochip_add_data(gc, tgpio);
        if (err)
                return err;