static int octeon_gpio_dir_in(struct gpio_chip *chip, unsigned offset)
 {
-       struct octeon_gpio *gpio = container_of(chip, struct octeon_gpio, chip);
+       struct octeon_gpio *gpio = gpiochip_get_data(chip);
 
        cvmx_write_csr(gpio->register_base + bit_cfg_reg(offset), 0);
        return 0;
 
 static void octeon_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
 {
-       struct octeon_gpio *gpio = container_of(chip, struct octeon_gpio, chip);
+       struct octeon_gpio *gpio = gpiochip_get_data(chip);
        u64 mask = 1ull << offset;
        u64 reg = gpio->register_base + (value ? TX_SET : TX_CLEAR);
        cvmx_write_csr(reg, mask);
 static int octeon_gpio_dir_out(struct gpio_chip *chip, unsigned offset,
                               int value)
 {
-       struct octeon_gpio *gpio = container_of(chip, struct octeon_gpio, chip);
+       struct octeon_gpio *gpio = gpiochip_get_data(chip);
        union cvmx_gpio_bit_cfgx cfgx;
 
        octeon_gpio_set(chip, offset, value);
 
 static int octeon_gpio_get(struct gpio_chip *chip, unsigned offset)
 {
-       struct octeon_gpio *gpio = container_of(chip, struct octeon_gpio, chip);
+       struct octeon_gpio *gpio = gpiochip_get_data(chip);
        u64 read_bits = cvmx_read_csr(gpio->register_base + RX_DAT);
 
        return ((1ull << offset) & read_bits) != 0;
        chip->get = octeon_gpio_get;
        chip->direction_output = octeon_gpio_dir_out;
        chip->set = octeon_gpio_set;
-       err = gpiochip_add(chip);
+       err = gpiochip_add_data(chip, gpio);
        if (err)
                goto out;