ret);
                goto err_enable;
        }
+       wm8994->revision = ret;
 
        switch (wm8994->type) {
        case WM8994:
-               switch (ret) {
+               switch (wm8994->revision) {
                case 0:
                case 1:
                        dev_warn(wm8994->dev,
                                 "revision %c not fully supported\n",
-                                'A' + ret);
+                                'A' + wm8994->revision);
                        break;
                default:
                        break;
                break;
        case WM1811:
                /* Revision C did not change the relevant layer */
-               if (ret > 1)
-                       ret++;
+               if (wm8994->revision > 1)
+                       wm8994->revision++;
                break;
        default:
                break;
        }
 
-       dev_info(wm8994->dev, "%s revision %c\n", devname, 'A' + ret);
+       dev_info(wm8994->dev, "%s revision %c\n", devname,
+                'A' + wm8994->revision);
 
        switch (wm8994->type) {
        case WM1811:
 
  *
  */
 
+#include <linux/mfd/wm8994/core.h>
 #include <linux/mfd/wm8994/registers.h>
 #include <linux/regmap.h>
 
        { 0x0702, 0xA101 },    /* R1794 - Pull Control (BCLK2) */
        { 0x0703, 0xA101 },    /* R1795 - Pull Control (DACLRCLK2) */
        { 0x0704, 0xA101 },    /* R1796 - Pull Control (DACDAT2) */
-       { 0x0705, 0xA101 },    /* R1797 - GPIO 6 */
        { 0x0707, 0xA101 },    /* R1799 - GPIO 8 */
        { 0x0708, 0xA101 },    /* R1800 - GPIO 9 */
        { 0x0709, 0xA101 },    /* R1801 - GPIO 10 */
        }
 }
 
+static bool wm1811_volatile_register(struct device *dev, unsigned int reg)
+{
+       struct wm8994 *wm8994 = dev_get_drvdata(dev);
+
+       switch (reg) {
+       case WM8994_GPIO_6:
+               if (wm8994->revision > 1)
+                       return true;
+               else
+                       return false;
+       default:
+               return wm8994_volatile_register(dev, reg);
+       }
+}
+
 static bool wm8958_volatile_register(struct device *dev, unsigned int reg)
 {
        switch (reg) {
        .num_reg_defaults = ARRAY_SIZE(wm1811_defaults),
 
        .max_register = WM8994_MAX_REGISTER,
-       .volatile_reg = wm8994_volatile_register,
+       .volatile_reg = wm1811_volatile_register,
        .readable_reg = wm1811_readable_register,
 };