return !!(ret & (1 << offset));
 }
 
-static void snd_soc_ac97_gpio_set(struct gpio_chip *chip, unsigned int offset,
-                                 int value)
+static int snd_soc_ac97_gpio_set(struct gpio_chip *chip, unsigned int offset,
+                                int value)
 {
        struct snd_ac97_gpio_priv *gpio_priv = gpiochip_get_data(chip);
        struct snd_soc_component *component = gpio_to_component(chip);
        snd_soc_component_write(component, AC97_GPIO_STATUS,
                                gpio_priv->gpios_set);
        dev_dbg(component->dev, "set gpio %d to %d\n", offset, !!value);
+
+       return 0;
 }
 
 static int snd_soc_ac97_gpio_direction_out(struct gpio_chip *chip,
                                     unsigned offset, int value)
 {
        struct snd_soc_component *component = gpio_to_component(chip);
+       int ret;
 
        dev_dbg(component->dev, "set gpio %d to output\n", offset);
-       snd_soc_ac97_gpio_set(chip, offset, value);
+
+       ret = snd_soc_ac97_gpio_set(chip, offset, value);
+       if (ret)
+               return ret;
+
        return snd_soc_component_update_bits(component, AC97_GPIO_CFG,
                                             1 << offset, 0);
 }
        .direction_input        = snd_soc_ac97_gpio_direction_in,
        .get                    = snd_soc_ac97_gpio_get,
        .direction_output       = snd_soc_ac97_gpio_direction_out,
-       .set                    = snd_soc_ac97_gpio_set,
+       .set_rv                 = snd_soc_ac97_gpio_set,
        .can_sleep              = 1,
 };