Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: madera: Add Madera core support for CS47L15

This patch adds all the core support and defines for the Cirrus
Logic CS47L15 smart audio CODEC.

Registers or fields are named MADERA_* if it is part of the
common hardware platform and does not conflict with any other
Madera codecs. It is named CS47L15_* if it is unique to CS47L15
and conflicts with definitions on other codecs.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>

authored by

Richard Fitzgerald and committed by
Lee Jones
1ef921b6 8f759058

+1382
+7
drivers/mfd/Kconfig
··· 260 260 Support for the Cirrus Logic Madera platform audio SoC 261 261 core functionality controlled via SPI. 262 262 263 + config MFD_CS47L15 264 + bool "Cirrus Logic CS47L15" 265 + select PINCTRL_CS47L15 266 + depends on MFD_MADERA 267 + help 268 + Support for Cirrus Logic CS47L15 Smart Codec 269 + 263 270 config MFD_CS47L35 264 271 bool "Cirrus Logic CS47L35" 265 272 select PINCTRL_CS47L35
+3
drivers/mfd/Makefile
··· 75 75 obj-$(CONFIG_MFD_WM97xx) += wm97xx-core.o 76 76 77 77 madera-objs := madera-core.o 78 + ifeq ($(CONFIG_MFD_CS47L15),y) 79 + madera-objs += cs47l15-tables.o 80 + endif 78 81 ifeq ($(CONFIG_MFD_CS47L35),y) 79 82 madera-objs += cs47l35-tables.o 80 83 endif
+1301
drivers/mfd/cs47l15-tables.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Regmap tables for CS47L15 codec 4 + * 5 + * Copyright (C) 2016-2019 Cirrus Logic, Inc. and 6 + * Cirrus Logic International Semiconductor Ltd. 7 + */ 8 + 9 + #include <linux/device.h> 10 + #include <linux/module.h> 11 + #include <linux/regmap.h> 12 + 13 + #include <linux/mfd/madera/core.h> 14 + #include <linux/mfd/madera/registers.h> 15 + 16 + #include "madera.h" 17 + 18 + static const struct reg_sequence cs47l15_reva_16_patch[] = { 19 + { 0x8C, 0x5555 }, 20 + { 0x8C, 0xAAAA }, 21 + { 0x314, 0x0080 }, 22 + { 0x4A8, 0x6023 }, 23 + { 0x4A9, 0x6023 }, 24 + { 0x4D4, 0x0008 }, 25 + { 0x4CF, 0x0F00 }, 26 + { 0x4D7, 0x1B2B }, 27 + { 0x8C, 0xCCCC }, 28 + { 0x8C, 0x3333 }, 29 + }; 30 + 31 + int cs47l15_patch(struct madera *madera) 32 + { 33 + int ret; 34 + 35 + ret = regmap_register_patch(madera->regmap, 36 + cs47l15_reva_16_patch, 37 + ARRAY_SIZE(cs47l15_reva_16_patch)); 38 + if (ret < 0) { 39 + dev_err(madera->dev, 40 + "Error in applying 16-bit patch: %d\n", ret); 41 + return ret; 42 + } 43 + 44 + return 0; 45 + } 46 + EXPORT_SYMBOL_GPL(cs47l15_patch); 47 + 48 + static const struct reg_default cs47l15_reg_default[] = { 49 + { 0x00000020, 0x0000 }, /* R32 (0x20) - Tone Generator 1 */ 50 + { 0x00000021, 0x1000 }, /* R33 (0x21) - Tone Generator 2 */ 51 + { 0x00000022, 0x0000 }, /* R34 (0x22) - Tone Generator 3 */ 52 + { 0x00000023, 0x1000 }, /* R35 (0x23) - Tone Generator 4 */ 53 + { 0x00000024, 0x0000 }, /* R36 (0x24) - Tone Generator 5 */ 54 + { 0x00000030, 0x0000 }, /* R48 (0x30) - PWM Drive 1 */ 55 + { 0x00000031, 0x0100 }, /* R49 (0x31) - PWM Drive 2 */ 56 + { 0x00000032, 0x0100 }, /* R50 (0x32) - PWM Drive 3 */ 57 + { 0x00000061, 0x01ff }, /* R97 (0x61) - Sample Rate Sequence Select 1 */ 58 + { 0x00000062, 0x01ff }, /* R98 (0x62) - Sample Rate Sequence Select 2 */ 59 + { 0x00000063, 0x01ff }, /* R99 (0x63) - Sample Rate Sequence Select 3 */ 60 + { 0x00000064, 0x01ff }, /* R100 (0x64) - Sample Rate Sequence Select 4 */ 61 + { 0x00000066, 0x01ff }, /* R102 (0x66) - Always On Triggers Sequence Select 1 */ 62 + { 0x00000067, 0x01ff }, /* R103 (0x67) - Always On Triggers Sequence Select 2 */ 63 + { 0x00000090, 0x0000 }, /* R144 (0x90) - Haptics Control 1 */ 64 + { 0x00000091, 0x7fff }, /* R145 (0x91) - Haptics Control 2 */ 65 + { 0x00000092, 0x0000 }, /* R146 (0x92) - Haptics Phase 1 Intensity */ 66 + { 0x00000093, 0x0000 }, /* R147 (0x93) - Haptics Phase 1 Duration */ 67 + { 0x00000094, 0x0000 }, /* R148 (0x94) - Haptics Phase 2 Intensity */ 68 + { 0x00000095, 0x0000 }, /* R149 (0x95) - Haptics Phase 2 Duration */ 69 + { 0x00000096, 0x0000 }, /* R150 (0x96) - Haptics Phase 3 Intensity */ 70 + { 0x00000097, 0x0000 }, /* R151 (0x97) - Haptics Phase 3 Duration */ 71 + { 0x000000a0, 0x0000 }, /* R160 (0xA0) - Comfort Noise Generator */ 72 + { 0x00000100, 0x0002 }, /* R256 (0x100) - Clock 32K 1 */ 73 + { 0x00000101, 0x0404 }, /* R257 (0x101) - System Clock 1 */ 74 + { 0x00000102, 0x0011 }, /* R258 (0x102) - Sample Rate 1 */ 75 + { 0x00000103, 0x0011 }, /* R259 (0x103) - Sample Rate 2 */ 76 + { 0x00000104, 0x0011 }, /* R260 (0x104) - Sample Rate 3 */ 77 + { 0x00000120, 0x0304 }, /* R288 (0x120) - DSP Clock 1 */ 78 + { 0x00000122, 0x0000 }, /* R290 (0x122) - DSP Clock 2 */ 79 + { 0x00000149, 0x0000 }, /* R329 (0x149) - Output System Clock */ 80 + { 0x00000152, 0x0000 }, /* R338 (0x152) - Rate Estimator 1 */ 81 + { 0x00000153, 0x0000 }, /* R339 (0x153) - Rate Estimator 2 */ 82 + { 0x00000154, 0x0000 }, /* R340 (0x154) - Rate Estimator 3 */ 83 + { 0x00000155, 0x0000 }, /* R341 (0x155) - Rate Estimator 4 */ 84 + { 0x00000156, 0x0000 }, /* R342 (0x156) - Rate Estimator 5 */ 85 + { 0x00000171, 0x0002 }, /* R369 (0x171) - FLL1 Control 1 */ 86 + { 0x00000172, 0x0008 }, /* R370 (0x172) - FLL1 Control 2 */ 87 + { 0x00000173, 0x0018 }, /* R371 (0x173) - FLL1 Control 3 */ 88 + { 0x00000174, 0x007d }, /* R372 (0x174) - FLL1 Control 4 */ 89 + { 0x00000175, 0x0000 }, /* R373 (0x175) - FLL1 Control 5 */ 90 + { 0x00000176, 0x0000 }, /* R374 (0x176) - FLL1 Control 6 */ 91 + { 0x00000177, 0x0281 }, /* R375 (0x177) - FLL1 Loop Filter Test 1 */ 92 + { 0x00000179, 0x0000 }, /* R377 (0x179) - FLL1 Control 7 */ 93 + { 0x0000017a, 0x2906 }, /* R378 (0x17A) - FLL1 EFS 2 */ 94 + { 0x00000181, 0x0000 }, /* R385 (0x181) - FLL1 Synchroniser 1 */ 95 + { 0x00000182, 0x0000 }, /* R386 (0x182) - FLL1 Synchroniser 2 */ 96 + { 0x00000183, 0x0000 }, /* R387 (0x183) - FLL1 Synchroniser 3 */ 97 + { 0x00000184, 0x0000 }, /* R388 (0x184) - FLL1 Synchroniser 4 */ 98 + { 0x00000185, 0x0000 }, /* R389 (0x185) - FLL1 Synchroniser 5 */ 99 + { 0x00000186, 0x0000 }, /* R390 (0x186) - FLL1 Synchroniser 6 */ 100 + { 0x00000187, 0x0001 }, /* R391 (0x187) - FLL1 Synchroniser 7 */ 101 + { 0x00000189, 0x0000 }, /* R393 (0x189) - FLL1 Spread Spectrum */ 102 + { 0x0000018a, 0x0004 }, /* R394 (0x18A) - FLL1 GPIO Clock */ 103 + { 0x000001d1, 0x0004 }, /* R465 (0x1D1) - FLL AO Control 1 */ 104 + { 0x000001d2, 0x0004 }, /* R466 (0x1D2) - FLL AO Control 2 */ 105 + { 0x000001d3, 0x0000 }, /* R467 (0x1D3) - FLL AO Control 3 */ 106 + { 0x000001d4, 0x0000 }, /* R468 (0x1D4) - FLL AO Control 4 */ 107 + { 0x000001d5, 0x0001 }, /* R469 (0x1D5) - FLL AO Control 5 */ 108 + { 0x000001d6, 0x8004 }, /* R470 (0x1D6) - FLL AO Control 6 */ 109 + { 0x000001d8, 0x0000 }, /* R472 (0x1D8) - FLL AO Control 7 */ 110 + { 0x000001da, 0x0077 }, /* R474 (0x1DA) - FLL AO Control 8 */ 111 + { 0x000001db, 0x0000 }, /* R475 (0x1DB) - FLL AO Control 9 */ 112 + { 0x000001dc, 0x06da }, /* R476 (0x1DC) - FLL AO Control 10 */ 113 + { 0x000001dd, 0x0011 }, /* R477 (0x1DD) - FLL AO Control 11 */ 114 + { 0x00000218, 0x00e6 }, /* R536 (0x218) - Mic Bias Ctrl 1 */ 115 + { 0x0000021c, 0x0222 }, /* R540 (0x21C) - Mic Bias Ctrl 5 */ 116 + { 0x00000299, 0x0000 }, /* R665 (0x299) - Headphone Detect 0 */ 117 + { 0x0000029b, 0x0000 }, /* R667 (0x29B) - Headphone Detect 1 */ 118 + { 0x000002a2, 0x0010 }, /* R674 (0x2A2) - Mic Detect 1 Control 0 */ 119 + { 0x000002a3, 0x1102 }, /* R675 (0x2A3) - Mic Detect 1 Control 1 */ 120 + { 0x000002a4, 0x009f }, /* R676 (0x2A4) - Mic Detect 1 Control 2 */ 121 + { 0x000002a6, 0x3d3d }, /* R678 (0x2A6) - Mic Detect 1 Level 1 */ 122 + { 0x000002a7, 0x3d3d }, /* R679 (0x2A7) - Mic Detect 1 Level 2 */ 123 + { 0x000002a8, 0x333d }, /* R680 (0x2A8) - Mic Detect 1 Level 3 */ 124 + { 0x000002a9, 0x202d }, /* R681 (0x2A9) - Mic Detect 1 Level 4 */ 125 + { 0x000002c6, 0x0010 }, /* R710 (0x2C6) - Micd Clamp Control */ 126 + { 0x000002c8, 0x0000 }, /* R712 (0x2C8) - GP Switch 1 */ 127 + { 0x000002d3, 0x0000 }, /* R723 (0x2D3) - Jack Detect Analogue */ 128 + { 0x00000300, 0x0000 }, /* R768 (0x300) - Input Enables */ 129 + { 0x00000308, 0x0000 }, /* R776 (0x308) - Input Rate */ 130 + { 0x00000309, 0x0022 }, /* R777 (0x309) - Input Volume Ramp */ 131 + { 0x0000030c, 0x0002 }, /* R780 (0x30C) - HPF Control */ 132 + { 0x00000310, 0x0080 }, /* R784 (0x310) - IN1L Control */ 133 + { 0x00000311, 0x0180 }, /* R785 (0x311) - ADC Digital Volume 1L */ 134 + { 0x00000312, 0x0500 }, /* R786 (0x312) - DMIC1L Control */ 135 + { 0x00000313, 0x0000 }, /* R787 (0x313) - IN1L Rate Control */ 136 + { 0x00000314, 0x0080 }, /* R788 (0x314) - IN1R Control */ 137 + { 0x00000315, 0x0180 }, /* R789 (0x315) - ADC Digital Volume 1R */ 138 + { 0x00000316, 0x0000 }, /* R790 (0x316) - DMIC1R Control */ 139 + { 0x00000317, 0x0000 }, /* R791 (0x317) - IN1R Rate Control */ 140 + { 0x00000318, 0x0000 }, /* R792 (0x318) - IN2L Control */ 141 + { 0x00000319, 0x0180 }, /* R793 (0x319) - ADC Digital Volume 2L */ 142 + { 0x0000031a, 0x0500 }, /* R794 (0x31A) - DMIC2L Control */ 143 + { 0x0000031b, 0x0000 }, /* R795 (0x31B) - IN2L Rate Control */ 144 + { 0x0000031c, 0x0800 }, /* R796 (0x31C) - IN2R Control */ 145 + { 0x0000031d, 0x0180 }, /* R797 (0x31D) - ADC Digital Volume 2R */ 146 + { 0x0000031e, 0x0000 }, /* R798 (0x31E) - DMIC2R Control */ 147 + { 0x0000031f, 0x0000 }, /* R799 (0x31F) - IN2R Rate Control */ 148 + { 0x000003a8, 0x2000 }, /* R936 (0x3A8) - CS47L15 ADC Int Bias */ 149 + { 0x000003c4, 0x0000 }, /* R964 (0x3C4) - CS47L15 PGA Bias Sel */ 150 + { 0x00000400, 0x0000 }, /* R1024 (0x400) - Output Enables 1 */ 151 + { 0x00000408, 0x0000 }, /* R1032 (0x408) - Output Rate 1 */ 152 + { 0x00000409, 0x0022 }, /* R1033 (0x409) - Output Volume Ramp */ 153 + { 0x00000410, 0x0080 }, /* R1040 (0x410) - Output Path Config 1L */ 154 + { 0x00000411, 0x0180 }, /* R1041 (0x411) - DAC Digital Volume 1L */ 155 + { 0x00000412, 0x0000 }, /* R1042 (0x412) - Output Path Config 1 */ 156 + { 0x00000413, 0x0001 }, /* R1043 (0x413) - Noise Gate Select 1L */ 157 + { 0x00000414, 0x0080 }, /* R1044 (0x414) - Output Path Config 1R */ 158 + { 0x00000415, 0x0180 }, /* R1045 (0x415) - DAC Digital Volume 1R */ 159 + { 0x00000417, 0x0002 }, /* R1047 (0x417) - Noise Gate Select 1R */ 160 + { 0x0000041a, 0x0600 }, /* R1050 (0x41A) - Output Path Config 2 */ 161 + { 0x00000428, 0x0000 }, /* R1064 (0x428) - Output Path Config 4L */ 162 + { 0x00000429, 0x0180 }, /* R1065 (0x429) - DAC Digital Volume 4L */ 163 + { 0x0000042b, 0x0040 }, /* R1067 (0x42B) - Noise Gate Select 4L */ 164 + { 0x00000430, 0x0000 }, /* R1072 (0x430) - Output Path Config 5L */ 165 + { 0x00000431, 0x0180 }, /* R1073 (0x431) - DAC Digital Volume 5L */ 166 + { 0x00000433, 0x0100 }, /* R1075 (0x433) - Noise Gate Select 5L */ 167 + { 0x00000434, 0x0000 }, /* R1076 (0x434) - Output Path Config 5R */ 168 + { 0x00000435, 0x0180 }, /* R1077 (0x435) - DAC Digital Volume 5R */ 169 + { 0x00000437, 0x0200 }, /* R1079 (0x437) - Noise Gate Select 5R */ 170 + { 0x00000450, 0x0000 }, /* R1104 (0x450) - DAC AEC Control 1 */ 171 + { 0x00000451, 0x0000 }, /* R1105 (0x451) - DAC AEC Control 2 */ 172 + { 0x00000458, 0x0000 }, /* R1112 (0x458) - Noise Gate Control */ 173 + { 0x00000490, 0x0069 }, /* R1168 (0x490) - PDM SPK1 Ctrl 1 */ 174 + { 0x00000491, 0x0000 }, /* R1169 (0x491) - PDM SPK1 Ctrl 2 */ 175 + { 0x000004a0, 0x3080 }, /* R1184 (0x4A0) - HP1 Short Circuit Ctrl */ 176 + { 0x000004a8, 0x6023 }, /* R1192 (0x4A8) - HP Test Ctrl 5 */ 177 + { 0x000004a9, 0x6023 }, /* R1193 (0x4A9) - HP Test Ctrl 6 */ 178 + { 0x00000500, 0x000c }, /* R1280 (0x500) - AIF1 BCLK Ctrl */ 179 + { 0x00000501, 0x0000 }, /* R1281 (0x501) - AIF1 Tx Pin Ctrl */ 180 + { 0x00000502, 0x0000 }, /* R1282 (0x502) - AIF1 Rx Pin Ctrl */ 181 + { 0x00000503, 0x0000 }, /* R1283 (0x503) - AIF1 Rate Ctrl */ 182 + { 0x00000504, 0x0000 }, /* R1284 (0x504) - AIF1 Format */ 183 + { 0x00000506, 0x0040 }, /* R1286 (0x506) - AIF1 Rx BCLK Rate */ 184 + { 0x00000507, 0x1818 }, /* R1287 (0x507) - AIF1 Frame Ctrl 1 */ 185 + { 0x00000508, 0x1818 }, /* R1288 (0x508) - AIF1 Frame Ctrl 2 */ 186 + { 0x00000509, 0x0000 }, /* R1289 (0x509) - AIF1 Frame Ctrl 3 */ 187 + { 0x0000050a, 0x0001 }, /* R1290 (0x50A) - AIF1 Frame Ctrl 4 */ 188 + { 0x0000050b, 0x0002 }, /* R1291 (0x50B) - AIF1 Frame Ctrl 5 */ 189 + { 0x0000050c, 0x0003 }, /* R1292 (0x50C) - AIF1 Frame Ctrl 6 */ 190 + { 0x0000050d, 0x0004 }, /* R1293 (0x50D) - AIF1 Frame Ctrl 7 */ 191 + { 0x0000050e, 0x0005 }, /* R1294 (0x50E) - AIF1 Frame Ctrl 8 */ 192 + { 0x00000511, 0x0000 }, /* R1297 (0x511) - AIF1 Frame Ctrl 11 */ 193 + { 0x00000512, 0x0001 }, /* R1298 (0x512) - AIF1 Frame Ctrl 12 */ 194 + { 0x00000513, 0x0002 }, /* R1299 (0x513) - AIF1 Frame Ctrl 13 */ 195 + { 0x00000514, 0x0003 }, /* R1300 (0x514) - AIF1 Frame Ctrl 14 */ 196 + { 0x00000515, 0x0004 }, /* R1301 (0x515) - AIF1 Frame Ctrl 15 */ 197 + { 0x00000516, 0x0005 }, /* R1302 (0x516) - AIF1 Frame Ctrl 16 */ 198 + { 0x00000519, 0x0000 }, /* R1305 (0x519) - AIF1 Tx Enables */ 199 + { 0x0000051a, 0x0000 }, /* R1306 (0x51A) - AIF1 Rx Enables */ 200 + { 0x00000540, 0x000c }, /* R1344 (0x540) - AIF2 BCLK Ctrl */ 201 + { 0x00000541, 0x0000 }, /* R1345 (0x541) - AIF2 Tx Pin Ctrl */ 202 + { 0x00000542, 0x0000 }, /* R1346 (0x542) - AIF2 Rx Pin Ctrl */ 203 + { 0x00000543, 0x0000 }, /* R1347 (0x543) - AIF2 Rate Ctrl */ 204 + { 0x00000544, 0x0000 }, /* R1348 (0x544) - AIF2 Format */ 205 + { 0x00000546, 0x0040 }, /* R1350 (0x546) - AIF2 Rx BCLK Rate */ 206 + { 0x00000547, 0x1818 }, /* R1351 (0x547) - AIF2 Frame Ctrl 1 */ 207 + { 0x00000548, 0x1818 }, /* R1352 (0x548) - AIF2 Frame Ctrl 2 */ 208 + { 0x00000549, 0x0000 }, /* R1353 (0x549) - AIF2 Frame Ctrl 3 */ 209 + { 0x0000054a, 0x0001 }, /* R1354 (0x54A) - AIF2 Frame Ctrl 4 */ 210 + { 0x0000054b, 0x0002 }, /* R1355 (0x54B) - AIF2 Frame Ctrl 5 */ 211 + { 0x0000054c, 0x0003 }, /* R1356 (0x54C) - AIF2 Frame Ctrl 6 */ 212 + { 0x00000551, 0x0000 }, /* R1361 (0x551) - AIF2 Frame Ctrl 11 */ 213 + { 0x00000552, 0x0001 }, /* R1362 (0x552) - AIF2 Frame Ctrl 12 */ 214 + { 0x00000553, 0x0002 }, /* R1363 (0x553) - AIF2 Frame Ctrl 13 */ 215 + { 0x00000554, 0x0003 }, /* R1364 (0x554) - AIF2 Frame Ctrl 14 */ 216 + { 0x00000559, 0x0000 }, /* R1369 (0x559) - AIF2 Tx Enables */ 217 + { 0x0000055a, 0x0000 }, /* R1370 (0x55A) - AIF2 Rx Enables */ 218 + { 0x00000580, 0x000c }, /* R1408 (0x580) - AIF3 BCLK Ctrl */ 219 + { 0x00000581, 0x0000 }, /* R1409 (0x581) - AIF3 Tx Pin Ctrl */ 220 + { 0x00000582, 0x0000 }, /* R1410 (0x582) - AIF3 Rx Pin Ctrl */ 221 + { 0x00000583, 0x0000 }, /* R1411 (0x583) - AIF3 Rate Ctrl */ 222 + { 0x00000584, 0x0000 }, /* R1412 (0x584) - AIF3 Format */ 223 + { 0x00000586, 0x0040 }, /* R1414 (0x586) - AIF3 Rx BCLK Rate */ 224 + { 0x00000587, 0x1818 }, /* R1415 (0x587) - AIF3 Frame Ctrl 1 */ 225 + { 0x00000588, 0x1818 }, /* R1416 (0x588) - AIF3 Frame Ctrl 2 */ 226 + { 0x00000589, 0x0000 }, /* R1417 (0x589) - AIF3 Frame Ctrl 3 */ 227 + { 0x0000058a, 0x0001 }, /* R1418 (0x58A) - AIF3 Frame Ctrl 4 */ 228 + { 0x00000591, 0x0000 }, /* R1425 (0x591) - AIF3 Frame Ctrl 11 */ 229 + { 0x00000592, 0x0001 }, /* R1426 (0x592) - AIF3 Frame Ctrl 12 */ 230 + { 0x00000599, 0x0000 }, /* R1433 (0x599) - AIF3 Tx Enables */ 231 + { 0x0000059a, 0x0000 }, /* R1434 (0x59A) - AIF3 Rx Enables */ 232 + { 0x000005c2, 0x0000 }, /* R1474 (0x5C2) - SPD1 Tx Control */ 233 + { 0x00000640, 0x0000 }, /* R1600 (0x640) - PWM1MIX Input 1 Source */ 234 + { 0x00000641, 0x0080 }, /* R1601 (0x641) - PWM1MIX Input 1 Volume */ 235 + { 0x00000642, 0x0000 }, /* R1602 (0x642) - PWM1MIX Input 2 Source */ 236 + { 0x00000643, 0x0080 }, /* R1603 (0x643) - PWM1MIX Input 2 Volume */ 237 + { 0x00000644, 0x0000 }, /* R1604 (0x644) - PWM1MIX Input 3 Source */ 238 + { 0x00000645, 0x0080 }, /* R1605 (0x645) - PWM1MIX Input 3 Volume */ 239 + { 0x00000646, 0x0000 }, /* R1606 (0x646) - PWM1MIX Input 4 Source */ 240 + { 0x00000647, 0x0080 }, /* R1607 (0x647) - PWM1MIX Input 4 Volume */ 241 + { 0x00000648, 0x0000 }, /* R1608 (0x648) - PWM2MIX Input 1 Source */ 242 + { 0x00000649, 0x0080 }, /* R1609 (0x649) - PWM2MIX Input 1 Volume */ 243 + { 0x0000064a, 0x0000 }, /* R1610 (0x64A) - PWM2MIX Input 2 Source */ 244 + { 0x0000064b, 0x0080 }, /* R1611 (0x64B) - PWM2MIX Input 2 Volume */ 245 + { 0x0000064c, 0x0000 }, /* R1612 (0x64C) - PWM2MIX Input 3 Source */ 246 + { 0x0000064d, 0x0080 }, /* R1613 (0x64D) - PWM2MIX Input 3 Volume */ 247 + { 0x0000064e, 0x0000 }, /* R1614 (0x64E) - PWM2MIX Input 4 Source */ 248 + { 0x0000064f, 0x0080 }, /* R1615 (0x64F) - PWM2MIX Input 4 Volume */ 249 + { 0x00000680, 0x0000 }, /* R1664 (0x680) - OUT1LMIX Input 1 Source */ 250 + { 0x00000681, 0x0080 }, /* R1665 (0x681) - OUT1LMIX Input 1 Volume */ 251 + { 0x00000682, 0x0000 }, /* R1666 (0x682) - OUT1LMIX Input 2 Source */ 252 + { 0x00000683, 0x0080 }, /* R1667 (0x683) - OUT1LMIX Input 2 Volume */ 253 + { 0x00000684, 0x0000 }, /* R1668 (0x684) - OUT1LMIX Input 3 Source */ 254 + { 0x00000685, 0x0080 }, /* R1669 (0x685) - OUT1LMIX Input 3 Volume */ 255 + { 0x00000686, 0x0000 }, /* R1670 (0x686) - OUT1LMIX Input 4 Source */ 256 + { 0x00000687, 0x0080 }, /* R1671 (0x687) - OUT1LMIX Input 4 Volume */ 257 + { 0x00000688, 0x0000 }, /* R1672 (0x688) - OUT1RMIX Input 1 Source */ 258 + { 0x00000689, 0x0080 }, /* R1673 (0x689) - OUT1RMIX Input 1 Volume */ 259 + { 0x0000068a, 0x0000 }, /* R1674 (0x68A) - OUT1RMIX Input 2 Source */ 260 + { 0x0000068b, 0x0080 }, /* R1675 (0x68B) - OUT1RMIX Input 2 Volume */ 261 + { 0x0000068c, 0x0000 }, /* R1676 (0x68C) - OUT1RMIX Input 3 Source */ 262 + { 0x0000068d, 0x0080 }, /* R1677 (0x68D) - OUT1RMIX Input 3 Volume */ 263 + { 0x0000068e, 0x0000 }, /* R1678 (0x68E) - OUT1RMIX Input 4 Source */ 264 + { 0x0000068f, 0x0080 }, /* R1679 (0x68F) - OUT1RMIX Input 4 Volume */ 265 + { 0x000006b0, 0x0000 }, /* R1712 (0x6B0) - OUT4LMIX Input 1 Source */ 266 + { 0x000006b1, 0x0080 }, /* R1713 (0x6B1) - OUT4LMIX Input 1 Volume */ 267 + { 0x000006b2, 0x0000 }, /* R1714 (0x6B2) - OUT4LMIX Input 2 Source */ 268 + { 0x000006b3, 0x0080 }, /* R1715 (0x6B3) - OUT4LMIX Input 2 Volume */ 269 + { 0x000006b4, 0x0000 }, /* R1716 (0x6B4) - OUT4LMIX Input 3 Source */ 270 + { 0x000006b5, 0x0080 }, /* R1717 (0x6B5) - OUT4LMIX Input 3 Volume */ 271 + { 0x000006b6, 0x0000 }, /* R1718 (0x6B6) - OUT4LMIX Input 4 Source */ 272 + { 0x000006b7, 0x0080 }, /* R1719 (0x6B7) - OUT4LMIX Input 4 Volume */ 273 + { 0x000006c0, 0x0000 }, /* R1728 (0x6C0) - OUT5LMIX Input 1 Source */ 274 + { 0x000006c1, 0x0080 }, /* R1729 (0x6C1) - OUT5LMIX Input 1 Volume */ 275 + { 0x000006c2, 0x0000 }, /* R1730 (0x6C2) - OUT5LMIX Input 2 Source */ 276 + { 0x000006c3, 0x0080 }, /* R1731 (0x6C3) - OUT5LMIX Input 2 Volume */ 277 + { 0x000006c4, 0x0000 }, /* R1732 (0x6C4) - OUT5LMIX Input 3 Source */ 278 + { 0x000006c5, 0x0080 }, /* R1733 (0x6C5) - OUT5LMIX Input 3 Volume */ 279 + { 0x000006c6, 0x0000 }, /* R1734 (0x6C6) - OUT5LMIX Input 4 Source */ 280 + { 0x000006c7, 0x0080 }, /* R1735 (0x6C7) - OUT5LMIX Input 4 Volume */ 281 + { 0x000006c8, 0x0000 }, /* R1736 (0x6C8) - OUT5RMIX Input 1 Source */ 282 + { 0x000006c9, 0x0080 }, /* R1737 (0x6C9) - OUT5RMIX Input 1 Volume */ 283 + { 0x000006ca, 0x0000 }, /* R1738 (0x6CA) - OUT5RMIX Input 2 Source */ 284 + { 0x000006cb, 0x0080 }, /* R1739 (0x6CB) - OUT5RMIX Input 2 Volume */ 285 + { 0x000006cc, 0x0000 }, /* R1740 (0x6CC) - OUT5RMIX Input 3 Source */ 286 + { 0x000006cd, 0x0080 }, /* R1741 (0x6CD) - OUT5RMIX Input 3 Volume */ 287 + { 0x000006ce, 0x0000 }, /* R1742 (0x6CE) - OUT5RMIX Input 4 Source */ 288 + { 0x000006cf, 0x0080 }, /* R1743 (0x6CF) - OUT5RMIX Input 4 Volume */ 289 + { 0x00000700, 0x0000 }, /* R1792 (0x700) - AIF1TX1MIX Input 1 Source */ 290 + { 0x00000701, 0x0080 }, /* R1793 (0x701) - AIF1TX1MIX Input 1 Volume */ 291 + { 0x00000702, 0x0000 }, /* R1794 (0x702) - AIF1TX1MIX Input 2 Source */ 292 + { 0x00000703, 0x0080 }, /* R1795 (0x703) - AIF1TX1MIX Input 2 Volume */ 293 + { 0x00000704, 0x0000 }, /* R1796 (0x704) - AIF1TX1MIX Input 3 Source */ 294 + { 0x00000705, 0x0080 }, /* R1797 (0x705) - AIF1TX1MIX Input 3 Volume */ 295 + { 0x00000706, 0x0000 }, /* R1798 (0x706) - AIF1TX1MIX Input 4 Source */ 296 + { 0x00000707, 0x0080 }, /* R1799 (0x707) - AIF1TX1MIX Input 4 Volume */ 297 + { 0x00000708, 0x0000 }, /* R1800 (0x708) - AIF1TX2MIX Input 1 Source */ 298 + { 0x00000709, 0x0080 }, /* R1801 (0x709) - AIF1TX2MIX Input 1 Volume */ 299 + { 0x0000070a, 0x0000 }, /* R1802 (0x70A) - AIF1TX2MIX Input 2 Source */ 300 + { 0x0000070b, 0x0080 }, /* R1803 (0x70B) - AIF1TX2MIX Input 2 Volume */ 301 + { 0x0000070c, 0x0000 }, /* R1804 (0x70C) - AIF1TX2MIX Input 3 Source */ 302 + { 0x0000070d, 0x0080 }, /* R1805 (0x70D) - AIF1TX2MIX Input 3 Volume */ 303 + { 0x0000070e, 0x0000 }, /* R1806 (0x70E) - AIF1TX2MIX Input 4 Source */ 304 + { 0x0000070f, 0x0080 }, /* R1807 (0x70F) - AIF1TX2MIX Input 4 Volume */ 305 + { 0x00000710, 0x0000 }, /* R1808 (0x710) - AIF1TX3MIX Input 1 Source */ 306 + { 0x00000711, 0x0080 }, /* R1809 (0x711) - AIF1TX3MIX Input 1 Volume */ 307 + { 0x00000712, 0x0000 }, /* R1810 (0x712) - AIF1TX3MIX Input 2 Source */ 308 + { 0x00000713, 0x0080 }, /* R1811 (0x713) - AIF1TX3MIX Input 2 Volume */ 309 + { 0x00000714, 0x0000 }, /* R1812 (0x714) - AIF1TX3MIX Input 3 Source */ 310 + { 0x00000715, 0x0080 }, /* R1813 (0x715) - AIF1TX3MIX Input 3 Volume */ 311 + { 0x00000716, 0x0000 }, /* R1814 (0x716) - AIF1TX3MIX Input 4 Source */ 312 + { 0x00000717, 0x0080 }, /* R1815 (0x717) - AIF1TX3MIX Input 4 Volume */ 313 + { 0x00000718, 0x0000 }, /* R1816 (0x718) - AIF1TX4MIX Input 1 Source */ 314 + { 0x00000719, 0x0080 }, /* R1817 (0x719) - AIF1TX4MIX Input 1 Volume */ 315 + { 0x0000071a, 0x0000 }, /* R1818 (0x71A) - AIF1TX4MIX Input 2 Source */ 316 + { 0x0000071b, 0x0080 }, /* R1819 (0x71B) - AIF1TX4MIX Input 2 Volume */ 317 + { 0x0000071c, 0x0000 }, /* R1820 (0x71C) - AIF1TX4MIX Input 3 Source */ 318 + { 0x0000071d, 0x0080 }, /* R1821 (0x71D) - AIF1TX4MIX Input 3 Volume */ 319 + { 0x0000071e, 0x0000 }, /* R1822 (0x71E) - AIF1TX4MIX Input 4 Source */ 320 + { 0x0000071f, 0x0080 }, /* R1823 (0x71F) - AIF1TX4MIX Input 4 Volume */ 321 + { 0x00000720, 0x0000 }, /* R1824 (0x720) - AIF1TX5MIX Input 1 Source */ 322 + { 0x00000721, 0x0080 }, /* R1825 (0x721) - AIF1TX5MIX Input 1 Volume */ 323 + { 0x00000722, 0x0000 }, /* R1826 (0x722) - AIF1TX5MIX Input 2 Source */ 324 + { 0x00000723, 0x0080 }, /* R1827 (0x723) - AIF1TX5MIX Input 2 Volume */ 325 + { 0x00000724, 0x0000 }, /* R1828 (0x724) - AIF1TX5MIX Input 3 Source */ 326 + { 0x00000725, 0x0080 }, /* R1829 (0x725) - AIF1TX5MIX Input 3 Volume */ 327 + { 0x00000726, 0x0000 }, /* R1830 (0x726) - AIF1TX5MIX Input 4 Source */ 328 + { 0x00000727, 0x0080 }, /* R1831 (0x727) - AIF1TX5MIX Input 4 Volume */ 329 + { 0x00000728, 0x0000 }, /* R1832 (0x728) - AIF1TX6MIX Input 1 Source */ 330 + { 0x00000729, 0x0080 }, /* R1833 (0x729) - AIF1TX6MIX Input 1 Volume */ 331 + { 0x0000072a, 0x0000 }, /* R1834 (0x72A) - AIF1TX6MIX Input 2 Source */ 332 + { 0x0000072b, 0x0080 }, /* R1835 (0x72B) - AIF1TX6MIX Input 2 Volume */ 333 + { 0x0000072c, 0x0000 }, /* R1836 (0x72C) - AIF1TX6MIX Input 3 Source */ 334 + { 0x0000072d, 0x0080 }, /* R1837 (0x72D) - AIF1TX6MIX Input 3 Volume */ 335 + { 0x0000072e, 0x0000 }, /* R1838 (0x72E) - AIF1TX6MIX Input 4 Source */ 336 + { 0x0000072f, 0x0080 }, /* R1839 (0x72F) - AIF1TX6MIX Input 4 Volume */ 337 + { 0x00000740, 0x0000 }, /* R1856 (0x740) - AIF2TX1MIX Input 1 Source */ 338 + { 0x00000741, 0x0080 }, /* R1857 (0x741) - AIF2TX1MIX Input 1 Volume */ 339 + { 0x00000742, 0x0000 }, /* R1858 (0x742) - AIF2TX1MIX Input 2 Source */ 340 + { 0x00000743, 0x0080 }, /* R1859 (0x743) - AIF2TX1MIX Input 2 Volume */ 341 + { 0x00000744, 0x0000 }, /* R1860 (0x744) - AIF2TX1MIX Input 3 Source */ 342 + { 0x00000745, 0x0080 }, /* R1861 (0x745) - AIF2TX1MIX Input 3 Volume */ 343 + { 0x00000746, 0x0000 }, /* R1862 (0x746) - AIF2TX1MIX Input 4 Source */ 344 + { 0x00000747, 0x0080 }, /* R1863 (0x747) - AIF2TX1MIX Input 4 Volume */ 345 + { 0x00000748, 0x0000 }, /* R1864 (0x748) - AIF2TX2MIX Input 1 Source */ 346 + { 0x00000749, 0x0080 }, /* R1865 (0x749) - AIF2TX2MIX Input 1 Volume */ 347 + { 0x0000074a, 0x0000 }, /* R1866 (0x74A) - AIF2TX2MIX Input 2 Source */ 348 + { 0x0000074b, 0x0080 }, /* R1867 (0x74B) - AIF2TX2MIX Input 2 Volume */ 349 + { 0x0000074c, 0x0000 }, /* R1868 (0x74C) - AIF2TX2MIX Input 3 Source */ 350 + { 0x0000074d, 0x0080 }, /* R1869 (0x74D) - AIF2TX2MIX Input 3 Volume */ 351 + { 0x0000074e, 0x0000 }, /* R1870 (0x74E) - AIF2TX2MIX Input 4 Source */ 352 + { 0x0000074f, 0x0080 }, /* R1871 (0x74F) - AIF2TX2MIX Input 4 Volume */ 353 + { 0x00000750, 0x0000 }, /* R1872 (0x750) - AIF2TX3MIX Input 1 Source */ 354 + { 0x00000751, 0x0080 }, /* R1873 (0x751) - AIF2TX3MIX Input 1 Volume */ 355 + { 0x00000752, 0x0000 }, /* R1874 (0x752) - AIF2TX3MIX Input 2 Source */ 356 + { 0x00000753, 0x0080 }, /* R1875 (0x753) - AIF2TX3MIX Input 2 Volume */ 357 + { 0x00000754, 0x0000 }, /* R1876 (0x754) - AIF2TX3MIX Input 3 Source */ 358 + { 0x00000755, 0x0080 }, /* R1877 (0x755) - AIF2TX3MIX Input 3 Volume */ 359 + { 0x00000756, 0x0000 }, /* R1878 (0x756) - AIF2TX3MIX Input 4 Source */ 360 + { 0x00000757, 0x0080 }, /* R1879 (0x757) - AIF2TX3MIX Input 4 Volume */ 361 + { 0x00000758, 0x0000 }, /* R1880 (0x758) - AIF2TX4MIX Input 1 Source */ 362 + { 0x00000759, 0x0080 }, /* R1881 (0x759) - AIF2TX4MIX Input 1 Volume */ 363 + { 0x0000075a, 0x0000 }, /* R1882 (0x75A) - AIF2TX4MIX Input 2 Source */ 364 + { 0x0000075b, 0x0080 }, /* R1883 (0x75B) - AIF2TX4MIX Input 2 Volume */ 365 + { 0x0000075c, 0x0000 }, /* R1884 (0x75C) - AIF2TX4MIX Input 3 Source */ 366 + { 0x0000075d, 0x0080 }, /* R1885 (0x75D) - AIF2TX4MIX Input 3 Volume */ 367 + { 0x0000075e, 0x0000 }, /* R1886 (0x75E) - AIF2TX4MIX Input 4 Source */ 368 + { 0x0000075f, 0x0080 }, /* R1887 (0x75F) - AIF2TX4MIX Input 4 Volume */ 369 + { 0x00000780, 0x0000 }, /* R1920 (0x780) - AIF3TX1MIX Input 1 Source */ 370 + { 0x00000781, 0x0080 }, /* R1921 (0x781) - AIF3TX1MIX Input 1 Volume */ 371 + { 0x00000782, 0x0000 }, /* R1922 (0x782) - AIF3TX1MIX Input 2 Source */ 372 + { 0x00000783, 0x0080 }, /* R1923 (0x783) - AIF3TX1MIX Input 2 Volume */ 373 + { 0x00000784, 0x0000 }, /* R1924 (0x784) - AIF3TX1MIX Input 3 Source */ 374 + { 0x00000785, 0x0080 }, /* R1925 (0x785) - AIF3TX1MIX Input 3 Volume */ 375 + { 0x00000786, 0x0000 }, /* R1926 (0x786) - AIF3TX1MIX Input 4 Source */ 376 + { 0x00000787, 0x0080 }, /* R1927 (0x787) - AIF3TX1MIX Input 4 Volume */ 377 + { 0x00000788, 0x0000 }, /* R1928 (0x788) - AIF3TX2MIX Input 1 Source */ 378 + { 0x00000789, 0x0080 }, /* R1929 (0x789) - AIF3TX2MIX Input 1 Volume */ 379 + { 0x0000078a, 0x0000 }, /* R1930 (0x78A) - AIF3TX2MIX Input 2 Source */ 380 + { 0x0000078b, 0x0080 }, /* R1931 (0x78B) - AIF3TX2MIX Input 2 Volume */ 381 + { 0x0000078c, 0x0000 }, /* R1932 (0x78C) - AIF3TX2MIX Input 3 Source */ 382 + { 0x0000078d, 0x0080 }, /* R1933 (0x78D) - AIF3TX2MIX Input 3 Volume */ 383 + { 0x0000078e, 0x0000 }, /* R1934 (0x78E) - AIF3TX2MIX Input 4 Source */ 384 + { 0x0000078f, 0x0080 }, /* R1935 (0x78F) - AIF3TX2MIX Input 4 Volume */ 385 + { 0x00000800, 0x0000 }, /* R2048 (0x800) - SPDIF1TX1MIX Input 1 Source */ 386 + { 0x00000801, 0x0080 }, /* R2049 (0x801) - SPDIF1TX1MIX Input 1 Volume */ 387 + { 0x00000808, 0x0000 }, /* R2056 (0x808) - SPDIF1TX2MIX Input 1 Source */ 388 + { 0x00000809, 0x0080 }, /* R2057 (0x809) - SPDIF1TX2MIX Input 1 Volume */ 389 + { 0x00000880, 0x0000 }, /* R2176 (0x880) - EQ1MIX Input 1 Source */ 390 + { 0x00000881, 0x0080 }, /* R2177 (0x881) - EQ1MIX Input 1 Volume */ 391 + { 0x00000882, 0x0000 }, /* R2178 (0x882) - EQ1MIX Input 2 Source */ 392 + { 0x00000883, 0x0080 }, /* R2179 (0x883) - EQ1MIX Input 2 Volume */ 393 + { 0x00000884, 0x0000 }, /* R2180 (0x884) - EQ1MIX Input 3 Source */ 394 + { 0x00000885, 0x0080 }, /* R2181 (0x885) - EQ1MIX Input 3 Volume */ 395 + { 0x00000886, 0x0000 }, /* R2182 (0x886) - EQ1MIX Input 4 Source */ 396 + { 0x00000887, 0x0080 }, /* R2183 (0x887) - EQ1MIX Input 4 Volume */ 397 + { 0x00000888, 0x0000 }, /* R2184 (0x888) - EQ2MIX Input 1 Source */ 398 + { 0x00000889, 0x0080 }, /* R2185 (0x889) - EQ2MIX Input 1 Volume */ 399 + { 0x0000088a, 0x0000 }, /* R2186 (0x88A) - EQ2MIX Input 2 Source */ 400 + { 0x0000088b, 0x0080 }, /* R2187 (0x88B) - EQ2MIX Input 2 Volume */ 401 + { 0x0000088c, 0x0000 }, /* R2188 (0x88C) - EQ2MIX Input 3 Source */ 402 + { 0x0000088d, 0x0080 }, /* R2189 (0x88D) - EQ2MIX Input 3 Volume */ 403 + { 0x0000088e, 0x0000 }, /* R2190 (0x88E) - EQ2MIX Input 4 Source */ 404 + { 0x0000088f, 0x0080 }, /* R2191 (0x88F) - EQ2MIX Input 4 Volume */ 405 + { 0x00000890, 0x0000 }, /* R2192 (0x890) - EQ3MIX Input 1 Source */ 406 + { 0x00000891, 0x0080 }, /* R2193 (0x891) - EQ3MIX Input 1 Volume */ 407 + { 0x00000892, 0x0000 }, /* R2194 (0x892) - EQ3MIX Input 2 Source */ 408 + { 0x00000893, 0x0080 }, /* R2195 (0x893) - EQ3MIX Input 2 Volume */ 409 + { 0x00000894, 0x0000 }, /* R2196 (0x894) - EQ3MIX Input 3 Source */ 410 + { 0x00000895, 0x0080 }, /* R2197 (0x895) - EQ3MIX Input 3 Volume */ 411 + { 0x00000896, 0x0000 }, /* R2198 (0x896) - EQ3MIX Input 4 Source */ 412 + { 0x00000897, 0x0080 }, /* R2199 (0x897) - EQ3MIX Input 4 Volume */ 413 + { 0x00000898, 0x0000 }, /* R2200 (0x898) - EQ4MIX Input 1 Source */ 414 + { 0x00000899, 0x0080 }, /* R2201 (0x899) - EQ4MIX Input 1 Volume */ 415 + { 0x0000089a, 0x0000 }, /* R2202 (0x89A) - EQ4MIX Input 2 Source */ 416 + { 0x0000089b, 0x0080 }, /* R2203 (0x89B) - EQ4MIX Input 2 Volume */ 417 + { 0x0000089c, 0x0000 }, /* R2204 (0x89C) - EQ4MIX Input 3 Source */ 418 + { 0x0000089d, 0x0080 }, /* R2205 (0x89D) - EQ4MIX Input 3 Volume */ 419 + { 0x0000089e, 0x0000 }, /* R2206 (0x89E) - EQ4MIX Input 4 Source */ 420 + { 0x0000089f, 0x0080 }, /* R2207 (0x89F) - EQ4MIX Input 4 Volume */ 421 + { 0x000008c0, 0x0000 }, /* R2240 (0x8C0) - DRC1LMIX Input 1 Source */ 422 + { 0x000008c1, 0x0080 }, /* R2241 (0x8C1) - DRC1LMIX Input 1 Volume */ 423 + { 0x000008c2, 0x0000 }, /* R2242 (0x8C2) - DRC1LMIX Input 2 Source */ 424 + { 0x000008c3, 0x0080 }, /* R2243 (0x8C3) - DRC1LMIX Input 2 Volume */ 425 + { 0x000008c4, 0x0000 }, /* R2244 (0x8C4) - DRC1LMIX Input 3 Source */ 426 + { 0x000008c5, 0x0080 }, /* R2245 (0x8C5) - DRC1LMIX Input 3 Volume */ 427 + { 0x000008c6, 0x0000 }, /* R2246 (0x8C6) - DRC1LMIX Input 4 Source */ 428 + { 0x000008c7, 0x0080 }, /* R2247 (0x8C7) - DRC1LMIX Input 4 Volume */ 429 + { 0x000008c8, 0x0000 }, /* R2248 (0x8C8) - DRC1RMIX Input 1 Source */ 430 + { 0x000008c9, 0x0080 }, /* R2249 (0x8C9) - DRC1RMIX Input 1 Volume */ 431 + { 0x000008ca, 0x0000 }, /* R2250 (0x8CA) - DRC1RMIX Input 2 Source */ 432 + { 0x000008cb, 0x0080 }, /* R2251 (0x8CB) - DRC1RMIX Input 2 Volume */ 433 + { 0x000008cc, 0x0000 }, /* R2252 (0x8CC) - DRC1RMIX Input 3 Source */ 434 + { 0x000008cd, 0x0080 }, /* R2253 (0x8CD) - DRC1RMIX Input 3 Volume */ 435 + { 0x000008ce, 0x0000 }, /* R2254 (0x8CE) - DRC1RMIX Input 4 Source */ 436 + { 0x000008cf, 0x0080 }, /* R2255 (0x8CF) - DRC1RMIX Input 4 Volume */ 437 + { 0x000008d0, 0x0000 }, /* R2256 (0x8D0) - DRC2LMIX Input 1 Source */ 438 + { 0x000008d1, 0x0080 }, /* R2257 (0x8D1) - DRC2LMIX Input 1 Volume */ 439 + { 0x000008d2, 0x0000 }, /* R2258 (0x8D2) - DRC2LMIX Input 2 Source */ 440 + { 0x000008d3, 0x0080 }, /* R2259 (0x8D3) - DRC2LMIX Input 2 Volume */ 441 + { 0x000008d4, 0x0000 }, /* R2260 (0x8D4) - DRC2LMIX Input 3 Source */ 442 + { 0x000008d5, 0x0080 }, /* R2261 (0x8D5) - DRC2LMIX Input 3 Volume */ 443 + { 0x000008d6, 0x0000 }, /* R2262 (0x8D6) - DRC2LMIX Input 4 Source */ 444 + { 0x000008d7, 0x0080 }, /* R2263 (0x8D7) - DRC2LMIX Input 4 Volume */ 445 + { 0x000008d8, 0x0000 }, /* R2264 (0x8D8) - DRC2RMIX Input 1 Source */ 446 + { 0x000008d9, 0x0080 }, /* R2265 (0x8D9) - DRC2RMIX Input 1 Volume */ 447 + { 0x000008da, 0x0000 }, /* R2266 (0x8DA) - DRC2RMIX Input 2 Source */ 448 + { 0x000008db, 0x0080 }, /* R2267 (0x8DB) - DRC2RMIX Input 2 Volume */ 449 + { 0x000008dc, 0x0000 }, /* R2268 (0x8DC) - DRC2RMIX Input 3 Source */ 450 + { 0x000008dd, 0x0080 }, /* R2269 (0x8DD) - DRC2RMIX Input 3 Volume */ 451 + { 0x000008de, 0x0000 }, /* R2270 (0x8DE) - DRC2RMIX Input 4 Source */ 452 + { 0x000008df, 0x0080 }, /* R2271 (0x8DF) - DRC2RMIX Input 4 Volume */ 453 + { 0x00000900, 0x0000 }, /* R2304 (0x900) - HPLP1MIX Input 1 Source */ 454 + { 0x00000901, 0x0080 }, /* R2305 (0x901) - HPLP1MIX Input 1 Volume */ 455 + { 0x00000902, 0x0000 }, /* R2306 (0x902) - HPLP1MIX Input 2 Source */ 456 + { 0x00000903, 0x0080 }, /* R2307 (0x903) - HPLP1MIX Input 2 Volume */ 457 + { 0x00000904, 0x0000 }, /* R2308 (0x904) - HPLP1MIX Input 3 Source */ 458 + { 0x00000905, 0x0080 }, /* R2309 (0x905) - HPLP1MIX Input 3 Volume */ 459 + { 0x00000906, 0x0000 }, /* R2310 (0x906) - HPLP1MIX Input 4 Source */ 460 + { 0x00000907, 0x0080 }, /* R2311 (0x907) - HPLP1MIX Input 4 Volume */ 461 + { 0x00000908, 0x0000 }, /* R2312 (0x908) - HPLP2MIX Input 1 Source */ 462 + { 0x00000909, 0x0080 }, /* R2313 (0x909) - HPLP2MIX Input 1 Volume */ 463 + { 0x0000090a, 0x0000 }, /* R2314 (0x90A) - HPLP2MIX Input 2 Source */ 464 + { 0x0000090b, 0x0080 }, /* R2315 (0x90B) - HPLP2MIX Input 2 Volume */ 465 + { 0x0000090c, 0x0000 }, /* R2316 (0x90C) - HPLP2MIX Input 3 Source */ 466 + { 0x0000090d, 0x0080 }, /* R2317 (0x90D) - HPLP2MIX Input 3 Volume */ 467 + { 0x0000090e, 0x0000 }, /* R2318 (0x90E) - HPLP2MIX Input 4 Source */ 468 + { 0x0000090f, 0x0080 }, /* R2319 (0x90F) - HPLP2MIX Input 4 Volume */ 469 + { 0x00000910, 0x0000 }, /* R2320 (0x910) - HPLP3MIX Input 1 Source */ 470 + { 0x00000911, 0x0080 }, /* R2321 (0x911) - HPLP3MIX Input 1 Volume */ 471 + { 0x00000912, 0x0000 }, /* R2322 (0x912) - HPLP3MIX Input 2 Source */ 472 + { 0x00000913, 0x0080 }, /* R2323 (0x913) - HPLP3MIX Input 2 Volume */ 473 + { 0x00000914, 0x0000 }, /* R2324 (0x914) - HPLP3MIX Input 3 Source */ 474 + { 0x00000915, 0x0080 }, /* R2325 (0x915) - HPLP3MIX Input 3 Volume */ 475 + { 0x00000916, 0x0000 }, /* R2326 (0x916) - HPLP3MIX Input 4 Source */ 476 + { 0x00000917, 0x0080 }, /* R2327 (0x917) - HPLP3MIX Input 4 Volume */ 477 + { 0x00000918, 0x0000 }, /* R2328 (0x918) - HPLP4MIX Input 1 Source */ 478 + { 0x00000919, 0x0080 }, /* R2329 (0x919) - HPLP4MIX Input 1 Volume */ 479 + { 0x0000091a, 0x0000 }, /* R2330 (0x91A) - HPLP4MIX Input 2 Source */ 480 + { 0x0000091b, 0x0080 }, /* R2331 (0x91B) - HPLP4MIX Input 2 Volume */ 481 + { 0x0000091c, 0x0000 }, /* R2332 (0x91C) - HPLP4MIX Input 3 Source */ 482 + { 0x0000091d, 0x0080 }, /* R2333 (0x91D) - HPLP4MIX Input 3 Volume */ 483 + { 0x0000091e, 0x0000 }, /* R2334 (0x91E) - HPLP4MIX Input 4 Source */ 484 + { 0x0000091f, 0x0080 }, /* R2335 (0x91F) - HPLP4MIX Input 4 Volume */ 485 + { 0x00000940, 0x0000 }, /* R2368 (0x940) - DSP1LMIX Input 1 Source */ 486 + { 0x00000941, 0x0080 }, /* R2369 (0x941) - DSP1LMIX Input 1 Volume */ 487 + { 0x00000942, 0x0000 }, /* R2370 (0x942) - DSP1LMIX Input 2 Source */ 488 + { 0x00000943, 0x0080 }, /* R2371 (0x943) - DSP1LMIX Input 2 Volume */ 489 + { 0x00000944, 0x0000 }, /* R2372 (0x944) - DSP1LMIX Input 3 Source */ 490 + { 0x00000945, 0x0080 }, /* R2373 (0x945) - DSP1LMIX Input 3 Volume */ 491 + { 0x00000946, 0x0000 }, /* R2374 (0x946) - DSP1LMIX Input 4 Source */ 492 + { 0x00000947, 0x0080 }, /* R2375 (0x947) - DSP1LMIX Input 4 Volume */ 493 + { 0x00000948, 0x0000 }, /* R2376 (0x948) - DSP1RMIX Input 1 Source */ 494 + { 0x00000949, 0x0080 }, /* R2377 (0x949) - DSP1RMIX Input 1 Volume */ 495 + { 0x0000094a, 0x0000 }, /* R2378 (0x94A) - DSP1RMIX Input 2 Source */ 496 + { 0x0000094b, 0x0080 }, /* R2379 (0x94B) - DSP1RMIX Input 2 Volume */ 497 + { 0x0000094c, 0x0000 }, /* R2380 (0x94C) - DSP1RMIX Input 3 Source */ 498 + { 0x0000094d, 0x0080 }, /* R2381 (0x94D) - DSP1RMIX Input 3 Volume */ 499 + { 0x0000094e, 0x0000 }, /* R2382 (0x94E) - DSP1RMIX Input 4 Source */ 500 + { 0x0000094f, 0x0080 }, /* R2383 (0x94F) - DSP1RMIX Input 4 Volume */ 501 + { 0x00000950, 0x0000 }, /* R2384 (0x950) - DSP1AUX1MIX Input 1 Source */ 502 + { 0x00000958, 0x0000 }, /* R2392 (0x958) - DSP1AUX2MIX Input 1 Source */ 503 + { 0x00000960, 0x0000 }, /* R2400 (0x960) - DSP1AUX3MIX Input 1 Source */ 504 + { 0x00000968, 0x0000 }, /* R2408 (0x968) - DSP1AUX4MIX Input 1 Source */ 505 + { 0x00000970, 0x0000 }, /* R2416 (0x970) - DSP1AUX5MIX Input 1 Source */ 506 + { 0x00000978, 0x0000 }, /* R2424 (0x978) - DSP1AUX6MIX Input 1 Source */ 507 + { 0x00000b00, 0x0000 }, /* R2816 (0xB00) - ISRC1DEC1MIX Input 1 Source */ 508 + { 0x00000b08, 0x0000 }, /* R2824 (0xB08) - ISRC1DEC2MIX Input 1 Source */ 509 + { 0x00000b10, 0x0000 }, /* R2832 (0xB10) - ISRC1DEC3MIX Input 1 Source */ 510 + { 0x00000b18, 0x0000 }, /* R2840 (0xB18) - ISRC1DEC4MIX Input 1 Source */ 511 + { 0x00000b20, 0x0000 }, /* R2848 (0xB20) - ISRC1INT1MIX Input 1 Source */ 512 + { 0x00000b28, 0x0000 }, /* R2856 (0xB28) - ISRC1INT2MIX Input 1 Source */ 513 + { 0x00000b30, 0x0000 }, /* R2864 (0xB30) - ISRC1INT3MIX Input 1 Source */ 514 + { 0x00000b38, 0x0000 }, /* R2872 (0xB38) - ISRC1INT4MIX Input 1 Source */ 515 + { 0x00000b40, 0x0000 }, /* R2880 (0xB40) - ISRC2DEC1MIX Input 1 Source */ 516 + { 0x00000b48, 0x0000 }, /* R2888 (0xB48) - ISRC2DEC2MIX Input 1 Source */ 517 + { 0x00000b50, 0x0000 }, /* R2896 (0xB50) - ISRC2DEC3MIX Input 1 Source */ 518 + { 0x00000b58, 0x0000 }, /* R2904 (0xB58) - ISRC2DEC4MIX Input 1 Source */ 519 + { 0x00000b60, 0x0000 }, /* R2912 (0xB60) - ISRC2INT1MIX Input 1 Source */ 520 + { 0x00000b68, 0x0000 }, /* R2920 (0xB68) - ISRC2INT2MIX Input 1 Source */ 521 + { 0x00000b70, 0x0000 }, /* R2928 (0xB70) - ISRC2INT3MIX Input 1 Source */ 522 + { 0x00000b78, 0x0000 }, /* R2936 (0xB78) - ISRC2INT4MIX Input 1 Source */ 523 + { 0x00000e00, 0x0000 }, /* R3584 (0xE00) - FX Ctrl 1 */ 524 + { 0x00000e10, 0x6318 }, /* R3600 (0xE10) - EQ1 1 */ 525 + { 0x00000e11, 0x6300 }, /* R3601 (0xE11) - EQ1 2 */ 526 + { 0x00000e12, 0x0fc8 }, /* R3602 (0xE12) - EQ1 3 */ 527 + { 0x00000e13, 0x03fe }, /* R3603 (0xE13) - EQ1 4 */ 528 + { 0x00000e14, 0x00e0 }, /* R3604 (0xE14) - EQ1 5 */ 529 + { 0x00000e15, 0x1ec4 }, /* R3605 (0xE15) - EQ1 6 */ 530 + { 0x00000e16, 0xf136 }, /* R3606 (0xE16) - EQ1 7 */ 531 + { 0x00000e17, 0x0409 }, /* R3607 (0xE17) - EQ1 8 */ 532 + { 0x00000e18, 0x04cc }, /* R3608 (0xE18) - EQ1 9 */ 533 + { 0x00000e19, 0x1c9b }, /* R3609 (0xE19) - EQ1 10 */ 534 + { 0x00000e1a, 0xf337 }, /* R3610 (0xE1A) - EQ1 11 */ 535 + { 0x00000e1b, 0x040b }, /* R3611 (0xE1B) - EQ1 12 */ 536 + { 0x00000e1c, 0x0cbb }, /* R3612 (0xE1C) - EQ1 13 */ 537 + { 0x00000e1d, 0x16f8 }, /* R3613 (0xE1D) - EQ1 14 */ 538 + { 0x00000e1e, 0xf7d9 }, /* R3614 (0xE1E) - EQ1 15 */ 539 + { 0x00000e1f, 0x040a }, /* R3615 (0xE1F) - EQ1 16 */ 540 + { 0x00000e20, 0x1f14 }, /* R3616 (0xE20) - EQ1 17 */ 541 + { 0x00000e21, 0x058c }, /* R3617 (0xE21) - EQ1 18 */ 542 + { 0x00000e22, 0x0563 }, /* R3618 (0xE22) - EQ1 19 */ 543 + { 0x00000e23, 0x4000 }, /* R3619 (0xE23) - EQ1 20 */ 544 + { 0x00000e24, 0x0b75 }, /* R3620 (0xE24) - EQ1 21 */ 545 + { 0x00000e26, 0x6318 }, /* R3622 (0xE26) - EQ2 1 */ 546 + { 0x00000e27, 0x6300 }, /* R3623 (0xE27) - EQ2 2 */ 547 + { 0x00000e28, 0x0fc8 }, /* R3624 (0xE28) - EQ2 3 */ 548 + { 0x00000e29, 0x03fe }, /* R3625 (0xE29) - EQ2 4 */ 549 + { 0x00000e2a, 0x00e0 }, /* R3626 (0xE2A) - EQ2 5 */ 550 + { 0x00000e2b, 0x1ec4 }, /* R3627 (0xE2B) - EQ2 6 */ 551 + { 0x00000e2c, 0xf136 }, /* R3628 (0xE2C) - EQ2 7 */ 552 + { 0x00000e2d, 0x0409 }, /* R3629 (0xE2D) - EQ2 8 */ 553 + { 0x00000e2e, 0x04cc }, /* R3630 (0xE2E) - EQ2 9 */ 554 + { 0x00000e2f, 0x1c9b }, /* R3631 (0xE2F) - EQ2 10 */ 555 + { 0x00000e30, 0xf337 }, /* R3632 (0xE30) - EQ2 11 */ 556 + { 0x00000e31, 0x040b }, /* R3633 (0xE31) - EQ2 12 */ 557 + { 0x00000e32, 0x0cbb }, /* R3634 (0xE32) - EQ2 13 */ 558 + { 0x00000e33, 0x16f8 }, /* R3635 (0xE33) - EQ2 14 */ 559 + { 0x00000e34, 0xf7d9 }, /* R3636 (0xE34) - EQ2 15 */ 560 + { 0x00000e35, 0x040a }, /* R3637 (0xE35) - EQ2 16 */ 561 + { 0x00000e36, 0x1f14 }, /* R3638 (0xE36) - EQ2 17 */ 562 + { 0x00000e37, 0x058c }, /* R3639 (0xE37) - EQ2 18 */ 563 + { 0x00000e38, 0x0563 }, /* R3640 (0xE38) - EQ2 19 */ 564 + { 0x00000e39, 0x4000 }, /* R3641 (0xE39) - EQ2 20 */ 565 + { 0x00000e3a, 0x0b75 }, /* R3642 (0xE3A) - EQ2 21 */ 566 + { 0x00000e3c, 0x6318 }, /* R3644 (0xE3C) - EQ3 1 */ 567 + { 0x00000e3d, 0x6300 }, /* R3645 (0xE3D) - EQ3 2 */ 568 + { 0x00000e3e, 0x0fc8 }, /* R3646 (0xE3E) - EQ3 3 */ 569 + { 0x00000e3f, 0x03fe }, /* R3647 (0xE3F) - EQ3 4 */ 570 + { 0x00000e40, 0x00e0 }, /* R3648 (0xE40) - EQ3 5 */ 571 + { 0x00000e41, 0x1ec4 }, /* R3649 (0xE41) - EQ3 6 */ 572 + { 0x00000e42, 0xf136 }, /* R3650 (0xE42) - EQ3 7 */ 573 + { 0x00000e43, 0x0409 }, /* R3651 (0xE43) - EQ3 8 */ 574 + { 0x00000e44, 0x04cc }, /* R3652 (0xE44) - EQ3 9 */ 575 + { 0x00000e45, 0x1c9b }, /* R3653 (0xE45) - EQ3 10 */ 576 + { 0x00000e46, 0xf337 }, /* R3654 (0xE46) - EQ3 11 */ 577 + { 0x00000e47, 0x040b }, /* R3655 (0xE47) - EQ3 12 */ 578 + { 0x00000e48, 0x0cbb }, /* R3656 (0xE48) - EQ3 13 */ 579 + { 0x00000e49, 0x16f8 }, /* R3657 (0xE49) - EQ3 14 */ 580 + { 0x00000e4a, 0xf7d9 }, /* R3658 (0xE4A) - EQ3 15 */ 581 + { 0x00000e4b, 0x040a }, /* R3659 (0xE4B) - EQ3 16 */ 582 + { 0x00000e4c, 0x1f14 }, /* R3660 (0xE4C) - EQ3 17 */ 583 + { 0x00000e4d, 0x058c }, /* R3661 (0xE4D) - EQ3 18 */ 584 + { 0x00000e4e, 0x0563 }, /* R3662 (0xE4E) - EQ3 19 */ 585 + { 0x00000e4f, 0x4000 }, /* R3663 (0xE4F) - EQ3 20 */ 586 + { 0x00000e50, 0x0b75 }, /* R3664 (0xE50) - EQ3 21 */ 587 + { 0x00000e52, 0x6318 }, /* R3666 (0xE52) - EQ4 1 */ 588 + { 0x00000e53, 0x6300 }, /* R3667 (0xE53) - EQ4 2 */ 589 + { 0x00000e54, 0x0fc8 }, /* R3668 (0xE54) - EQ4 3 */ 590 + { 0x00000e55, 0x03fe }, /* R3669 (0xE55) - EQ4 4 */ 591 + { 0x00000e56, 0x00e0 }, /* R3670 (0xE56) - EQ4 5 */ 592 + { 0x00000e57, 0x1ec4 }, /* R3671 (0xE57) - EQ4 6 */ 593 + { 0x00000e58, 0xf136 }, /* R3672 (0xE58) - EQ4 7 */ 594 + { 0x00000e59, 0x0409 }, /* R3673 (0xE59) - EQ4 8 */ 595 + { 0x00000e5a, 0x04cc }, /* R3674 (0xE5A) - EQ4 9 */ 596 + { 0x00000e5b, 0x1c9b }, /* R3675 (0xE5B) - EQ4 10 */ 597 + { 0x00000e5c, 0xf337 }, /* R3676 (0xE5C) - EQ4 11 */ 598 + { 0x00000e5d, 0x040b }, /* R3677 (0xE5D) - EQ4 12 */ 599 + { 0x00000e5e, 0x0cbb }, /* R3678 (0xE5E) - EQ4 13 */ 600 + { 0x00000e5f, 0x16f8 }, /* R3679 (0xE5F) - EQ4 14 */ 601 + { 0x00000e60, 0xf7d9 }, /* R3680 (0xE60) - EQ4 15 */ 602 + { 0x00000e61, 0x040a }, /* R3681 (0xE61) - EQ4 16 */ 603 + { 0x00000e62, 0x1f14 }, /* R3682 (0xE62) - EQ4 17 */ 604 + { 0x00000e63, 0x058c }, /* R3683 (0xE63) - EQ4 18 */ 605 + { 0x00000e64, 0x0563 }, /* R3684 (0xE64) - EQ4 19 */ 606 + { 0x00000e65, 0x4000 }, /* R3685 (0xE65) - EQ4 20 */ 607 + { 0x00000e66, 0x0b75 }, /* R3686 (0xE66) - EQ4 21 */ 608 + { 0x00000e80, 0x0018 }, /* R3712 (0xE80) - DRC1 Ctrl 1 */ 609 + { 0x00000e81, 0x0933 }, /* R3713 (0xE81) - DRC1 Ctrl 2 */ 610 + { 0x00000e82, 0x0018 }, /* R3714 (0xE82) - DRC1 Ctrl 3 */ 611 + { 0x00000e83, 0x0000 }, /* R3715 (0xE83) - DRC1 Ctrl 4 */ 612 + { 0x00000e84, 0x0000 }, /* R3716 (0xE84) - DRC1 Ctrl 5 */ 613 + { 0x00000e88, 0x0018 }, /* R3720 (0xE88) - DRC2 Ctrl 1 */ 614 + { 0x00000e89, 0x0933 }, /* R3721 (0xE89) - DRC2 Ctrl 2 */ 615 + { 0x00000e8a, 0x0018 }, /* R3722 (0xE8A) - DRC2 Ctrl 3 */ 616 + { 0x00000e8b, 0x0000 }, /* R3723 (0xE8B) - DRC2 Ctrl 4 */ 617 + { 0x00000e8c, 0x0000 }, /* R3724 (0xE8C) - DRC2 Ctrl 5 */ 618 + { 0x00000ec0, 0x0000 }, /* R3776 (0xEC0) - HPLPF1 1 */ 619 + { 0x00000ec1, 0x0000 }, /* R3777 (0xEC1) - HPLPF1 2 */ 620 + { 0x00000ec4, 0x0000 }, /* R3780 (0xEC4) - HPLPF2 1 */ 621 + { 0x00000ec5, 0x0000 }, /* R3781 (0xEC5) - HPLPF2 2 */ 622 + { 0x00000ec8, 0x0000 }, /* R3784 (0xEC8) - HPLPF3 1 */ 623 + { 0x00000ec9, 0x0000 }, /* R3785 (0xEC9) - HPLPF3 2 */ 624 + { 0x00000ecc, 0x0000 }, /* R3788 (0xECC) - HPLPF4 1 */ 625 + { 0x00000ecd, 0x0000 }, /* R3789 (0xECD) - HPLPF4 2 */ 626 + { 0x00000ef0, 0x0000 }, /* R3824 (0xEF0) - ISRC1 Ctrl 1 */ 627 + { 0x00000ef1, 0x0001 }, /* R3825 (0xEF1) - ISRC1 Ctrl 2 */ 628 + { 0x00000ef2, 0x0000 }, /* R3826 (0xEF2) - ISRC1 Ctrl 3 */ 629 + { 0x00000ef3, 0x0000 }, /* R3827 (0xEF3) - ISRC2 Ctrl 1 */ 630 + { 0x00000ef4, 0x0001 }, /* R3828 (0xEF4) - ISRC2 Ctrl 2 */ 631 + { 0x00000ef5, 0x0000 }, /* R3829 (0xEF5) - ISRC2 Ctrl 3 */ 632 + { 0x00001700, 0x2801 }, /* R5888 (0x1700) - GPIO1 Ctrl 1 */ 633 + { 0x00001701, 0xe800 }, /* R5889 (0x1701) - GPIO1 Ctrl 2 */ 634 + { 0x00001702, 0x2801 }, /* R5890 (0x1702) - GPIO2 Ctrl 1 */ 635 + { 0x00001703, 0xe800 }, /* R5891 (0x1703) - GPIO2 Ctrl 2 */ 636 + { 0x00001704, 0x2801 }, /* R5892 (0x1704) - GPIO3 Ctrl 1 */ 637 + { 0x00001705, 0xe800 }, /* R5893 (0x1705) - GPIO3 Ctrl 2 */ 638 + { 0x00001706, 0x2801 }, /* R5894 (0x1706) - GPIO4 Ctrl 1 */ 639 + { 0x00001707, 0xe800 }, /* R5895 (0x1707) - GPIO4 Ctrl 2 */ 640 + { 0x00001708, 0x2801 }, /* R5896 (0x1708) - GPIO5 Ctrl 1 */ 641 + { 0x00001709, 0xe800 }, /* R5897 (0x1709) - GPIO5 Ctrl 2 */ 642 + { 0x0000170a, 0x2801 }, /* R5898 (0x170A) - GPIO6 Ctrl 1 */ 643 + { 0x0000170b, 0xe800 }, /* R5899 (0x170B) - GPIO6 Ctrl 2 */ 644 + { 0x0000170c, 0x2801 }, /* R5900 (0x170C) - GPIO7 Ctrl 1 */ 645 + { 0x0000170d, 0xe800 }, /* R5901 (0x170D) - GPIO7 Ctrl 2 */ 646 + { 0x0000170e, 0x2801 }, /* R5902 (0x170E) - GPIO8 Ctrl 1 */ 647 + { 0x0000170f, 0xe800 }, /* R5903 (0x170F) - GPIO8 Ctrl 2 */ 648 + { 0x00001710, 0x2801 }, /* R5904 (0x1710) - GPIO9 Ctrl 1 */ 649 + { 0x00001711, 0xe800 }, /* R5905 (0x1711) - GPIO9 Ctrl 2 */ 650 + { 0x00001712, 0x2801 }, /* R5906 (0x1712) - GPIO10 Ctrl 1 */ 651 + { 0x00001713, 0xe800 }, /* R5907 (0x1713) - GPIO10 Ctrl 2 */ 652 + { 0x00001714, 0x2801 }, /* R5908 (0x1714) - GPIO11 Ctrl 1 */ 653 + { 0x00001715, 0xe800 }, /* R5909 (0x1715) - GPIO11 Ctrl 2 */ 654 + { 0x00001716, 0x2801 }, /* R5910 (0x1716) - GPIO12 Ctrl 1 */ 655 + { 0x00001717, 0xe800 }, /* R5911 (0x1717) - GPIO12 Ctrl 2 */ 656 + { 0x00001718, 0x2801 }, /* R5912 (0x1718) - GPIO13 Ctrl 1 */ 657 + { 0x00001719, 0xe800 }, /* R5913 (0x1719) - GPIO13 Ctrl 2 */ 658 + { 0x0000171a, 0x2801 }, /* R5914 (0x171A) - GPIO14 Ctrl 1 */ 659 + { 0x0000171b, 0xe800 }, /* R5915 (0x171B) - GPIO14 Ctrl 2 */ 660 + { 0x0000171c, 0x2801 }, /* R5916 (0x171C) - GPIO15 Ctrl 1 */ 661 + { 0x0000171d, 0xe800 }, /* R5917 (0x171D) - GPIO15 Ctrl 2 */ 662 + { 0x00001840, 0xffff }, /* R6208 (0x1840) - IRQ1 Mask 1 */ 663 + { 0x00001841, 0xffff }, /* R6209 (0x1841) - IRQ1 Mask 2 */ 664 + { 0x00001842, 0xffff }, /* R6210 (0x1842) - IRQ1 Mask 3 */ 665 + { 0x00001843, 0xffff }, /* R6211 (0x1843) - IRQ1 Mask 4 */ 666 + { 0x00001844, 0xffff }, /* R6212 (0x1844) - IRQ1 Mask 5 */ 667 + { 0x00001845, 0xffff }, /* R6213 (0x1845) - IRQ1 Mask 6 */ 668 + { 0x00001846, 0xffff }, /* R6214 (0x1846) - IRQ1 Mask 7 */ 669 + { 0x00001847, 0xffff }, /* R6215 (0x1847) - IRQ1 Mask 8 */ 670 + { 0x00001848, 0xffff }, /* R6216 (0x1848) - IRQ1 Mask 9 */ 671 + { 0x00001849, 0xffff }, /* R6217 (0x1849) - IRQ1 Mask 10 */ 672 + { 0x0000184a, 0xffff }, /* R6218 (0x184A) - IRQ1 Mask 11 */ 673 + { 0x0000184b, 0xffff }, /* R6219 (0x184B) - IRQ1 Mask 12 */ 674 + { 0x0000184c, 0xffff }, /* R6220 (0x184C) - IRQ1 Mask 13 */ 675 + { 0x0000184d, 0xffff }, /* R6221 (0x184D) - IRQ1 Mask 14 */ 676 + { 0x0000184e, 0xffff }, /* R6222 (0x184E) - IRQ1 Mask 15 */ 677 + { 0x0000184f, 0xffff }, /* R6223 (0x184F) - IRQ1 Mask 16 */ 678 + { 0x00001850, 0xffff }, /* R6224 (0x1850) - IRQ1 Mask 17 */ 679 + { 0x00001851, 0xffff }, /* R6225 (0x1851) - IRQ1 Mask 18 */ 680 + { 0x00001852, 0xffff }, /* R6226 (0x1852) - IRQ1 Mask 19 */ 681 + { 0x00001853, 0xffff }, /* R6227 (0x1853) - IRQ1 Mask 20 */ 682 + { 0x00001854, 0xffff }, /* R6228 (0x1854) - IRQ1 Mask 21 */ 683 + { 0x00001855, 0xffff }, /* R6229 (0x1855) - IRQ1 Mask 22 */ 684 + { 0x00001856, 0xffff }, /* R6230 (0x1856) - IRQ1 Mask 23 */ 685 + { 0x00001857, 0xffff }, /* R6231 (0x1857) - IRQ1 Mask 24 */ 686 + { 0x00001858, 0xffff }, /* R6232 (0x1858) - IRQ1 Mask 25 */ 687 + { 0x00001859, 0xffff }, /* R6233 (0x1859) - IRQ1 Mask 26 */ 688 + { 0x0000185a, 0xffff }, /* R6234 (0x185A) - IRQ1 Mask 27 */ 689 + { 0x0000185b, 0xffff }, /* R6235 (0x185B) - IRQ1 Mask 28 */ 690 + { 0x0000185c, 0xffff }, /* R6236 (0x185C) - IRQ1 Mask 29 */ 691 + { 0x0000185d, 0xffff }, /* R6237 (0x185D) - IRQ1 Mask 30 */ 692 + { 0x0000185e, 0xffff }, /* R6238 (0x185E) - IRQ1 Mask 31 */ 693 + { 0x0000185f, 0xffff }, /* R6239 (0x185F) - IRQ1 Mask 32 */ 694 + { 0x00001860, 0xffff }, /* R6240 (0x1860) - IRQ1 Mask 33 */ 695 + { 0x00001a06, 0x0000 }, /* R6662 (0x1A06) - Interrupt Debounce 7 */ 696 + { 0x00001a80, 0x4400 }, /* R6784 (0x1A80) - IRQ1 Ctrl */ 697 + }; 698 + 699 + static bool cs47l15_is_adsp_memory(struct device *dev, unsigned int reg) 700 + { 701 + switch (reg) { 702 + case 0x080000 ... 0x088ffe: 703 + case 0x0a0000 ... 0x0a9ffe: 704 + case 0x0c0000 ... 0x0c1ffe: 705 + case 0x0e0000 ... 0x0e1ffe: 706 + return true; 707 + default: 708 + return false; 709 + } 710 + } 711 + 712 + static bool cs47l15_16bit_readable_register(struct device *dev, 713 + unsigned int reg) 714 + { 715 + switch (reg) { 716 + case MADERA_SOFTWARE_RESET: 717 + case MADERA_HARDWARE_REVISION: 718 + case MADERA_WRITE_SEQUENCER_CTRL_0 ... MADERA_WRITE_SEQUENCER_CTRL_2: 719 + case MADERA_TONE_GENERATOR_1 ... MADERA_TONE_GENERATOR_5: 720 + case MADERA_PWM_DRIVE_1 ... MADERA_PWM_DRIVE_3: 721 + case MADERA_SAMPLE_RATE_SEQUENCE_SELECT_1: 722 + case MADERA_SAMPLE_RATE_SEQUENCE_SELECT_2: 723 + case MADERA_SAMPLE_RATE_SEQUENCE_SELECT_3: 724 + case MADERA_SAMPLE_RATE_SEQUENCE_SELECT_4: 725 + case MADERA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_1: 726 + case MADERA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_2: 727 + case MADERA_HAPTICS_CONTROL_1 ... MADERA_HAPTICS_CONTROL_2: 728 + case MADERA_HAPTICS_PHASE_1_INTENSITY: 729 + case MADERA_HAPTICS_PHASE_1_DURATION: 730 + case MADERA_HAPTICS_PHASE_2_INTENSITY: 731 + case MADERA_HAPTICS_PHASE_2_DURATION: 732 + case MADERA_HAPTICS_PHASE_3_INTENSITY: 733 + case MADERA_HAPTICS_PHASE_3_DURATION: 734 + case MADERA_HAPTICS_STATUS: 735 + case MADERA_COMFORT_NOISE_GENERATOR: 736 + case MADERA_CLOCK_32K_1: 737 + case MADERA_SYSTEM_CLOCK_1: 738 + case MADERA_SAMPLE_RATE_1 ... MADERA_SAMPLE_RATE_3: 739 + case MADERA_SAMPLE_RATE_1_STATUS: 740 + case MADERA_SAMPLE_RATE_2_STATUS: 741 + case MADERA_SAMPLE_RATE_3_STATUS: 742 + case MADERA_DSP_CLOCK_1: 743 + case MADERA_DSP_CLOCK_2: 744 + case MADERA_OUTPUT_SYSTEM_CLOCK: 745 + case MADERA_RATE_ESTIMATOR_1 ... MADERA_RATE_ESTIMATOR_5: 746 + case MADERA_FLL1_CONTROL_1 ... MADERA_FLL1_CONTROL_6: 747 + case MADERA_FLL1_CONTROL_7: 748 + case MADERA_FLL1_EFS_2: 749 + case MADERA_FLL1_LOOP_FILTER_TEST_1: 750 + case MADERA_FLL1_SYNCHRONISER_1 ... MADERA_FLL1_SYNCHRONISER_7: 751 + case MADERA_FLL1_SPREAD_SPECTRUM: 752 + case MADERA_FLL1_GPIO_CLOCK: 753 + case MADERA_FLLAO_CONTROL_1: 754 + case MADERA_FLLAO_CONTROL_2: 755 + case MADERA_FLLAO_CONTROL_3: 756 + case MADERA_FLLAO_CONTROL_4: 757 + case MADERA_FLLAO_CONTROL_5: 758 + case MADERA_FLLAO_CONTROL_6: 759 + case MADERA_FLLAO_CONTROL_7: 760 + case MADERA_FLLAO_CONTROL_8: 761 + case MADERA_FLLAO_CONTROL_9: 762 + case MADERA_FLLAO_CONTROL_10: 763 + case MADERA_FLLAO_CONTROL_11: 764 + case MADERA_MIC_BIAS_CTRL_1: 765 + case MADERA_MIC_BIAS_CTRL_5: 766 + case MADERA_HP_CTRL_1L: 767 + case MADERA_HP_CTRL_1R: 768 + case MADERA_ACCESSORY_DETECT_MODE_1: 769 + case MADERA_HEADPHONE_DETECT_0: 770 + case MADERA_HEADPHONE_DETECT_1: 771 + case MADERA_HEADPHONE_DETECT_2: 772 + case MADERA_HEADPHONE_DETECT_3: 773 + case MADERA_HEADPHONE_DETECT_5: 774 + case MADERA_MICD_CLAMP_CONTROL: 775 + case MADERA_MIC_DETECT_1_CONTROL_0: 776 + case MADERA_MIC_DETECT_1_CONTROL_1: 777 + case MADERA_MIC_DETECT_1_CONTROL_2: 778 + case MADERA_MIC_DETECT_1_CONTROL_3: 779 + case MADERA_MIC_DETECT_1_LEVEL_1 ... MADERA_MIC_DETECT_1_LEVEL_4: 780 + case MADERA_MIC_DETECT_1_CONTROL_4: 781 + case MADERA_GP_SWITCH_1: 782 + case MADERA_JACK_DETECT_ANALOGUE: 783 + case MADERA_INPUT_ENABLES: 784 + case MADERA_INPUT_ENABLES_STATUS: 785 + case MADERA_INPUT_RATE: 786 + case MADERA_INPUT_VOLUME_RAMP: 787 + case MADERA_HPF_CONTROL: 788 + case MADERA_IN1L_CONTROL: 789 + case MADERA_ADC_DIGITAL_VOLUME_1L: 790 + case MADERA_DMIC1L_CONTROL: 791 + case MADERA_IN1L_RATE_CONTROL: 792 + case MADERA_IN1R_CONTROL: 793 + case MADERA_ADC_DIGITAL_VOLUME_1R: 794 + case MADERA_DMIC1R_CONTROL: 795 + case MADERA_IN1R_RATE_CONTROL: 796 + case MADERA_IN2L_CONTROL: 797 + case MADERA_ADC_DIGITAL_VOLUME_2L: 798 + case MADERA_DMIC2L_CONTROL: 799 + case MADERA_IN2L_RATE_CONTROL: 800 + case MADERA_IN2R_CONTROL: 801 + case MADERA_ADC_DIGITAL_VOLUME_2R: 802 + case MADERA_DMIC2R_CONTROL: 803 + case MADERA_IN2R_RATE_CONTROL: 804 + case CS47L15_ADC_INT_BIAS: 805 + case CS47L15_PGA_BIAS_SEL: 806 + case MADERA_OUTPUT_ENABLES_1: 807 + case MADERA_OUTPUT_STATUS_1: 808 + case MADERA_RAW_OUTPUT_STATUS_1: 809 + case MADERA_OUTPUT_RATE_1: 810 + case MADERA_OUTPUT_VOLUME_RAMP: 811 + case MADERA_OUTPUT_PATH_CONFIG_1L: 812 + case MADERA_DAC_DIGITAL_VOLUME_1L: 813 + case MADERA_OUTPUT_PATH_CONFIG_1: 814 + case MADERA_NOISE_GATE_SELECT_1L: 815 + case MADERA_OUTPUT_PATH_CONFIG_1R: 816 + case MADERA_DAC_DIGITAL_VOLUME_1R: 817 + case MADERA_NOISE_GATE_SELECT_1R: 818 + case MADERA_OUTPUT_PATH_CONFIG_2: 819 + case MADERA_OUTPUT_PATH_CONFIG_4L: 820 + case MADERA_DAC_DIGITAL_VOLUME_4L: 821 + case MADERA_NOISE_GATE_SELECT_4L: 822 + case MADERA_OUTPUT_PATH_CONFIG_5L: 823 + case MADERA_DAC_DIGITAL_VOLUME_5L: 824 + case MADERA_NOISE_GATE_SELECT_5L: 825 + case MADERA_OUTPUT_PATH_CONFIG_5R: 826 + case MADERA_DAC_DIGITAL_VOLUME_5R: 827 + case MADERA_NOISE_GATE_SELECT_5R: 828 + case MADERA_DAC_AEC_CONTROL_1: 829 + case MADERA_DAC_AEC_CONTROL_2: 830 + case MADERA_NOISE_GATE_CONTROL: 831 + case MADERA_PDM_SPK1_CTRL_1 ... MADERA_PDM_SPK1_CTRL_2: 832 + case MADERA_HP1_SHORT_CIRCUIT_CTRL: 833 + case MADERA_HP_TEST_CTRL_5: 834 + case MADERA_HP_TEST_CTRL_6: 835 + case MADERA_AIF1_BCLK_CTRL: 836 + case MADERA_AIF1_TX_PIN_CTRL: 837 + case MADERA_AIF1_RX_PIN_CTRL: 838 + case MADERA_AIF1_RATE_CTRL: 839 + case MADERA_AIF1_FORMAT: 840 + case MADERA_AIF1_RX_BCLK_RATE: 841 + case MADERA_AIF1_FRAME_CTRL_1 ... MADERA_AIF1_FRAME_CTRL_8: 842 + case MADERA_AIF1_FRAME_CTRL_11 ... MADERA_AIF1_FRAME_CTRL_16: 843 + case MADERA_AIF1_TX_ENABLES: 844 + case MADERA_AIF1_RX_ENABLES: 845 + case MADERA_AIF2_BCLK_CTRL: 846 + case MADERA_AIF2_TX_PIN_CTRL: 847 + case MADERA_AIF2_RX_PIN_CTRL: 848 + case MADERA_AIF2_RATE_CTRL: 849 + case MADERA_AIF2_FORMAT: 850 + case MADERA_AIF2_RX_BCLK_RATE: 851 + case MADERA_AIF2_FRAME_CTRL_1 ... MADERA_AIF2_FRAME_CTRL_6: 852 + case MADERA_AIF2_FRAME_CTRL_11 ... MADERA_AIF2_FRAME_CTRL_14: 853 + case MADERA_AIF2_TX_ENABLES: 854 + case MADERA_AIF2_RX_ENABLES: 855 + case MADERA_AIF3_BCLK_CTRL: 856 + case MADERA_AIF3_TX_PIN_CTRL: 857 + case MADERA_AIF3_RX_PIN_CTRL: 858 + case MADERA_AIF3_RATE_CTRL: 859 + case MADERA_AIF3_FORMAT: 860 + case MADERA_AIF3_RX_BCLK_RATE: 861 + case MADERA_AIF3_FRAME_CTRL_1 ... MADERA_AIF3_FRAME_CTRL_4: 862 + case MADERA_AIF3_FRAME_CTRL_11 ... MADERA_AIF3_FRAME_CTRL_12: 863 + case MADERA_AIF3_TX_ENABLES: 864 + case MADERA_AIF3_RX_ENABLES: 865 + case MADERA_SPD1_TX_CONTROL: 866 + case MADERA_SPD1_TX_CHANNEL_STATUS_1: 867 + case MADERA_SPD1_TX_CHANNEL_STATUS_2: 868 + case MADERA_SPD1_TX_CHANNEL_STATUS_3: 869 + case MADERA_PWM1MIX_INPUT_1_SOURCE: 870 + case MADERA_PWM1MIX_INPUT_1_VOLUME: 871 + case MADERA_PWM1MIX_INPUT_2_SOURCE: 872 + case MADERA_PWM1MIX_INPUT_2_VOLUME: 873 + case MADERA_PWM1MIX_INPUT_3_SOURCE: 874 + case MADERA_PWM1MIX_INPUT_3_VOLUME: 875 + case MADERA_PWM1MIX_INPUT_4_SOURCE: 876 + case MADERA_PWM1MIX_INPUT_4_VOLUME: 877 + case MADERA_PWM2MIX_INPUT_1_SOURCE: 878 + case MADERA_PWM2MIX_INPUT_1_VOLUME: 879 + case MADERA_PWM2MIX_INPUT_2_SOURCE: 880 + case MADERA_PWM2MIX_INPUT_2_VOLUME: 881 + case MADERA_PWM2MIX_INPUT_3_SOURCE: 882 + case MADERA_PWM2MIX_INPUT_3_VOLUME: 883 + case MADERA_PWM2MIX_INPUT_4_SOURCE: 884 + case MADERA_PWM2MIX_INPUT_4_VOLUME: 885 + case MADERA_OUT1LMIX_INPUT_1_SOURCE: 886 + case MADERA_OUT1LMIX_INPUT_1_VOLUME: 887 + case MADERA_OUT1LMIX_INPUT_2_SOURCE: 888 + case MADERA_OUT1LMIX_INPUT_2_VOLUME: 889 + case MADERA_OUT1LMIX_INPUT_3_SOURCE: 890 + case MADERA_OUT1LMIX_INPUT_3_VOLUME: 891 + case MADERA_OUT1LMIX_INPUT_4_SOURCE: 892 + case MADERA_OUT1LMIX_INPUT_4_VOLUME: 893 + case MADERA_OUT1RMIX_INPUT_1_SOURCE: 894 + case MADERA_OUT1RMIX_INPUT_1_VOLUME: 895 + case MADERA_OUT1RMIX_INPUT_2_SOURCE: 896 + case MADERA_OUT1RMIX_INPUT_2_VOLUME: 897 + case MADERA_OUT1RMIX_INPUT_3_SOURCE: 898 + case MADERA_OUT1RMIX_INPUT_3_VOLUME: 899 + case MADERA_OUT1RMIX_INPUT_4_SOURCE: 900 + case MADERA_OUT1RMIX_INPUT_4_VOLUME: 901 + case MADERA_OUT4LMIX_INPUT_1_SOURCE: 902 + case MADERA_OUT4LMIX_INPUT_1_VOLUME: 903 + case MADERA_OUT4LMIX_INPUT_2_SOURCE: 904 + case MADERA_OUT4LMIX_INPUT_2_VOLUME: 905 + case MADERA_OUT4LMIX_INPUT_3_SOURCE: 906 + case MADERA_OUT4LMIX_INPUT_3_VOLUME: 907 + case MADERA_OUT4LMIX_INPUT_4_SOURCE: 908 + case MADERA_OUT4LMIX_INPUT_4_VOLUME: 909 + case MADERA_OUT5LMIX_INPUT_1_SOURCE: 910 + case MADERA_OUT5LMIX_INPUT_1_VOLUME: 911 + case MADERA_OUT5LMIX_INPUT_2_SOURCE: 912 + case MADERA_OUT5LMIX_INPUT_2_VOLUME: 913 + case MADERA_OUT5LMIX_INPUT_3_SOURCE: 914 + case MADERA_OUT5LMIX_INPUT_3_VOLUME: 915 + case MADERA_OUT5LMIX_INPUT_4_SOURCE: 916 + case MADERA_OUT5LMIX_INPUT_4_VOLUME: 917 + case MADERA_OUT5RMIX_INPUT_1_SOURCE: 918 + case MADERA_OUT5RMIX_INPUT_1_VOLUME: 919 + case MADERA_OUT5RMIX_INPUT_2_SOURCE: 920 + case MADERA_OUT5RMIX_INPUT_2_VOLUME: 921 + case MADERA_OUT5RMIX_INPUT_3_SOURCE: 922 + case MADERA_OUT5RMIX_INPUT_3_VOLUME: 923 + case MADERA_OUT5RMIX_INPUT_4_SOURCE: 924 + case MADERA_OUT5RMIX_INPUT_4_VOLUME: 925 + case MADERA_AIF1TX1MIX_INPUT_1_SOURCE: 926 + case MADERA_AIF1TX1MIX_INPUT_1_VOLUME: 927 + case MADERA_AIF1TX1MIX_INPUT_2_SOURCE: 928 + case MADERA_AIF1TX1MIX_INPUT_2_VOLUME: 929 + case MADERA_AIF1TX1MIX_INPUT_3_SOURCE: 930 + case MADERA_AIF1TX1MIX_INPUT_3_VOLUME: 931 + case MADERA_AIF1TX1MIX_INPUT_4_SOURCE: 932 + case MADERA_AIF1TX1MIX_INPUT_4_VOLUME: 933 + case MADERA_AIF1TX2MIX_INPUT_1_SOURCE: 934 + case MADERA_AIF1TX2MIX_INPUT_1_VOLUME: 935 + case MADERA_AIF1TX2MIX_INPUT_2_SOURCE: 936 + case MADERA_AIF1TX2MIX_INPUT_2_VOLUME: 937 + case MADERA_AIF1TX2MIX_INPUT_3_SOURCE: 938 + case MADERA_AIF1TX2MIX_INPUT_3_VOLUME: 939 + case MADERA_AIF1TX2MIX_INPUT_4_SOURCE: 940 + case MADERA_AIF1TX2MIX_INPUT_4_VOLUME: 941 + case MADERA_AIF1TX3MIX_INPUT_1_SOURCE: 942 + case MADERA_AIF1TX3MIX_INPUT_1_VOLUME: 943 + case MADERA_AIF1TX3MIX_INPUT_2_SOURCE: 944 + case MADERA_AIF1TX3MIX_INPUT_2_VOLUME: 945 + case MADERA_AIF1TX3MIX_INPUT_3_SOURCE: 946 + case MADERA_AIF1TX3MIX_INPUT_3_VOLUME: 947 + case MADERA_AIF1TX3MIX_INPUT_4_SOURCE: 948 + case MADERA_AIF1TX3MIX_INPUT_4_VOLUME: 949 + case MADERA_AIF1TX4MIX_INPUT_1_SOURCE: 950 + case MADERA_AIF1TX4MIX_INPUT_1_VOLUME: 951 + case MADERA_AIF1TX4MIX_INPUT_2_SOURCE: 952 + case MADERA_AIF1TX4MIX_INPUT_2_VOLUME: 953 + case MADERA_AIF1TX4MIX_INPUT_3_SOURCE: 954 + case MADERA_AIF1TX4MIX_INPUT_3_VOLUME: 955 + case MADERA_AIF1TX4MIX_INPUT_4_SOURCE: 956 + case MADERA_AIF1TX4MIX_INPUT_4_VOLUME: 957 + case MADERA_AIF1TX5MIX_INPUT_1_SOURCE: 958 + case MADERA_AIF1TX5MIX_INPUT_1_VOLUME: 959 + case MADERA_AIF1TX5MIX_INPUT_2_SOURCE: 960 + case MADERA_AIF1TX5MIX_INPUT_2_VOLUME: 961 + case MADERA_AIF1TX5MIX_INPUT_3_SOURCE: 962 + case MADERA_AIF1TX5MIX_INPUT_3_VOLUME: 963 + case MADERA_AIF1TX5MIX_INPUT_4_SOURCE: 964 + case MADERA_AIF1TX5MIX_INPUT_4_VOLUME: 965 + case MADERA_AIF1TX6MIX_INPUT_1_SOURCE: 966 + case MADERA_AIF1TX6MIX_INPUT_1_VOLUME: 967 + case MADERA_AIF1TX6MIX_INPUT_2_SOURCE: 968 + case MADERA_AIF1TX6MIX_INPUT_2_VOLUME: 969 + case MADERA_AIF1TX6MIX_INPUT_3_SOURCE: 970 + case MADERA_AIF1TX6MIX_INPUT_3_VOLUME: 971 + case MADERA_AIF1TX6MIX_INPUT_4_SOURCE: 972 + case MADERA_AIF1TX6MIX_INPUT_4_VOLUME: 973 + case MADERA_AIF2TX1MIX_INPUT_1_SOURCE: 974 + case MADERA_AIF2TX1MIX_INPUT_1_VOLUME: 975 + case MADERA_AIF2TX1MIX_INPUT_2_SOURCE: 976 + case MADERA_AIF2TX1MIX_INPUT_2_VOLUME: 977 + case MADERA_AIF2TX1MIX_INPUT_3_SOURCE: 978 + case MADERA_AIF2TX1MIX_INPUT_3_VOLUME: 979 + case MADERA_AIF2TX1MIX_INPUT_4_SOURCE: 980 + case MADERA_AIF2TX1MIX_INPUT_4_VOLUME: 981 + case MADERA_AIF2TX2MIX_INPUT_1_SOURCE: 982 + case MADERA_AIF2TX2MIX_INPUT_1_VOLUME: 983 + case MADERA_AIF2TX2MIX_INPUT_2_SOURCE: 984 + case MADERA_AIF2TX2MIX_INPUT_2_VOLUME: 985 + case MADERA_AIF2TX2MIX_INPUT_3_SOURCE: 986 + case MADERA_AIF2TX2MIX_INPUT_3_VOLUME: 987 + case MADERA_AIF2TX2MIX_INPUT_4_SOURCE: 988 + case MADERA_AIF2TX2MIX_INPUT_4_VOLUME: 989 + case MADERA_AIF2TX3MIX_INPUT_1_SOURCE: 990 + case MADERA_AIF2TX3MIX_INPUT_1_VOLUME: 991 + case MADERA_AIF2TX3MIX_INPUT_2_SOURCE: 992 + case MADERA_AIF2TX3MIX_INPUT_2_VOLUME: 993 + case MADERA_AIF2TX3MIX_INPUT_3_SOURCE: 994 + case MADERA_AIF2TX3MIX_INPUT_3_VOLUME: 995 + case MADERA_AIF2TX3MIX_INPUT_4_SOURCE: 996 + case MADERA_AIF2TX3MIX_INPUT_4_VOLUME: 997 + case MADERA_AIF2TX4MIX_INPUT_1_SOURCE: 998 + case MADERA_AIF2TX4MIX_INPUT_1_VOLUME: 999 + case MADERA_AIF2TX4MIX_INPUT_2_SOURCE: 1000 + case MADERA_AIF2TX4MIX_INPUT_2_VOLUME: 1001 + case MADERA_AIF2TX4MIX_INPUT_3_SOURCE: 1002 + case MADERA_AIF2TX4MIX_INPUT_3_VOLUME: 1003 + case MADERA_AIF2TX4MIX_INPUT_4_SOURCE: 1004 + case MADERA_AIF2TX4MIX_INPUT_4_VOLUME: 1005 + case MADERA_AIF3TX1MIX_INPUT_1_SOURCE: 1006 + case MADERA_AIF3TX1MIX_INPUT_1_VOLUME: 1007 + case MADERA_AIF3TX1MIX_INPUT_2_SOURCE: 1008 + case MADERA_AIF3TX1MIX_INPUT_2_VOLUME: 1009 + case MADERA_AIF3TX1MIX_INPUT_3_SOURCE: 1010 + case MADERA_AIF3TX1MIX_INPUT_3_VOLUME: 1011 + case MADERA_AIF3TX1MIX_INPUT_4_SOURCE: 1012 + case MADERA_AIF3TX1MIX_INPUT_4_VOLUME: 1013 + case MADERA_AIF3TX2MIX_INPUT_1_SOURCE: 1014 + case MADERA_AIF3TX2MIX_INPUT_1_VOLUME: 1015 + case MADERA_AIF3TX2MIX_INPUT_2_SOURCE: 1016 + case MADERA_AIF3TX2MIX_INPUT_2_VOLUME: 1017 + case MADERA_AIF3TX2MIX_INPUT_3_SOURCE: 1018 + case MADERA_AIF3TX2MIX_INPUT_3_VOLUME: 1019 + case MADERA_AIF3TX2MIX_INPUT_4_SOURCE: 1020 + case MADERA_AIF3TX2MIX_INPUT_4_VOLUME: 1021 + case MADERA_SPDIF1TX1MIX_INPUT_1_SOURCE: 1022 + case MADERA_SPDIF1TX1MIX_INPUT_1_VOLUME: 1023 + case MADERA_SPDIF1TX2MIX_INPUT_1_SOURCE: 1024 + case MADERA_SPDIF1TX2MIX_INPUT_1_VOLUME: 1025 + case MADERA_EQ1MIX_INPUT_1_SOURCE: 1026 + case MADERA_EQ1MIX_INPUT_1_VOLUME: 1027 + case MADERA_EQ1MIX_INPUT_2_SOURCE: 1028 + case MADERA_EQ1MIX_INPUT_2_VOLUME: 1029 + case MADERA_EQ1MIX_INPUT_3_SOURCE: 1030 + case MADERA_EQ1MIX_INPUT_3_VOLUME: 1031 + case MADERA_EQ1MIX_INPUT_4_SOURCE: 1032 + case MADERA_EQ1MIX_INPUT_4_VOLUME: 1033 + case MADERA_EQ2MIX_INPUT_1_SOURCE: 1034 + case MADERA_EQ2MIX_INPUT_1_VOLUME: 1035 + case MADERA_EQ2MIX_INPUT_2_SOURCE: 1036 + case MADERA_EQ2MIX_INPUT_2_VOLUME: 1037 + case MADERA_EQ2MIX_INPUT_3_SOURCE: 1038 + case MADERA_EQ2MIX_INPUT_3_VOLUME: 1039 + case MADERA_EQ2MIX_INPUT_4_SOURCE: 1040 + case MADERA_EQ2MIX_INPUT_4_VOLUME: 1041 + case MADERA_EQ3MIX_INPUT_1_SOURCE: 1042 + case MADERA_EQ3MIX_INPUT_1_VOLUME: 1043 + case MADERA_EQ3MIX_INPUT_2_SOURCE: 1044 + case MADERA_EQ3MIX_INPUT_2_VOLUME: 1045 + case MADERA_EQ3MIX_INPUT_3_SOURCE: 1046 + case MADERA_EQ3MIX_INPUT_3_VOLUME: 1047 + case MADERA_EQ3MIX_INPUT_4_SOURCE: 1048 + case MADERA_EQ3MIX_INPUT_4_VOLUME: 1049 + case MADERA_EQ4MIX_INPUT_1_SOURCE: 1050 + case MADERA_EQ4MIX_INPUT_1_VOLUME: 1051 + case MADERA_EQ4MIX_INPUT_2_SOURCE: 1052 + case MADERA_EQ4MIX_INPUT_2_VOLUME: 1053 + case MADERA_EQ4MIX_INPUT_3_SOURCE: 1054 + case MADERA_EQ4MIX_INPUT_3_VOLUME: 1055 + case MADERA_EQ4MIX_INPUT_4_SOURCE: 1056 + case MADERA_EQ4MIX_INPUT_4_VOLUME: 1057 + case MADERA_DRC1LMIX_INPUT_1_SOURCE: 1058 + case MADERA_DRC1LMIX_INPUT_1_VOLUME: 1059 + case MADERA_DRC1LMIX_INPUT_2_SOURCE: 1060 + case MADERA_DRC1LMIX_INPUT_2_VOLUME: 1061 + case MADERA_DRC1LMIX_INPUT_3_SOURCE: 1062 + case MADERA_DRC1LMIX_INPUT_3_VOLUME: 1063 + case MADERA_DRC1LMIX_INPUT_4_SOURCE: 1064 + case MADERA_DRC1LMIX_INPUT_4_VOLUME: 1065 + case MADERA_DRC1RMIX_INPUT_1_SOURCE: 1066 + case MADERA_DRC1RMIX_INPUT_1_VOLUME: 1067 + case MADERA_DRC1RMIX_INPUT_2_SOURCE: 1068 + case MADERA_DRC1RMIX_INPUT_2_VOLUME: 1069 + case MADERA_DRC1RMIX_INPUT_3_SOURCE: 1070 + case MADERA_DRC1RMIX_INPUT_3_VOLUME: 1071 + case MADERA_DRC1RMIX_INPUT_4_SOURCE: 1072 + case MADERA_DRC1RMIX_INPUT_4_VOLUME: 1073 + case MADERA_DRC2LMIX_INPUT_1_SOURCE: 1074 + case MADERA_DRC2LMIX_INPUT_1_VOLUME: 1075 + case MADERA_DRC2LMIX_INPUT_2_SOURCE: 1076 + case MADERA_DRC2LMIX_INPUT_2_VOLUME: 1077 + case MADERA_DRC2LMIX_INPUT_3_SOURCE: 1078 + case MADERA_DRC2LMIX_INPUT_3_VOLUME: 1079 + case MADERA_DRC2LMIX_INPUT_4_SOURCE: 1080 + case MADERA_DRC2LMIX_INPUT_4_VOLUME: 1081 + case MADERA_DRC2RMIX_INPUT_1_SOURCE: 1082 + case MADERA_DRC2RMIX_INPUT_1_VOLUME: 1083 + case MADERA_DRC2RMIX_INPUT_2_SOURCE: 1084 + case MADERA_DRC2RMIX_INPUT_2_VOLUME: 1085 + case MADERA_DRC2RMIX_INPUT_3_SOURCE: 1086 + case MADERA_DRC2RMIX_INPUT_3_VOLUME: 1087 + case MADERA_DRC2RMIX_INPUT_4_SOURCE: 1088 + case MADERA_DRC2RMIX_INPUT_4_VOLUME: 1089 + case MADERA_HPLP1MIX_INPUT_1_SOURCE: 1090 + case MADERA_HPLP1MIX_INPUT_1_VOLUME: 1091 + case MADERA_HPLP1MIX_INPUT_2_SOURCE: 1092 + case MADERA_HPLP1MIX_INPUT_2_VOLUME: 1093 + case MADERA_HPLP1MIX_INPUT_3_SOURCE: 1094 + case MADERA_HPLP1MIX_INPUT_3_VOLUME: 1095 + case MADERA_HPLP1MIX_INPUT_4_SOURCE: 1096 + case MADERA_HPLP1MIX_INPUT_4_VOLUME: 1097 + case MADERA_HPLP2MIX_INPUT_1_SOURCE: 1098 + case MADERA_HPLP2MIX_INPUT_1_VOLUME: 1099 + case MADERA_HPLP2MIX_INPUT_2_SOURCE: 1100 + case MADERA_HPLP2MIX_INPUT_2_VOLUME: 1101 + case MADERA_HPLP2MIX_INPUT_3_SOURCE: 1102 + case MADERA_HPLP2MIX_INPUT_3_VOLUME: 1103 + case MADERA_HPLP2MIX_INPUT_4_SOURCE: 1104 + case MADERA_HPLP2MIX_INPUT_4_VOLUME: 1105 + case MADERA_HPLP3MIX_INPUT_1_SOURCE: 1106 + case MADERA_HPLP3MIX_INPUT_1_VOLUME: 1107 + case MADERA_HPLP3MIX_INPUT_2_SOURCE: 1108 + case MADERA_HPLP3MIX_INPUT_2_VOLUME: 1109 + case MADERA_HPLP3MIX_INPUT_3_SOURCE: 1110 + case MADERA_HPLP3MIX_INPUT_3_VOLUME: 1111 + case MADERA_HPLP3MIX_INPUT_4_SOURCE: 1112 + case MADERA_HPLP3MIX_INPUT_4_VOLUME: 1113 + case MADERA_HPLP4MIX_INPUT_1_SOURCE: 1114 + case MADERA_HPLP4MIX_INPUT_1_VOLUME: 1115 + case MADERA_HPLP4MIX_INPUT_2_SOURCE: 1116 + case MADERA_HPLP4MIX_INPUT_2_VOLUME: 1117 + case MADERA_HPLP4MIX_INPUT_3_SOURCE: 1118 + case MADERA_HPLP4MIX_INPUT_3_VOLUME: 1119 + case MADERA_HPLP4MIX_INPUT_4_SOURCE: 1120 + case MADERA_HPLP4MIX_INPUT_4_VOLUME: 1121 + case MADERA_DSP1LMIX_INPUT_1_SOURCE: 1122 + case MADERA_DSP1LMIX_INPUT_1_VOLUME: 1123 + case MADERA_DSP1LMIX_INPUT_2_SOURCE: 1124 + case MADERA_DSP1LMIX_INPUT_2_VOLUME: 1125 + case MADERA_DSP1LMIX_INPUT_3_SOURCE: 1126 + case MADERA_DSP1LMIX_INPUT_3_VOLUME: 1127 + case MADERA_DSP1LMIX_INPUT_4_SOURCE: 1128 + case MADERA_DSP1LMIX_INPUT_4_VOLUME: 1129 + case MADERA_DSP1RMIX_INPUT_1_SOURCE: 1130 + case MADERA_DSP1RMIX_INPUT_1_VOLUME: 1131 + case MADERA_DSP1RMIX_INPUT_2_SOURCE: 1132 + case MADERA_DSP1RMIX_INPUT_2_VOLUME: 1133 + case MADERA_DSP1RMIX_INPUT_3_SOURCE: 1134 + case MADERA_DSP1RMIX_INPUT_3_VOLUME: 1135 + case MADERA_DSP1RMIX_INPUT_4_SOURCE: 1136 + case MADERA_DSP1RMIX_INPUT_4_VOLUME: 1137 + case MADERA_DSP1AUX1MIX_INPUT_1_SOURCE: 1138 + case MADERA_DSP1AUX2MIX_INPUT_1_SOURCE: 1139 + case MADERA_DSP1AUX3MIX_INPUT_1_SOURCE: 1140 + case MADERA_DSP1AUX4MIX_INPUT_1_SOURCE: 1141 + case MADERA_DSP1AUX5MIX_INPUT_1_SOURCE: 1142 + case MADERA_DSP1AUX6MIX_INPUT_1_SOURCE: 1143 + case MADERA_ISRC1DEC1MIX_INPUT_1_SOURCE: 1144 + case MADERA_ISRC1DEC2MIX_INPUT_1_SOURCE: 1145 + case MADERA_ISRC1DEC3MIX_INPUT_1_SOURCE: 1146 + case MADERA_ISRC1DEC4MIX_INPUT_1_SOURCE: 1147 + case MADERA_ISRC1INT1MIX_INPUT_1_SOURCE: 1148 + case MADERA_ISRC1INT2MIX_INPUT_1_SOURCE: 1149 + case MADERA_ISRC1INT3MIX_INPUT_1_SOURCE: 1150 + case MADERA_ISRC1INT4MIX_INPUT_1_SOURCE: 1151 + case MADERA_ISRC2DEC1MIX_INPUT_1_SOURCE: 1152 + case MADERA_ISRC2DEC2MIX_INPUT_1_SOURCE: 1153 + case MADERA_ISRC2DEC3MIX_INPUT_1_SOURCE: 1154 + case MADERA_ISRC2DEC4MIX_INPUT_1_SOURCE: 1155 + case MADERA_ISRC2INT1MIX_INPUT_1_SOURCE: 1156 + case MADERA_ISRC2INT2MIX_INPUT_1_SOURCE: 1157 + case MADERA_ISRC2INT3MIX_INPUT_1_SOURCE: 1158 + case MADERA_ISRC2INT4MIX_INPUT_1_SOURCE: 1159 + case MADERA_FX_CTRL1 ... MADERA_FX_CTRL2: 1160 + case MADERA_EQ1_1 ... MADERA_EQ1_21: 1161 + case MADERA_EQ2_1 ... MADERA_EQ2_21: 1162 + case MADERA_EQ3_1 ... MADERA_EQ3_21: 1163 + case MADERA_EQ4_1 ... MADERA_EQ4_21: 1164 + case MADERA_DRC1_CTRL1 ... MADERA_DRC1_CTRL5: 1165 + case MADERA_DRC2_CTRL1 ... MADERA_DRC2_CTRL5: 1166 + case MADERA_HPLPF1_1 ... MADERA_HPLPF1_2: 1167 + case MADERA_HPLPF2_1 ... MADERA_HPLPF2_2: 1168 + case MADERA_HPLPF3_1 ... MADERA_HPLPF3_2: 1169 + case MADERA_HPLPF4_1 ... MADERA_HPLPF4_2: 1170 + case MADERA_ISRC_1_CTRL_1 ... MADERA_ISRC_1_CTRL_3: 1171 + case MADERA_ISRC_2_CTRL_1 ... MADERA_ISRC_2_CTRL_3: 1172 + case MADERA_GPIO1_CTRL_1 ... MADERA_GPIO15_CTRL_2: 1173 + case MADERA_IRQ1_STATUS_1 ... MADERA_IRQ1_STATUS_33: 1174 + case MADERA_IRQ1_MASK_1 ... MADERA_IRQ1_MASK_33: 1175 + case MADERA_IRQ1_RAW_STATUS_1 ... MADERA_IRQ1_RAW_STATUS_33: 1176 + case MADERA_INTERRUPT_DEBOUNCE_7: 1177 + case MADERA_IRQ1_CTRL: 1178 + return true; 1179 + default: 1180 + return false; 1181 + } 1182 + } 1183 + 1184 + static bool cs47l15_16bit_volatile_register(struct device *dev, 1185 + unsigned int reg) 1186 + { 1187 + switch (reg) { 1188 + case MADERA_SOFTWARE_RESET: 1189 + case MADERA_HARDWARE_REVISION: 1190 + case MADERA_WRITE_SEQUENCER_CTRL_0 ... MADERA_WRITE_SEQUENCER_CTRL_2: 1191 + case MADERA_HAPTICS_STATUS: 1192 + case MADERA_SAMPLE_RATE_1_STATUS: 1193 + case MADERA_SAMPLE_RATE_2_STATUS: 1194 + case MADERA_SAMPLE_RATE_3_STATUS: 1195 + case MADERA_HP_CTRL_1L: 1196 + case MADERA_HP_CTRL_1R: 1197 + case MADERA_MIC_DETECT_1_CONTROL_3: 1198 + case MADERA_MIC_DETECT_1_CONTROL_4: 1199 + case MADERA_HEADPHONE_DETECT_2: 1200 + case MADERA_HEADPHONE_DETECT_3: 1201 + case MADERA_HEADPHONE_DETECT_5: 1202 + case MADERA_INPUT_ENABLES_STATUS: 1203 + case MADERA_OUTPUT_STATUS_1: 1204 + case MADERA_RAW_OUTPUT_STATUS_1: 1205 + case MADERA_SPD1_TX_CHANNEL_STATUS_1: 1206 + case MADERA_SPD1_TX_CHANNEL_STATUS_2: 1207 + case MADERA_SPD1_TX_CHANNEL_STATUS_3: 1208 + case MADERA_FX_CTRL2: 1209 + case MADERA_IRQ1_STATUS_1 ... MADERA_IRQ1_STATUS_33: 1210 + case MADERA_IRQ1_RAW_STATUS_1 ... MADERA_IRQ1_RAW_STATUS_33: 1211 + return true; 1212 + default: 1213 + return false; 1214 + } 1215 + } 1216 + 1217 + static bool cs47l15_32bit_readable_register(struct device *dev, 1218 + unsigned int reg) 1219 + { 1220 + switch (reg) { 1221 + case MADERA_WSEQ_SEQUENCE_1 ... MADERA_WSEQ_SEQUENCE_225: 1222 + case MADERA_OTP_HPDET_CAL_1 ... MADERA_OTP_HPDET_CAL_2: 1223 + case MADERA_DSP1_CONFIG_1 ... MADERA_DSP1_PMEM_ERR_ADDR___XMEM_ERR_ADDR: 1224 + return true; 1225 + default: 1226 + return cs47l15_is_adsp_memory(dev, reg); 1227 + } 1228 + } 1229 + 1230 + static bool cs47l15_32bit_volatile_register(struct device *dev, 1231 + unsigned int reg) 1232 + { 1233 + switch (reg) { 1234 + case MADERA_WSEQ_SEQUENCE_1 ... MADERA_WSEQ_SEQUENCE_225: 1235 + case MADERA_OTP_HPDET_CAL_1 ... MADERA_OTP_HPDET_CAL_2: 1236 + case MADERA_DSP1_CONFIG_1 ... MADERA_DSP1_PMEM_ERR_ADDR___XMEM_ERR_ADDR: 1237 + return true; 1238 + default: 1239 + return cs47l15_is_adsp_memory(dev, reg); 1240 + } 1241 + } 1242 + 1243 + const struct regmap_config cs47l15_16bit_spi_regmap = { 1244 + .name = "cs47l15_16bit", 1245 + .reg_bits = 32, 1246 + .pad_bits = 16, 1247 + .val_bits = 16, 1248 + 1249 + .max_register = MADERA_INTERRUPT_RAW_STATUS_1, 1250 + .readable_reg = &cs47l15_16bit_readable_register, 1251 + .volatile_reg = &cs47l15_16bit_volatile_register, 1252 + 1253 + .cache_type = REGCACHE_RBTREE, 1254 + .reg_defaults = cs47l15_reg_default, 1255 + .num_reg_defaults = ARRAY_SIZE(cs47l15_reg_default), 1256 + }; 1257 + EXPORT_SYMBOL_GPL(cs47l15_16bit_spi_regmap); 1258 + 1259 + const struct regmap_config cs47l15_16bit_i2c_regmap = { 1260 + .name = "cs47l15_16bit", 1261 + .reg_bits = 32, 1262 + .val_bits = 16, 1263 + 1264 + .max_register = MADERA_INTERRUPT_RAW_STATUS_1, 1265 + .readable_reg = &cs47l15_16bit_readable_register, 1266 + .volatile_reg = &cs47l15_16bit_volatile_register, 1267 + 1268 + .cache_type = REGCACHE_RBTREE, 1269 + .reg_defaults = cs47l15_reg_default, 1270 + .num_reg_defaults = ARRAY_SIZE(cs47l15_reg_default), 1271 + }; 1272 + EXPORT_SYMBOL_GPL(cs47l15_16bit_i2c_regmap); 1273 + 1274 + const struct regmap_config cs47l15_32bit_spi_regmap = { 1275 + .name = "cs47l15_32bit", 1276 + .reg_bits = 32, 1277 + .reg_stride = 2, 1278 + .pad_bits = 16, 1279 + .val_bits = 32, 1280 + 1281 + .max_register = MADERA_DSP1_PMEM_ERR_ADDR___XMEM_ERR_ADDR, 1282 + .readable_reg = &cs47l15_32bit_readable_register, 1283 + .volatile_reg = &cs47l15_32bit_volatile_register, 1284 + 1285 + .cache_type = REGCACHE_RBTREE, 1286 + }; 1287 + EXPORT_SYMBOL_GPL(cs47l15_32bit_spi_regmap); 1288 + 1289 + const struct regmap_config cs47l15_32bit_i2c_regmap = { 1290 + .name = "cs47l15_32bit", 1291 + .reg_bits = 32, 1292 + .reg_stride = 2, 1293 + .val_bits = 32, 1294 + 1295 + .max_register = MADERA_DSP1_PMEM_ERR_ADDR___XMEM_ERR_ADDR, 1296 + .readable_reg = &cs47l15_32bit_readable_register, 1297 + .volatile_reg = &cs47l15_32bit_volatile_register, 1298 + 1299 + .cache_type = REGCACHE_RBTREE, 1300 + }; 1301 + EXPORT_SYMBOL_GPL(cs47l15_32bit_i2c_regmap);
+44
drivers/mfd/madera-core.c
··· 31 31 32 32 #include "madera.h" 33 33 34 + #define CS47L15_SILICON_ID 0x6370 34 35 #define CS47L35_SILICON_ID 0x6360 35 36 #define CS47L85_SILICON_ID 0x6338 36 37 #define CS47L90_SILICON_ID 0x6364 ··· 45 44 46 45 static const struct mfd_cell madera_ldo1_devs[] = { 47 46 { .name = "madera-ldo1" }, 47 + }; 48 + 49 + static const char * const cs47l15_supplies[] = { 50 + "MICVDD", 51 + "CPVDD1", 52 + "SPKVDD", 53 + }; 54 + 55 + static const struct mfd_cell cs47l15_devs[] = { 56 + { .name = "madera-pinctrl", }, 57 + { .name = "madera-irq" }, 58 + { .name = "madera-gpio" }, 59 + { 60 + .name = "madera-extcon", 61 + .parent_supplies = cs47l15_supplies, 62 + .num_parent_supplies = 1, /* We only need MICVDD */ 63 + }, 64 + { 65 + .name = "cs47l15-codec", 66 + .parent_supplies = cs47l15_supplies, 67 + .num_parent_supplies = ARRAY_SIZE(cs47l15_supplies), 68 + }, 48 69 }; 49 70 50 71 static const char * const cs47l35_supplies[] = { ··· 152 129 const char *madera_name_from_type(enum madera_type type) 153 130 { 154 131 switch (type) { 132 + case CS47L15: 133 + return "CS47L15"; 155 134 case CS47L35: 156 135 return "CS47L35"; 157 136 case CS47L85: ··· 316 291 EXPORT_SYMBOL_GPL(madera_pm_ops); 317 292 318 293 const struct of_device_id madera_of_match[] = { 294 + { .compatible = "cirrus,cs47l15", .data = (void *)CS47L15 }, 319 295 { .compatible = "cirrus,cs47l35", .data = (void *)CS47L35 }, 320 296 { .compatible = "cirrus,cs47l85", .data = (void *)CS47L85 }, 321 297 { .compatible = "cirrus,cs47l90", .data = (void *)CS47L90 }, ··· 365 339 * childbiases for each micbias. Unspecified values default to 0. 366 340 */ 367 341 switch (madera->type) { 342 + case CS47L15: 343 + madera->num_micbias = 1; 344 + madera->num_childbias[0] = 3; 345 + return; 368 346 case CS47L35: 369 347 madera->num_micbias = 2; 370 348 madera->num_childbias[0] = 2; ··· 432 402 * No devm_ because we need to control shutdown order of children. 433 403 */ 434 404 switch (madera->type) { 405 + case CS47L15: 435 406 case CS47L35: 436 407 case CS47L90: 437 408 case CS47L91: ··· 502 471 } 503 472 504 473 switch (hwid) { 474 + case CS47L15_SILICON_ID: 475 + if (IS_ENABLED(CONFIG_MFD_CS47L15)) { 476 + switch (madera->type) { 477 + case CS47L15: 478 + patch_fn = &cs47l15_patch; 479 + mfd_devs = cs47l15_devs; 480 + n_devs = ARRAY_SIZE(cs47l15_devs); 481 + break; 482 + default: 483 + break; 484 + } 485 + } 486 + break; 505 487 case CS47L35_SILICON_ID: 506 488 if (IS_ENABLED(CONFIG_MFD_CS47L35)) { 507 489 switch (madera->type) {
+7
drivers/mfd/madera-i2c.c
··· 39 39 type = id->driver_data; 40 40 41 41 switch (type) { 42 + case CS47L15: 43 + if (IS_ENABLED(CONFIG_MFD_CS47L15)) { 44 + regmap_16bit_config = &cs47l15_16bit_i2c_regmap; 45 + regmap_32bit_config = &cs47l15_32bit_i2c_regmap; 46 + } 47 + break; 42 48 case CS47L35: 43 49 if (IS_ENABLED(CONFIG_MFD_CS47L35)) { 44 50 regmap_16bit_config = &cs47l35_16bit_i2c_regmap; ··· 119 113 } 120 114 121 115 static const struct i2c_device_id madera_i2c_id[] = { 116 + { "cs47l15", CS47L15 }, 122 117 { "cs47l35", CS47L35 }, 123 118 { "cs47l85", CS47L85 }, 124 119 { "cs47l90", CS47L90 },
+7
drivers/mfd/madera-spi.c
··· 39 39 type = id->driver_data; 40 40 41 41 switch (type) { 42 + case CS47L15: 43 + if (IS_ENABLED(CONFIG_MFD_CS47L15)) { 44 + regmap_16bit_config = &cs47l15_16bit_spi_regmap; 45 + regmap_32bit_config = &cs47l15_32bit_spi_regmap; 46 + } 47 + break; 42 48 case CS47L35: 43 49 if (IS_ENABLED(CONFIG_MFD_CS47L35)) { 44 50 regmap_16bit_config = &cs47l35_16bit_spi_regmap; ··· 118 112 } 119 113 120 114 static const struct spi_device_id madera_spi_ids[] = { 115 + { "cs47l15", CS47L15 }, 121 116 { "cs47l35", CS47L35 }, 122 117 { "cs47l85", CS47L85 }, 123 118 { "cs47l90", CS47L90 },
+6
drivers/mfd/madera.h
··· 24 24 25 25 const char *madera_name_from_type(enum madera_type type); 26 26 27 + extern const struct regmap_config cs47l15_16bit_spi_regmap; 28 + extern const struct regmap_config cs47l15_32bit_spi_regmap; 29 + extern const struct regmap_config cs47l15_16bit_i2c_regmap; 30 + extern const struct regmap_config cs47l15_32bit_i2c_regmap; 31 + int cs47l15_patch(struct madera *madera); 32 + 27 33 extern const struct regmap_config cs47l35_16bit_spi_regmap; 28 34 extern const struct regmap_config cs47l35_32bit_spi_regmap; 29 35 extern const struct regmap_config cs47l35_16bit_i2c_regmap;
+2
include/linux/mfd/madera/core.h
··· 27 27 CS47L90 = 3, 28 28 CS47L91 = 4, 29 29 WM1840 = 7, 30 + CS47L15 = 8, 30 31 }; 31 32 32 33 #define MADERA_MAX_CORE_SUPPLIES 2 33 34 #define MADERA_MAX_GPIOS 40 34 35 36 + #define CS47L15_NUM_GPIOS 15 35 37 #define CS47L35_NUM_GPIOS 16 36 38 #define CS47L85_NUM_GPIOS 40 37 39 #define CS47L90_NUM_GPIOS 38
+5
include/linux/mfd/madera/registers.h
··· 244 244 #define MADERA_IN6R_CONTROL 0x33C 245 245 #define MADERA_ADC_DIGITAL_VOLUME_6R 0x33D 246 246 #define MADERA_DMIC6R_CONTROL 0x33E 247 + #define CS47L15_ADC_INT_BIAS 0x3A8 248 + #define CS47L15_PGA_BIAS_SEL 0x3C4 247 249 #define MADERA_OUTPUT_ENABLES_1 0x400 248 250 #define MADERA_OUTPUT_STATUS_1 0x401 249 251 #define MADERA_RAW_OUTPUT_STATUS_1 0x406 ··· 1204 1202 #define MADERA_GPIO1_CTRL_2 0x1701 1205 1203 #define MADERA_GPIO2_CTRL_1 0x1702 1206 1204 #define MADERA_GPIO2_CTRL_2 0x1703 1205 + #define MADERA_GPIO15_CTRL_1 0x171C 1206 + #define MADERA_GPIO15_CTRL_2 0x171D 1207 1207 #define MADERA_GPIO16_CTRL_1 0x171E 1208 1208 #define MADERA_GPIO16_CTRL_2 0x171F 1209 1209 #define MADERA_GPIO38_CTRL_1 0x174A ··· 1236 1232 #define MADERA_IRQ2_CTRL 0x1A82 1237 1233 #define MADERA_INTERRUPT_RAW_STATUS_1 0x1AA0 1238 1234 #define MADERA_WSEQ_SEQUENCE_1 0x3000 1235 + #define MADERA_WSEQ_SEQUENCE_225 0x31C0 1239 1236 #define MADERA_WSEQ_SEQUENCE_252 0x31F6 1240 1237 #define CS47L35_OTP_HPDET_CAL_1 0x31F8 1241 1238 #define CS47L35_OTP_HPDET_CAL_2 0x31FA