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);
 
 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);
 
 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;
        gc->ngpio = pdata->nr_pins;
        gc->can_sleep = false;
 
-       err = gpiochip_add(gc);
+       err = gpiochip_add_data(gc, tgpio);
        if (err)
                return err;