static void scoop_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
 {
-       struct scoop_dev *sdev = container_of(chip, struct scoop_dev, gpio);
+       struct scoop_dev *sdev = gpiochip_get_data(chip);
        unsigned long flags;
 
        spin_lock_irqsave(&sdev->scoop_lock, flags);
 
 static int scoop_gpio_get(struct gpio_chip *chip, unsigned offset)
 {
-       struct scoop_dev *sdev = container_of(chip, struct scoop_dev, gpio);
+       struct scoop_dev *sdev = gpiochip_get_data(chip);
 
        /* XXX: I'm unsure, but it seems so */
        return !!(ioread16(sdev->base + SCOOP_GPRR) & (1 << (offset + 1)));
 static int scoop_gpio_direction_input(struct gpio_chip *chip,
                        unsigned offset)
 {
-       struct scoop_dev *sdev = container_of(chip, struct scoop_dev, gpio);
+       struct scoop_dev *sdev = gpiochip_get_data(chip);
        unsigned long flags;
        unsigned short gpcr;
 
 static int scoop_gpio_direction_output(struct gpio_chip *chip,
                        unsigned offset, int value)
 {
-       struct scoop_dev *sdev = container_of(chip, struct scoop_dev, gpio);
+       struct scoop_dev *sdev = gpiochip_get_data(chip);
        unsigned long flags;
        unsigned short gpcr;
 
                devptr->gpio.direction_input = scoop_gpio_direction_input;
                devptr->gpio.direction_output = scoop_gpio_direction_output;
 
-               ret = gpiochip_add(&devptr->gpio);
+               ret = gpiochip_add_data(&devptr->gpio, devptr);
                if (ret)
                        goto err_gpio;
        }