*/
 
 #include <linux/spinlock.h>
-#include <linux/gpio.h>
+#include <linux/gpio/driver.h>
 #include <linux/platform_device.h>
 #include <linux/via-core.h>
 #include <linux/via-gpio.h>
 static void via_gpio_set(struct gpio_chip *chip, unsigned int nr,
                         int value)
 {
-       struct viafb_gpio_cfg *cfg = container_of(chip,
-                                                 struct viafb_gpio_cfg,
-                                                 gpio_chip);
+       struct viafb_gpio_cfg *cfg = gpiochip_get_data(chip);
        u8 reg;
        struct viafb_gpio *gpio;
        unsigned long flags;
  */
 static int via_gpio_dir_input(struct gpio_chip *chip, unsigned int nr)
 {
-       struct viafb_gpio_cfg *cfg = container_of(chip,
-                                                 struct viafb_gpio_cfg,
-                                                 gpio_chip);
+       struct viafb_gpio_cfg *cfg = gpiochip_get_data(chip);
        struct viafb_gpio *gpio;
        unsigned long flags;
 
 
 static int via_gpio_get(struct gpio_chip *chip, unsigned int nr)
 {
-       struct viafb_gpio_cfg *cfg = container_of(chip,
-                                                 struct viafb_gpio_cfg,
-                                                 gpio_chip);
+       struct viafb_gpio_cfg *cfg = gpiochip_get_data(chip);
        u8 reg;
        struct viafb_gpio *gpio;
        unsigned long flags;
         * Get registered.
         */
        viafb_gpio_config.gpio_chip.base = -1;  /* Dynamic */
-       ret = gpiochip_add(&viafb_gpio_config.gpio_chip);
+       ret = gpiochip_add_data(&viafb_gpio_config.gpio_chip,
+                               &viafb_gpio_config);
        if (ret) {
                printk(KERN_ERR "viafb: failed to add gpios (%d)\n", ret);
                viafb_gpio_config.gpio_chip.ngpio = 0;