1 /* 2 * wm8994-regmap.c -- Register map data for WM8994 series devices 3 * 4 * Copyright 2011 Wolfson Microelectronics PLC. 5 * 6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> 7 * 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License as published by the 10 * Free Software Foundation; either version 2 of the License, or (at your 11 * option) any later version. 12 * 13 */ 14 15 #include <linux/mfd/wm8994/core.h> 16 #include <linux/mfd/wm8994/registers.h> 17 #include <linux/regmap.h> 18 #include <linux/device.h> 19 20 #include "wm8994.h" 21 22 static struct reg_default wm1811_defaults[] = { 23 { 0x0000, 0x1811 }, /* R0 - Software Reset */ 24 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */ 25 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */ 26 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */ 27 { 0x0004, 0x0000 }, /* R4 - Power Management (4) */ 28 { 0x0005, 0x0000 }, /* R5 - Power Management (5) */ 29 { 0x0006, 0x0000 }, /* R6 - Power Management (6) */ 30 { 0x0015, 0x0000 }, /* R21 - Input Mixer (1) */ 31 { 0x0018, 0x008B }, /* R24 - Left Line Input 1&2 Volume */ 32 { 0x0019, 0x008B }, /* R25 - Left Line Input 3&4 Volume */ 33 { 0x001A, 0x008B }, /* R26 - Right Line Input 1&2 Volume */ 34 { 0x001B, 0x008B }, /* R27 - Right Line Input 3&4 Volume */ 35 { 0x001C, 0x006D }, /* R28 - Left Output Volume */ 36 { 0x001D, 0x006D }, /* R29 - Right Output Volume */ 37 { 0x001E, 0x0066 }, /* R30 - Line Outputs Volume */ 38 { 0x001F, 0x0020 }, /* R31 - HPOUT2 Volume */ 39 { 0x0020, 0x0079 }, /* R32 - Left OPGA Volume */ 40 { 0x0021, 0x0079 }, /* R33 - Right OPGA Volume */ 41 { 0x0022, 0x0003 }, /* R34 - SPKMIXL Attenuation */ 42 { 0x0023, 0x0003 }, /* R35 - SPKMIXR Attenuation */ 43 { 0x0024, 0x0011 }, /* R36 - SPKOUT Mixers */ 44 { 0x0025, 0x0140 }, /* R37 - ClassD */ 45 { 0x0026, 0x0079 }, /* R38 - Speaker Volume Left */ 46 { 0x0027, 0x0079 }, /* R39 - Speaker Volume Right */ 47 { 0x0028, 0x0000 }, /* R40 - Input Mixer (2) */ 48 { 0x0029, 0x0000 }, /* R41 - Input Mixer (3) */ 49 { 0x002A, 0x0000 }, /* R42 - Input Mixer (4) */ 50 { 0x002B, 0x0000 }, /* R43 - Input Mixer (5) */ 51 { 0x002C, 0x0000 }, /* R44 - Input Mixer (6) */ 52 { 0x002D, 0x0000 }, /* R45 - Output Mixer (1) */ 53 { 0x002E, 0x0000 }, /* R46 - Output Mixer (2) */ 54 { 0x002F, 0x0000 }, /* R47 - Output Mixer (3) */ 55 { 0x0030, 0x0000 }, /* R48 - Output Mixer (4) */ 56 { 0x0031, 0x0000 }, /* R49 - Output Mixer (5) */ 57 { 0x0032, 0x0000 }, /* R50 - Output Mixer (6) */ 58 { 0x0033, 0x0000 }, /* R51 - HPOUT2 Mixer */ 59 { 0x0034, 0x0000 }, /* R52 - Line Mixer (1) */ 60 { 0x0035, 0x0000 }, /* R53 - Line Mixer (2) */ 61 { 0x0036, 0x0000 }, /* R54 - Speaker Mixer */ 62 { 0x0037, 0x0000 }, /* R55 - Additional Control */ 63 { 0x0038, 0x0000 }, /* R56 - AntiPOP (1) */ 64 { 0x0039, 0x0180 }, /* R57 - AntiPOP (2) */ 65 { 0x003B, 0x000D }, /* R59 - LDO 1 */ 66 { 0x003C, 0x0003 }, /* R60 - LDO 2 */ 67 { 0x003D, 0x0039 }, /* R61 - MICBIAS1 */ 68 { 0x003E, 0x0039 }, /* R62 - MICBIAS2 */ 69 { 0x004C, 0x1F25 }, /* R76 - Charge Pump (1) */ 70 { 0x004D, 0xAB19 }, /* R77 - Charge Pump (2) */ 71 { 0x0051, 0x0004 }, /* R81 - Class W (1) */ 72 { 0x0054, 0x0000 }, /* R84 - DC Servo (1) */ 73 { 0x0055, 0x054A }, /* R85 - DC Servo (2) */ 74 { 0x0058, 0x0000 }, /* R88 - DC Servo Readback */ 75 { 0x0059, 0x0000 }, /* R89 - DC Servo (4) */ 76 { 0x0060, 0x0000 }, /* R96 - Analogue HP (1) */ 77 { 0x00C5, 0x0000 }, /* R197 - Class D Test (5) */ 78 { 0x00D0, 0x7600 }, /* R208 - Mic Detect 1 */ 79 { 0x00D1, 0x007F }, /* R209 - Mic Detect 2 */ 80 { 0x00D2, 0x0000 }, /* R210 - Mic Detect 3 */ 81 { 0x0100, 0x0100 }, /* R256 - Chip Revision */ 82 { 0x0101, 0x8004 }, /* R257 - Control Interface */ 83 { 0x0200, 0x0000 }, /* R512 - AIF1 Clocking (1) */ 84 { 0x0201, 0x0000 }, /* R513 - AIF1 Clocking (2) */ 85 { 0x0204, 0x0000 }, /* R516 - AIF2 Clocking (1) */ 86 { 0x0205, 0x0000 }, /* R517 - AIF2 Clocking (2) */ 87 { 0x0208, 0x0000 }, /* R520 - Clocking (1) */ 88 { 0x0209, 0x0000 }, /* R521 - Clocking (2) */ 89 { 0x0210, 0x0083 }, /* R528 - AIF1 Rate */ 90 { 0x0211, 0x0083 }, /* R529 - AIF2 Rate */ 91 { 0x0212, 0x0000 }, /* R530 - Rate Status */ 92 { 0x0220, 0x0000 }, /* R544 - FLL1 Control (1) */ 93 { 0x0221, 0x0000 }, /* R545 - FLL1 Control (2) */ 94 { 0x0222, 0x0000 }, /* R546 - FLL1 Control (3) */ 95 { 0x0223, 0x0000 }, /* R547 - FLL1 Control (4) */ 96 { 0x0224, 0x0C80 }, /* R548 - FLL1 Control (5) */ 97 { 0x0226, 0x0000 }, /* R550 - FLL1 EFS 1 */ 98 { 0x0227, 0x0006 }, /* R551 - FLL1 EFS 2 */ 99 { 0x0240, 0x0000 }, /* R576 - FLL2Control (1) */ 100 { 0x0241, 0x0000 }, /* R577 - FLL2Control (2) */ 101 { 0x0242, 0x0000 }, /* R578 - FLL2Control (3) */ 102 { 0x0243, 0x0000 }, /* R579 - FLL2 Control (4) */ 103 { 0x0244, 0x0C80 }, /* R580 - FLL2Control (5) */ 104 { 0x0246, 0x0000 }, /* R582 - FLL2 EFS 1 */ 105 { 0x0247, 0x0006 }, /* R583 - FLL2 EFS 2 */ 106 { 0x0300, 0x4050 }, /* R768 - AIF1 Control (1) */ 107 { 0x0301, 0x4000 }, /* R769 - AIF1 Control (2) */ 108 { 0x0302, 0x0000 }, /* R770 - AIF1 Master/Slave */ 109 { 0x0303, 0x0040 }, /* R771 - AIF1 BCLK */ 110 { 0x0304, 0x0040 }, /* R772 - AIF1ADC LRCLK */ 111 { 0x0305, 0x0040 }, /* R773 - AIF1DAC LRCLK */ 112 { 0x0306, 0x0004 }, /* R774 - AIF1DAC Data */ 113 { 0x0307, 0x0100 }, /* R775 - AIF1ADC Data */ 114 { 0x0310, 0x4050 }, /* R784 - AIF2 Control (1) */ 115 { 0x0311, 0x4000 }, /* R785 - AIF2 Control (2) */ 116 { 0x0312, 0x0000 }, /* R786 - AIF2 Master/Slave */ 117 { 0x0313, 0x0040 }, /* R787 - AIF2 BCLK */ 118 { 0x0314, 0x0040 }, /* R788 - AIF2ADC LRCLK */ 119 { 0x0315, 0x0040 }, /* R789 - AIF2DAC LRCLK */ 120 { 0x0316, 0x0000 }, /* R790 - AIF2DAC Data */ 121 { 0x0317, 0x0000 }, /* R791 - AIF2ADC Data */ 122 { 0x0318, 0x0003 }, /* R792 - AIF2TX Control */ 123 { 0x0320, 0x0040 }, /* R800 - AIF3 Control (1) */ 124 { 0x0321, 0x0000 }, /* R801 - AIF3 Control (2) */ 125 { 0x0322, 0x0000 }, /* R802 - AIF3DAC Data */ 126 { 0x0323, 0x0000 }, /* R803 - AIF3ADC Data */ 127 { 0x0400, 0x00C0 }, /* R1024 - AIF1 ADC1 Left Volume */ 128 { 0x0401, 0x00C0 }, /* R1025 - AIF1 ADC1 Right Volume */ 129 { 0x0402, 0x00C0 }, /* R1026 - AIF1 DAC1 Left Volume */ 130 { 0x0403, 0x00C0 }, /* R1027 - AIF1 DAC1 Right Volume */ 131 { 0x0410, 0x0000 }, /* R1040 - AIF1 ADC1 Filters */ 132 { 0x0420, 0x0200 }, /* R1056 - AIF1 DAC1 Filters (1) */ 133 { 0x0421, 0x0010 }, /* R1057 - AIF1 DAC1 Filters (2) */ 134 { 0x0430, 0x0068 }, /* R1072 - AIF1 DAC1 Noise Gate */ 135 { 0x0440, 0x0098 }, /* R1088 - AIF1 DRC1 (1) */ 136 { 0x0441, 0x0845 }, /* R1089 - AIF1 DRC1 (2) */ 137 { 0x0442, 0x0000 }, /* R1090 - AIF1 DRC1 (3) */ 138 { 0x0443, 0x0000 }, /* R1091 - AIF1 DRC1 (4) */ 139 { 0x0444, 0x0000 }, /* R1092 - AIF1 DRC1 (5) */ 140 { 0x0480, 0x6318 }, /* R1152 - AIF1 DAC1 EQ Gains (1) */ 141 { 0x0481, 0x6300 }, /* R1153 - AIF1 DAC1 EQ Gains (2) */ 142 { 0x0482, 0x0FCA }, /* R1154 - AIF1 DAC1 EQ Band 1 A */ 143 { 0x0483, 0x0400 }, /* R1155 - AIF1 DAC1 EQ Band 1 B */ 144 { 0x0484, 0x00D8 }, /* R1156 - AIF1 DAC1 EQ Band 1 PG */ 145 { 0x0485, 0x1EB5 }, /* R1157 - AIF1 DAC1 EQ Band 2 A */ 146 { 0x0486, 0xF145 }, /* R1158 - AIF1 DAC1 EQ Band 2 B */ 147 { 0x0487, 0x0B75 }, /* R1159 - AIF1 DAC1 EQ Band 2 C */ 148 { 0x0488, 0x01C5 }, /* R1160 - AIF1 DAC1 EQ Band 2 PG */ 149 { 0x0489, 0x1C58 }, /* R1161 - AIF1 DAC1 EQ Band 3 A */ 150 { 0x048A, 0xF373 }, /* R1162 - AIF1 DAC1 EQ Band 3 B */ 151 { 0x048B, 0x0A54 }, /* R1163 - AIF1 DAC1 EQ Band 3 C */ 152 { 0x048C, 0x0558 }, /* R1164 - AIF1 DAC1 EQ Band 3 PG */ 153 { 0x048D, 0x168E }, /* R1165 - AIF1 DAC1 EQ Band 4 A */ 154 { 0x048E, 0xF829 }, /* R1166 - AIF1 DAC1 EQ Band 4 B */ 155 { 0x048F, 0x07AD }, /* R1167 - AIF1 DAC1 EQ Band 4 C */ 156 { 0x0490, 0x1103 }, /* R1168 - AIF1 DAC1 EQ Band 4 PG */ 157 { 0x0491, 0x0564 }, /* R1169 - AIF1 DAC1 EQ Band 5 A */ 158 { 0x0492, 0x0559 }, /* R1170 - AIF1 DAC1 EQ Band 5 B */ 159 { 0x0493, 0x4000 }, /* R1171 - AIF1 DAC1 EQ Band 5 PG */ 160 { 0x0494, 0x0000 }, /* R1172 - AIF1 DAC1 EQ Band 1 C */ 161 { 0x0500, 0x00C0 }, /* R1280 - AIF2 ADC Left Volume */ 162 { 0x0501, 0x00C0 }, /* R1281 - AIF2 ADC Right Volume */ 163 { 0x0502, 0x00C0 }, /* R1282 - AIF2 DAC Left Volume */ 164 { 0x0503, 0x00C0 }, /* R1283 - AIF2 DAC Right Volume */ 165 { 0x0510, 0x0000 }, /* R1296 - AIF2 ADC Filters */ 166 { 0x0520, 0x0200 }, /* R1312 - AIF2 DAC Filters (1) */ 167 { 0x0521, 0x0010 }, /* R1313 - AIF2 DAC Filters (2) */ 168 { 0x0530, 0x0068 }, /* R1328 - AIF2 DAC Noise Gate */ 169 { 0x0540, 0x0098 }, /* R1344 - AIF2 DRC (1) */ 170 { 0x0541, 0x0845 }, /* R1345 - AIF2 DRC (2) */ 171 { 0x0542, 0x0000 }, /* R1346 - AIF2 DRC (3) */ 172 { 0x0543, 0x0000 }, /* R1347 - AIF2 DRC (4) */ 173 { 0x0544, 0x0000 }, /* R1348 - AIF2 DRC (5) */ 174 { 0x0580, 0x6318 }, /* R1408 - AIF2 EQ Gains (1) */ 175 { 0x0581, 0x6300 }, /* R1409 - AIF2 EQ Gains (2) */ 176 { 0x0582, 0x0FCA }, /* R1410 - AIF2 EQ Band 1 A */ 177 { 0x0583, 0x0400 }, /* R1411 - AIF2 EQ Band 1 B */ 178 { 0x0584, 0x00D8 }, /* R1412 - AIF2 EQ Band 1 PG */ 179 { 0x0585, 0x1EB5 }, /* R1413 - AIF2 EQ Band 2 A */ 180 { 0x0586, 0xF145 }, /* R1414 - AIF2 EQ Band 2 B */ 181 { 0x0587, 0x0B75 }, /* R1415 - AIF2 EQ Band 2 C */ 182 { 0x0588, 0x01C5 }, /* R1416 - AIF2 EQ Band 2 PG */ 183 { 0x0589, 0x1C58 }, /* R1417 - AIF2 EQ Band 3 A */ 184 { 0x058A, 0xF373 }, /* R1418 - AIF2 EQ Band 3 B */ 185 { 0x058B, 0x0A54 }, /* R1419 - AIF2 EQ Band 3 C */ 186 { 0x058C, 0x0558 }, /* R1420 - AIF2 EQ Band 3 PG */ 187 { 0x058D, 0x168E }, /* R1421 - AIF2 EQ Band 4 A */ 188 { 0x058E, 0xF829 }, /* R1422 - AIF2 EQ Band 4 B */ 189 { 0x058F, 0x07AD }, /* R1423 - AIF2 EQ Band 4 C */ 190 { 0x0590, 0x1103 }, /* R1424 - AIF2 EQ Band 4 PG */ 191 { 0x0591, 0x0564 }, /* R1425 - AIF2 EQ Band 5 A */ 192 { 0x0592, 0x0559 }, /* R1426 - AIF2 EQ Band 5 B */ 193 { 0x0593, 0x4000 }, /* R1427 - AIF2 EQ Band 5 PG */ 194 { 0x0594, 0x0000 }, /* R1428 - AIF2 EQ Band 1 C */ 195 { 0x0600, 0x0000 }, /* R1536 - DAC1 Mixer Volumes */ 196 { 0x0601, 0x0000 }, /* R1537 - DAC1 Left Mixer Routing */ 197 { 0x0602, 0x0000 }, /* R1538 - DAC1 Right Mixer Routing */ 198 { 0x0603, 0x0000 }, /* R1539 - AIF2ADC Mixer Volumes */ 199 { 0x0604, 0x0000 }, /* R1540 - AIF2ADC Left Mixer Routing */ 200 { 0x0605, 0x0000 }, /* R1541 - AIF2ADC Right Mixer Routing */ 201 { 0x0606, 0x0000 }, /* R1542 - AIF1 ADC1 Left Mixer Routing */ 202 { 0x0607, 0x0000 }, /* R1543 - AIF1 ADC1 Right Mixer Routing */ 203 { 0x0610, 0x02C0 }, /* R1552 - DAC1 Left Volume */ 204 { 0x0611, 0x02C0 }, /* R1553 - DAC1 Right Volume */ 205 { 0x0612, 0x02C0 }, /* R1554 - AIF2TX Left Volume */ 206 { 0x0613, 0x02C0 }, /* R1555 - AIF2TX Right Volume */ 207 { 0x0614, 0x0000 }, /* R1556 - DAC Softmute */ 208 { 0x0620, 0x0002 }, /* R1568 - Oversampling */ 209 { 0x0621, 0x0000 }, /* R1569 - Sidetone */ 210 { 0x0700, 0x8100 }, /* R1792 - GPIO 1 */ 211 { 0x0701, 0xA101 }, /* R1793 - Pull Control (MCLK2) */ 212 { 0x0702, 0xA101 }, /* R1794 - Pull Control (BCLK2) */ 213 { 0x0703, 0xA101 }, /* R1795 - Pull Control (DACLRCLK2) */ 214 { 0x0704, 0xA101 }, /* R1796 - Pull Control (DACDAT2) */ 215 { 0x0707, 0xA101 }, /* R1799 - GPIO 8 */ 216 { 0x0708, 0xA101 }, /* R1800 - GPIO 9 */ 217 { 0x0709, 0xA101 }, /* R1801 - GPIO 10 */ 218 { 0x070A, 0xA101 }, /* R1802 - GPIO 11 */ 219 { 0x0720, 0x0000 }, /* R1824 - Pull Control (1) */ 220 { 0x0721, 0x0156 }, /* R1825 - Pull Control (2) */ 221 { 0x0730, 0x0000 }, /* R1840 - Interrupt Status 1 */ 222 { 0x0731, 0x0000 }, /* R1841 - Interrupt Status 2 */ 223 { 0x0732, 0x0000 }, /* R1842 - Interrupt Raw Status 2 */ 224 { 0x0738, 0x07FF }, /* R1848 - Interrupt Status 1 Mask */ 225 { 0x0739, 0xDFEF }, /* R1849 - Interrupt Status 2 Mask */ 226 { 0x0740, 0x0000 }, /* R1856 - Interrupt Control */ 227 { 0x0748, 0x003F }, /* R1864 - IRQ Debounce */ 228 }; 229 230 static struct reg_default wm8994_defaults[] = { 231 { 0x0000, 0x8994 }, /* R0 - Software Reset */ 232 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */ 233 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */ 234 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */ 235 { 0x0004, 0x0000 }, /* R4 - Power Management (4) */ 236 { 0x0005, 0x0000 }, /* R5 - Power Management (5) */ 237 { 0x0006, 0x0000 }, /* R6 - Power Management (6) */ 238 { 0x0015, 0x0000 }, /* R21 - Input Mixer (1) */ 239 { 0x0018, 0x008B }, /* R24 - Left Line Input 1&2 Volume */ 240 { 0x0019, 0x008B }, /* R25 - Left Line Input 3&4 Volume */ 241 { 0x001A, 0x008B }, /* R26 - Right Line Input 1&2 Volume */ 242 { 0x001B, 0x008B }, /* R27 - Right Line Input 3&4 Volume */ 243 { 0x001C, 0x006D }, /* R28 - Left Output Volume */ 244 { 0x001D, 0x006D }, /* R29 - Right Output Volume */ 245 { 0x001E, 0x0066 }, /* R30 - Line Outputs Volume */ 246 { 0x001F, 0x0020 }, /* R31 - HPOUT2 Volume */ 247 { 0x0020, 0x0079 }, /* R32 - Left OPGA Volume */ 248 { 0x0021, 0x0079 }, /* R33 - Right OPGA Volume */ 249 { 0x0022, 0x0003 }, /* R34 - SPKMIXL Attenuation */ 250 { 0x0023, 0x0003 }, /* R35 - SPKMIXR Attenuation */ 251 { 0x0024, 0x0011 }, /* R36 - SPKOUT Mixers */ 252 { 0x0025, 0x0140 }, /* R37 - ClassD */ 253 { 0x0026, 0x0079 }, /* R38 - Speaker Volume Left */ 254 { 0x0027, 0x0079 }, /* R39 - Speaker Volume Right */ 255 { 0x0028, 0x0000 }, /* R40 - Input Mixer (2) */ 256 { 0x0029, 0x0000 }, /* R41 - Input Mixer (3) */ 257 { 0x002A, 0x0000 }, /* R42 - Input Mixer (4) */ 258 { 0x002B, 0x0000 }, /* R43 - Input Mixer (5) */ 259 { 0x002C, 0x0000 }, /* R44 - Input Mixer (6) */ 260 { 0x002D, 0x0000 }, /* R45 - Output Mixer (1) */ 261 { 0x002E, 0x0000 }, /* R46 - Output Mixer (2) */ 262 { 0x002F, 0x0000 }, /* R47 - Output Mixer (3) */ 263 { 0x0030, 0x0000 }, /* R48 - Output Mixer (4) */ 264 { 0x0031, 0x0000 }, /* R49 - Output Mixer (5) */ 265 { 0x0032, 0x0000 }, /* R50 - Output Mixer (6) */ 266 { 0x0033, 0x0000 }, /* R51 - HPOUT2 Mixer */ 267 { 0x0034, 0x0000 }, /* R52 - Line Mixer (1) */ 268 { 0x0035, 0x0000 }, /* R53 - Line Mixer (2) */ 269 { 0x0036, 0x0000 }, /* R54 - Speaker Mixer */ 270 { 0x0037, 0x0000 }, /* R55 - Additional Control */ 271 { 0x0038, 0x0000 }, /* R56 - AntiPOP (1) */ 272 { 0x0039, 0x0000 }, /* R57 - AntiPOP (2) */ 273 { 0x003A, 0x0000 }, /* R58 - MICBIAS */ 274 { 0x003B, 0x000D }, /* R59 - LDO 1 */ 275 { 0x003C, 0x0003 }, /* R60 - LDO 2 */ 276 { 0x004C, 0x1F25 }, /* R76 - Charge Pump (1) */ 277 { 0x0051, 0x0004 }, /* R81 - Class W (1) */ 278 { 0x0054, 0x0000 }, /* R84 - DC Servo (1) */ 279 { 0x0055, 0x054A }, /* R85 - DC Servo (2) */ 280 { 0x0057, 0x0000 }, /* R87 - DC Servo (4) */ 281 { 0x0058, 0x0000 }, /* R88 - DC Servo Readback */ 282 { 0x0060, 0x0000 }, /* R96 - Analogue HP (1) */ 283 { 0x0100, 0x0003 }, /* R256 - Chip Revision */ 284 { 0x0101, 0x8004 }, /* R257 - Control Interface */ 285 { 0x0110, 0x0000 }, /* R272 - Write Sequencer Ctrl (1) */ 286 { 0x0111, 0x0000 }, /* R273 - Write Sequencer Ctrl (2) */ 287 { 0x0200, 0x0000 }, /* R512 - AIF1 Clocking (1) */ 288 { 0x0201, 0x0000 }, /* R513 - AIF1 Clocking (2) */ 289 { 0x0204, 0x0000 }, /* R516 - AIF2 Clocking (1) */ 290 { 0x0205, 0x0000 }, /* R517 - AIF2 Clocking (2) */ 291 { 0x0208, 0x0000 }, /* R520 - Clocking (1) */ 292 { 0x0209, 0x0000 }, /* R521 - Clocking (2) */ 293 { 0x0210, 0x0083 }, /* R528 - AIF1 Rate */ 294 { 0x0211, 0x0083 }, /* R529 - AIF2 Rate */ 295 { 0x0212, 0x0000 }, /* R530 - Rate Status */ 296 { 0x0220, 0x0000 }, /* R544 - FLL1 Control (1) */ 297 { 0x0221, 0x0000 }, /* R545 - FLL1 Control (2) */ 298 { 0x0222, 0x0000 }, /* R546 - FLL1 Control (3) */ 299 { 0x0223, 0x0000 }, /* R547 - FLL1 Control (4) */ 300 { 0x0224, 0x0C80 }, /* R548 - FLL1 Control (5) */ 301 { 0x0240, 0x0000 }, /* R576 - FLL2 Control (1) */ 302 { 0x0241, 0x0000 }, /* R577 - FLL2 Control (2) */ 303 { 0x0242, 0x0000 }, /* R578 - FLL2 Control (3) */ 304 { 0x0243, 0x0000 }, /* R579 - FLL2 Control (4) */ 305 { 0x0244, 0x0C80 }, /* R580 - FLL2 Control (5) */ 306 { 0x0300, 0x4050 }, /* R768 - AIF1 Control (1) */ 307 { 0x0301, 0x4000 }, /* R769 - AIF1 Control (2) */ 308 { 0x0302, 0x0000 }, /* R770 - AIF1 Master/Slave */ 309 { 0x0303, 0x0040 }, /* R771 - AIF1 BCLK */ 310 { 0x0304, 0x0040 }, /* R772 - AIF1ADC LRCLK */ 311 { 0x0305, 0x0040 }, /* R773 - AIF1DAC LRCLK */ 312 { 0x0306, 0x0004 }, /* R774 - AIF1DAC Data */ 313 { 0x0307, 0x0100 }, /* R775 - AIF1ADC Data */ 314 { 0x0310, 0x4050 }, /* R784 - AIF2 Control (1) */ 315 { 0x0311, 0x4000 }, /* R785 - AIF2 Control (2) */ 316 { 0x0312, 0x0000 }, /* R786 - AIF2 Master/Slave */ 317 { 0x0313, 0x0040 }, /* R787 - AIF2 BCLK */ 318 { 0x0314, 0x0040 }, /* R788 - AIF2ADC LRCLK */ 319 { 0x0315, 0x0040 }, /* R789 - AIF2DAC LRCLK */ 320 { 0x0316, 0x0000 }, /* R790 - AIF2DAC Data */ 321 { 0x0317, 0x0000 }, /* R791 - AIF2ADC Data */ 322 { 0x0400, 0x00C0 }, /* R1024 - AIF1 ADC1 Left Volume */ 323 { 0x0401, 0x00C0 }, /* R1025 - AIF1 ADC1 Right Volume */ 324 { 0x0402, 0x00C0 }, /* R1026 - AIF1 DAC1 Left Volume */ 325 { 0x0403, 0x00C0 }, /* R1027 - AIF1 DAC1 Right Volume */ 326 { 0x0404, 0x00C0 }, /* R1028 - AIF1 ADC2 Left Volume */ 327 { 0x0405, 0x00C0 }, /* R1029 - AIF1 ADC2 Right Volume */ 328 { 0x0406, 0x00C0 }, /* R1030 - AIF1 DAC2 Left Volume */ 329 { 0x0407, 0x00C0 }, /* R1031 - AIF1 DAC2 Right Volume */ 330 { 0x0410, 0x0000 }, /* R1040 - AIF1 ADC1 Filters */ 331 { 0x0411, 0x0000 }, /* R1041 - AIF1 ADC2 Filters */ 332 { 0x0420, 0x0200 }, /* R1056 - AIF1 DAC1 Filters (1) */ 333 { 0x0421, 0x0010 }, /* R1057 - AIF1 DAC1 Filters (2) */ 334 { 0x0422, 0x0200 }, /* R1058 - AIF1 DAC2 Filters (1) */ 335 { 0x0423, 0x0010 }, /* R1059 - AIF1 DAC2 Filters (2) */ 336 { 0x0440, 0x0098 }, /* R1088 - AIF1 DRC1 (1) */ 337 { 0x0441, 0x0845 }, /* R1089 - AIF1 DRC1 (2) */ 338 { 0x0442, 0x0000 }, /* R1090 - AIF1 DRC1 (3) */ 339 { 0x0443, 0x0000 }, /* R1091 - AIF1 DRC1 (4) */ 340 { 0x0444, 0x0000 }, /* R1092 - AIF1 DRC1 (5) */ 341 { 0x0450, 0x0098 }, /* R1104 - AIF1 DRC2 (1) */ 342 { 0x0451, 0x0845 }, /* R1105 - AIF1 DRC2 (2) */ 343 { 0x0452, 0x0000 }, /* R1106 - AIF1 DRC2 (3) */ 344 { 0x0453, 0x0000 }, /* R1107 - AIF1 DRC2 (4) */ 345 { 0x0454, 0x0000 }, /* R1108 - AIF1 DRC2 (5) */ 346 { 0x0480, 0x6318 }, /* R1152 - AIF1 DAC1 EQ Gains (1) */ 347 { 0x0481, 0x6300 }, /* R1153 - AIF1 DAC1 EQ Gains (2) */ 348 { 0x0482, 0x0FCA }, /* R1154 - AIF1 DAC1 EQ Band 1 A */ 349 { 0x0483, 0x0400 }, /* R1155 - AIF1 DAC1 EQ Band 1 B */ 350 { 0x0484, 0x00D8 }, /* R1156 - AIF1 DAC1 EQ Band 1 PG */ 351 { 0x0485, 0x1EB5 }, /* R1157 - AIF1 DAC1 EQ Band 2 A */ 352 { 0x0486, 0xF145 }, /* R1158 - AIF1 DAC1 EQ Band 2 B */ 353 { 0x0487, 0x0B75 }, /* R1159 - AIF1 DAC1 EQ Band 2 C */ 354 { 0x0488, 0x01C5 }, /* R1160 - AIF1 DAC1 EQ Band 2 PG */ 355 { 0x0489, 0x1C58 }, /* R1161 - AIF1 DAC1 EQ Band 3 A */ 356 { 0x048A, 0xF373 }, /* R1162 - AIF1 DAC1 EQ Band 3 B */ 357 { 0x048B, 0x0A54 }, /* R1163 - AIF1 DAC1 EQ Band 3 C */ 358 { 0x048C, 0x0558 }, /* R1164 - AIF1 DAC1 EQ Band 3 PG */ 359 { 0x048D, 0x168E }, /* R1165 - AIF1 DAC1 EQ Band 4 A */ 360 { 0x048E, 0xF829 }, /* R1166 - AIF1 DAC1 EQ Band 4 B */ 361 { 0x048F, 0x07AD }, /* R1167 - AIF1 DAC1 EQ Band 4 C */ 362 { 0x0490, 0x1103 }, /* R1168 - AIF1 DAC1 EQ Band 4 PG */ 363 { 0x0491, 0x0564 }, /* R1169 - AIF1 DAC1 EQ Band 5 A */ 364 { 0x0492, 0x0559 }, /* R1170 - AIF1 DAC1 EQ Band 5 B */ 365 { 0x0493, 0x4000 }, /* R1171 - AIF1 DAC1 EQ Band 5 PG */ 366 { 0x04A0, 0x6318 }, /* R1184 - AIF1 DAC2 EQ Gains (1) */ 367 { 0x04A1, 0x6300 }, /* R1185 - AIF1 DAC2 EQ Gains (2) */ 368 { 0x04A2, 0x0FCA }, /* R1186 - AIF1 DAC2 EQ Band 1 A */ 369 { 0x04A3, 0x0400 }, /* R1187 - AIF1 DAC2 EQ Band 1 B */ 370 { 0x04A4, 0x00D8 }, /* R1188 - AIF1 DAC2 EQ Band 1 PG */ 371 { 0x04A5, 0x1EB5 }, /* R1189 - AIF1 DAC2 EQ Band 2 A */ 372 { 0x04A6, 0xF145 }, /* R1190 - AIF1 DAC2 EQ Band 2 B */ 373 { 0x04A7, 0x0B75 }, /* R1191 - AIF1 DAC2 EQ Band 2 C */ 374 { 0x04A8, 0x01C5 }, /* R1192 - AIF1 DAC2 EQ Band 2 PG */ 375 { 0x04A9, 0x1C58 }, /* R1193 - AIF1 DAC2 EQ Band 3 A */ 376 { 0x04AA, 0xF373 }, /* R1194 - AIF1 DAC2 EQ Band 3 B */ 377 { 0x04AB, 0x0A54 }, /* R1195 - AIF1 DAC2 EQ Band 3 C */ 378 { 0x04AC, 0x0558 }, /* R1196 - AIF1 DAC2 EQ Band 3 PG */ 379 { 0x04AD, 0x168E }, /* R1197 - AIF1 DAC2 EQ Band 4 A */ 380 { 0x04AE, 0xF829 }, /* R1198 - AIF1 DAC2 EQ Band 4 B */ 381 { 0x04AF, 0x07AD }, /* R1199 - AIF1 DAC2 EQ Band 4 C */ 382 { 0x04B0, 0x1103 }, /* R1200 - AIF1 DAC2 EQ Band 4 PG */ 383 { 0x04B1, 0x0564 }, /* R1201 - AIF1 DAC2 EQ Band 5 A */ 384 { 0x04B2, 0x0559 }, /* R1202 - AIF1 DAC2 EQ Band 5 B */ 385 { 0x04B3, 0x4000 }, /* R1203 - AIF1 DAC2 EQ Band 5 PG */ 386 { 0x0500, 0x00C0 }, /* R1280 - AIF2 ADC Left Volume */ 387 { 0x0501, 0x00C0 }, /* R1281 - AIF2 ADC Right Volume */ 388 { 0x0502, 0x00C0 }, /* R1282 - AIF2 DAC Left Volume */ 389 { 0x0503, 0x00C0 }, /* R1283 - AIF2 DAC Right Volume */ 390 { 0x0510, 0x0000 }, /* R1296 - AIF2 ADC Filters */ 391 { 0x0520, 0x0200 }, /* R1312 - AIF2 DAC Filters (1) */ 392 { 0x0521, 0x0010 }, /* R1313 - AIF2 DAC Filters (2) */ 393 { 0x0540, 0x0098 }, /* R1344 - AIF2 DRC (1) */ 394 { 0x0541, 0x0845 }, /* R1345 - AIF2 DRC (2) */ 395 { 0x0542, 0x0000 }, /* R1346 - AIF2 DRC (3) */ 396 { 0x0543, 0x0000 }, /* R1347 - AIF2 DRC (4) */ 397 { 0x0544, 0x0000 }, /* R1348 - AIF2 DRC (5) */ 398 { 0x0580, 0x6318 }, /* R1408 - AIF2 EQ Gains (1) */ 399 { 0x0581, 0x6300 }, /* R1409 - AIF2 EQ Gains (2) */ 400 { 0x0582, 0x0FCA }, /* R1410 - AIF2 EQ Band 1 A */ 401 { 0x0583, 0x0400 }, /* R1411 - AIF2 EQ Band 1 B */ 402 { 0x0584, 0x00D8 }, /* R1412 - AIF2 EQ Band 1 PG */ 403 { 0x0585, 0x1EB5 }, /* R1413 - AIF2 EQ Band 2 A */ 404 { 0x0586, 0xF145 }, /* R1414 - AIF2 EQ Band 2 B */ 405 { 0x0587, 0x0B75 }, /* R1415 - AIF2 EQ Band 2 C */ 406 { 0x0588, 0x01C5 }, /* R1416 - AIF2 EQ Band 2 PG */ 407 { 0x0589, 0x1C58 }, /* R1417 - AIF2 EQ Band 3 A */ 408 { 0x058A, 0xF373 }, /* R1418 - AIF2 EQ Band 3 B */ 409 { 0x058B, 0x0A54 }, /* R1419 - AIF2 EQ Band 3 C */ 410 { 0x058C, 0x0558 }, /* R1420 - AIF2 EQ Band 3 PG */ 411 { 0x058D, 0x168E }, /* R1421 - AIF2 EQ Band 4 A */ 412 { 0x058E, 0xF829 }, /* R1422 - AIF2 EQ Band 4 B */ 413 { 0x058F, 0x07AD }, /* R1423 - AIF2 EQ Band 4 C */ 414 { 0x0590, 0x1103 }, /* R1424 - AIF2 EQ Band 4 PG */ 415 { 0x0591, 0x0564 }, /* R1425 - AIF2 EQ Band 5 A */ 416 { 0x0592, 0x0559 }, /* R1426 - AIF2 EQ Band 5 B */ 417 { 0x0593, 0x4000 }, /* R1427 - AIF2 EQ Band 5 PG */ 418 { 0x0600, 0x0000 }, /* R1536 - DAC1 Mixer Volumes */ 419 { 0x0601, 0x0000 }, /* R1537 - DAC1 Left Mixer Routing */ 420 { 0x0602, 0x0000 }, /* R1538 - DAC1 Right Mixer Routing */ 421 { 0x0603, 0x0000 }, /* R1539 - DAC2 Mixer Volumes */ 422 { 0x0604, 0x0000 }, /* R1540 - DAC2 Left Mixer Routing */ 423 { 0x0605, 0x0000 }, /* R1541 - DAC2 Right Mixer Routing */ 424 { 0x0606, 0x0000 }, /* R1542 - AIF1 ADC1 Left Mixer Routing */ 425 { 0x0607, 0x0000 }, /* R1543 - AIF1 ADC1 Right Mixer Routing */ 426 { 0x0608, 0x0000 }, /* R1544 - AIF1 ADC2 Left Mixer Routing */ 427 { 0x0609, 0x0000 }, /* R1545 - AIF1 ADC2 Right mixer Routing */ 428 { 0x0610, 0x02C0 }, /* R1552 - DAC1 Left Volume */ 429 { 0x0611, 0x02C0 }, /* R1553 - DAC1 Right Volume */ 430 { 0x0612, 0x02C0 }, /* R1554 - DAC2 Left Volume */ 431 { 0x0613, 0x02C0 }, /* R1555 - DAC2 Right Volume */ 432 { 0x0614, 0x0000 }, /* R1556 - DAC Softmute */ 433 { 0x0620, 0x0002 }, /* R1568 - Oversampling */ 434 { 0x0621, 0x0000 }, /* R1569 - Sidetone */ 435 { 0x0700, 0x8100 }, /* R1792 - GPIO 1 */ 436 { 0x0701, 0xA101 }, /* R1793 - GPIO 2 */ 437 { 0x0702, 0xA101 }, /* R1794 - GPIO 3 */ 438 { 0x0703, 0xA101 }, /* R1795 - GPIO 4 */ 439 { 0x0704, 0xA101 }, /* R1796 - GPIO 5 */ 440 { 0x0705, 0xA101 }, /* R1797 - GPIO 6 */ 441 { 0x0706, 0xA101 }, /* R1798 - GPIO 7 */ 442 { 0x0707, 0xA101 }, /* R1799 - GPIO 8 */ 443 { 0x0708, 0xA101 }, /* R1800 - GPIO 9 */ 444 { 0x0709, 0xA101 }, /* R1801 - GPIO 10 */ 445 { 0x070A, 0xA101 }, /* R1802 - GPIO 11 */ 446 { 0x0720, 0x0000 }, /* R1824 - Pull Control (1) */ 447 { 0x0721, 0x0156 }, /* R1825 - Pull Control (2) */ 448 { 0x0730, 0x0000 }, /* R1840 - Interrupt Status 1 */ 449 { 0x0731, 0x0000 }, /* R1841 - Interrupt Status 2 */ 450 { 0x0732, 0x0000 }, /* R1842 - Interrupt Raw Status 2 */ 451 { 0x0738, 0x07FF }, /* R1848 - Interrupt Status 1 Mask */ 452 { 0x0739, 0xFFFF }, /* R1849 - Interrupt Status 2 Mask */ 453 { 0x0740, 0x0000 }, /* R1856 - Interrupt Control */ 454 { 0x0748, 0x003F }, /* R1864 - IRQ Debounce */ 455 }; 456 457 static struct reg_default wm8958_defaults[] = { 458 { 0x0000, 0x8958 }, /* R0 - Software Reset */ 459 { 0x0001, 0x0000 }, /* R1 - Power Management (1) */ 460 { 0x0002, 0x6000 }, /* R2 - Power Management (2) */ 461 { 0x0003, 0x0000 }, /* R3 - Power Management (3) */ 462 { 0x0004, 0x0000 }, /* R4 - Power Management (4) */ 463 { 0x0005, 0x0000 }, /* R5 - Power Management (5) */ 464 { 0x0006, 0x0000 }, /* R6 - Power Management (6) */ 465 { 0x0015, 0x0000 }, /* R21 - Input Mixer (1) */ 466 { 0x0018, 0x008B }, /* R24 - Left Line Input 1&2 Volume */ 467 { 0x0019, 0x008B }, /* R25 - Left Line Input 3&4 Volume */ 468 { 0x001A, 0x008B }, /* R26 - Right Line Input 1&2 Volume */ 469 { 0x001B, 0x008B }, /* R27 - Right Line Input 3&4 Volume */ 470 { 0x001C, 0x006D }, /* R28 - Left Output Volume */ 471 { 0x001D, 0x006D }, /* R29 - Right Output Volume */ 472 { 0x001E, 0x0066 }, /* R30 - Line Outputs Volume */ 473 { 0x001F, 0x0020 }, /* R31 - HPOUT2 Volume */ 474 { 0x0020, 0x0079 }, /* R32 - Left OPGA Volume */ 475 { 0x0021, 0x0079 }, /* R33 - Right OPGA Volume */ 476 { 0x0022, 0x0003 }, /* R34 - SPKMIXL Attenuation */ 477 { 0x0023, 0x0003 }, /* R35 - SPKMIXR Attenuation */ 478 { 0x0024, 0x0011 }, /* R36 - SPKOUT Mixers */ 479 { 0x0025, 0x0140 }, /* R37 - ClassD */ 480 { 0x0026, 0x0079 }, /* R38 - Speaker Volume Left */ 481 { 0x0027, 0x0079 }, /* R39 - Speaker Volume Right */ 482 { 0x0028, 0x0000 }, /* R40 - Input Mixer (2) */ 483 { 0x0029, 0x0000 }, /* R41 - Input Mixer (3) */ 484 { 0x002A, 0x0000 }, /* R42 - Input Mixer (4) */ 485 { 0x002B, 0x0000 }, /* R43 - Input Mixer (5) */ 486 { 0x002C, 0x0000 }, /* R44 - Input Mixer (6) */ 487 { 0x002D, 0x0000 }, /* R45 - Output Mixer (1) */ 488 { 0x002E, 0x0000 }, /* R46 - Output Mixer (2) */ 489 { 0x002F, 0x0000 }, /* R47 - Output Mixer (3) */ 490 { 0x0030, 0x0000 }, /* R48 - Output Mixer (4) */ 491 { 0x0031, 0x0000 }, /* R49 - Output Mixer (5) */ 492 { 0x0032, 0x0000 }, /* R50 - Output Mixer (6) */ 493 { 0x0033, 0x0000 }, /* R51 - HPOUT2 Mixer */ 494 { 0x0034, 0x0000 }, /* R52 - Line Mixer (1) */ 495 { 0x0035, 0x0000 }, /* R53 - Line Mixer (2) */ 496 { 0x0036, 0x0000 }, /* R54 - Speaker Mixer */ 497 { 0x0037, 0x0000 }, /* R55 - Additional Control */ 498 { 0x0038, 0x0000 }, /* R56 - AntiPOP (1) */ 499 { 0x0039, 0x0180 }, /* R57 - AntiPOP (2) */ 500 { 0x003B, 0x000D }, /* R59 - LDO 1 */ 501 { 0x003C, 0x0005 }, /* R60 - LDO 2 */ 502 { 0x003D, 0x0039 }, /* R61 - MICBIAS1 */ 503 { 0x003E, 0x0039 }, /* R62 - MICBIAS2 */ 504 { 0x004C, 0x1F25 }, /* R76 - Charge Pump (1) */ 505 { 0x004D, 0xAB19 }, /* R77 - Charge Pump (2) */ 506 { 0x0051, 0x0004 }, /* R81 - Class W (1) */ 507 { 0x0055, 0x054A }, /* R85 - DC Servo (2) */ 508 { 0x0057, 0x0000 }, /* R87 - DC Servo (4) */ 509 { 0x0060, 0x0000 }, /* R96 - Analogue HP (1) */ 510 { 0x00C5, 0x0000 }, /* R197 - Class D Test (5) */ 511 { 0x00D0, 0x5600 }, /* R208 - Mic Detect 1 */ 512 { 0x00D1, 0x007F }, /* R209 - Mic Detect 2 */ 513 { 0x0101, 0x8004 }, /* R257 - Control Interface */ 514 { 0x0110, 0x0000 }, /* R272 - Write Sequencer Ctrl (1) */ 515 { 0x0111, 0x0000 }, /* R273 - Write Sequencer Ctrl (2) */ 516 { 0x0200, 0x0000 }, /* R512 - AIF1 Clocking (1) */ 517 { 0x0201, 0x0000 }, /* R513 - AIF1 Clocking (2) */ 518 { 0x0204, 0x0000 }, /* R516 - AIF2 Clocking (1) */ 519 { 0x0205, 0x0000 }, /* R517 - AIF2 Clocking (2) */ 520 { 0x0208, 0x0000 }, /* R520 - Clocking (1) */ 521 { 0x0209, 0x0000 }, /* R521 - Clocking (2) */ 522 { 0x0210, 0x0083 }, /* R528 - AIF1 Rate */ 523 { 0x0211, 0x0083 }, /* R529 - AIF2 Rate */ 524 { 0x0220, 0x0000 }, /* R544 - FLL1 Control (1) */ 525 { 0x0221, 0x0000 }, /* R545 - FLL1 Control (2) */ 526 { 0x0222, 0x0000 }, /* R546 - FLL1 Control (3) */ 527 { 0x0223, 0x0000 }, /* R547 - FLL1 Control (4) */ 528 { 0x0224, 0x0C80 }, /* R548 - FLL1 Control (5) */ 529 { 0x0226, 0x0000 }, /* R550 - FLL1 EFS 1 */ 530 { 0x0227, 0x0006 }, /* R551 - FLL1 EFS 2 */ 531 { 0x0240, 0x0000 }, /* R576 - FLL2Control (1) */ 532 { 0x0241, 0x0000 }, /* R577 - FLL2Control (2) */ 533 { 0x0242, 0x0000 }, /* R578 - FLL2Control (3) */ 534 { 0x0243, 0x0000 }, /* R579 - FLL2 Control (4) */ 535 { 0x0244, 0x0C80 }, /* R580 - FLL2Control (5) */ 536 { 0x0246, 0x0000 }, /* R582 - FLL2 EFS 1 */ 537 { 0x0247, 0x0006 }, /* R583 - FLL2 EFS 2 */ 538 { 0x0300, 0x4050 }, /* R768 - AIF1 Control (1) */ 539 { 0x0301, 0x4000 }, /* R769 - AIF1 Control (2) */ 540 { 0x0302, 0x0000 }, /* R770 - AIF1 Master/Slave */ 541 { 0x0303, 0x0040 }, /* R771 - AIF1 BCLK */ 542 { 0x0304, 0x0040 }, /* R772 - AIF1ADC LRCLK */ 543 { 0x0305, 0x0040 }, /* R773 - AIF1DAC LRCLK */ 544 { 0x0306, 0x0004 }, /* R774 - AIF1DAC Data */ 545 { 0x0307, 0x0100 }, /* R775 - AIF1ADC Data */ 546 { 0x0310, 0x4053 }, /* R784 - AIF2 Control (1) */ 547 { 0x0311, 0x4000 }, /* R785 - AIF2 Control (2) */ 548 { 0x0312, 0x0000 }, /* R786 - AIF2 Master/Slave */ 549 { 0x0313, 0x0040 }, /* R787 - AIF2 BCLK */ 550 { 0x0314, 0x0040 }, /* R788 - AIF2ADC LRCLK */ 551 { 0x0315, 0x0040 }, /* R789 - AIF2DAC LRCLK */ 552 { 0x0316, 0x0000 }, /* R790 - AIF2DAC Data */ 553 { 0x0317, 0x0000 }, /* R791 - AIF2ADC Data */ 554 { 0x0320, 0x0040 }, /* R800 - AIF3 Control (1) */ 555 { 0x0321, 0x0000 }, /* R801 - AIF3 Control (2) */ 556 { 0x0322, 0x0000 }, /* R802 - AIF3DAC Data */ 557 { 0x0323, 0x0000 }, /* R803 - AIF3ADC Data */ 558 { 0x0400, 0x00C0 }, /* R1024 - AIF1 ADC1 Left Volume */ 559 { 0x0401, 0x00C0 }, /* R1025 - AIF1 ADC1 Right Volume */ 560 { 0x0402, 0x00C0 }, /* R1026 - AIF1 DAC1 Left Volume */ 561 { 0x0403, 0x00C0 }, /* R1027 - AIF1 DAC1 Right Volume */ 562 { 0x0404, 0x00C0 }, /* R1028 - AIF1 ADC2 Left Volume */ 563 { 0x0405, 0x00C0 }, /* R1029 - AIF1 ADC2 Right Volume */ 564 { 0x0406, 0x00C0 }, /* R1030 - AIF1 DAC2 Left Volume */ 565 { 0x0407, 0x00C0 }, /* R1031 - AIF1 DAC2 Right Volume */ 566 { 0x0410, 0x0000 }, /* R1040 - AIF1 ADC1 Filters */ 567 { 0x0411, 0x0000 }, /* R1041 - AIF1 ADC2 Filters */ 568 { 0x0420, 0x0200 }, /* R1056 - AIF1 DAC1 Filters (1) */ 569 { 0x0421, 0x0010 }, /* R1057 - AIF1 DAC1 Filters (2) */ 570 { 0x0422, 0x0200 }, /* R1058 - AIF1 DAC2 Filters (1) */ 571 { 0x0423, 0x0010 }, /* R1059 - AIF1 DAC2 Filters (2) */ 572 { 0x0430, 0x0068 }, /* R1072 - AIF1 DAC1 Noise Gate */ 573 { 0x0431, 0x0068 }, /* R1073 - AIF1 DAC2 Noise Gate */ 574 { 0x0440, 0x0098 }, /* R1088 - AIF1 DRC1 (1) */ 575 { 0x0441, 0x0845 }, /* R1089 - AIF1 DRC1 (2) */ 576 { 0x0442, 0x0000 }, /* R1090 - AIF1 DRC1 (3) */ 577 { 0x0443, 0x0000 }, /* R1091 - AIF1 DRC1 (4) */ 578 { 0x0444, 0x0000 }, /* R1092 - AIF1 DRC1 (5) */ 579 { 0x0450, 0x0098 }, /* R1104 - AIF1 DRC2 (1) */ 580 { 0x0451, 0x0845 }, /* R1105 - AIF1 DRC2 (2) */ 581 { 0x0452, 0x0000 }, /* R1106 - AIF1 DRC2 (3) */ 582 { 0x0453, 0x0000 }, /* R1107 - AIF1 DRC2 (4) */ 583 { 0x0454, 0x0000 }, /* R1108 - AIF1 DRC2 (5) */ 584 { 0x0480, 0x6318 }, /* R1152 - AIF1 DAC1 EQ Gains (1) */ 585 { 0x0481, 0x6300 }, /* R1153 - AIF1 DAC1 EQ Gains (2) */ 586 { 0x0482, 0x0FCA }, /* R1154 - AIF1 DAC1 EQ Band 1 A */ 587 { 0x0483, 0x0400 }, /* R1155 - AIF1 DAC1 EQ Band 1 B */ 588 { 0x0484, 0x00D8 }, /* R1156 - AIF1 DAC1 EQ Band 1 PG */ 589 { 0x0485, 0x1EB5 }, /* R1157 - AIF1 DAC1 EQ Band 2 A */ 590 { 0x0486, 0xF145 }, /* R1158 - AIF1 DAC1 EQ Band 2 B */ 591 { 0x0487, 0x0B75 }, /* R1159 - AIF1 DAC1 EQ Band 2 C */ 592 { 0x0488, 0x01C5 }, /* R1160 - AIF1 DAC1 EQ Band 2 PG */ 593 { 0x0489, 0x1C58 }, /* R1161 - AIF1 DAC1 EQ Band 3 A */ 594 { 0x048A, 0xF373 }, /* R1162 - AIF1 DAC1 EQ Band 3 B */ 595 { 0x048B, 0x0A54 }, /* R1163 - AIF1 DAC1 EQ Band 3 C */ 596 { 0x048C, 0x0558 }, /* R1164 - AIF1 DAC1 EQ Band 3 PG */ 597 { 0x048D, 0x168E }, /* R1165 - AIF1 DAC1 EQ Band 4 A */ 598 { 0x048E, 0xF829 }, /* R1166 - AIF1 DAC1 EQ Band 4 B */ 599 { 0x048F, 0x07AD }, /* R1167 - AIF1 DAC1 EQ Band 4 C */ 600 { 0x0490, 0x1103 }, /* R1168 - AIF1 DAC1 EQ Band 4 PG */ 601 { 0x0491, 0x0564 }, /* R1169 - AIF1 DAC1 EQ Band 5 A */ 602 { 0x0492, 0x0559 }, /* R1170 - AIF1 DAC1 EQ Band 5 B */ 603 { 0x0493, 0x4000 }, /* R1171 - AIF1 DAC1 EQ Band 5 PG */ 604 { 0x0494, 0x0000 }, /* R1172 - AIF1 DAC1 EQ Band 1 C */ 605 { 0x04A0, 0x6318 }, /* R1184 - AIF1 DAC2 EQ Gains (1) */ 606 { 0x04A1, 0x6300 }, /* R1185 - AIF1 DAC2 EQ Gains (2) */ 607 { 0x04A2, 0x0FCA }, /* R1186 - AIF1 DAC2 EQ Band 1 A */ 608 { 0x04A3, 0x0400 }, /* R1187 - AIF1 DAC2 EQ Band 1 B */ 609 { 0x04A4, 0x00D8 }, /* R1188 - AIF1 DAC2 EQ Band 1 PG */ 610 { 0x04A5, 0x1EB5 }, /* R1189 - AIF1 DAC2 EQ Band 2 A */ 611 { 0x04A6, 0xF145 }, /* R1190 - AIF1 DAC2 EQ Band 2 B */ 612 { 0x04A7, 0x0B75 }, /* R1191 - AIF1 DAC2 EQ Band 2 C */ 613 { 0x04A8, 0x01C5 }, /* R1192 - AIF1 DAC2 EQ Band 2 PG */ 614 { 0x04A9, 0x1C58 }, /* R1193 - AIF1 DAC2 EQ Band 3 A */ 615 { 0x04AA, 0xF373 }, /* R1194 - AIF1 DAC2 EQ Band 3 B */ 616 { 0x04AB, 0x0A54 }, /* R1195 - AIF1 DAC2 EQ Band 3 C */ 617 { 0x04AC, 0x0558 }, /* R1196 - AIF1 DAC2 EQ Band 3 PG */ 618 { 0x04AD, 0x168E }, /* R1197 - AIF1 DAC2 EQ Band 4 A */ 619 { 0x04AE, 0xF829 }, /* R1198 - AIF1 DAC2 EQ Band 4 B */ 620 { 0x04AF, 0x07AD }, /* R1199 - AIF1 DAC2 EQ Band 4 C */ 621 { 0x04B0, 0x1103 }, /* R1200 - AIF1 DAC2 EQ Band 4 PG */ 622 { 0x04B1, 0x0564 }, /* R1201 - AIF1 DAC2 EQ Band 5 A */ 623 { 0x04B2, 0x0559 }, /* R1202 - AIF1 DAC2 EQ Band 5 B */ 624 { 0x04B3, 0x4000 }, /* R1203 - AIF1 DAC2 EQ Band 5 PG */ 625 { 0x04B4, 0x0000 }, /* R1204 - AIF1 DAC2EQ Band 1 C */ 626 { 0x0500, 0x00C0 }, /* R1280 - AIF2 ADC Left Volume */ 627 { 0x0501, 0x00C0 }, /* R1281 - AIF2 ADC Right Volume */ 628 { 0x0502, 0x00C0 }, /* R1282 - AIF2 DAC Left Volume */ 629 { 0x0503, 0x00C0 }, /* R1283 - AIF2 DAC Right Volume */ 630 { 0x0510, 0x0000 }, /* R1296 - AIF2 ADC Filters */ 631 { 0x0520, 0x0200 }, /* R1312 - AIF2 DAC Filters (1) */ 632 { 0x0521, 0x0010 }, /* R1313 - AIF2 DAC Filters (2) */ 633 { 0x0530, 0x0068 }, /* R1328 - AIF2 DAC Noise Gate */ 634 { 0x0540, 0x0098 }, /* R1344 - AIF2 DRC (1) */ 635 { 0x0541, 0x0845 }, /* R1345 - AIF2 DRC (2) */ 636 { 0x0542, 0x0000 }, /* R1346 - AIF2 DRC (3) */ 637 { 0x0543, 0x0000 }, /* R1347 - AIF2 DRC (4) */ 638 { 0x0544, 0x0000 }, /* R1348 - AIF2 DRC (5) */ 639 { 0x0580, 0x6318 }, /* R1408 - AIF2 EQ Gains (1) */ 640 { 0x0581, 0x6300 }, /* R1409 - AIF2 EQ Gains (2) */ 641 { 0x0582, 0x0FCA }, /* R1410 - AIF2 EQ Band 1 A */ 642 { 0x0583, 0x0400 }, /* R1411 - AIF2 EQ Band 1 B */ 643 { 0x0584, 0x00D8 }, /* R1412 - AIF2 EQ Band 1 PG */ 644 { 0x0585, 0x1EB5 }, /* R1413 - AIF2 EQ Band 2 A */ 645 { 0x0586, 0xF145 }, /* R1414 - AIF2 EQ Band 2 B */ 646 { 0x0587, 0x0B75 }, /* R1415 - AIF2 EQ Band 2 C */ 647 { 0x0588, 0x01C5 }, /* R1416 - AIF2 EQ Band 2 PG */ 648 { 0x0589, 0x1C58 }, /* R1417 - AIF2 EQ Band 3 A */ 649 { 0x058A, 0xF373 }, /* R1418 - AIF2 EQ Band 3 B */ 650 { 0x058B, 0x0A54 }, /* R1419 - AIF2 EQ Band 3 C */ 651 { 0x058C, 0x0558 }, /* R1420 - AIF2 EQ Band 3 PG */ 652 { 0x058D, 0x168E }, /* R1421 - AIF2 EQ Band 4 A */ 653 { 0x058E, 0xF829 }, /* R1422 - AIF2 EQ Band 4 B */ 654 { 0x058F, 0x07AD }, /* R1423 - AIF2 EQ Band 4 C */ 655 { 0x0590, 0x1103 }, /* R1424 - AIF2 EQ Band 4 PG */ 656 { 0x0591, 0x0564 }, /* R1425 - AIF2 EQ Band 5 A */ 657 { 0x0592, 0x0559 }, /* R1426 - AIF2 EQ Band 5 B */ 658 { 0x0593, 0x4000 }, /* R1427 - AIF2 EQ Band 5 PG */ 659 { 0x0594, 0x0000 }, /* R1428 - AIF2 EQ Band 1 C */ 660 { 0x0600, 0x0000 }, /* R1536 - DAC1 Mixer Volumes */ 661 { 0x0601, 0x0000 }, /* R1537 - DAC1 Left Mixer Routing */ 662 { 0x0602, 0x0000 }, /* R1538 - DAC1 Right Mixer Routing */ 663 { 0x0603, 0x0000 }, /* R1539 - DAC2 Mixer Volumes */ 664 { 0x0604, 0x0000 }, /* R1540 - DAC2 Left Mixer Routing */ 665 { 0x0605, 0x0000 }, /* R1541 - DAC2 Right Mixer Routing */ 666 { 0x0606, 0x0000 }, /* R1542 - AIF1 ADC1 Left Mixer Routing */ 667 { 0x0607, 0x0000 }, /* R1543 - AIF1 ADC1 Right Mixer Routing */ 668 { 0x0608, 0x0000 }, /* R1544 - AIF1 ADC2 Left Mixer Routing */ 669 { 0x0609, 0x0000 }, /* R1545 - AIF1 ADC2 Right mixer Routing */ 670 { 0x0610, 0x02C0 }, /* R1552 - DAC1 Left Volume */ 671 { 0x0611, 0x02C0 }, /* R1553 - DAC1 Right Volume */ 672 { 0x0612, 0x02C0 }, /* R1554 - DAC2 Left Volume */ 673 { 0x0613, 0x02C0 }, /* R1555 - DAC2 Right Volume */ 674 { 0x0614, 0x0000 }, /* R1556 - DAC Softmute */ 675 { 0x0620, 0x0002 }, /* R1568 - Oversampling */ 676 { 0x0621, 0x0000 }, /* R1569 - Sidetone */ 677 { 0x0700, 0x8100 }, /* R1792 - GPIO 1 */ 678 { 0x0701, 0xA101 }, /* R1793 - Pull Control (MCLK2) */ 679 { 0x0702, 0xA101 }, /* R1794 - Pull Control (BCLK2) */ 680 { 0x0703, 0xA101 }, /* R1795 - Pull Control (DACLRCLK2) */ 681 { 0x0704, 0xA101 }, /* R1796 - Pull Control (DACDAT2) */ 682 { 0x0705, 0xA101 }, /* R1797 - GPIO 6 */ 683 { 0x0707, 0xA101 }, /* R1799 - GPIO 8 */ 684 { 0x0708, 0xA101 }, /* R1800 - GPIO 9 */ 685 { 0x0709, 0xA101 }, /* R1801 - GPIO 10 */ 686 { 0x070A, 0xA101 }, /* R1802 - GPIO 11 */ 687 { 0x0720, 0x0000 }, /* R1824 - Pull Control (1) */ 688 { 0x0721, 0x0156 }, /* R1825 - Pull Control (2) */ 689 { 0x0738, 0x07FF }, /* R1848 - Interrupt Status 1 Mask */ 690 { 0x0739, 0xFFEF }, /* R1849 - Interrupt Status 2 Mask */ 691 { 0x0740, 0x0000 }, /* R1856 - Interrupt Control */ 692 { 0x0748, 0x003F }, /* R1864 - IRQ Debounce */ 693 { 0x0900, 0x1C00 }, /* R2304 - DSP2_Program */ 694 { 0x0901, 0x0000 }, /* R2305 - DSP2_Config */ 695 { 0x0A0D, 0x0000 }, /* R2573 - DSP2_ExecControl */ 696 { 0x2400, 0x003F }, /* R9216 - MBC Band 1 K (1) */ 697 { 0x2401, 0x8BD8 }, /* R9217 - MBC Band 1 K (2) */ 698 { 0x2402, 0x0032 }, /* R9218 - MBC Band 1 N1 (1) */ 699 { 0x2403, 0xF52D }, /* R9219 - MBC Band 1 N1 (2) */ 700 { 0x2404, 0x0065 }, /* R9220 - MBC Band 1 N2 (1) */ 701 { 0x2405, 0xAC8C }, /* R9221 - MBC Band 1 N2 (2) */ 702 { 0x2406, 0x006B }, /* R9222 - MBC Band 1 N3 (1) */ 703 { 0x2407, 0xE087 }, /* R9223 - MBC Band 1 N3 (2) */ 704 { 0x2408, 0x0072 }, /* R9224 - MBC Band 1 N4 (1) */ 705 { 0x2409, 0x1483 }, /* R9225 - MBC Band 1 N4 (2) */ 706 { 0x240A, 0x0072 }, /* R9226 - MBC Band 1 N5 (1) */ 707 { 0x240B, 0x1483 }, /* R9227 - MBC Band 1 N5 (2) */ 708 { 0x240C, 0x0043 }, /* R9228 - MBC Band 1 X1 (1) */ 709 { 0x240D, 0x3525 }, /* R9229 - MBC Band 1 X1 (2) */ 710 { 0x240E, 0x0006 }, /* R9230 - MBC Band 1 X2 (1) */ 711 { 0x240F, 0x6A4A }, /* R9231 - MBC Band 1 X2 (2) */ 712 { 0x2410, 0x0043 }, /* R9232 - MBC Band 1 X3 (1) */ 713 { 0x2411, 0x6079 }, /* R9233 - MBC Band 1 X3 (2) */ 714 { 0x2412, 0x000C }, /* R9234 - MBC Band 1 Attack (1) */ 715 { 0x2413, 0xCCCD }, /* R9235 - MBC Band 1 Attack (2) */ 716 { 0x2414, 0x0000 }, /* R9236 - MBC Band 1 Decay (1) */ 717 { 0x2415, 0x0800 }, /* R9237 - MBC Band 1 Decay (2) */ 718 { 0x2416, 0x003F }, /* R9238 - MBC Band 2 K (1) */ 719 { 0x2417, 0x8BD8 }, /* R9239 - MBC Band 2 K (2) */ 720 { 0x2418, 0x0032 }, /* R9240 - MBC Band 2 N1 (1) */ 721 { 0x2419, 0xF52D }, /* R9241 - MBC Band 2 N1 (2) */ 722 { 0x241A, 0x0065 }, /* R9242 - MBC Band 2 N2 (1) */ 723 { 0x241B, 0xAC8C }, /* R9243 - MBC Band 2 N2 (2) */ 724 { 0x241C, 0x006B }, /* R9244 - MBC Band 2 N3 (1) */ 725 { 0x241D, 0xE087 }, /* R9245 - MBC Band 2 N3 (2) */ 726 { 0x241E, 0x0072 }, /* R9246 - MBC Band 2 N4 (1) */ 727 { 0x241F, 0x1483 }, /* R9247 - MBC Band 2 N4 (2) */ 728 { 0x2420, 0x0072 }, /* R9248 - MBC Band 2 N5 (1) */ 729 { 0x2421, 0x1483 }, /* R9249 - MBC Band 2 N5 (2) */ 730 { 0x2422, 0x0043 }, /* R9250 - MBC Band 2 X1 (1) */ 731 { 0x2423, 0x3525 }, /* R9251 - MBC Band 2 X1 (2) */ 732 { 0x2424, 0x0006 }, /* R9252 - MBC Band 2 X2 (1) */ 733 { 0x2425, 0x6A4A }, /* R9253 - MBC Band 2 X2 (2) */ 734 { 0x2426, 0x0043 }, /* R9254 - MBC Band 2 X3 (1) */ 735 { 0x2427, 0x6079 }, /* R9255 - MBC Band 2 X3 (2) */ 736 { 0x2428, 0x000C }, /* R9256 - MBC Band 2 Attack (1) */ 737 { 0x2429, 0xCCCD }, /* R9257 - MBC Band 2 Attack (2) */ 738 { 0x242A, 0x0000 }, /* R9258 - MBC Band 2 Decay (1) */ 739 { 0x242B, 0x0800 }, /* R9259 - MBC Band 2 Decay (2) */ 740 { 0x242C, 0x005A }, /* R9260 - MBC_B2_PG2 (1) */ 741 { 0x242D, 0x7EFA }, /* R9261 - MBC_B2_PG2 (2) */ 742 { 0x242E, 0x005A }, /* R9262 - MBC_B1_PG2 (1) */ 743 { 0x242F, 0x7EFA }, /* R9263 - MBC_B1_PG2 (2) */ 744 { 0x2600, 0x00A7 }, /* R9728 - MBC Crossover (1) */ 745 { 0x2601, 0x0D1C }, /* R9729 - MBC Crossover (2) */ 746 { 0x2602, 0x0083 }, /* R9730 - MBC HPF (1) */ 747 { 0x2603, 0x98AD }, /* R9731 - MBC HPF (2) */ 748 { 0x2606, 0x0008 }, /* R9734 - MBC LPF (1) */ 749 { 0x2607, 0xE7A2 }, /* R9735 - MBC LPF (2) */ 750 { 0x260A, 0x0055 }, /* R9738 - MBC RMS Limit (1) */ 751 { 0x260B, 0x8C4B }, /* R9739 - MBC RMS Limit (2) */ 752 }; 753 754 static bool wm1811_readable_register(struct device *dev, unsigned int reg) 755 { 756 switch (reg) { 757 case WM8994_SOFTWARE_RESET: 758 case WM8994_POWER_MANAGEMENT_1: 759 case WM8994_POWER_MANAGEMENT_2: 760 case WM8994_POWER_MANAGEMENT_3: 761 case WM8994_POWER_MANAGEMENT_4: 762 case WM8994_POWER_MANAGEMENT_5: 763 case WM8994_POWER_MANAGEMENT_6: 764 case WM8994_INPUT_MIXER_1: 765 case WM8994_LEFT_LINE_INPUT_1_2_VOLUME: 766 case WM8994_LEFT_LINE_INPUT_3_4_VOLUME: 767 case WM8994_RIGHT_LINE_INPUT_1_2_VOLUME: 768 case WM8994_RIGHT_LINE_INPUT_3_4_VOLUME: 769 case WM8994_LEFT_OUTPUT_VOLUME: 770 case WM8994_RIGHT_OUTPUT_VOLUME: 771 case WM8994_LINE_OUTPUTS_VOLUME: 772 case WM8994_HPOUT2_VOLUME: 773 case WM8994_LEFT_OPGA_VOLUME: 774 case WM8994_RIGHT_OPGA_VOLUME: 775 case WM8994_SPKMIXL_ATTENUATION: 776 case WM8994_SPKMIXR_ATTENUATION: 777 case WM8994_SPKOUT_MIXERS: 778 case WM8994_CLASSD: 779 case WM8994_SPEAKER_VOLUME_LEFT: 780 case WM8994_SPEAKER_VOLUME_RIGHT: 781 case WM8994_INPUT_MIXER_2: 782 case WM8994_INPUT_MIXER_3: 783 case WM8994_INPUT_MIXER_4: 784 case WM8994_INPUT_MIXER_5: 785 case WM8994_INPUT_MIXER_6: 786 case WM8994_OUTPUT_MIXER_1: 787 case WM8994_OUTPUT_MIXER_2: 788 case WM8994_OUTPUT_MIXER_3: 789 case WM8994_OUTPUT_MIXER_4: 790 case WM8994_OUTPUT_MIXER_5: 791 case WM8994_OUTPUT_MIXER_6: 792 case WM8994_HPOUT2_MIXER: 793 case WM8994_LINE_MIXER_1: 794 case WM8994_LINE_MIXER_2: 795 case WM8994_SPEAKER_MIXER: 796 case WM8994_ADDITIONAL_CONTROL: 797 case WM8994_ANTIPOP_1: 798 case WM8994_ANTIPOP_2: 799 case WM8994_LDO_1: 800 case WM8994_LDO_2: 801 case WM8958_MICBIAS1: 802 case WM8958_MICBIAS2: 803 case WM8994_CHARGE_PUMP_1: 804 case WM8958_CHARGE_PUMP_2: 805 case WM8994_CLASS_W_1: 806 case WM8994_DC_SERVO_1: 807 case WM8994_DC_SERVO_2: 808 case WM8994_DC_SERVO_READBACK: 809 case WM8994_DC_SERVO_4: 810 case WM8994_DC_SERVO_4E: 811 case WM8994_ANALOGUE_HP_1: 812 case WM8958_MIC_DETECT_1: 813 case WM8958_MIC_DETECT_2: 814 case WM8958_MIC_DETECT_3: 815 case WM8994_CHIP_REVISION: 816 case WM8994_CONTROL_INTERFACE: 817 case WM8994_AIF1_CLOCKING_1: 818 case WM8994_AIF1_CLOCKING_2: 819 case WM8994_AIF2_CLOCKING_1: 820 case WM8994_AIF2_CLOCKING_2: 821 case WM8994_CLOCKING_1: 822 case WM8994_CLOCKING_2: 823 case WM8994_AIF1_RATE: 824 case WM8994_AIF2_RATE: 825 case WM8994_RATE_STATUS: 826 case WM8994_FLL1_CONTROL_1: 827 case WM8994_FLL1_CONTROL_2: 828 case WM8994_FLL1_CONTROL_3: 829 case WM8994_FLL1_CONTROL_4: 830 case WM8994_FLL1_CONTROL_5: 831 case WM8958_FLL1_EFS_1: 832 case WM8958_FLL1_EFS_2: 833 case WM8994_FLL2_CONTROL_1: 834 case WM8994_FLL2_CONTROL_2: 835 case WM8994_FLL2_CONTROL_3: 836 case WM8994_FLL2_CONTROL_4: 837 case WM8994_FLL2_CONTROL_5: 838 case WM8958_FLL2_EFS_1: 839 case WM8958_FLL2_EFS_2: 840 case WM8994_AIF1_CONTROL_1: 841 case WM8994_AIF1_CONTROL_2: 842 case WM8994_AIF1_MASTER_SLAVE: 843 case WM8994_AIF1_BCLK: 844 case WM8994_AIF1ADC_LRCLK: 845 case WM8994_AIF1DAC_LRCLK: 846 case WM8994_AIF1DAC_DATA: 847 case WM8994_AIF1ADC_DATA: 848 case WM8994_AIF2_CONTROL_1: 849 case WM8994_AIF2_CONTROL_2: 850 case WM8994_AIF2_MASTER_SLAVE: 851 case WM8994_AIF2_BCLK: 852 case WM8994_AIF2ADC_LRCLK: 853 case WM8994_AIF2DAC_LRCLK: 854 case WM8994_AIF2DAC_DATA: 855 case WM8994_AIF2ADC_DATA: 856 case WM1811_AIF2TX_CONTROL: 857 case WM8958_AIF3_CONTROL_1: 858 case WM8958_AIF3_CONTROL_2: 859 case WM8958_AIF3DAC_DATA: 860 case WM8958_AIF3ADC_DATA: 861 case WM8994_AIF1_ADC1_LEFT_VOLUME: 862 case WM8994_AIF1_ADC1_RIGHT_VOLUME: 863 case WM8994_AIF1_DAC1_LEFT_VOLUME: 864 case WM8994_AIF1_DAC1_RIGHT_VOLUME: 865 case WM8994_AIF1_ADC1_FILTERS: 866 case WM8994_AIF1_DAC1_FILTERS_1: 867 case WM8994_AIF1_DAC1_FILTERS_2: 868 case WM8958_AIF1_DAC1_NOISE_GATE: 869 case WM8994_AIF1_DRC1_1: 870 case WM8994_AIF1_DRC1_2: 871 case WM8994_AIF1_DRC1_3: 872 case WM8994_AIF1_DRC1_4: 873 case WM8994_AIF1_DRC1_5: 874 case WM8994_AIF1_DAC1_EQ_GAINS_1: 875 case WM8994_AIF1_DAC1_EQ_GAINS_2: 876 case WM8994_AIF1_DAC1_EQ_BAND_1_A: 877 case WM8994_AIF1_DAC1_EQ_BAND_1_B: 878 case WM8994_AIF1_DAC1_EQ_BAND_1_PG: 879 case WM8994_AIF1_DAC1_EQ_BAND_2_A: 880 case WM8994_AIF1_DAC1_EQ_BAND_2_B: 881 case WM8994_AIF1_DAC1_EQ_BAND_2_C: 882 case WM8994_AIF1_DAC1_EQ_BAND_2_PG: 883 case WM8994_AIF1_DAC1_EQ_BAND_3_A: 884 case WM8994_AIF1_DAC1_EQ_BAND_3_B: 885 case WM8994_AIF1_DAC1_EQ_BAND_3_C: 886 case WM8994_AIF1_DAC1_EQ_BAND_3_PG: 887 case WM8994_AIF1_DAC1_EQ_BAND_4_A: 888 case WM8994_AIF1_DAC1_EQ_BAND_4_B: 889 case WM8994_AIF1_DAC1_EQ_BAND_4_C: 890 case WM8994_AIF1_DAC1_EQ_BAND_4_PG: 891 case WM8994_AIF1_DAC1_EQ_BAND_5_A: 892 case WM8994_AIF1_DAC1_EQ_BAND_5_B: 893 case WM8994_AIF1_DAC1_EQ_BAND_5_PG: 894 case WM8994_AIF1_DAC1_EQ_BAND_1_C: 895 case WM8994_AIF2_ADC_LEFT_VOLUME: 896 case WM8994_AIF2_ADC_RIGHT_VOLUME: 897 case WM8994_AIF2_DAC_LEFT_VOLUME: 898 case WM8994_AIF2_DAC_RIGHT_VOLUME: 899 case WM8994_AIF2_ADC_FILTERS: 900 case WM8994_AIF2_DAC_FILTERS_1: 901 case WM8994_AIF2_DAC_FILTERS_2: 902 case WM8958_AIF2_DAC_NOISE_GATE: 903 case WM8994_AIF2_DRC_1: 904 case WM8994_AIF2_DRC_2: 905 case WM8994_AIF2_DRC_3: 906 case WM8994_AIF2_DRC_4: 907 case WM8994_AIF2_DRC_5: 908 case WM8994_AIF2_EQ_GAINS_1: 909 case WM8994_AIF2_EQ_GAINS_2: 910 case WM8994_AIF2_EQ_BAND_1_A: 911 case WM8994_AIF2_EQ_BAND_1_B: 912 case WM8994_AIF2_EQ_BAND_1_PG: 913 case WM8994_AIF2_EQ_BAND_2_A: 914 case WM8994_AIF2_EQ_BAND_2_B: 915 case WM8994_AIF2_EQ_BAND_2_C: 916 case WM8994_AIF2_EQ_BAND_2_PG: 917 case WM8994_AIF2_EQ_BAND_3_A: 918 case WM8994_AIF2_EQ_BAND_3_B: 919 case WM8994_AIF2_EQ_BAND_3_C: 920 case WM8994_AIF2_EQ_BAND_3_PG: 921 case WM8994_AIF2_EQ_BAND_4_A: 922 case WM8994_AIF2_EQ_BAND_4_B: 923 case WM8994_AIF2_EQ_BAND_4_C: 924 case WM8994_AIF2_EQ_BAND_4_PG: 925 case WM8994_AIF2_EQ_BAND_5_A: 926 case WM8994_AIF2_EQ_BAND_5_B: 927 case WM8994_AIF2_EQ_BAND_5_PG: 928 case WM8994_AIF2_EQ_BAND_1_C: 929 case WM8994_DAC1_MIXER_VOLUMES: 930 case WM8994_DAC1_LEFT_MIXER_ROUTING: 931 case WM8994_DAC1_RIGHT_MIXER_ROUTING: 932 case WM8994_DAC2_MIXER_VOLUMES: 933 case WM8994_DAC2_LEFT_MIXER_ROUTING: 934 case WM8994_DAC2_RIGHT_MIXER_ROUTING: 935 case WM8994_AIF1_ADC1_LEFT_MIXER_ROUTING: 936 case WM8994_AIF1_ADC1_RIGHT_MIXER_ROUTING: 937 case WM8994_DAC1_LEFT_VOLUME: 938 case WM8994_DAC1_RIGHT_VOLUME: 939 case WM8994_DAC2_LEFT_VOLUME: 940 case WM8994_DAC2_RIGHT_VOLUME: 941 case WM8994_DAC_SOFTMUTE: 942 case WM8994_OVERSAMPLING: 943 case WM8994_SIDETONE: 944 case WM8994_GPIO_1: 945 case WM8994_GPIO_2: 946 case WM8994_GPIO_3: 947 case WM8994_GPIO_4: 948 case WM8994_GPIO_5: 949 case WM8994_GPIO_6: 950 case WM8994_GPIO_8: 951 case WM8994_GPIO_9: 952 case WM8994_GPIO_10: 953 case WM8994_GPIO_11: 954 case WM8994_PULL_CONTROL_1: 955 case WM8994_PULL_CONTROL_2: 956 case WM8994_INTERRUPT_STATUS_1: 957 case WM8994_INTERRUPT_STATUS_2: 958 case WM8994_INTERRUPT_RAW_STATUS_2: 959 case WM8994_INTERRUPT_STATUS_1_MASK: 960 case WM8994_INTERRUPT_STATUS_2_MASK: 961 case WM8994_INTERRUPT_CONTROL: 962 case WM8994_IRQ_DEBOUNCE: 963 return true; 964 default: 965 return false; 966 } 967 } 968 969 static bool wm8994_readable_register(struct device *dev, unsigned int reg) 970 { 971 switch (reg) { 972 case WM8994_DC_SERVO_READBACK: 973 case WM8994_WRITE_SEQUENCER_CTRL_1: 974 case WM8994_WRITE_SEQUENCER_CTRL_2: 975 case WM8994_AIF1_ADC2_LEFT_VOLUME: 976 case WM8994_AIF1_ADC2_RIGHT_VOLUME: 977 case WM8994_AIF1_DAC2_LEFT_VOLUME: 978 case WM8994_AIF1_DAC2_RIGHT_VOLUME: 979 case WM8994_AIF1_ADC2_FILTERS: 980 case WM8994_AIF1_DAC2_FILTERS_1: 981 case WM8994_AIF1_DAC2_FILTERS_2: 982 case WM8958_AIF1_DAC2_NOISE_GATE: 983 case WM8994_AIF1_DRC2_1: 984 case WM8994_AIF1_DRC2_2: 985 case WM8994_AIF1_DRC2_3: 986 case WM8994_AIF1_DRC2_4: 987 case WM8994_AIF1_DRC2_5: 988 case WM8994_AIF1_DAC2_EQ_GAINS_1: 989 case WM8994_AIF1_DAC2_EQ_GAINS_2: 990 case WM8994_AIF1_DAC2_EQ_BAND_1_A: 991 case WM8994_AIF1_DAC2_EQ_BAND_1_B: 992 case WM8994_AIF1_DAC2_EQ_BAND_1_PG: 993 case WM8994_AIF1_DAC2_EQ_BAND_2_A: 994 case WM8994_AIF1_DAC2_EQ_BAND_2_B: 995 case WM8994_AIF1_DAC2_EQ_BAND_2_C: 996 case WM8994_AIF1_DAC2_EQ_BAND_2_PG: 997 case WM8994_AIF1_DAC2_EQ_BAND_3_A: 998 case WM8994_AIF1_DAC2_EQ_BAND_3_B: 999 case WM8994_AIF1_DAC2_EQ_BAND_3_C: 1000 case WM8994_AIF1_DAC2_EQ_BAND_3_PG: 1001 case WM8994_AIF1_DAC2_EQ_BAND_4_A: 1002 case WM8994_AIF1_DAC2_EQ_BAND_4_B: 1003 case WM8994_AIF1_DAC2_EQ_BAND_4_C: 1004 case WM8994_AIF1_DAC2_EQ_BAND_4_PG: 1005 case WM8994_AIF1_DAC2_EQ_BAND_5_A: 1006 case WM8994_AIF1_DAC2_EQ_BAND_5_B: 1007 case WM8994_AIF1_DAC2_EQ_BAND_5_PG: 1008 case WM8994_AIF1_DAC2_EQ_BAND_1_C: 1009 case WM8994_DAC2_MIXER_VOLUMES: 1010 case WM8994_DAC2_LEFT_MIXER_ROUTING: 1011 case WM8994_DAC2_RIGHT_MIXER_ROUTING: 1012 case WM8994_AIF1_ADC2_LEFT_MIXER_ROUTING: 1013 case WM8994_AIF1_ADC2_RIGHT_MIXER_ROUTING: 1014 case WM8994_DAC2_LEFT_VOLUME: 1015 case WM8994_DAC2_RIGHT_VOLUME: 1016 return true; 1017 default: 1018 return wm1811_readable_register(dev, reg); 1019 } 1020 } 1021 1022 static bool wm8958_readable_register(struct device *dev, unsigned int reg) 1023 { 1024 switch (reg) { 1025 case WM8958_DSP2_PROGRAM: 1026 case WM8958_DSP2_CONFIG: 1027 case WM8958_DSP2_MAGICNUM: 1028 case WM8958_DSP2_RELEASEYEAR: 1029 case WM8958_DSP2_RELEASEMONTHDAY: 1030 case WM8958_DSP2_RELEASETIME: 1031 case WM8958_DSP2_VERMAJMIN: 1032 case WM8958_DSP2_VERBUILD: 1033 case WM8958_DSP2_TESTREG: 1034 case WM8958_DSP2_XORREG: 1035 case WM8958_DSP2_SHIFTMAXX: 1036 case WM8958_DSP2_SHIFTMAXY: 1037 case WM8958_DSP2_SHIFTMAXZ: 1038 case WM8958_DSP2_SHIFTMAXEXTLO: 1039 case WM8958_DSP2_AESSELECT: 1040 case WM8958_DSP2_EXECCONTROL: 1041 case WM8958_DSP2_SAMPLEBREAK: 1042 case WM8958_DSP2_COUNTBREAK: 1043 case WM8958_DSP2_INTSTATUS: 1044 case WM8958_DSP2_EVENTSTATUS: 1045 case WM8958_DSP2_INTMASK: 1046 case WM8958_DSP2_CONFIGDWIDTH: 1047 case WM8958_DSP2_CONFIGINSTR: 1048 case WM8958_DSP2_CONFIGDMEM: 1049 case WM8958_DSP2_CONFIGDELAYS: 1050 case WM8958_DSP2_CONFIGNUMIO: 1051 case WM8958_DSP2_CONFIGEXTDEPTH: 1052 case WM8958_DSP2_CONFIGMULTIPLIER: 1053 case WM8958_DSP2_CONFIGCTRLDWIDTH: 1054 case WM8958_DSP2_CONFIGPIPELINE: 1055 case WM8958_DSP2_SHIFTMAXEXTHI: 1056 case WM8958_DSP2_SWVERSIONREG: 1057 case WM8958_DSP2_CONFIGXMEM: 1058 case WM8958_DSP2_CONFIGYMEM: 1059 case WM8958_DSP2_CONFIGZMEM: 1060 case WM8958_FW_BUILD_1: 1061 case WM8958_FW_BUILD_0: 1062 case WM8958_FW_ID_1: 1063 case WM8958_FW_ID_0: 1064 case WM8958_FW_MAJOR_1: 1065 case WM8958_FW_MAJOR_0: 1066 case WM8958_FW_MINOR_1: 1067 case WM8958_FW_MINOR_0: 1068 case WM8958_FW_PATCH_1: 1069 case WM8958_FW_PATCH_0: 1070 case WM8958_MBC_BAND_1_K_1: 1071 case WM8958_MBC_BAND_1_K_2: 1072 case WM8958_MBC_BAND_1_N1_1: 1073 case WM8958_MBC_BAND_1_N1_2: 1074 case WM8958_MBC_BAND_1_N2_1: 1075 case WM8958_MBC_BAND_1_N2_2: 1076 case WM8958_MBC_BAND_1_N3_1: 1077 case WM8958_MBC_BAND_1_N3_2: 1078 case WM8958_MBC_BAND_1_N4_1: 1079 case WM8958_MBC_BAND_1_N4_2: 1080 case WM8958_MBC_BAND_1_N5_1: 1081 case WM8958_MBC_BAND_1_N5_2: 1082 case WM8958_MBC_BAND_1_X1_1: 1083 case WM8958_MBC_BAND_1_X1_2: 1084 case WM8958_MBC_BAND_1_X2_1: 1085 case WM8958_MBC_BAND_1_X2_2: 1086 case WM8958_MBC_BAND_1_X3_1: 1087 case WM8958_MBC_BAND_1_X3_2: 1088 case WM8958_MBC_BAND_1_ATTACK_1: 1089 case WM8958_MBC_BAND_1_ATTACK_2: 1090 case WM8958_MBC_BAND_1_DECAY_1: 1091 case WM8958_MBC_BAND_1_DECAY_2: 1092 case WM8958_MBC_BAND_2_K_1: 1093 case WM8958_MBC_BAND_2_K_2: 1094 case WM8958_MBC_BAND_2_N1_1: 1095 case WM8958_MBC_BAND_2_N1_2: 1096 case WM8958_MBC_BAND_2_N2_1: 1097 case WM8958_MBC_BAND_2_N2_2: 1098 case WM8958_MBC_BAND_2_N3_1: 1099 case WM8958_MBC_BAND_2_N3_2: 1100 case WM8958_MBC_BAND_2_N4_1: 1101 case WM8958_MBC_BAND_2_N4_2: 1102 case WM8958_MBC_BAND_2_N5_1: 1103 case WM8958_MBC_BAND_2_N5_2: 1104 case WM8958_MBC_BAND_2_X1_1: 1105 case WM8958_MBC_BAND_2_X1_2: 1106 case WM8958_MBC_BAND_2_X2_1: 1107 case WM8958_MBC_BAND_2_X2_2: 1108 case WM8958_MBC_BAND_2_X3_1: 1109 case WM8958_MBC_BAND_2_X3_2: 1110 case WM8958_MBC_BAND_2_ATTACK_1: 1111 case WM8958_MBC_BAND_2_ATTACK_2: 1112 case WM8958_MBC_BAND_2_DECAY_1: 1113 case WM8958_MBC_BAND_2_DECAY_2: 1114 case WM8958_MBC_B2_PG2_1: 1115 case WM8958_MBC_B2_PG2_2: 1116 case WM8958_MBC_B1_PG2_1: 1117 case WM8958_MBC_B1_PG2_2: 1118 case WM8958_MBC_CROSSOVER_1: 1119 case WM8958_MBC_CROSSOVER_2: 1120 case WM8958_MBC_HPF_1: 1121 case WM8958_MBC_HPF_2: 1122 case WM8958_MBC_LPF_1: 1123 case WM8958_MBC_LPF_2: 1124 case WM8958_MBC_RMS_LIMIT_1: 1125 case WM8958_MBC_RMS_LIMIT_2: 1126 return true; 1127 default: 1128 return wm8994_readable_register(dev, reg); 1129 } 1130 } 1131 1132 static bool wm8994_volatile_register(struct device *dev, unsigned int reg) 1133 { 1134 switch (reg) { 1135 case WM8994_SOFTWARE_RESET: 1136 case WM8994_DC_SERVO_1: 1137 case WM8994_DC_SERVO_READBACK: 1138 case WM8994_RATE_STATUS: 1139 case WM8958_MIC_DETECT_3: 1140 case WM8994_DC_SERVO_4E: 1141 case WM8994_CHIP_REVISION: 1142 case WM8994_INTERRUPT_STATUS_1: 1143 case WM8994_INTERRUPT_STATUS_2: 1144 return true; 1145 default: 1146 return false; 1147 } 1148 } 1149 1150 static bool wm1811_volatile_register(struct device *dev, unsigned int reg) 1151 { 1152 struct wm8994 *wm8994 = dev_get_drvdata(dev); 1153 1154 switch (reg) { 1155 case WM8994_GPIO_6: 1156 if (wm8994->revision > 1) 1157 return true; 1158 else 1159 return false; 1160 default: 1161 return wm8994_volatile_register(dev, reg); 1162 } 1163 } 1164 1165 static bool wm8958_volatile_register(struct device *dev, unsigned int reg) 1166 { 1167 switch (reg) { 1168 case WM8958_DSP2_MAGICNUM: 1169 case WM8958_DSP2_RELEASEYEAR: 1170 case WM8958_DSP2_RELEASEMONTHDAY: 1171 case WM8958_DSP2_RELEASETIME: 1172 case WM8958_DSP2_VERMAJMIN: 1173 case WM8958_DSP2_VERBUILD: 1174 case WM8958_DSP2_EXECCONTROL: 1175 case WM8958_DSP2_SWVERSIONREG: 1176 case WM8958_DSP2_CONFIGXMEM: 1177 case WM8958_DSP2_CONFIGYMEM: 1178 case WM8958_DSP2_CONFIGZMEM: 1179 case WM8958_FW_BUILD_1: 1180 case WM8958_FW_BUILD_0: 1181 case WM8958_FW_ID_1: 1182 case WM8958_FW_ID_0: 1183 case WM8958_FW_MAJOR_1: 1184 case WM8958_FW_MAJOR_0: 1185 case WM8958_FW_MINOR_1: 1186 case WM8958_FW_MINOR_0: 1187 case WM8958_FW_PATCH_1: 1188 case WM8958_FW_PATCH_0: 1189 return true; 1190 default: 1191 return wm8994_volatile_register(dev, reg); 1192 } 1193 } 1194 1195 struct regmap_config wm1811_regmap_config = { 1196 .reg_bits = 16, 1197 .val_bits = 16, 1198 1199 .cache_type = REGCACHE_RBTREE, 1200 1201 .reg_defaults = wm1811_defaults, 1202 .num_reg_defaults = ARRAY_SIZE(wm1811_defaults), 1203 1204 .max_register = WM8994_MAX_REGISTER, 1205 .volatile_reg = wm1811_volatile_register, 1206 .readable_reg = wm1811_readable_register, 1207 }; 1208 1209 struct regmap_config wm8994_regmap_config = { 1210 .reg_bits = 16, 1211 .val_bits = 16, 1212 1213 .cache_type = REGCACHE_RBTREE, 1214 1215 .reg_defaults = wm8994_defaults, 1216 .num_reg_defaults = ARRAY_SIZE(wm8994_defaults), 1217 1218 .max_register = WM8994_MAX_REGISTER, 1219 .volatile_reg = wm8994_volatile_register, 1220 .readable_reg = wm8994_readable_register, 1221 }; 1222 1223 struct regmap_config wm8958_regmap_config = { 1224 .reg_bits = 16, 1225 .val_bits = 16, 1226 1227 .cache_type = REGCACHE_RBTREE, 1228 1229 .reg_defaults = wm8958_defaults, 1230 .num_reg_defaults = ARRAY_SIZE(wm8958_defaults), 1231 1232 .max_register = WM8994_MAX_REGISTER, 1233 .volatile_reg = wm8958_volatile_register, 1234 .readable_reg = wm8958_readable_register, 1235 }; 1236 1237 struct regmap_config wm8994_base_regmap_config = { 1238 .reg_bits = 16, 1239 .val_bits = 16, 1240 }; 1241