diff options
author | Axel Lin <axel.lin@ingics.com> | 2015-07-28 01:39:01 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-07-29 09:54:13 -0400 |
commit | 85e7118412fea31464b62d00bcf4a65fa8904dcc (patch) | |
tree | 91d37fb53455b95ff54b9206d7a241b111c6408b | |
parent | d770e558e21961ad6cfdf0ff7df0eb5d7d4f0754 (diff) |
ASoC: wm8983: Get rid of wm8983_access_masks table
The max8983_access table is used for look up readable/writable
attributes of registers. The writable registers are mostly in continuous
ranges, so we can replace max8983_access table by using case range.
The read fields are all 0, so just drop implement of .readable callback.
Also set .max_register setting.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/wm8983.c | 80 |
1 files changed, 14 insertions, 66 deletions
diff --git a/sound/soc/codecs/wm8983.c b/sound/soc/codecs/wm8983.c index 2fdd2c6cc09d..84c858615620 100644 --- a/sound/soc/codecs/wm8983.c +++ b/sound/soc/codecs/wm8983.c | |||
@@ -84,66 +84,6 @@ static const struct reg_default wm8983_defaults[] = { | |||
84 | { 0x3D, 0x0000 }, /* R61 - BIAS CTRL */ | 84 | { 0x3D, 0x0000 }, /* R61 - BIAS CTRL */ |
85 | }; | 85 | }; |
86 | 86 | ||
87 | static const struct wm8983_reg_access { | ||
88 | u16 read; /* Mask of readable bits */ | ||
89 | u16 write; /* Mask of writable bits */ | ||
90 | } wm8983_access_masks[WM8983_MAX_REGISTER + 1] = { | ||
91 | [0x00] = { 0x0000, 0x01FF }, /* R0 - Software Reset */ | ||
92 | [0x01] = { 0x0000, 0x01FF }, /* R1 - Power management 1 */ | ||
93 | [0x02] = { 0x0000, 0x01FF }, /* R2 - Power management 2 */ | ||
94 | [0x03] = { 0x0000, 0x01EF }, /* R3 - Power management 3 */ | ||
95 | [0x04] = { 0x0000, 0x01FF }, /* R4 - Audio Interface */ | ||
96 | [0x05] = { 0x0000, 0x003F }, /* R5 - Companding control */ | ||
97 | [0x06] = { 0x0000, 0x01FD }, /* R6 - Clock Gen control */ | ||
98 | [0x07] = { 0x0000, 0x000F }, /* R7 - Additional control */ | ||
99 | [0x08] = { 0x0000, 0x003F }, /* R8 - GPIO Control */ | ||
100 | [0x09] = { 0x0000, 0x0070 }, /* R9 - Jack Detect Control 1 */ | ||
101 | [0x0A] = { 0x0000, 0x004F }, /* R10 - DAC Control */ | ||
102 | [0x0B] = { 0x0000, 0x01FF }, /* R11 - Left DAC digital Vol */ | ||
103 | [0x0C] = { 0x0000, 0x01FF }, /* R12 - Right DAC digital vol */ | ||
104 | [0x0D] = { 0x0000, 0x00FF }, /* R13 - Jack Detect Control 2 */ | ||
105 | [0x0E] = { 0x0000, 0x01FB }, /* R14 - ADC Control */ | ||
106 | [0x0F] = { 0x0000, 0x01FF }, /* R15 - Left ADC Digital Vol */ | ||
107 | [0x10] = { 0x0000, 0x01FF }, /* R16 - Right ADC Digital Vol */ | ||
108 | [0x12] = { 0x0000, 0x017F }, /* R18 - EQ1 - low shelf */ | ||
109 | [0x13] = { 0x0000, 0x017F }, /* R19 - EQ2 - peak 1 */ | ||
110 | [0x14] = { 0x0000, 0x017F }, /* R20 - EQ3 - peak 2 */ | ||
111 | [0x15] = { 0x0000, 0x017F }, /* R21 - EQ4 - peak 3 */ | ||
112 | [0x16] = { 0x0000, 0x007F }, /* R22 - EQ5 - high shelf */ | ||
113 | [0x18] = { 0x0000, 0x01FF }, /* R24 - DAC Limiter 1 */ | ||
114 | [0x19] = { 0x0000, 0x007F }, /* R25 - DAC Limiter 2 */ | ||
115 | [0x1B] = { 0x0000, 0x01FF }, /* R27 - Notch Filter 1 */ | ||
116 | [0x1C] = { 0x0000, 0x017F }, /* R28 - Notch Filter 2 */ | ||
117 | [0x1D] = { 0x0000, 0x017F }, /* R29 - Notch Filter 3 */ | ||
118 | [0x1E] = { 0x0000, 0x017F }, /* R30 - Notch Filter 4 */ | ||
119 | [0x20] = { 0x0000, 0x01BF }, /* R32 - ALC control 1 */ | ||
120 | [0x21] = { 0x0000, 0x00FF }, /* R33 - ALC control 2 */ | ||
121 | [0x22] = { 0x0000, 0x01FF }, /* R34 - ALC control 3 */ | ||
122 | [0x23] = { 0x0000, 0x000F }, /* R35 - Noise Gate */ | ||
123 | [0x24] = { 0x0000, 0x001F }, /* R36 - PLL N */ | ||
124 | [0x25] = { 0x0000, 0x003F }, /* R37 - PLL K 1 */ | ||
125 | [0x26] = { 0x0000, 0x01FF }, /* R38 - PLL K 2 */ | ||
126 | [0x27] = { 0x0000, 0x01FF }, /* R39 - PLL K 3 */ | ||
127 | [0x29] = { 0x0000, 0x000F }, /* R41 - 3D control */ | ||
128 | [0x2A] = { 0x0000, 0x01E7 }, /* R42 - OUT4 to ADC */ | ||
129 | [0x2B] = { 0x0000, 0x01BF }, /* R43 - Beep control */ | ||
130 | [0x2C] = { 0x0000, 0x0177 }, /* R44 - Input ctrl */ | ||
131 | [0x2D] = { 0x0000, 0x01FF }, /* R45 - Left INP PGA gain ctrl */ | ||
132 | [0x2E] = { 0x0000, 0x01FF }, /* R46 - Right INP PGA gain ctrl */ | ||
133 | [0x2F] = { 0x0000, 0x0177 }, /* R47 - Left ADC BOOST ctrl */ | ||
134 | [0x30] = { 0x0000, 0x0177 }, /* R48 - Right ADC BOOST ctrl */ | ||
135 | [0x31] = { 0x0000, 0x007F }, /* R49 - Output ctrl */ | ||
136 | [0x32] = { 0x0000, 0x01FF }, /* R50 - Left mixer ctrl */ | ||
137 | [0x33] = { 0x0000, 0x01FF }, /* R51 - Right mixer ctrl */ | ||
138 | [0x34] = { 0x0000, 0x01FF }, /* R52 - LOUT1 (HP) volume ctrl */ | ||
139 | [0x35] = { 0x0000, 0x01FF }, /* R53 - ROUT1 (HP) volume ctrl */ | ||
140 | [0x36] = { 0x0000, 0x01FF }, /* R54 - LOUT2 (SPK) volume ctrl */ | ||
141 | [0x37] = { 0x0000, 0x01FF }, /* R55 - ROUT2 (SPK) volume ctrl */ | ||
142 | [0x38] = { 0x0000, 0x004F }, /* R56 - OUT3 mixer ctrl */ | ||
143 | [0x39] = { 0x0000, 0x00FF }, /* R57 - OUT4 (MONO) mix ctrl */ | ||
144 | [0x3D] = { 0x0000, 0x0100 } /* R61 - BIAS CTRL */ | ||
145 | }; | ||
146 | |||
147 | /* vol/gain update regs */ | 87 | /* vol/gain update regs */ |
148 | static const int vol_update_regs[] = { | 88 | static const int vol_update_regs[] = { |
149 | WM8983_LEFT_DAC_DIGITAL_VOL, | 89 | WM8983_LEFT_DAC_DIGITAL_VOL, |
@@ -605,12 +545,19 @@ static int eqmode_put(struct snd_kcontrol *kcontrol, | |||
605 | return 0; | 545 | return 0; |
606 | } | 546 | } |
607 | 547 | ||
608 | static bool wm8983_readable(struct device *dev, unsigned int reg) | 548 | static bool wm8983_writeable(struct device *dev, unsigned int reg) |
609 | { | 549 | { |
610 | if (reg > WM8983_MAX_REGISTER) | 550 | switch (reg) { |
611 | return 0; | 551 | case WM8983_SOFTWARE_RESET ... WM8983_RIGHT_ADC_DIGITAL_VOL: |
612 | 552 | case WM8983_EQ1_LOW_SHELF ... WM8983_DAC_LIMITER_2: | |
613 | return wm8983_access_masks[reg].read != 0; | 553 | case WM8983_NOTCH_FILTER_1 ... WM8983_NOTCH_FILTER_4: |
554 | case WM8983_ALC_CONTROL_1 ... WM8983_PLL_K_3: | ||
555 | case WM8983_3D_CONTROL ... WM8983_OUT4_MONO_MIX_CTRL: | ||
556 | case WM8983_BIAS_CTRL: | ||
557 | return true; | ||
558 | default: | ||
559 | return false; | ||
560 | } | ||
614 | } | 561 | } |
615 | 562 | ||
616 | static int wm8983_dac_mute(struct snd_soc_dai *dai, int mute) | 563 | static int wm8983_dac_mute(struct snd_soc_dai *dai, int mute) |
@@ -1048,8 +995,9 @@ static const struct regmap_config wm8983_regmap = { | |||
1048 | .reg_defaults = wm8983_defaults, | 995 | .reg_defaults = wm8983_defaults, |
1049 | .num_reg_defaults = ARRAY_SIZE(wm8983_defaults), | 996 | .num_reg_defaults = ARRAY_SIZE(wm8983_defaults), |
1050 | .cache_type = REGCACHE_RBTREE, | 997 | .cache_type = REGCACHE_RBTREE, |
998 | .max_register = WM8983_MAX_REGISTER, | ||
1051 | 999 | ||
1052 | .readable_reg = wm8983_readable, | 1000 | .writeable_reg = wm8983_writeable, |
1053 | }; | 1001 | }; |
1054 | 1002 | ||
1055 | #if defined(CONFIG_SPI_MASTER) | 1003 | #if defined(CONFIG_SPI_MASTER) |