|
10 | 10 | * published by the Free Software Foundation.
|
11 | 11 | */
|
12 | 12 |
|
| 13 | +#include <linux/device.h> |
13 | 14 | #include <linux/module.h>
|
14 | 15 |
|
15 | 16 | #include <linux/mfd/arizona/core.h>
|
@@ -77,16 +78,34 @@ static const struct reg_default wm5102_revb_patch[] = {
|
77 | 78 | /* We use a function so we can use ARRAY_SIZE() */
|
78 | 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 | 85 | switch (arizona->rev) {
|
81 | 86 | 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); |
85 | 89 | 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); |
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 | 111 | static const struct regmap_irq wm5102_aod_irqs[ARIZONA_NUM_IRQ] = {
|
|
0 commit comments