diff options
author | Charles Keepax <ckeepax@opensource.wolfsonmicro.com> | 2013-03-26 14:01:49 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2013-04-08 09:21:00 -0400 |
commit | 4c9bb8bc352a14c9613c77bc3f1e9038cd086b9b (patch) | |
tree | 233f69491c5dc01a481cb574835321fa9e5dff71 /drivers/mfd/wm5102-tables.c | |
parent | c6d6bfb186add845d3f9a7f5809bc5b302579308 (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.c | 31 |
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() */ |
78 | int wm5102_patch(struct arizona *arizona) | 79 | int 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 | |||
106 | out: | ||
107 | regcache_cache_bypass(arizona->regmap, false); | ||
108 | return ret; | ||
90 | } | 109 | } |
91 | 110 | ||
92 | static const struct regmap_irq wm5102_aod_irqs[ARIZONA_NUM_IRQ] = { | 111 | static const struct regmap_irq wm5102_aod_irqs[ARIZONA_NUM_IRQ] = { |