diff options
Diffstat (limited to 'drivers/mfd')
-rw-r--r-- | drivers/mfd/wm8994-core.c | 12 | ||||
-rw-r--r-- | drivers/mfd/wm8994-regmap.c | 19 |
2 files changed, 24 insertions, 7 deletions
diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c index 8b4f22a88e22..93f8599aba32 100644 --- a/drivers/mfd/wm8994-core.c +++ b/drivers/mfd/wm8994-core.c @@ -446,15 +446,16 @@ static int wm8994_device_init(struct wm8994 *wm8994, int irq) 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; @@ -462,14 +463,15 @@ static int wm8994_device_init(struct wm8994 *wm8994, int irq) 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: diff --git a/drivers/mfd/wm8994-regmap.c b/drivers/mfd/wm8994-regmap.c index 03594c257ef2..c598ae69b8ff 100644 --- a/drivers/mfd/wm8994-regmap.c +++ b/drivers/mfd/wm8994-regmap.c @@ -12,6 +12,7 @@ * */ +#include <linux/mfd/wm8994/core.h> #include <linux/mfd/wm8994/registers.h> #include <linux/regmap.h> @@ -210,7 +211,6 @@ static struct reg_default wm1811_defaults[] = { { 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 */ @@ -1145,6 +1145,21 @@ static bool wm8994_volatile_register(struct device *dev, unsigned int reg) } } +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) { @@ -1185,7 +1200,7 @@ struct regmap_config wm1811_regmap_config = { .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, }; |