Skip to content

Commit 4c9bb8b

Browse files
charleskeepaxSamuel Ortiz
authored andcommitted
mfd: wm5102: Manually apply register patch
Future updates will require us to manually apply the register patch for wm5102. Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
1 parent c6d6bfb commit 4c9bb8b

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

drivers/mfd/arizona-core.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,16 @@ static int arizona_runtime_resume(struct device *dev)
255255
goto err;
256256
}
257257

258+
switch (arizona->type) {
259+
case WM5102:
260+
ret = wm5102_patch(arizona);
261+
if (ret != 0) {
262+
dev_err(arizona->dev, "Failed to apply patch: %d\n",
263+
ret);
264+
goto err;
265+
}
266+
}
267+
258268
ret = regcache_sync(arizona->regmap);
259269
if (ret != 0) {
260270
dev_err(arizona->dev, "Failed to restore register cache\n");

drivers/mfd/wm5102-tables.c

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* published by the Free Software Foundation.
1111
*/
1212

13+
#include <linux/device.h>
1314
#include <linux/module.h>
1415

1516
#include <linux/mfd/arizona/core.h>
@@ -77,16 +78,34 @@ static const struct reg_default wm5102_revb_patch[] = {
7778
/* We use a function so we can use ARRAY_SIZE() */
7879
int wm5102_patch(struct arizona *arizona)
7980
{
81+
const struct reg_default *wm5102_patch;
82+
int ret = 0;
83+
int i, patch_size;
84+
8085
switch (arizona->rev) {
8186
case 0:
82-
return regmap_register_patch(arizona->regmap,
83-
wm5102_reva_patch,
84-
ARRAY_SIZE(wm5102_reva_patch));
87+
wm5102_patch = wm5102_reva_patch;
88+
patch_size = ARRAY_SIZE(wm5102_reva_patch);
8589
default:
86-
return regmap_register_patch(arizona->regmap,
87-
wm5102_revb_patch,
88-
ARRAY_SIZE(wm5102_revb_patch));
90+
wm5102_patch = wm5102_revb_patch;
91+
patch_size = ARRAY_SIZE(wm5102_revb_patch);
8992
}
93+
94+
regcache_cache_bypass(arizona->regmap, true);
95+
96+
for (i = 0; i < patch_size; i++) {
97+
ret = regmap_write(arizona->regmap, wm5102_patch[i].reg,
98+
wm5102_patch[i].def);
99+
if (ret != 0) {
100+
dev_err(arizona->dev, "Failed to write %x = %x: %d\n",
101+
wm5102_patch[i].reg, wm5102_patch[i].def, ret);
102+
goto out;
103+
}
104+
}
105+
106+
out:
107+
regcache_cache_bypass(arizona->regmap, false);
108+
return ret;
90109
}
91110

92111
static const struct regmap_irq wm5102_aod_irqs[ARIZONA_NUM_IRQ] = {

0 commit comments

Comments
 (0)