aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mfd/wm8994-core.c12
-rw-r--r--drivers/mfd/wm8994-regmap.c19
-rw-r--r--include/linux/mfd/wm8994/core.h1
3 files changed, 25 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)
446 ret); 446 ret);
447 goto err_enable; 447 goto err_enable;
448 } 448 }
449 wm8994->revision = ret;
449 450
450 switch (wm8994->type) { 451 switch (wm8994->type) {
451 case WM8994: 452 case WM8994:
452 switch (ret) { 453 switch (wm8994->revision) {
453 case 0: 454 case 0:
454 case 1: 455 case 1:
455 dev_warn(wm8994->dev, 456 dev_warn(wm8994->dev,
456 "revision %c not fully supported\n", 457 "revision %c not fully supported\n",
457 'A' + ret); 458 'A' + wm8994->revision);
458 break; 459 break;
459 default: 460 default:
460 break; 461 break;
@@ -462,14 +463,15 @@ static int wm8994_device_init(struct wm8994 *wm8994, int irq)
462 break; 463 break;
463 case WM1811: 464 case WM1811:
464 /* Revision C did not change the relevant layer */ 465 /* Revision C did not change the relevant layer */
465 if (ret > 1) 466 if (wm8994->revision > 1)
466 ret++; 467 wm8994->revision++;
467 break; 468 break;
468 default: 469 default:
469 break; 470 break;
470 } 471 }
471 472
472 dev_info(wm8994->dev, "%s revision %c\n", devname, 'A' + ret); 473 dev_info(wm8994->dev, "%s revision %c\n", devname,
474 'A' + wm8994->revision);
473 475
474 switch (wm8994->type) { 476 switch (wm8994->type) {
475 case WM1811: 477 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 @@
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
diff --git a/include/linux/mfd/wm8994/core.h b/include/linux/mfd/wm8994/core.h
index f537d2eae390..4dd4409678ce 100644
--- a/include/linux/mfd/wm8994/core.h
+++ b/include/linux/mfd/wm8994/core.h
@@ -56,6 +56,7 @@ struct wm8994 {
56 struct mutex irq_lock; 56 struct mutex irq_lock;
57 57
58 enum wm8994_type type; 58 enum wm8994_type type;
59 int revision;
59 60
60 struct device *dev; 61 struct device *dev;
61 struct regmap *regmap; 62 struct regmap *regmap;