static int dc_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
 {
-       struct dc_pinmap *pmap = container_of(chip, struct dc_pinmap, chip);
+       struct dc_pinmap *pmap = gpiochip_get_data(chip);
        int reg_off = GP_DRIVE0(gpio/PINS_PER_COLLECTION);
        int bit_off = gpio % PINS_PER_COLLECTION;
        u8 drive;
 static int dc_gpio_direction_output(struct gpio_chip *chip, unsigned gpio,
                                    int value)
 {
-       struct dc_pinmap *pmap = container_of(chip, struct dc_pinmap, chip);
+       struct dc_pinmap *pmap = gpiochip_get_data(chip);
        int reg_off = GP_DRIVE0(gpio/PINS_PER_COLLECTION);
        int bit_off = gpio % PINS_PER_COLLECTION;
        u8 drive;
 
 static int dc_gpio_get(struct gpio_chip *chip, unsigned gpio)
 {
-       struct dc_pinmap *pmap = container_of(chip, struct dc_pinmap, chip);
+       struct dc_pinmap *pmap = gpiochip_get_data(chip);
        int reg_off = GP_INPUT(gpio/PINS_PER_COLLECTION);
        int bit_off = gpio % PINS_PER_COLLECTION;
        u8 input;
 
 static void dc_gpio_set(struct gpio_chip *chip, unsigned gpio, int value)
 {
-       struct dc_pinmap *pmap = container_of(chip, struct dc_pinmap, chip);
+       struct dc_pinmap *pmap = gpiochip_get_data(chip);
        int reg_off = GP_OUTPUT0(gpio/PINS_PER_COLLECTION);
        int bit_off = gpio % PINS_PER_COLLECTION;
        u8 output;
 
        spin_lock_init(&pmap->lock);
 
-       ret = gpiochip_add(chip);
+       ret = gpiochip_add_data(chip, pmap);
        if (ret < 0)
                return ret;