return back the modification
[tas256xsw-android/tas2563-android-driver.git] / tas2563.h
2 #ifndef __TAS2563_
3 #define __TAS2563_
5 #define TAS2563_DRIVER_ID           "1.0.0"
7 #define TAS2563_YRAM_BOOK1                              140
9 #define TAS2563_YRAM1_PAGE                              42
10 #define TAS2563_YRAM1_START_REG                 88
11 #define TAS2563_YRAM1_END_REG                   127
13 #define TAS2563_YRAM2_START_PAGE                43
14 #define TAS2563_YRAM2_END_PAGE                  49
15 #define TAS2563_YRAM2_START_REG                 8
16 #define TAS2563_YRAM2_END_REG                   127
18 #define TAS2563_YRAM3_PAGE                              50
19 #define TAS2563_YRAM3_START_REG                 8
20 #define TAS2563_YRAM3_END_REG                   27
22 /* should not include B0_P53_R44-R47 */
23 #define TAS2563_YRAM_BOOK2                              0
24 #define TAS2563_YRAM4_START_PAGE                50
25 #define TAS2563_YRAM4_END_PAGE                  60
26 #define TAS2563_YRAM4_START_REG                 8
27 #define TAS2563_YRAM4_END_REG                   127
29 #define TAS2563_YRAM5_PAGE                              61
30 #define TAS2563_YRAM5_START_REG                 8
31 #define TAS2563_YRAM5_END_REG                   27
33 struct TYCRC {
34         unsigned char mnOffset;
35         unsigned char mnLen;
36 };
39 /* Book Control Register (available in page0 of each book) */
40 #define TAS2563_BOOKCTL_PAGE            0
41 #define TAS2563_BOOKCTL_REG         127
43 #define TAS2563_REG(book, page, reg)            ((((unsigned int)book * 256 * 128) + \
44                                                  ((unsigned int)page * 128)) + reg)
46     /* Page */
47 #define TAS2563_Page  TAS2563_REG(0x0, 0x0, 0x00)
48 #define TAS2563_Page_Page_Mask  (0xff << 0)
51 #define TAS2563_BOOK_ID(reg)                    (reg / (256 * 128))
53 #define TAS2563_PAGE_ID(reg)                    ((reg % (256 * 128)) / 128)
55 #define TAS2563_BOOK_REG(reg)                   (reg % (256 * 128))
57 #define TAS2563_PAGE_REG(reg)                   ((reg % (256 * 128)) % 128)
60     /* Software Reset */
61 #define TAS2563_SoftwareReset  TAS2563_REG(0x0, 0X0, 0x01)
62 #define TAS2563_SoftwareReset_SoftwareReset_Mask  (0x1 << 0),
63 #define TAS2563_SoftwareReset_SoftwareReset_DontReset  (0x0 << 0)
64 #define TAS2563_SoftwareReset_SoftwareReset_Reset  (0x1 << 0)
66     /* Power Control */
67 #define TAS2563_PowerControl  TAS2563_REG(0x0, 0x0, 0x02)
68 #define TAS2563_PowerControl_ISNSPower_Mask  (0x1 << 3)
69 #define TAS2563_PowerControl_ISNSPower_Active  (0x0 << 3)
70 #define TAS2563_PowerControl_ISNSPower_PoweredDown  (0x1 << 3)
71 #define TAS2563_PowerControl_VSNSPower_Mask  (0x1 << 2)
72 #define TAS2563_PowerControl_VSNSPower_Active  (0x0 << 2)
73 #define TAS2563_PowerControl_VSNSPower_PoweredDown  (0x1 << 2)
74 #define TAS2563_PowerControl_OperationalMode10_Mask  (0x3 << 0)
75 #define TAS2563_PowerControl_OperationalMode10_Active  (0x0 << 0)
76 #define TAS2563_PowerControl_OperationalMode10_Mute  (0x1 << 0)
77 #define TAS2563_PowerControl_OperationalMode10_Shutdown  (0x2 << 0)
79         /* data format */
80 #define TAS2563_DATAFORMAT_SHIFT                2
81 #define TAS2563_DATAFORMAT_I2S                  0x0
82 #define TAS2563_DATAFORMAT_DSP                  0x1
83 #define TAS2563_DATAFORMAT_RIGHT_J              0x2
84 #define TAS2563_DATAFORMAT_LEFT_J               0x3
86 #define TAS2563_DAI_FMT_MASK            (0x7 << TAS2563_DATAFORMAT_SHIFT)
88     /* Playback Configuration Reg0 */
89 #define TAS2563_PlaybackConfigurationReg0  TAS2563_REG(0x0, 0x0, 0x03)
90 #define TAS2563_PlaybackConfigurationReg0_PDMPinMapping_Mask  (0x1 << 7)
91 #define TAS2563_PlaybackConfigurationReg0_PDMPinMapping_Pdm0  (0x0 << 7)
92 #define TAS2563_PlaybackConfigurationReg0_PDMPinMapping_Pdm1  (0x1 << 7)
93 #define TAS2563_PlaybackConfigurationReg0_PlaybackPDMSource_Mask  (0x1 << 6)
94 #define TAS2563_PlaybackConfigurationReg0_PlaybackSource_Mask  (0x1 << 5)
95 #define TAS2563_PlaybackConfigurationReg0_PlaybackSource_Pcm  (0x0 << 5)
96 #define TAS2563_PlaybackConfigurationReg0_PlaybackSource_Pdm  (0x1 << 5)
97 #define TAS2563_PlaybackConfigurationReg0_AmplifierLevel40_Mask  (0x1f << 0)
99     /* Misc Configuration Reg0 */
100 #define TAS2563_MiscConfigurationReg0  TAS2563_REG(0x0, 0x0, 0x04)
101 #define TAS2563_MiscConfigurationReg0_DVCRampRate76_Mask  (0x3 << 6)
102 #define TAS2563_MiscConfigurationReg0_DVCRampRate76_0_5dbPer1Sample  (0x0 << 6)
103 #define TAS2563_MiscConfigurationReg0_DVCRampRate76_0_5dbPer4Sample  (0x1 << 6)
104 #define TAS2563_MiscConfigurationReg0_DVCRampRate76_0_5dbPer8Sample  (0x2 << 6)
105 #define TAS2563_MiscConfigurationReg0_DVCRampRate76_VolRampDisabled  (0x3 << 6)
106 #define TAS2563_MiscConfigurationReg0_OCERetry_Mask  (0x1 << 5)
107 #define TAS2563_MiscConfigurationReg0_OCERetry_DoNotRetry  (0x0 << 5)
108 #define TAS2563_MiscConfigurationReg0_OCERetry_Retry  (0x1 << 5)
109 #define TAS2563_MiscConfigurationReg0_OTERetry_Mask  (0x1 << 4)
110 #define TAS2563_MiscConfigurationReg0_OTERetry_DoNotRetry  (0x0 << 4)
111 #define TAS2563_MiscConfigurationReg0_OTERetry_Retry  (0x1 << 4)
112 #define TAS2563_MiscConfigurationReg0_IRQZPull_Mask  (0x1 << 3)
113 #define TAS2563_MiscConfigurationReg0_IRQZPull_Disabled  (0x0 << 3)
114 #define TAS2563_MiscConfigurationReg0_IRQZPull_Enabled  (0x1 << 3)
115 #define TAS2563_MiscConfigurationReg0_AMPSS_Mask  (0x1 << 2)
116 #define TAS2563_MiscConfigurationReg0_AMPSS_Disabled  (0x0 << 2)
117 #define TAS2563_MiscConfigurationReg0_AMPSS_Enabled  (0x1 << 2)
120     /* TDM Configuration Reg0 */
121 #define TAS2563_TDMConfigurationReg0  TAS2563_REG(0x0, 0x0, 0x06)
122 #define TAS2563_TDMConfigurationReg0_SAMPRATERAMP_Mask  (0x1 << 5)
123 #define TAS2563_TDMConfigurationReg0_SAMPRATERAMP_48KHz  (0x0 << 5)
124 #define TAS2563_TDMConfigurationReg0_SAMPRATERAMP_44_1KHz  (0x1 << 5)
125 #define TAS2563_TDMConfigurationReg0_DETECTSAMPRATE_Mask  (0x1 << 4)
126 #define TAS2563_TDMConfigurationReg0_DETECTSAMPRATE_Disabled  (0x1 << 4)
127 #define TAS2563_TDMConfigurationReg0_DETECTSAMPRATE_Enabled  (0x0 << 4)
128 #define TAS2563_TDMConfigurationReg0_SAMPRATE31_Mask  (0x7 << 1)
129 #define TAS2563_TDMConfigurationReg0_SAMPRATE31_44_1_48kHz  (0x4 << 1)
130 #define TAS2563_TDMConfigurationReg0_SAMPRATE31_88_2_96kHz  (0x5 << 1)
131 #define TAS2563_TDMConfigurationReg0_SAMPRATE31_176_4_192kHz  (0x6 << 1)
132 #define TAS2563_TDMConfigurationReg0_FRAMESTART_Mask  (0x1 << 0)
133 #define TAS2563_TDMConfigurationReg0_FRAMESTART_LowToHigh  (0x0 << 0)
134 #define TAS2563_TDMConfigurationReg0_FRAMESTART_HighToLow  (0x1 << 0)
136     /* TDM Configuration Reg1 */
137 #define TAS2563_TDMConfigurationReg1  TAS2563_REG(0x0, 0x0, 0x07)
138 #define TAS2563_TDMConfigurationReg1_RXJUSTIFY_Mask  (0x1 << 6)
139 #define TAS2563_TDMConfigurationReg1_RXJUSTIFY_Left  (0x0 << 6)
140 #define TAS2563_TDMConfigurationReg1_RXJUSTIFY_Right  (0x1 << 6)
141 #define TAS2563_TDMConfigurationReg1_RXOFFSET51_Mask  (0x1f << 1)
142 #define TAS2563_TDMConfigurationReg1_RXOFFSET51_Shift (1)
143 #define TAS2563_TDMConfigurationReg1_RXEDGE_Mask  (0x1 << 0)
144 #define TAS2563_TDMConfigurationReg1_RXEDGE_Rising  (0x0 << 0)
145 #define TAS2563_TDMConfigurationReg1_RXEDGE_Falling  (0x1 << 0)
147     /* TDM Configuration Reg2 */
148 #define TAS2563_TDMConfigurationReg2  TAS2563_REG(0x0, 0x0, 0x08)
149 #define TAS2563_TDMConfigurationReg2_RXSCFG54_Mask  (0x3 << 4)
150 #define TAS2563_TDMConfigurationReg2_RXSCFG54_Mono_I2C  (0x0 << 4)
151 #define TAS2563_TDMConfigurationReg2_RXSCFG54_Mono_Left  (0x1 << 4)
152 #define TAS2563_TDMConfigurationReg2_RXSCFG54_Mono_Right  (0x2 << 4)
153 #define TAS2563_TDMConfigurationReg2_RXSCFG54_Stereo_DownMix  (0x3 << 4)
154 #define TAS2563_TDMConfigurationReg2_RXWLEN32_Mask  (0x3 << 2)
155 #define TAS2563_TDMConfigurationReg2_RXWLEN32_16Bits  (0x0 << 2)
156 #define TAS2563_TDMConfigurationReg2_RXWLEN32_20Bits  (0x1 << 2)
157 #define TAS2563_TDMConfigurationReg2_RXWLEN32_24Bits  (0x2 << 2)
158 #define TAS2563_TDMConfigurationReg2_RXWLEN32_32Bits  (0x3 << 2)
159 #define TAS2563_TDMConfigurationReg2_RXSLEN10_Mask  (0x3 << 0)
160 #define TAS2563_TDMConfigurationReg2_RXSLEN10_16Bits  (0x0 << 0)
161 #define TAS2563_TDMConfigurationReg2_RXSLEN10_24Bits  (0x1 << 0)
162 #define TAS2563_TDMConfigurationReg2_RXSLEN10_32Bits  (0x2 << 0)
164     /* TDM Configuration Reg3 */
165 #define TAS2563_TDMConfigurationReg3  TAS2563_REG(0x0, 0x0, 0x09)
166 #define TAS2563_TDMConfigurationReg3_RXSLOTRight74_Mask  (0xf << 4)
167 #define TAS2563_TDMConfigurationReg3_RXSLOTRight74_Shift 4
168 #define TAS2563_TDMConfigurationReg3_RXSLOTLeft30_Mask  (0xf << 0)
169 #define TAS2563_TDMConfigurationReg3_RXSLOTLeft30_Shift 0
171     /* TDM Configuration Reg4 */
172 #define TAS2563_TDMConfigurationReg4  TAS2563_REG(0x0, 0x0, 0x0a)
173 #define TAS2563_TDMConfigurationReg4_TXKEEPER_Mask  (0x1 << 5)
174 #define TAS2563_TDMConfigurationReg4_TXKEEPER_Disable  (0x0 << 5)
175 #define TAS2563_TDMConfigurationReg4_TXKEEPER_Enable  (0x1 << 5)
176 #define TAS2563_TDMConfigurationReg4_TXFILL_Mask  (0x1 << 4)
177 #define TAS2563_TDMConfigurationReg4_TXFILL_Transmit0  (0x0 << 4)
178 #define TAS2563_TDMConfigurationReg4_TXFILL_TransmitHiz  (0x1 << 4)
179 #define TAS2563_TDMConfigurationReg4_TXOFFSET31_Mask  (0x7 << 1)
180 #define TAS2563_TDMConfigurationReg4_TXEDGE_Mask  (0x1 << 0)
181 #define TAS2563_TDMConfigurationReg4_TXEDGE_Rising  (0x0 << 0)
182 #define TAS2563_TDMConfigurationReg4_TXEDGE_Falling  (0x1 << 0)
184     /* TDM Configuration Reg5 */
185 #define TAS2563_TDMConfigurationReg5  TAS2563_REG(0x0, 0x0, 0x0b)
186 #define TAS2563_TDMConfigurationReg5_VSNSTX_Mask  (0x1 << 6)
187 #define TAS2563_TDMConfigurationReg5_VSNSTX_Disable  (0x0 << 6)
188 #define TAS2563_TDMConfigurationReg5_VSNSTX_Enable  (0x1 << 6)
189 #define TAS2563_TDMConfigurationReg5_VSNSSLOT50_Mask  (0x3f << 0)
191     /* TDM Configuration Reg6 */
192 #define TAS2563_TDMConfigurationReg6  TAS2563_REG(0x0, 0x0, 0xc)
193 #define TAS2563_TDMConfigurationReg6_ISNSTX_Mask  (0x1 << 6)
194 #define TAS2563_TDMConfigurationReg6_ISNSTX_Disable  (0x0 << 6)
195 #define TAS2563_TDMConfigurationReg6_ISNSTX_Enable  (0x1 << 6)
196 #define TAS2563_TDMConfigurationReg6_ISNSSLOT50_Mask  (0x3f << 0)
198     /* TDM Configuration Reg7 */
199 #define TAS2563_TDMConfigurationReg7  TAS2563_REG(0x0, 0x0, 0x0d)
200 #define TAS2563_TDMConfigurationReg7_PDMTX_Mask  (0x1 << 6)
201 #define TAS2563_TDMConfigurationReg7_PDMTX_Disable  (0x0 << 6)
202 #define TAS2563_TDMConfigurationReg7_PDMTX_Enable  (0x1 << 6)
203 #define TAS2563_TDMConfigurationReg7_PDMSLOT50_Mask  (0x3f << 0)
205     /* TDM Configuration Reg8 */
206 #define TAS2563_TDMConfigurationReg8  TAS2563_REG(0x0, 0x0, 0x0e)
207 #define TAS2563_TDMConfigurationReg8_VBATSLEN_Mask  (0x1 << 7)
208 #define TAS2563_TDMConfigurationReg8_VBATSLEN_8Bits  (0x0 << 7)
209 #define TAS2563_TDMConfigurationReg8_VBATSLEN_16Bits  (0x1 << 7)
210 #define TAS2563_TDMConfigurationReg8_VBATTX_Mask  (0x1 << 6)
211 #define TAS2563_TDMConfigurationReg8_VBATTX_Disable  (0x0 << 6)
212 #define TAS2563_TDMConfigurationReg8_VBATTX_Enable  (0x1 << 6)
213 #define TAS2563_TDMConfigurationReg8_VBATSLOT50_Mask  (0x3f << 0)
215     /* TDM Configuration Reg9 */
216 #define TAS2563_TDMConfigurationReg9  TAS2563_REG(0x0, 0x0, 0xf)
217 #define TAS2563_TDMConfigurationReg9_TEMPTX_Mask  (0x1 << 6)
218 #define TAS2563_TDMConfigurationReg9_TEMPTX_Disable  (0x0 << 6)
219 #define TAS2563_TDMConfigurationReg9_TEMPTX_Enable  (0x1 << 6)
220 #define TAS2563_TDMConfigurationReg9_TEMPSLOT50_Mask  (0x3f << 0)
222     /* TDM Configuration Reg10 */
223 #define TAS2563_TDMConfigurationReg10  TAS2563_REG(0x0, 0x0, 0x10)
224 #define TAS2563_TDMConfigurationReg10_GAINTX_Mask  (0x1 << 6)
225 #define TAS2563_TDMConfigurationReg10_GAINTX_Disable  (0x0 << 6)
226 #define TAS2563_TDMConfigurationReg10_GAINTX_Enable  (0x1 << 6)
227 #define TAS2563_TDMConfigurationReg10_GAINSLOT50_Mask  (0x3f << 0)
229     /* Limiter Configuration Reg0 */
230 #define TAS2563_LimiterConfigurationReg0  TAS2563_REG(0x0, 0x0, 0x12)
231 #define TAS2563_LimiterConfigurationReg0_LIMATKST54_Mask  (0x3 << 4)
232 #define TAS2563_LimiterConfigurationReg0_LIMATKST54_1  (0x2 << 4)
233 #define TAS2563_LimiterConfigurationReg0_LIMATKST54_2  (0x3 << 4)
234 #define TAS2563_LimiterConfigurationReg0_LIMATKST54_0_25  (0x0 << 4)
235 #define TAS2563_LimiterConfigurationReg0_LIMATKST54_0_5  (0x1 << 4)
236 #define TAS2563_LimiterConfigurationReg0_LIMATKRT31_Mask  (0x7 << 1)
237 #define TAS2563_LimiterConfigurationReg0_LIMATKRT31_5  (0x0 << 1)
238 #define TAS2563_LimiterConfigurationReg0_LIMATKRT31_10  (0x1 << 1)
239 #define TAS2563_LimiterConfigurationReg0_LIMATKRT31_20  (0x2 << 1)
240 #define TAS2563_LimiterConfigurationReg0_LIMATKRT31_40  (0x3 << 1)
241 #define TAS2563_LimiterConfigurationReg0_LIMATKRT31_80  (0x4 << 1)
242 #define TAS2563_LimiterConfigurationReg0_LIMATKRT31_160  (0x5 << 1)
243 #define TAS2563_LimiterConfigurationReg0_LIMATKRT31_320  (0x6 << 1)
244 #define TAS2563_LimiterConfigurationReg0_LIMATKRT31_640  (0x7 << 1)
245 #define TAS2563_LimiterConfigurationReg0_LIMEN_Mask  (0x1 << 0)
246 #define TAS2563_LimiterConfigurationReg0_LIMEN_Disabled  (0x0 << 0)
247 #define TAS2563_LimiterConfigurationReg0_LIMEN_Enabled  (0x1 << 0)
249     /* Limiter Configuration Reg1 */
250 #define TAS2563_LimiterConfigurationReg1  TAS2563_REG(0x0, 0x0, 0x13)
251 #define TAS2563_LimiterConfigurationReg1_LIMRLSST76_Mask  (0x3 << 6)
252 #define TAS2563_LimiterConfigurationReg1_LIMRLSST76_1  (0x2 << 6)
253 #define TAS2563_LimiterConfigurationReg1_LIMRLSST76_2  (0x3 << 6)
254 #define TAS2563_LimiterConfigurationReg1_LIMRLSST76_0_25  (0x0 << 6)
255 #define TAS2563_LimiterConfigurationReg1_LIMRLSST76_0_5  (0x1 << 6)
256 #define TAS2563_LimiterConfigurationReg1_LIMRLSRT53_Mask  (0x7 << 3)
257 #define TAS2563_LimiterConfigurationReg1_LIMRLSRT53_10  (0x0 << 3)
258 #define TAS2563_LimiterConfigurationReg1_LIMRLSRT53_50  (0x1 << 3)
259 #define TAS2563_LimiterConfigurationReg1_LIMRLSRT53_100  (0x2 << 3)
260 #define TAS2563_LimiterConfigurationReg1_LIMRLSRT53_250  (0x3 << 3)
261 #define TAS2563_LimiterConfigurationReg1_LIMRLSRT53_500  (0x4 << 3)
262 #define TAS2563_LimiterConfigurationReg1_LIMRLSRT53_750  (0x5 << 3)
263 #define TAS2563_LimiterConfigurationReg1_LIMRLSRT53_1000  (0x6 << 3)
264 #define TAS2563_LimiterConfigurationReg1_LIMRLSRT53_1500  (0x7 << 3)
265 #define TAS2563_LimiterConfigurationReg1_LIMHLDTM20_Mask  (0x7 << 0)
266 #define TAS2563_LimiterConfigurationReg1_LIMHLDTM20_0  (0x0 << 0)
267 #define TAS2563_LimiterConfigurationReg1_LIMHLDTM20_10  (0x1 << 0)
268 #define TAS2563_LimiterConfigurationReg1_LIMHLDTM20_25  (0x2 << 0)
269 #define TAS2563_LimiterConfigurationReg1_LIMHLDTM20_50  (0x3 << 0)
270 #define TAS2563_LimiterConfigurationReg1_LIMHLDTM20_100  (0x4 << 0)
271 #define TAS2563_LimiterConfigurationReg1_LIMHLDTM20_250  (0x5 << 0)
272 #define TAS2563_LimiterConfigurationReg1_LIMHLDTM20_500  (0x6 << 0)
273 #define TAS2563_LimiterConfigurationReg1_LIMHLDTM20_1000  (0x7 << 0)
275     /* Brown Out Prevention Reg0 */
276 #define TAS2563_BrownOutPreventionReg0  TAS2563_REG(0x0, 0x0, 0x1B)
277 #define TAS2563_BrownOutPreventionReg0_LIMSLOPE54_Mask  (0x3 << 4)
278 #define TAS2563_BrownOutPreventionReg0_LIMSLOPE54_1  (0x0 << 4)
279 #define TAS2563_BrownOutPreventionReg0_LIMSLOPE54_2  (0x2 << 4)
280 #define TAS2563_BrownOutPreventionReg0_LIMSLOPE54_4  (0x3 << 4)
281 #define TAS2563_BrownOutPreventionReg0_LIMSLOPE54_1_5  (0x1 << 4)
282 #define TAS2563_BrownOutPreventionReg0_BOPHLDCLR_Mask  (0x1 << 3)
283 #define TAS2563_BrownOutPreventionReg0_BOPHLDCLR_DontClear  (0x0 << 3)
284 #define TAS2563_BrownOutPreventionReg0_BOPHLDCLR_Clear  (0x1 << 3)
285 #define TAS2563_BrownOutPreventionReg0_BOPINFHLD_Mask  (0x1 << 2)
286 #define TAS2563_BrownOutPreventionReg0_BOPINFHLD_UseHoldTime  (0x0 << 2)
287 #define TAS2563_BrownOutPreventionReg0_BOPINFHLD_HoldUntilCleared  (0x1 << 2)
288 #define TAS2563_BrownOutPreventionReg0_BOPMUTE_Mask  (0x1 << 1)
289 #define TAS2563_BrownOutPreventionReg0_BOPMUTE_DoNotMute  (0x0 << 1)
290 #define TAS2563_BrownOutPreventionReg0_BOPMUTE_Mute  (0x1 << 1)
291 #define TAS2563_BrownOutPreventionReg0_BOPEN_Mask  (0x1 << 0)
292 #define TAS2563_BrownOutPreventionReg0_BOPEN_Disabled  (0x0 << 0)
293 #define TAS2563_BrownOutPreventionReg0_BOPEN_Enabled  (0x1 << 0)
295     /* Brown Out Prevention Reg1 */
296 #define TAS2563_BrownOutPreventionReg1  TAS2563_REG(0x0, 0x0, 0x1C)
297 #define TAS2563_BrownOutPreventionReg1_BOPTH70_Mask  (0xff << 0)
299     /* Brown Out Prevention Reg2 */
300 #define TAS2563_BrownOutPreventionReg2  TAS2563_REG(0x0, 0x0, 0x1D)
301 #define TAS2563_BrownOutPreventionReg2_BOPATKRT75_Mask  (0x7 << 5)
302 #define TAS2563_BrownOutPreventionReg2_BOPATKRT75_5  (0x0 << 5)
303 #define TAS2563_BrownOutPreventionReg2_BOPATKRT75_10  (0x1 << 5)
304 #define TAS2563_BrownOutPreventionReg2_BOPATKRT75_20  (0x2 << 5)
305 #define TAS2563_BrownOutPreventionReg2_BOPATKRT75_40  (0x3 << 5)
306 #define TAS2563_BrownOutPreventionReg2_BOPATKRT75_80  (0x4 << 5)
307 #define TAS2563_BrownOutPreventionReg2_BOPATKRT75_160  (0x5 << 5)
308 #define TAS2563_BrownOutPreventionReg2_BOPATKRT75_320  (0x6 << 5)
309 #define TAS2563_BrownOutPreventionReg2_BOPATKRT75_640  (0x7 << 5)
310 #define TAS2563_BrownOutPreventionReg2_BOPATKST43_Mask  (0x3 << 3)
311 #define TAS2563_BrownOutPreventionReg2_BOPATKST43_1  (0x1 << 3)
312 #define TAS2563_BrownOutPreventionReg2_BOPATKST43_2  (0x3 << 3)
313 #define TAS2563_BrownOutPreventionReg2_BOPATKST43_0_5  (0x0 << 3)
314 #define TAS2563_BrownOutPreventionReg2_BOPATKST43_1_5  (0x2 << 3)
315 #define TAS2563_BrownOutPreventionReg2_BOPHLDTM20_Mask  (0x7 << 0)
316 #define TAS2563_BrownOutPreventionReg2_BOPHLDTM20_0  (0x0 << 0)
317 #define TAS2563_BrownOutPreventionReg2_BOPHLDTM20_10  (0x1 << 0)
318 #define TAS2563_BrownOutPreventionReg2_BOPHLDTM20_25  (0x2 << 0)
319 #define TAS2563_BrownOutPreventionReg2_BOPHLDTM20_50  (0x3 << 0)
320 #define TAS2563_BrownOutPreventionReg2_BOPHLDTM20_100  (0x4 << 0)
321 #define TAS2563_BrownOutPreventionReg2_BOPHLDTM20_250  (0x5 << 0)
322 #define TAS2563_BrownOutPreventionReg2_BOPHLDTM20_500  (0x6 << 0)
323 #define TAS2563_BrownOutPreventionReg2_BOPHLDTM20_1000  (0x7 << 0)
325     /* ICLA Reg0 */
326 #define TAS2563_ICLAReg0  TAS2563_REG(0x0, 0x0, 0x1E)
327 #define TAS2563_ICLAReg0_ICLAUSEMAX_Mask  (0x1 << 7)
328 #define TAS2563_ICLAReg0_ICLAUSEMAX_Min  (0x0 << 7)
329 #define TAS2563_ICLAReg0_ICLAUSEMAX_Max  (0x1 << 7)
330 #define TAS2563_ICLAReg0_ICLASLOT61_Mask  (0x3f << 1)
331 #define TAS2563_ICLAReg0_ICLAEN_Mask  (0x1 << 0)
332 #define TAS2563_ICLAReg0_ICLAEN_Disabled  (0x0 << 0)
333 #define TAS2563_ICLAReg0_ICLAEN_Enabled  (0x1 << 0)
335     /* ICLA Reg1 */
336 #define TAS2563_ICLAReg1  TAS2563_REG(0x0, 0x0, 0x1F)
337 #define TAS2563_ICLAReg1_ICLASEN_Mask  (0xff << 0)
338 #define TAS2563_ICLAReg1_ICLASLOT_7_Disable  (0x0 << 7)
339 #define TAS2563_ICLAReg1_ICLASLOT_7_Enable  (0x1 << 7)
340 #define TAS2563_ICLAReg1_ICLASLOT_6_Disable  (0x0 << 6)
341 #define TAS2563_ICLAReg1_ICLASLOT_6_Enable  (0x1 << 6)
342 #define TAS2563_ICLAReg1_ICLASLOT_5_Disable  (0x0 << 5)
343 #define TAS2563_ICLAReg1_ICLASLOT_5_Enable  (0x1 << 5)
344 #define TAS2563_ICLAReg1_ICLASLOT_4_Disable  (0x0 << 4)
345 #define TAS2563_ICLAReg1_ICLASLOT_4_Enable  (0x1 << 4)
346 #define TAS2563_ICLAReg1_ICLASLOT_3_Disable  (0x0 << 3)
347 #define TAS2563_ICLAReg1_ICLASLOT_3_Enable  (0x1 << 3)
348 #define TAS2563_ICLAReg1_ICLASLOT_2_Disable  (0x0 << 2)
349 #define TAS2563_ICLAReg1_ICLASLOT_2_Enable  (0x1 << 2)
350 #define TAS2563_ICLAReg1_ICLASLOT_1_Disable  (0x0 << 1)
351 #define TAS2563_ICLAReg1_ICLASLOT_1_Enable  (0x1 << 1)
352 #define TAS2563_ICLAReg1_ICLASLOT_0_Disable  (0x0 << 0)
353 #define TAS2563_ICLAReg1_ICLASLOT_0_Enable  (0x1 << 0)
355     /* Interrupt Mask Reg0 */
356 #define TAS2563_InterruptMaskReg0  TAS2563_REG(0x0, 0x0, 0x1a)
357 #define TAS2563_InterruptMaskReg0_LIMMUTEINTMASK_Mask  (0x1 << 7)
358 #define TAS2563_InterruptMaskReg0_LIMMUTEINTMASK_Unmask  (0x0 << 7)
359 #define TAS2563_InterruptMaskReg0_LIMMUTEINTMASK_Disable  (0x1 << 7)
360 #define TAS2563_InterruptMaskReg0_LIMINFHLDINTMASK_Mask  (0x1 << 6)
361 #define TAS2563_InterruptMaskReg0_LIMINFHLDINTMASK_Unmask  (0x0 << 6)
362 #define TAS2563_InterruptMaskReg0_LIMINFHLDINTMASK_Disable  (0x1 << 6)
363 #define TAS2563_InterruptMaskReg0_LIMMAXATNINTMASK_Mask  (0x1 << 5)
364 #define TAS2563_InterruptMaskReg0_LIMMAXATNINTMASK_Unmask  (0x0 << 5)
365 #define TAS2563_InterruptMaskReg0_LIMMAXATNINTMASK_Disable  (0x1 << 5)
366 #define TAS2563_InterruptMaskReg0_VBATLessthanINFINTMASK_Mask  (0x1 << 4)
367 #define TAS2563_InterruptMaskReg0_VBATLessthanINFINTMASK_Unmask  (0x0 << 4)
368 #define TAS2563_InterruptMaskReg0_VBATLessthanINFINTMASK_Disable  (0x1 << 4)
369 #define TAS2563_InterruptMaskReg0_LIMActiveFlagINTMASK_Mask  (0x1 << 3)
370 #define TAS2563_InterruptMaskReg0_LIMActiveFlagINTMASK_Unmask  (0x0 << 3)
371 #define TAS2563_InterruptMaskReg0_LIMActiveFlagINTMASK_Disable  (0x1 << 3)
372 #define TAS2563_InterruptMaskReg0_TDMClockErrorINTMASK_Mask  (0x1 << 2)
373 #define TAS2563_InterruptMaskReg0_TDMClockErrorINTMASK_Unmask  (0x0 << 2)
374 #define TAS2563_InterruptMaskReg0_TDMClockErrorINTMASK_Disable  (0x1 << 2)
375 #define TAS2563_InterruptMaskReg0_OCEINTMASK_Mask  (0x1 << 1)
376 #define TAS2563_InterruptMaskReg0_OCEINTMASK_Unmask  (0x0 << 1)
377 #define TAS2563_InterruptMaskReg0_OCEINTMASK_Disable  (0x1 << 1)
378 #define TAS2563_InterruptMaskReg0_OTEINTMASK_Mask  (0x1 << 0)
379 #define TAS2563_InterruptMaskReg0_OTEINTMASK_Unmask  (0x0 << 0)
380 #define TAS2563_InterruptMaskReg0_OTEINTMASK_Disable  (0x1 << 0)
381 #define TAS2563_InterruptMaskReg0_Disable 0xff
383     /* Interrupt Mask Reg1 */
384 #define TAS2563_InterruptMaskReg1  TAS2563_REG(0x0, 0x0, 0x1b)
385 #define TAS2563_InterruptMaskReg1_PDMAUDDATAINVALIDINTMASK_Mask  (0x1 << 7)
386 #define TAS2563_InterruptMaskReg1_PDMAUDDATAINVALIDINTMASK_Unmask  (0x0 << 7)
387 #define TAS2563_InterruptMaskReg1_PDMAUDDATAINVALIDINTMASK_Disable  (0x1 << 7)
388 #define TAS2563_InterruptMaskReg1_VBATOVLOINTMASK_Mask  (0x1 << 3)
389 #define TAS2563_InterruptMaskReg1_VBATOVLOINTMASK_Unmask  (0x0 << 3)
390 #define TAS2563_InterruptMaskReg1_VBATOVLOINTMASK_Disable  (0x1 << 3)
391 #define TAS2563_InterruptMaskReg1_VBATUVLOINTMASK_Mask  (0x1 << 2)
392 #define TAS2563_InterruptMaskReg1_VBATUVLOINTMASK_Unmask  (0x0 << 2)
393 #define TAS2563_InterruptMaskReg1_VBATUVLOINTMASK_Disable  (0x1 << 2)
394 #define TAS2563_InterruptMaskReg1_BrownOutFlagINTMASK_Mask  (0x1 << 1)
395 #define TAS2563_InterruptMaskReg1_BrownOutFlagINTMASK_Unmask  (0x0 << 1)
396 #define TAS2563_InterruptMaskReg1_BrownOutFlagINTMASK_Disable  (0x1 << 1)
397 #define TAS2563_InterruptMaskReg1_PDMClockErrorINTMASK_Mask  (0x1 << 0)
398 #define TAS2563_InterruptMaskReg1_PDMClockErrorINTMASK_Unmask  (0x0 << 0)
399 #define TAS2563_InterruptMaskReg1_PDMClockErrorINTMASK_Disable  (0x1 << 0)
400 #define TAS2563_InterruptMaskReg1_Disable 0xff
402     /* Live-Interrupt Reg0 */
403 #define TAS2563_LiveInterruptReg0  TAS2563_REG(0x0, 0x0, 0x1f)
404 #define TAS2563_LiveInterruptReg0_LIMMUTE_Mask  (0x1 << 7)
405 #define TAS2563_LiveInterruptReg0_LIMMUTE_NoInterrupt  (0x0 << 7)
406 #define TAS2563_LiveInterruptReg0_LIMMUTE_Interrupt  (0x1 << 7)
407 #define TAS2563_LiveInterruptReg0_LIMINFHLD_Mask  (0x1 << 6)
408 #define TAS2563_LiveInterruptReg0_LIMINFHLD_NoInterrupt  (0x0 << 6)
409 #define TAS2563_LiveInterruptReg0_LIMINFHLD_Interrupt  (0x1 << 6)
410 #define TAS2563_LiveInterruptReg0_LIMMAXATN_Mask  (0x1 << 5)
411 #define TAS2563_LiveInterruptReg0_LIMMAXATN_NoInterrupt  (0x0 << 5)
412 #define TAS2563_LiveInterruptReg0_LIMMAXATN_Interrupt  (0x1 << 5)
413 #define TAS2563_LiveInterruptReg0_VBATLessthanINF_Mask  (0x1 << 4)
414 #define TAS2563_LiveInterruptReg0_VBATLessthanINF_NoInterrupt  (0x0 << 4)
415 #define TAS2563_LiveInterruptReg0_VBATLessthanINF_Interrupt  (0x1 << 4)
416 #define TAS2563_LiveInterruptReg0_LIMActiveFlag_Mask  (0x1 << 3)
417 #define TAS2563_LiveInterruptReg0_LIMActiveFlag_NoInterrupt  (0x0 << 3)
418 #define TAS2563_LiveInterruptReg0_LIMActiveFlag_Interrupt  (0x1 << 3)
419 #define TAS2563_LiveInterruptReg0_TDMClockError_Mask  (0x1 << 2)
420 #define TAS2563_LiveInterruptReg0_TDMClockError_NoInterrupt  (0x0 << 2)
421 #define TAS2563_LiveInterruptReg0_TDMClockError_Interrupt  (0x1 << 2)
422 #define TAS2563_LiveInterruptReg0_OCEFlag_Mask  (0x1 << 1)
423 #define TAS2563_LiveInterruptReg0_OCEFlag_NoInterrupt  (0x0 << 1)
424 #define TAS2563_LiveInterruptReg0_OCEFlag_Interrupt  (0x1 << 1)
425 #define TAS2563_LiveInterruptReg0_OTEFlag_Mask  (0x1 << 0)
426 #define TAS2563_LiveInterruptReg0_OTEFlag_NoInterrupt  (0x0 << 0)
427 #define TAS2563_LiveInterruptReg0_OTEFlag_Interrupt  (0x1 << 0)
429     /* Live-Interrupt Reg1 */
430 #define TAS2563_LiveInterruptReg1  TAS2563_REG(0x0, 0x0, 0x20)
431 #define TAS2563_LiveInterruptReg1_PDMAUDDATAINVALID_Mask  (0x1 << 7)
432 #define TAS2563_LiveInterruptReg1_PDMAUDDATAINVALID_NoInterrupt  (0x0 << 7)
433 #define TAS2563_LiveInterruptReg1_PDMAUDDATAINVALID_Interrupt  (0x1 << 7)
434 #define TAS2563_LiveInterruptReg1_VBATOVLO_Mask  (0x1 << 3)
435 #define TAS2563_LiveInterruptReg1_VBATOVLO_NoInterrupt  (0x0 << 3)
436 #define TAS2563_LiveInterruptReg1_VBATOVLO_Interrupt  (0x1 << 3)
437 #define TAS2563_LiveInterruptReg1_VBATUVLO_Mask  (0x1 << 2)
438 #define TAS2563_LiveInterruptReg1_VBATUVLO_NoInterrupt  (0x0 << 2)
439 #define TAS2563_LiveInterruptReg1_VBATUVLO_Interrupt  (0x1 << 2)
440 #define TAS2563_LiveInterruptReg1_BrownOutFlag_Mask  (0x1 << 1)
441 #define TAS2563_LiveInterruptReg1_BrownOutFlag_NoInterrupt  (0x0 << 1)
442 #define TAS2563_LiveInterruptReg1_BrownOutFlag_Interrupt  (0x1 << 1)
443 #define TAS2563_LiveInterruptReg1_PDMClockError_Mask  (0x1 << 0)
444 #define TAS2563_LiveInterruptReg1_PDMClockError_NoInterrupt  (0x0 << 0)
445 #define TAS2563_LiveInterruptReg1_PDMClockError_Interrupt  (0x1 << 0)
447     /* Latched-Interrupt Reg0 */
448 #define TAS2563_LatchedInterruptReg0  TAS2563_REG(0x0, 0x0, 0x24)
449 #define TAS2563_LatchedInterruptReg0_LIMMUTESticky_Mask  (0x1 << 7)
450 #define TAS2563_LatchedInterruptReg0_LIMMUTESticky_NoInterrupt  (0x0 << 7)
451 #define TAS2563_LatchedInterruptReg0_LIMMUTESticky_Interrupt  (0x1 << 7)
452 #define TAS2563_LatchedInterruptReg0_LIMINFHLDSticky_Mask  (0x1 << 6)
453 #define TAS2563_LatchedInterruptReg0_LIMINFHLDSticky_NoInterrupt  (0x0 << 6)
454 #define TAS2563_LatchedInterruptReg0_LIMINFHLDSticky_Interrupt  (0x1 << 6)
455 #define TAS2563_LatchedInterruptReg0_LIMMAXATNSticky_Mask  (0x1 << 5)
456 #define TAS2563_LatchedInterruptReg0_LIMMAXATNSticky_NoInterrupt  (0x0 << 5)
457 #define TAS2563_LatchedInterruptReg0_LIMMAXATNSticky_Interrupt  (0x1 << 5)
458 #define TAS2563_LatchedInterruptReg0_VBATLessthanINFSticky_Mask  (0x1 << 4)
459 #define TAS2563_LatchedInterruptReg0_VBATLessthanINFSticky_NoInterrupt \
460         (0x0 << 4)
461 #define TAS2563_LatchedInterruptReg0_VBATLessthanINFSticky_Interrupt  (0x1 << 4)
462 #define TAS2563_LatchedInterruptReg0_LIMActiveFlagSticky_Mask  (0x1 << 3)
463 #define TAS2563_LatchedInterruptReg0_LIMActiveFlagSticky_NoInterrupt  (0x0 << 3)
464 #define TAS2563_LatchedInterruptReg0_LIMActiveFlagSticky_Interrupt  (0x1 << 3)
465 #define TAS2563_LatchedInterruptReg0_TDMClockErrorSticky_Mask  (0x1 << 2)
466 #define TAS2563_LatchedInterruptReg0_TDMClockErrorSticky_NoInterrupt  (0x0 << 2)
467 #define TAS2563_LatchedInterruptReg0_TDMClockErrorSticky_Interrupt  (0x1 << 2)
468 #define TAS2563_LatchedInterruptReg0_OCEFlagSticky_Mask  (0x1 << 1)
469 #define TAS2563_LatchedInterruptReg0_OCEFlagSticky_NoInterrupt  (0x0 << 1)
470 #define TAS2563_LatchedInterruptReg0_OCEFlagSticky_Interrupt  (0x1 << 1)
471 #define TAS2563_LatchedInterruptReg0_OTEFlagSticky_Mask  (0x1 << 0)
472 #define TAS2563_LatchedInterruptReg0_OTEFlagSticky_NoInterrupt  (0x0 << 0)
473 #define TAS2563_LatchedInterruptReg0_OTEFlagSticky_Interrupt  (0x1 << 0)
475     /* Latched-Interrupt Reg1 */
476 #define TAS2563_LatchedInterruptReg1  TAS2563_REG(0x0, 0x0, 0x25)
477 #define TAS2563_LatchedInterruptReg1_PDMAUDDATAINVALIDSticky_Mask  (0x1 << 7)
478 #define TAS2563_LatchedInterruptReg1_PDMAUDDATAINVALIDSticky_NoInterrupt \
479         (0x0 << 7)
480 #define TAS2563_LatchedInterruptReg1_PDMAUDDATAINVALIDSticky_Interrupt \
481         (0x1 << 7)
482 #define TAS2563_LatchedInterruptReg1_VBATOVLOSticky_Mask  (0x1 << 3)
483 #define TAS2563_LatchedInterruptReg1_VBATOVLOSticky_NoInterrupt  (0x0 << 3)
484 #define TAS2563_LatchedInterruptReg1_VBATOVLOSticky_Interrupt  (0x1 << 3)
485 #define TAS2563_LatchedInterruptReg1_VBATUVLOSticky_Mask  (0x1 << 2)
486 #define TAS2563_LatchedInterruptReg1_VBATUVLOSticky_NoInterrupt  (0x0 << 2)
487 #define TAS2563_LatchedInterruptReg1_VBATUVLOSticky_Interrupt  (0x1 << 2)
488 #define TAS2563_LatchedInterruptReg1_BrownOutFlagSticky_Mask  (0x1 << 1)
489 #define TAS2563_LatchedInterruptReg1_BrownOutFlagSticky_NoInterrupt  (0x0 << 1)
490 #define TAS2563_LatchedInterruptReg1_BrownOutFlagSticky_Interrupt  (0x1 << 1)
491 #define TAS2563_LatchedInterruptReg1_PDMClockErrorSticky_Mask  (0x1 << 0)
492 #define TAS2563_LatchedInterruptReg1_PDMClockErrorSticky_NoInterrupt  (0x0 << 0)
493 #define TAS2563_LatchedInterruptReg1_PDMClockErrorSticky_Interrupt  (0x1 << 0)
495     /* VBAT MSB */
496 #define TAS2563_VBATMSB  TAS2563_REG(0x0, 0x0, 0x27)
497 #define TAS2563_VBATMSB_VBATMSB70_Mask  (0xff << 0)
499     /* VBAT LSB */
500 #define TAS2563_VBATLSB  TAS2563_REG(0x0, 0x0, 0x28)
501 #define TAS2563_VBATLSB_VBATLSB74_Mask  (0xf << 4)
503     /* TEMP MSB */
504 #define TAS2563_TEMPMSB  TAS2563_REG(0x0, 0x0, 0x29)
505 #define TAS2563_TEMPMSB_TEMPMSB70_Mask  (0xff << 0)
507     /* TEMP LSB */
508 #define TAS2563_TEMPLSB  TAS2563_REG(0x0, 0x0, 0x2A)
509 #define TAS2563_TEMPLSB_TEMPLSB74_Mask  (0xf << 4)
511         /* SDZ Config */
512 #define TAS2563_SDZCONFIG  TAS2563_REG(0x0, 0x0, 0x2F)
513 #define TAS2563_SDZCONFIG_ICLANONZEROMIN_Mask  (0x1 << 4)
514 #define TAS2563_SDZCONFIG_ICLANONZEROMIN_Disable  (0x0 << 4)
515 #define TAS2563_SDZCONFIG_ICLANONZEROMIN_Enable  (0x1 << 4)
516 #define TAS2563_SDZCONFIG_SDZMODECONF_Mask  (0x3 << 2)
517 #define TAS2563_SDZCONFIG_SDZMODECONF_ForcedShutdownAfterTimeout  (0x0 << 2)
518 #define TAS2563_SDZCONFIG_SDZMODECONF_ForceShutdown  (0x1 << 2)
519 #define TAS2563_SDZCONFIG_SDZMODECONF_NormalShutdown  (0x2 << 2)
520 #define TAS2563_SDZCONFIG_SDZMODETIMEOUT_Mask  (0x3 << 0)
521 #define TAS2563_SDZCONFIG_SDZMODETIMEOUT_2ms  (0x0 << 0)
522 #define TAS2563_SDZCONFIG_SDZMODETIMEOUT_4ms  (0x1 << 0)
523 #define TAS2563_SDZCONFIG_SDZMODETIMEOUT_6ms  (0x2 << 0)
524 #define TAS2563_SDZCONFIG_SDZMODETIMEOUT_23p8ms  (0x3 << 0)
527     /* Interrupt Configuration */
528 #define TAS2563_InterruptConfiguration  TAS2563_REG(0x0, 0x0, 0x30)
529 #define TAS2563_InterruptConfiguration_CLKHALT_Mask (0x1 << 6)
530 #define TAS2563_InterruptConfiguration_CLKHALT_Enable (0x0 << 6)
531 #define TAS2563_InterruptConfiguration_CLKHALT_Disable (0x1 << 6)
532 #define TAS2563_InterruptConfiguration_CLEARLATINT_Mask  (0x1 << 2)
533 #define TAS2563_InterruptConfiguration_CLEARLATINT_NOCLEAR  (0x0 << 2)
534 #define TAS2563_InterruptConfiguration_CLEARLATINT_CLEAR  (0x1 << 2)
535 #define TAS2563_InterruptConfiguration_PININTConfig10_Mask  (0x3 << 0)
536 #define TAS2563_InterruptConfiguration_PININTConfig10_AssertOnLiveInterrupts \
537         (0x0 << 0)
538 #define \
539 TAS2563_InterruptConfiguration_PININTConfig10_AssertOnLatchedInterrupts \
540         (0x1 << 0)
541 #define \
542 TAS2563_InterruptConfiguration_PININTConfig10_Assert2msOnLiveInterrupts \
543         (0x2 << 0)
544 #define \
545 TAS2563_InterruptConfiguration_PININTConfig10_Assert2msOnLatchedInterrupts \
546         (0x3 << 0)
548     /* Digital Input Pin Pull Down */
549 #define TAS2563_DigitalInputPinPullDown  TAS2563_REG(0x0, 0x0, 0x31)
550 #define TAS2563_DigitalInputPinPullDown_WKPulldownSDOUT_Mask  (0x1 << 7)
551 #define TAS2563_DigitalInputPinPullDown_WKPulldownSDOUT_Disabled  (0x0 << 7)
552 #define TAS2563_DigitalInputPinPullDown_WKPulldownSDOUT_Enabled  (0x1 << 7)
553 #define TAS2563_DigitalInputPinPullDown_WKPulldownSDIN_Mask  (0x1 << 6)
554 #define TAS2563_DigitalInputPinPullDown_WKPulldownSDIN_Disabled  (0x0 << 6)
555 #define TAS2563_DigitalInputPinPullDown_WKPulldownSDIN_Enabled  (0x1 << 6)
556 #define TAS2563_DigitalInputPinPullDown_WKPulldownFSYNC_Mask  (0x1 << 5)
557 #define TAS2563_DigitalInputPinPullDown_WKPulldownFSYNC_Disabled  (0x0 << 5)
558 #define TAS2563_DigitalInputPinPullDown_WKPulldownFSYNC_Enabled  (0x1 << 5)
559 #define TAS2563_DigitalInputPinPullDown_WKPulldownSBCLK_Mask  (0x1 << 4)
560 #define TAS2563_DigitalInputPinPullDown_WKPulldownSBCLK_Disabled  (0x0 << 4)
561 #define TAS2563_DigitalInputPinPullDown_WKPulldownSBCLK_Enabled  (0x1 << 4)
562 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMD0_Mask  (0x1 << 3)
563 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMD0_Disabled  (0x0 << 3)
564 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMD0_Enabled  (0x1 << 3)
565 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMD1_Mask  (0x1 << 2)
566 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMD1_Disabled  (0x0 << 2)
567 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMD1_Enabled  (0x1 << 2)
568 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMCK0_Mask  (0x1 << 1)
569 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMCK0_Disabled  (0x0 << 1)
570 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMCK0_Enabled  (0x1 << 1)
571 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMCK1_Mask  (0x1 << 0)
572 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMCK1_Disabled  (0x0 << 0)
573 #define TAS2563_DigitalInputPinPullDown_WKPulldownPDMCK1_Enabled  (0x1 << 0)
575     /* Misc IRQ */
576 #define TAS2563_MiscIRQ  TAS2563_REG(0x0, 0x0, 0x32)
577 #define TAS2563_MiscIRQ_IRQZREQD_Mask  (0x1 << 7)
578 #define TAS2563_MiscIRQ_IRQZREQD_ActiveHigh  (0x0 << 7)
579 #define TAS2563_MiscIRQ_IRQZREQD_ActiveLow  (0x1 << 7)
580 #define TAS2563_MiscIRQ_IRQZBITBANG_Mask  (0x1 << 0)
581 #define TAS2563_MiscIRQ_IRQZBITBANG_IRQZInputBuf0  (0x0 << 0)
582 #define TAS2563_MiscIRQ_IRQZBITBANG_IRQZInputBuf1  (0x1 << 0)
584     /* Boost Configuration */
585 #define TAS2563_BoostConfiguration  TAS2563_REG(0x0, 0x0, 0x33)
586 #define TAS2563_BoostConfiguration_BoostMode_Mask   (0x3 << 6)
587 #define TAS2563_BoostConfiguration_BoostMode_ClassH (0x0 << 6)
588 #define TAS2563_BoostConfiguration_BoostMode_ClassG (0x1 << 6)
589 #define TAS2563_BoostConfiguration_BoostMode_AlwaysOn (0x2 << 6)
590 #define TAS2563_BoostConfiguration_BoostMode_AlwaysOff (0x3 << 6)
592     /* Clock Configuration */
593 #define TAS2563_ClockConfiguration  TAS2563_REG(0x0, 0x0, 0x38)
594 #define TAS2563_ClockConfiguration_SBCLKtoFS52_Mask  (0xf << 2)
595 #define TAS2563_ClockConfiguration_SBCLKtoFS52_16  (0x0 << 2)
596 #define TAS2563_ClockConfiguration_SBCLKtoFS52_24  (0x1 << 2)
597 #define TAS2563_ClockConfiguration_SBCLKtoFS52_32  (0x2 << 2)
598 #define TAS2563_ClockConfiguration_SBCLKtoFS52_48  (0x3 << 2)
599 #define TAS2563_ClockConfiguration_SBCLKtoFS52_64  (0x4 << 2)
600 #define TAS2563_ClockConfiguration_SBCLKtoFS52_96  (0x5 << 2)
601 #define TAS2563_ClockConfiguration_SBCLKtoFS52_128  (0x6 << 2)
602 #define TAS2563_ClockConfiguration_SBCLKtoFS52_192  (0x7 << 2)
603 #define TAS2563_ClockConfiguration_SBCLKtoFS52_256  (0x8 << 2)
604 #define TAS2563_ClockConfiguration_SBCLKtoFS52_384  (0x9 << 2)
605 #define TAS2563_ClockConfiguration_SBCLKtoFS52_512  (0xa << 2)
606 #define TAS2563_ClockConfiguration_DISCLKRateDetect10_Mask  (0x3 << 0)
607 #define TAS2563_ClockConfiguration_DISCLKRateDetect10_Disabled  (0x1 << 0)
608 #define TAS2563_ClockConfiguration_DISCLKRateDetect10_Enabled  (0x0 << 0)
611 #define TAS2563_BDIVSelection_BCLKMaster  TAS2563_REG(0x0, 0x0, 0x3D)
612 #define TAS2563_BDIVSelection_BCLKMaster_ClockSource10_Mask  (0x3 << 0)
613 #define TAS2563_BDIVSelection_BCLKMaster_ClockSource10_NDIV2Output  (0x0 << 0)
614 #define TAS2563_BDIVSelection_BCLKMaster_ClockSource10_NDIV1Output  (0x1 << 0)
615 #define TAS2563_BDIVSelection_BCLKMaster_ClockSource10_MCLKOutput  (0x2 << 0)
616 #define TAS2563_BDIVSelection_BCLKMaster_ClockSource10_PDMCLK1PAD  (0x3 << 0)
618 #define TAS2563_BDIVSelection_HOLDSARUPDATE  TAS2563_REG(0x0, 0x0, 0x41)
619 #define TAS2563_BDIVSelection_HOLDSARUPDATE10_Mask  (0x1 << 0)
620 #define TAS2563_BDIVSelection_HOLDSARUPDATE10_Disabled  (0x0 << 0)
621 #define TAS2563_BDIVSelection_HOLDSARUPDATE10_Enabled  (0x1 << 0)
624     /* TDM Clock detection monitor */
625 #define TAS2563_TDMClockdetectionmonitor  TAS2563_REG(0x0, 0x0, 0x77)
626 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_Mask  (0xf << 3)
627 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_16  (0x0 << 3)
628 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_24  (0x1 << 3)
629 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_32  (0x2 << 3)
630 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_48  (0x3 << 3)
631 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_64  (0x4 << 3)
632 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_96  (0x5 << 3)
633 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_128  (0x6 << 3)
634 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_192  (0x7 << 3)
635 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_256  (0x8 << 3)
636 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_384  (0x9 << 3)
637 #define TAS2563_TDMClockdetectionmonitor_SBCLKtoFSYNC63_512  (0xf << 3)
638 #define TAS2563_TDMClockdetectionmonitor_DetectedSampleRate20_Mask  (0x7 << 0),
639 #define TAS2563_TDMClockdetectionmonitor_DetectedSampleRate20_8khz  (0x0 << 0)
640 #define TAS2563_TDMClockdetectionmonitor_DetectedSampleRate20_16khz  (0x1 << 0)
641 #define TAS2563_TDMClockdetectionmonitor_DetectedSampleRate20_32khz  (0x2 << 0)
642 #define TAS2563_TDMClockdetectionmonitor_DetectedSampleRate20_48khz  (0x3 << 0)
643 #define TAS2563_TDMClockdetectionmonitor_DetectedSampleRate20_96khz  (0x4 << 0)
644 #define TAS2563_TDMClockdetectionmonitor_DetectedSampleRate20_192khz  (0x5 << 0)
646     /* Revision and PG ID */
647 #define TAS2563_RevisionandPGID  TAS2563_REG(0x0, 0x0, 0x7D)
648 #define TAS2563_RevisionandPGID_RevisionID74_Mask  (0xf << 4)
649 #define TAS2563_RevisionandPGID_PGID30_Mask  (0xf << 0)
651     /* I2C Checksum */
652 #define TAS2563_I2CChecksum  TAS2563_REG(0x0, 0x0, 0x7E)
653 #define TAS2563_I2CChecksum_I2CChecksum70_Mask  (0xff << 0)
655 #define TAS2563_CLKERR_Config TAS2563_REG(0x0, 0x1, 0x31)
656 #define TAS2563_CLKERR_Config_DMA5FILTER_Mask (0x1 << 1)
657 #define TAS2563_CLKERR_Config_DMA5FILTER_Enable (0x0 << 0)
658 #define TAS2563_CLKERR_Config_DMA5FILTER_Disable (0x1 << 1)
660 #define TAS2563_SA_COEFF_SWAP_REG       TAS2563_REG(0, 0x35, 0x2c)
661 #define TAS2563_CALI_T_REG      TAS2563_REG(0x8c, 0x30, 0x20)
662 #define TAS2563_CALI_R0_REG             TAS2563_REG(0x8c, 0x2f, 0x40)
663 //////////////////////////////////////
665         /* ICN set */
666 #define TAS2563_ICN_REG TAS2563_REG(0, 2, 0x5c) 
667 #define TAS2563_ICN_DELAY TAS2563_REG(0, 2, 0x64)
669     /* Book */
670 #define TAS2563_Book  TAS2563_REG(0x0, 0x0, 0x7F)
671 #define TAS2563_Book_Mask  (0xff << 0)
673 #define TAS2563_FW_NAME     "tas2563_uCDSP.bin"
675 #define TAS2563_POWER_ACTIVE 0
676 #define TAS2563_POWER_MUTE 1
677 #define TAS2563_POWER_SHUTDOWN 2
679 #define TAS2563_APP_ROM1MODE    0
680 #define TAS2563_APP_ROM2MODE    1
681 #define TAS2563_APP_TUNINGMODE  2
682 #define TAS2563_APP_ROM1_96KHZ  3
683 #define TAS2563_APP_ROM2_96KHZ  4
684 #define TAS2563_APP_RAMMODE     5
686 #define TAS2563_RegisterCount  55
688 #define ERROR_NONE              0x0000000
689 #define ERROR_PLL_ABSENT        0x0000000
690 #define ERROR_DEVA_I2C_COMM     0x0000000
691 #define ERROR_DEVB_I2C_COMM     0x0000000
692 #define ERROR_PRAM_CRCCHK       0x0000000
693 #define ERROR_YRAM_CRCCHK       0x0000001
694 #define ERROR_OVER_CURRENT      0x0000002
695 #define ERROR_DIE_OVERTEMP      0x0000004
696 #define ERROR_OVER_VOLTAGE      0x0000008
697 #define ERROR_UNDER_VOLTAGE     0x0000010
698 #define ERROR_BROWNOUT          0x0000020
699 #define ERROR_CLASSD_PWR        0x0000040
700 #define ERROR_FAILSAFE          0x4000000
702 #define TAS2563_COEFFICIENT_TMAX        0x7fffffff
703 #define TAS2563_SAFE_GUARD_PATTERN      0x5a
704 #define LOW_TEMPERATURE_CHECK_PERIOD 5000       /* 5 second */
706 struct tas2563_register {
707 int book;
708 int page;
709 int reg;
710 };
712 struct tas2563_dai_cfg {
713 unsigned int dai_fmt;
714 unsigned int tdm_delay;
715 };
717 struct TBlock {
718         unsigned int mnType;
719         unsigned char mbPChkSumPresent;
720         unsigned char mnPChkSum;
721         unsigned char mbYChkSumPresent;
722         unsigned char mnYChkSum;
723         unsigned int mnCommands;
724         unsigned char *mpData;
725 };
727 struct TData {
728         char mpName[64];
729         char *mpDescription;
730         unsigned int mnBlocks;
731         struct TBlock *mpBlocks;
732 };
734 struct TProgram {
735         char mpName[64];
736         char *mpDescription;
737         unsigned char mnAppMode;
738 //      unsigned short mnBoost;
739         unsigned char mnI2sMode;
740         unsigned char mnISnsPD;
741         unsigned char mnVSnsPD;
742         unsigned char mnPowerLDG;
743         struct TData mData;
744 };
746 struct TPLL {
747         char mpName[64];
748         char *mpDescription;
749         struct TBlock mBlock;
750 };
753 struct TConfiguration {
754         char mpName[64];
755         char *mpDescription;
756         unsigned int mnDevices;
757         unsigned int mnProgram;
758 //      unsigned int mnPLL;
759         unsigned int mnSamplingRate;
760         unsigned char mnPLLSrc;
761         unsigned int mnPLLSrcRate;
762         unsigned int mnFsRate;
763         struct TData mData;
764 };
766 struct TCalibration {
767         char mpName[64];
768         char *mpDescription;
769         unsigned int mnProgram;
770         unsigned int mnConfiguration;
771         struct TData mData;
772 };
774 struct TFirmware {
775         unsigned int mnFWSize;
776         unsigned int mnChecksum;
777         unsigned int mnPPCVersion;
778         unsigned int mnFWVersion;
779         unsigned int mnDriverVersion;
780         unsigned int mnTimeStamp;
781         char mpDDCName[64];
782         char *mpDescription;
783         unsigned int mnDeviceFamily;
784         unsigned int mnDevice;
785         unsigned int mnPLLs;
786         struct TPLL *mpPLLs;
787         unsigned int mnPrograms;
788         struct TProgram *mpPrograms;
789         unsigned int mnConfigurations;
790         struct TConfiguration *mpConfigurations;
791         unsigned int mnCalibrations;
792         struct TCalibration *mpCalibrations;
793 };
795 struct tas2563_priv {
796         struct device *dev;
797         struct regmap *regmap;
798         struct snd_soc_codec *codec;
799         struct mutex dev_lock;
800         struct delayed_work irq_work;
801         struct hrtimer mtimerwork;
802         int mnClkin;
803         int mnClkid;
804         int mnPowerState;
805         bool mbPowerUp;
806         int mnCurrentBook;
807         int mnCurrentPage;
808         struct TFirmware *mpFirmware;
809         struct TFirmware *mpCalFirmware;
810         int mnCurrentProgram;
811         int mnCurrentSampleRate;
812         int mnNewConfiguration;
813         int mnCurrentConfiguration;
814         int mnCurrentCalibration;
815         int mnLoad;
816         int mnASIFormat;
817         int mnResetGPIO;
818         int mnIRQGPIO;
819         int mnIRQ;
820         bool mbIRQEnable;
821         int mnSamplingRate;
822         int mnFrameSize;
823         int mnPLL;
824         int mnPPG;
825         int mnPGID;
826         int mnLeftSlot;
827         int mnRightSlot;
828         int mnSlot_width;
829         int mnVmon_slot_no;
830         int mnImon_slot_no;
831         int mnRestart;
832         int mnCh_size;
833         int mnDieTvReadCounter;
834         int mnPCMFormat;
835         int mnVBoostState;
836         bool mbLoadConfigurationPrePowerUp;
837         bool mbLoadCalibrationPostPowerUp;
838         bool mbCalibrationLoaded;
839         bool mbBypassTMax;
840         int (*read)(struct tas2563_priv *pTAS2563,
841                 unsigned int reg, unsigned int *pValue);
842         int (*write)(struct tas2563_priv *pTAS2563,
843                 unsigned int reg, unsigned int Value);
844         int (*bulk_read)(struct tas2563_priv *pTAS2563,
845                 unsigned int reg, unsigned char *pData, unsigned int len);
846         int (*bulk_write)(struct tas2563_priv *pTAS2563,
847                 unsigned int reg, unsigned char *pData, unsigned int len);
848         int (*update_bits)(struct tas2563_priv *pTAS2563,
849                 unsigned int reg, unsigned int mask, unsigned int value);
850         void (*hw_reset)(struct tas2563_priv *pTAS2563);
851         void (*clearIRQ)(struct tas2563_priv *pTAS2563);
852         void (*enableIRQ)(struct tas2563_priv *pTAS2563, bool enable);
853             /* device is working, but system is suspended */
854         int (*runtime_suspend)(struct tas2563_priv *pTAS2563);
855         int (*runtime_resume)(struct tas2563_priv *pTAS2563);
856         int (*set_calibration)(struct tas2563_priv *pTAS2563,
857                 int calibration);
858         int (*set_config)(struct tas2563_priv *pTAS2563, int config);
859         bool mbRuntimeSuspend;
861         unsigned int mnErrCode;
862 #ifdef CONFIG_TAS2563_CODEC
863         struct mutex codec_lock;
864 #endif
866 #ifdef CONFIG_TAS2563_MISC
867         int mnDBGCmd;
868         int mnCurrentReg;
869         struct mutex file_lock;
870 #endif
871 };
873 #endif /* __TAS2563_ */