aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/wm5102-tables.c
diff options
context:
space:
mode:
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>2013-03-26 14:01:49 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2013-04-08 09:21:00 -0400
commit4c9bb8bc352a14c9613c77bc3f1e9038cd086b9b (patch)
tree233f69491c5dc01a481cb574835321fa9e5dff71 /drivers/mfd/wm5102-tables.c
parentc6d6bfb186add845d3f9a7f5809bc5b302579308 (diff)
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>
Diffstat (limited to 'drivers/mfd/wm5102-tables.c')
-rw-r--r--drivers/mfd/wm5102-tables.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/drivers/mfd/wm5102-tables.c b/drivers/mfd/wm5102-tables.c
index 909e043edb6a..44cb7beb24fc 100644
--- a/drivers/mfd/wm5102-tables.c
+++ b/drivers/mfd/wm5102-tables.c
@@ -10,6 +10,7 @@
10 * published by the Free Software Foundation. 10 * published by the Free Software Foundation.
11 */ 11 */
12 12
13#include <linux/device.h>
13#include <linux/module.h> 14#include <linux/module.h>
14 15
15#include <linux/mfd/arizona/core.h> 16#include <linux/mfd/arizona/core.h>
@@ -77,16 +78,34 @@ static const struct reg_default wm5102_revb_patch[] = {
77/* We use a function so we can use ARRAY_SIZE() */ 78/* We use a function so we can use ARRAY_SIZE() */
78int wm5102_patch(struct arizona *arizona) 79int wm5102_patch(struct arizona *arizona)
79{ 80{
81 const struct reg_default *wm5102_patch;
82 int ret = 0;
83 int i, patch_size;
84
80 switch (arizona->rev) { 85 switch (arizona->rev) {
81 case 0: 86 case 0:
82 return regmap_register_patch(arizona->regmap, 87 wm5102_patch = wm5102_reva_patch;
83 wm5102_reva_patch, 88 patch_size = ARRAY_SIZE(wm5102_reva_patch);
84 ARRAY_SIZE(wm5102_reva_patch));
85 default: 89 default:
86 return regmap_register_patch(arizona->regmap, 90 wm5102_patch = wm5102_revb_patch;
87 wm5102_revb_patch, 91 patch_size = ARRAY_SIZE(wm5102_revb_patch);
88 ARRAY_SIZE(wm5102_revb_patch));
89 } 92 }
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
106out:
107 regcache_cache_bypass(arizona->regmap, false);
108 return ret;
90} 109}
91 110
92static const struct regmap_irq wm5102_aod_irqs[ARIZONA_NUM_IRQ] = { 111static const struct regmap_irq wm5102_aod_irqs[ARIZONA_NUM_IRQ] = {