aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/wm8994-regmap.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2011-12-01 08:55:49 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2011-12-12 11:11:49 -0500
commit7ed5849c2861faf9c13f027868f635bd782a50e5 (patch)
treee95a181de00ee76fac4e574993dea738638b5589 /drivers/mfd/wm8994-regmap.c
parent19f9557174d61fcfe132a6846a83c36437ff014e (diff)
mfd: Mark WM1811 GPIO6 register volatile for later revisions
For later chip revisions the WM1811 GPIO6 register is always volatile so store the device revision when initialising the driver and then check at runtime if we're running on a newer device. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/wm8994-regmap.c')
-rw-r--r--drivers/mfd/wm8994-regmap.c19
1 files changed, 17 insertions, 2 deletions
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 @@
12 * 12 *
13 */ 13 */
14 14
15#include <linux/mfd/wm8994/core.h>
15#include <linux/mfd/wm8994/registers.h> 16#include <linux/mfd/wm8994/registers.h>
16#include <linux/regmap.h> 17#include <linux/regmap.h>
17 18
@@ -210,7 +211,6 @@ static struct reg_default wm1811_defaults[] = {
210 { 0x0702, 0xA101 }, /* R1794 - Pull Control (BCLK2) */ 211 { 0x0702, 0xA101 }, /* R1794 - Pull Control (BCLK2) */
211 { 0x0703, 0xA101 }, /* R1795 - Pull Control (DACLRCLK2) */ 212 { 0x0703, 0xA101 }, /* R1795 - Pull Control (DACLRCLK2) */
212 { 0x0704, 0xA101 }, /* R1796 - Pull Control (DACDAT2) */ 213 { 0x0704, 0xA101 }, /* R1796 - Pull Control (DACDAT2) */
213 { 0x0705, 0xA101 }, /* R1797 - GPIO 6 */
214 { 0x0707, 0xA101 }, /* R1799 - GPIO 8 */ 214 { 0x0707, 0xA101 }, /* R1799 - GPIO 8 */
215 { 0x0708, 0xA101 }, /* R1800 - GPIO 9 */ 215 { 0x0708, 0xA101 }, /* R1800 - GPIO 9 */
216 { 0x0709, 0xA101 }, /* R1801 - GPIO 10 */ 216 { 0x0709, 0xA101 }, /* R1801 - GPIO 10 */
@@ -1145,6 +1145,21 @@ static bool wm8994_volatile_register(struct device *dev, unsigned int reg)
1145 } 1145 }
1146} 1146}
1147 1147
1148static bool wm1811_volatile_register(struct device *dev, unsigned int reg)
1149{
1150 struct wm8994 *wm8994 = dev_get_drvdata(dev);
1151
1152 switch (reg) {
1153 case WM8994_GPIO_6:
1154 if (wm8994->revision > 1)
1155 return true;
1156 else
1157 return false;
1158 default:
1159 return wm8994_volatile_register(dev, reg);
1160 }
1161}
1162
1148static bool wm8958_volatile_register(struct device *dev, unsigned int reg) 1163static bool wm8958_volatile_register(struct device *dev, unsigned int reg)
1149{ 1164{
1150 switch (reg) { 1165 switch (reg) {
@@ -1185,7 +1200,7 @@ struct regmap_config wm1811_regmap_config = {
1185 .num_reg_defaults = ARRAY_SIZE(wm1811_defaults), 1200 .num_reg_defaults = ARRAY_SIZE(wm1811_defaults),
1186 1201
1187 .max_register = WM8994_MAX_REGISTER, 1202 .max_register = WM8994_MAX_REGISTER,
1188 .volatile_reg = wm8994_volatile_register, 1203 .volatile_reg = wm1811_volatile_register,
1189 .readable_reg = wm1811_readable_register, 1204 .readable_reg = wm1811_readable_register,
1190}; 1205};
1191 1206