a55095cfc14cf221f8521e62c67097c82d42ef84
[tas2770sw-android/tas2770sw-android.git] / tas2770.h
1 \r
2 #ifndef __TAS2770_\r
3 #define __TAS2770_\r
4 \r
5 \r
6 /* Book Control Register (available in page0 of each book) */\r
7 #define TAS2770_BOOKCTL_PAGE            0\r
8 #define TAS2770_BOOKCTL_REG         127\r
9 \r
10 \r
11 #define TAS2770_REG(page, reg)        ((page * 128) + reg)\r
12 \r
13     // Page\r
14 #define TAS2770_Page  TAS2770_REG(0X0, 0x00)\r
15 #define TAS2770_Page_Page_Mask  (0xff << 0)\r
16 \r
17     // Software Reset\r
18 #define TAS2770_SoftwareReset  TAS2770_REG(0X0, 0x01)\r
19 #define TAS2770_SoftwareReset_SoftwareReset_Mask  (0x1 << 0),\r
20 #define TAS2770_SoftwareReset_SoftwareReset_DontReset  (0x0 << 0)\r
21 #define TAS2770_SoftwareReset_SoftwareReset_Reset  (0x1 << 0)\r
22 \r
23     // Power Control\r
24 #define TAS2770_PowerControl  TAS2770_REG(0X0, 0x02)\r
25 #define TAS2770_PowerControl_ISNSPower_Mask  (0x1 << 3)\r
26 #define TAS2770_PowerControl_ISNSPower_Active  (0x0 << 3)\r
27 #define TAS2770_PowerControl_ISNSPower_PoweredDown  (0x1 << 3),\r
28 #define TAS2770_PowerControl_VSNSPower_Mask  (0x1 << 2)\r
29 #define TAS2770_PowerControl_VSNSPower_Active  (0x0 << 2)\r
30 #define TAS2770_PowerControl_VSNSPower_PoweredDown  (0x1 << 2)\r
31 #define TAS2770_PowerControl_OperationalMode10_Mask  (0x3 << 0)\r
32 #define TAS2770_PowerControl_OperationalMode10_Active  (0x0 << 0)\r
33 #define TAS2770_PowerControl_OperationalMode10_Mute  (0x1 << 0)\r
34 #define TAS2770_PowerControl_OperationalMode10_Shutdown  (0x2 << 0)\r
35 \r
36         //data format\r
37 #define TAS2770_DATAFORMAT_SHIFT                2\r
38 #define TAS2770_DATAFORMAT_I2S                  0x0\r
39 #define TAS2770_DATAFORMAT_DSP                  0x1\r
40 #define TAS2770_DATAFORMAT_RIGHT_J              0x2\r
41 #define TAS2770_DATAFORMAT_LEFT_J               0x3\r
42 \r
43 #define TAS2770_DAI_FMT_MASK                    (0x7 << TAS2770_DATAFORMAT_SHIFT)\r
44 \r
45     // Playback Configuration Reg0\r
46 #define TAS2770_PlaybackConfigurationReg0  TAS2770_REG(0X0, 0x03)\r
47 #define TAS2770_PlaybackConfigurationReg0_PDMPinMapping_Mask  (0x1 << 7)\r
48 #define TAS2770_PlaybackConfigurationReg0_PDMPinMapping_Pdm0  (0x0 << 7)\r
49 #define TAS2770_PlaybackConfigurationReg0_PDMPinMapping_Pdm1  (0x1 << 7)\r
50 #define TAS2770_PlaybackConfigurationReg0_PlaybackPDMSource_Mask  (0x1 << 6)\r
51 #define TAS2770_PlaybackConfigurationReg0_PlaybackSource_Mask  (0x1 << 5)\r
52 #define TAS2770_PlaybackConfigurationReg0_PlaybackSource_Pcm  (0x0 << 5)\r
53 #define TAS2770_PlaybackConfigurationReg0_PlaybackSource_Pdm  (0x1 << 5)\r
54 #define TAS2770_PlaybackConfigurationReg0_AmplifierLevel40_Mask  (0x1f << 0)\r
55 \r
56     // Playback Configuration Reg1\r
57 #define TAS2770_PlaybackConfigurationReg1  TAS2770_REG(0X0, 0x04)\r
58 #define TAS2770_PlaybackConfigurationReg1_HPFFrequency20_Mask  (0x7 << 0)\r
59 #define TAS2770_PlaybackConfigurationReg1_HPFFrequency20_2  (0x1 << 0)\r
60 #define TAS2770_PlaybackConfigurationReg1_HPFFrequency20_50  (0x2 << 0)\r
61 #define TAS2770_PlaybackConfigurationReg1_HPFFrequency20_100  (0x3 << 0)\r
62 #define TAS2770_PlaybackConfigurationReg1_HPFFrequency20_200  (0x4 << 0)\r
63 #define TAS2770_PlaybackConfigurationReg1_HPFFrequency20_400  (0x5 << 0)\r
64 #define TAS2770_PlaybackConfigurationReg1_HPFFrequency20_800  (0x6 << 0)\r
65 #define TAS2770_PlaybackConfigurationReg1_HPFFrequency20_Bypass  (0x0 << 0)\r
66 \r
67     // Playback Configuration Reg2\r
68 #define TAS2770_PlaybackConfigurationReg2  TAS2770_REG(0X0, 0x05)\r
69 #define TAS2770_PlaybackConfigurationReg2_DVCPCM70_Mask  (0xff << 0)\r
70 \r
71     // Playback Configuration Reg3\r
72 #define TAS2770_PlaybackConfigurationReg3  TAS2770_REG(0X0, 0x06)\r
73 #define TAS2770_PlaybackConfigurationReg3_DVCPDM70_Mask  (0xff << 0)\r
74 \r
75     // Misc Configuration Reg0\r
76 #define TAS2770_MiscConfigurationReg0  TAS2770_REG(0X0, 0x07)\r
77 #define TAS2770_MiscConfigurationReg0_DVCRampRate76_Mask  (0x3 << 6)\r
78 #define TAS2770_MiscConfigurationReg0_DVCRampRate76_0_5dbPer1Sample  (0x0 << 6)\r
79 #define TAS2770_MiscConfigurationReg0_DVCRampRate76_0_5dbPer4Sample  (0x1 << 6)\r
80 #define TAS2770_MiscConfigurationReg0_DVCRampRate76_0_5dbPer8Sample  (0x2 << 6)\r
81 #define TAS2770_MiscConfigurationReg0_DVCRampRate76_VolRampDisabled  (0x3 << 6)\r
82 #define TAS2770_MiscConfigurationReg0_OCERetry_Mask  (0x1 << 5)\r
83 #define TAS2770_MiscConfigurationReg0_OCERetry_DoNotRetry  (0x0 << 5)\r
84 #define TAS2770_MiscConfigurationReg0_OCERetry_Retry  (0x1 << 5)\r
85 #define TAS2770_MiscConfigurationReg0_OTERetry_Mask  (0x1 << 4)\r
86 #define TAS2770_MiscConfigurationReg0_OTERetry_DoNotRetry  (0x0 << 4)\r
87 #define TAS2770_MiscConfigurationReg0_OTERetry_Retry  (0x1 << 4)\r
88 #define TAS2770_MiscConfigurationReg0_IRQZPull_Mask  (0x1 << 3)\r
89 #define TAS2770_MiscConfigurationReg0_IRQZPull_Disabled  (0x0 << 3)\r
90 #define TAS2770_MiscConfigurationReg0_IRQZPull_Enabled  (0x1 << 3)\r
91 #define TAS2770_MiscConfigurationReg0_AMPSS_Mask  (0x1 << 2)\r
92 #define TAS2770_MiscConfigurationReg0_AMPSS_Disabled  (0x0 << 2)\r
93 #define TAS2770_MiscConfigurationReg0_AMPSS_Enabled  (0x1 << 2)\r
94 \r
95     // PDM Input Reg0\r
96 #define TAS2770_PDMInputReg0  TAS2770_REG(0X0, 0x08)\r
97 #define TAS2770_PDMInputReg0_ClassDSYNC_Mask  (0x1 << 6)\r
98 #define TAS2770_PDMInputReg0_ClassDSYNC_AsyncMode  (0x0 << 6)\r
99 #define TAS2770_PDMInputReg0_ClassDSYNC_Retry  (0x1 << 6),\r
100 #define TAS2770_PDMInputReg0_PDMRATESW54_Mask  (0x3 << 4)\r
101 #define TAS2770_PDMInputReg0_PDMRATED132_Mask  (0x3 << 2)\r
102 #define TAS2770_PDMInputReg0_PDMRATED132_2_543_38MHz  (0x0 << 2)\r
103 #define TAS2770_PDMInputReg0_PDMRATED132_5_086_76MHz  (0x1 << 2)\r
104 #define TAS2770_PDMInputReg0_PDMRATED010_Mask  (0x3 << 0)\r
105 #define TAS2770_PDMInputReg0_PDMRATED010_2_543_38MHz  (0x0 << 0)\r
106 #define TAS2770_PDMInputReg0_PDMRATED010_5_086_76MHz  (0x1 << 0)\r
107 \r
108     // PDM Configuration Reg1\r
109 #define TAS2770_PDMConfigurationReg1  TAS2770_REG(0X0, 0x09)\r
110 #define TAS2770_PDMConfigurationReg1_PDMEDGED1_Mask  (0x1 << 7)\r
111 #define TAS2770_PDMConfigurationReg1_PDMEDGED1_Rising  (0x0 << 7)\r
112 #define TAS2770_PDMConfigurationReg1_PDMEDGED1_Falling  (0x1 << 7)\r
113 #define TAS2770_PDMConfigurationReg1_PDMEDGED0_Mask  (0x1 << 6)\r
114 #define TAS2770_PDMConfigurationReg1_PDMEDGED0_Rising  (0x0 << 6)\r
115 #define TAS2770_PDMConfigurationReg1_PDMEDGED0_Falling  (0x1 << 6)\r
116 #define TAS2770_PDMConfigurationReg1_PDMSLVD1_Mask  (0x1 << 5)\r
117 #define TAS2770_PDMConfigurationReg1_PDMSLVD1_Slave  (0x0 << 5)\r
118 #define TAS2770_PDMConfigurationReg1_PDMSLVD1_Master  (0x1 << 5)\r
119 #define TAS2770_PDMConfigurationReg1_PDMSLVD0_Mask  (0x1 << 4)\r
120 #define TAS2770_PDMConfigurationReg1_PDMSLVD0_Slave  (0x0 << 4)\r
121 #define TAS2770_PDMConfigurationReg1_PDMSLVD0_Master  (0x1 << 4)\r
122 #define TAS2770_PDMConfigurationReg1_PDMCLKD1_Mask  (0x1 << 3)\r
123 #define TAS2770_PDMConfigurationReg1_PDMCLKD1_Pdmck0  (0x0 << 3)\r
124 #define TAS2770_PDMConfigurationReg1_PDMCLKD1_Pdmck1  (0x1 << 3)\r
125 #define TAS2770_PDMConfigurationReg1_PDMCLKD0_Mask  (0x1 << 2)\r
126 #define TAS2770_PDMConfigurationReg1_PDMCLKD0_Pdmck0  (0x0 << 2)\r
127 #define TAS2770_PDMConfigurationReg1_PDMCLKD0_Pdmck1  (0x1 << 2)\r
128 #define TAS2770_PDMConfigurationReg1_PDMGATED1_Mask  (0x1 << 1)\r
129 #define TAS2770_PDMConfigurationReg1_PDMGATED1_GatedOff  (0x0 << 1)\r
130 #define TAS2770_PDMConfigurationReg1_PDMGATED1_Active  (0x1 << 1)\r
131 #define TAS2770_PDMConfigurationReg1_PDMGATED0_Mask  (0x1 << 0)\r
132 #define TAS2770_PDMConfigurationReg1_PDMGATED0_GatedOff  (0x0 << 0)\r
133 #define TAS2770_PDMConfigurationReg1_PDMGATED0_Active  (0x1 << 0)\r
134 \r
135     // TDM Configuration Reg0\r
136 #define TAS2770_TDMConfigurationReg0  TAS2770_REG(0X0, 0x0A)\r
137 #define TAS2770_TDMConfigurationReg0_SAMPRATERAMP_Mask  (0x1 << 5)\r
138 #define TAS2770_TDMConfigurationReg0_SAMPRATERAMP_48KHz  (0x0 << 5)\r
139 #define TAS2770_TDMConfigurationReg0_SAMPRATERAMP_44_1KHz  (0x1 << 5)\r
140 #define TAS2770_TDMConfigurationReg0_DETECTSAMPRATE_Mask  (0x1 << 4)\r
141 #define TAS2770_TDMConfigurationReg0_DETECTSAMPRATE_Disabled  (0x1 << 4)\r
142 #define TAS2770_TDMConfigurationReg0_DETECTSAMPRATE_Enabled  (0x0 << 4)\r
143 #define TAS2770_TDMConfigurationReg0_SAMPRATE31_Mask  (0x7 << 1)\r
144 #define TAS2770_TDMConfigurationReg0_SAMPRATE31_44_1_48kHz  (0x3 << 1)\r
145 #define TAS2770_TDMConfigurationReg0_SAMPRATE31_88_2_96kHz  (0x4 << 1)\r
146 #define TAS2770_TDMConfigurationReg0_SAMPRATE31_176_4_192kHz  (0x5 << 1)\r
147 #define TAS2770_TDMConfigurationReg0_FRAMESTART_Mask  (0x1 << 0)\r
148 #define TAS2770_TDMConfigurationReg0_FRAMESTART_LowToHigh  (0x0 << 0)\r
149 #define TAS2770_TDMConfigurationReg0_FRAMESTART_HighToLow  (0x1 << 0)\r
150 \r
151     // TDM Configuration Reg1\r
152 #define TAS2770_TDMConfigurationReg1  TAS2770_REG(0X0, 0x0B)\r
153 #define TAS2770_TDMConfigurationReg1_RXJUSTIFY_Mask  (0x1 << 6)\r
154 #define TAS2770_TDMConfigurationReg1_RXJUSTIFY_Left  (0x0 << 6)\r
155 #define TAS2770_TDMConfigurationReg1_RXJUSTIFY_Right  (0x1 << 6)\r
156 #define TAS2770_TDMConfigurationReg1_RXOFFSET51_Mask  (0x1f << 1)\r
157 #define TAS2770_TDMConfigurationReg1_RXOFFSET51_Shift (1)\r
158 #define TAS2770_TDMConfigurationReg1_RXEDGE_Mask  (0x1 << 0)\r
159 #define TAS2770_TDMConfigurationReg1_RXEDGE_Rising  (0x0 << 0)\r
160 #define TAS2770_TDMConfigurationReg1_RXEDGE_Falling  (0x1 << 0)\r
161 \r
162     // TDM Configuration Reg2\r
163 #define TAS2770_TDMConfigurationReg2  TAS2770_REG(0X0, 0x0C)\r
164 #define TAS2770_TDMConfigurationReg2_RXSCFG54_Mask  (0x3 << 4)\r
165 #define TAS2770_TDMConfigurationReg2_RXSCFG54_Mono_I2C  (0x0 << 4),\r
166 #define TAS2770_TDMConfigurationReg2_RXSCFG54_Mono_Left  (0x1 << 4),\r
167 #define TAS2770_TDMConfigurationReg2_RXSCFG54_Mono_Right  (0x2 << 4)\r
168 #define TAS2770_TDMConfigurationReg2_RXSCFG54_Stereo_DownMix  (0x3 << 4)\r
169 #define TAS2770_TDMConfigurationReg2_RXWLEN32_Mask  (0x3 << 2)\r
170 #define TAS2770_TDMConfigurationReg2_RXWLEN32_16Bits  (0x0 << 2)\r
171 #define TAS2770_TDMConfigurationReg2_RXWLEN32_20Bits  (0x1 << 2)\r
172 #define TAS2770_TDMConfigurationReg2_RXWLEN32_24Bits  (0x2 << 2)\r
173 #define TAS2770_TDMConfigurationReg2_RXWLEN32_32Bits  (0x3 << 2)\r
174 #define TAS2770_TDMConfigurationReg2_RXSLEN10_Mask  (0x3 << 0)\r
175 #define TAS2770_TDMConfigurationReg2_RXSLEN10_16Bits  (0x0 << 0)\r
176 #define TAS2770_TDMConfigurationReg2_RXSLEN10_24Bits  (0x1 << 0)\r
177 #define TAS2770_TDMConfigurationReg2_RXSLEN10_32Bits  (0x2 << 0)\r
178 \r
179     // TDM Configuration Reg3\r
180 #define TAS2770_TDMConfigurationReg3  TAS2770_REG(0X0, 0x0D)\r
181 #define TAS2770_TDMConfigurationReg3_RXSLOTRight74_Mask  (0xf << 4)\r
182 #define TAS2770_TDMConfigurationReg3_RXSLOTLeft30_Mask  (0xf << 0)\r
183 \r
184     // TDM Configuration Reg4\r
185 #define TAS2770_TDMConfigurationReg4  TAS2770_REG(0X0, 0x0E)\r
186 #define TAS2770_TDMConfigurationReg4_TXKEEPER_Mask  (0x1 << 5)\r
187 #define TAS2770_TDMConfigurationReg4_TXKEEPER_Disable  (0x0 << 5)\r
188 #define TAS2770_TDMConfigurationReg4_TXKEEPER_Enable  (0x1 << 5)\r
189 #define TAS2770_TDMConfigurationReg4_TXFILL_Mask  (0x1 << 4)\r
190 #define TAS2770_TDMConfigurationReg4_TXFILL_Transmit0  (0x0 << 4)\r
191 #define TAS2770_TDMConfigurationReg4_TXFILL_TransmitHiz  (0x1 << 4)\r
192 #define TAS2770_TDMConfigurationReg4_TXOFFSET31_Mask  (0x7 << 1)\r
193 #define TAS2770_TDMConfigurationReg4_TXEDGE_Mask  (0x1 << 0)\r
194 #define TAS2770_TDMConfigurationReg4_TXEDGE_Rising  (0x0 << 0)\r
195 #define TAS2770_TDMConfigurationReg4_TXEDGE_Falling  (0x1 << 0)\r
196 \r
197     // TDM Configuration Reg5\r
198 #define TAS2770_TDMConfigurationReg5  TAS2770_REG(0X0, 0x0F)\r
199 #define TAS2770_TDMConfigurationReg5_VSNSTX_Mask  (0x1 << 6)\r
200 #define TAS2770_TDMConfigurationReg5_VSNSTX_Disable  (0x0 << 6),\r
201 #define TAS2770_TDMConfigurationReg5_VSNSTX_Enable  (0x1 << 6),\r
202 #define TAS2770_TDMConfigurationReg5_VSNSSLOT50_Mask  (0x3f << 0)\r
203 \r
204     // TDM Configuration Reg6\r
205 #define TAS2770_TDMConfigurationReg6  TAS2770_REG(0X0, 0x10)\r
206 #define TAS2770_TDMConfigurationReg6_ISNSTX_Mask  (0x1 << 6)\r
207 #define TAS2770_TDMConfigurationReg6_ISNSTX_Disable  (0x0 << 6),\r
208 #define TAS2770_TDMConfigurationReg6_ISNSTX_Enable  (0x1 << 6),\r
209 #define TAS2770_TDMConfigurationReg6_ISNSSLOT50_Mask  (0x3f << 0)\r
210 \r
211     // TDM Configuration Reg7\r
212 #define TAS2770_TDMConfigurationReg7  TAS2770_REG(0X0, 0x11)\r
213 #define TAS2770_TDMConfigurationReg7_PDMTX_Mask  (0x1 << 6)\r
214 #define TAS2770_TDMConfigurationReg7_PDMTX_Disable  (0x0 << 6)\r
215 #define TAS2770_TDMConfigurationReg7_PDMTX_Enable  (0x1 << 6)\r
216 #define TAS2770_TDMConfigurationReg7_PDMSLOT50_Mask  (0x3f << 0)\r
217 \r
218     // TDM Configuration Reg8\r
219 #define TAS2770_TDMConfigurationReg8  TAS2770_REG(0X0, 0x12)\r
220 #define TAS2770_TDMConfigurationReg8_VBATSLEN_Mask  (0x1 << 7)\r
221 #define TAS2770_TDMConfigurationReg8_VBATSLEN_8Bits  (0x0 << 7)\r
222 #define TAS2770_TDMConfigurationReg8_VBATSLEN_16Bits  (0x1 << 7)\r
223 #define TAS2770_TDMConfigurationReg8_VBATTX_Mask  (0x1 << 6)\r
224 #define TAS2770_TDMConfigurationReg8_VBATTX_Disable  (0x0 << 6)\r
225 #define TAS2770_TDMConfigurationReg8_VBATTX_Enable  (0x1 << 6)\r
226 #define TAS2770_TDMConfigurationReg8_VBATSLOT50_Mask  (0x3f << 0)\r
227 \r
228     // TDM Configuration Reg9\r
229 #define TAS2770_TDMConfigurationReg9  TAS2770_REG(0X0, 0x13)\r
230 #define TAS2770_TDMConfigurationReg9_TEMPTX_Mask  (0x1 << 6)\r
231 #define TAS2770_TDMConfigurationReg9_TEMPTX_Disable  (0x0 << 6)\r
232 #define TAS2770_TDMConfigurationReg9_TEMPTX_Enable  (0x1 << 6)\r
233 #define TAS2770_TDMConfigurationReg9_TEMPSLOT50_Mask  (0x3f << 0)\r
234 \r
235     // TDM Configuration Reg10\r
236 #define TAS2770_TDMConfigurationReg10  TAS2770_REG(0X0, 0x14)\r
237 #define TAS2770_TDMConfigurationReg10_GAINTX_Mask  (0x1 << 6)\r
238 #define TAS2770_TDMConfigurationReg10_GAINTX_Disable  (0x0 << 6)\r
239 #define TAS2770_TDMConfigurationReg10_GAINTX_Enable  (0x1 << 6)\r
240 #define TAS2770_TDMConfigurationReg10_GAINSLOT50_Mask  (0x3f << 0)\r
241 \r
242     // Limiter Configuration Reg0\r
243 #define TAS2770_LimiterConfigurationReg0  TAS2770_REG(0X0, 0x15)\r
244 #define TAS2770_LimiterConfigurationReg0_LIMATKST54_Mask  (0x3 << 4)\r
245 #define TAS2770_LimiterConfigurationReg0_LIMATKST54_1  (0x2 << 4)\r
246 #define TAS2770_LimiterConfigurationReg0_LIMATKST54_2  (0x3 << 4)\r
247 #define TAS2770_LimiterConfigurationReg0_LIMATKST54_0_25  (0x0 << 4)\r
248 #define TAS2770_LimiterConfigurationReg0_LIMATKST54_0_5  (0x1 << 4)\r
249 #define TAS2770_LimiterConfigurationReg0_LIMATKRT31_Mask  (0x7 << 1)\r
250 #define TAS2770_LimiterConfigurationReg0_LIMATKRT31_5  (0x0 << 1)\r
251 #define TAS2770_LimiterConfigurationReg0_LIMATKRT31_10  (0x1 << 1)\r
252 #define TAS2770_LimiterConfigurationReg0_LIMATKRT31_20  (0x2 << 1)\r
253 #define TAS2770_LimiterConfigurationReg0_LIMATKRT31_40  (0x3 << 1)\r
254 #define TAS2770_LimiterConfigurationReg0_LIMATKRT31_80  (0x4 << 1)\r
255 #define TAS2770_LimiterConfigurationReg0_LIMATKRT31_160  (0x5 << 1)\r
256 #define TAS2770_LimiterConfigurationReg0_LIMATKRT31_320  (0x6 << 1)\r
257 #define TAS2770_LimiterConfigurationReg0_LIMATKRT31_640  (0x7 << 1)\r
258 #define TAS2770_LimiterConfigurationReg0_LIMEN_Mask  (0x1 << 0)\r
259 #define TAS2770_LimiterConfigurationReg0_LIMEN_Disabled  (0x0 << 0)\r
260 #define TAS2770_LimiterConfigurationReg0_LIMEN_Enabled  (0x1 << 0)\r
261 \r
262     // Limiter Configuration Reg1\r
263 #define TAS2770_LimiterConfigurationReg1  TAS2770_REG(0X0, 0x16)\r
264 #define TAS2770_LimiterConfigurationReg1_LIMRLSST76_Mask  (0x3 << 6)\r
265 #define TAS2770_LimiterConfigurationReg1_LIMRLSST76_1  (0x2 << 6)\r
266 #define TAS2770_LimiterConfigurationReg1_LIMRLSST76_2  (0x3 << 6)\r
267 #define TAS2770_LimiterConfigurationReg1_LIMRLSST76_0_25  (0x0 << 6)\r
268 #define TAS2770_LimiterConfigurationReg1_LIMRLSST76_0_5  (0x1 << 6)\r
269 #define TAS2770_LimiterConfigurationReg1_LIMRLSRT53_Mask  (0x7 << 3)\r
270 #define TAS2770_LimiterConfigurationReg1_LIMRLSRT53_10  (0x0 << 3)\r
271 #define TAS2770_LimiterConfigurationReg1_LIMRLSRT53_50  (0x1 << 3)\r
272 #define TAS2770_LimiterConfigurationReg1_LIMRLSRT53_100  (0x2 << 3)\r
273 #define TAS2770_LimiterConfigurationReg1_LIMRLSRT53_250  (0x3 << 3)\r
274 #define TAS2770_LimiterConfigurationReg1_LIMRLSRT53_500  (0x4 << 3)\r
275 #define TAS2770_LimiterConfigurationReg1_LIMRLSRT53_750  (0x5 << 3)\r
276 #define TAS2770_LimiterConfigurationReg1_LIMRLSRT53_1000  (0x6 << 3)\r
277 #define TAS2770_LimiterConfigurationReg1_LIMRLSRT53_1500  (0x7 << 3)\r
278 #define TAS2770_LimiterConfigurationReg1_LIMHLDTM20_Mask  (0x7 << 0)\r
279 #define TAS2770_LimiterConfigurationReg1_LIMHLDTM20_0  (0x0 << 0)\r
280 #define TAS2770_LimiterConfigurationReg1_LIMHLDTM20_10  (0x1 << 0)\r
281 #define TAS2770_LimiterConfigurationReg1_LIMHLDTM20_25  (0x2 << 0)\r
282 #define TAS2770_LimiterConfigurationReg1_LIMHLDTM20_50  (0x3 << 0)\r
283 #define TAS2770_LimiterConfigurationReg1_LIMHLDTM20_100  (0x4 << 0)\r
284 #define TAS2770_LimiterConfigurationReg1_LIMHLDTM20_250  (0x5 << 0)\r
285 #define TAS2770_LimiterConfigurationReg1_LIMHLDTM20_500  (0x6 << 0)\r
286 #define TAS2770_LimiterConfigurationReg1_LIMHLDTM20_1000  (0x7 << 0)\r
287 \r
288     // Limiter Configuration Reg2\r
289 #define TAS2770_LimiterConfigurationReg2  TAS2770_REG(0X0, 0x17)\r
290 #define TAS2770_LimiterConfigurationReg2_LIMMAXATN40_Mask  (0x1f << 0)\r
291 \r
292     // Limiter Configuration Reg3\r
293 #define TAS2770_LimiterConfigurationReg3  TAS2770_REG(0X0, 0x18)\r
294 #define TAS2770_LimiterConfigurationReg3_LIMTHMAX60_Mask  (0x7f << 0)\r
295 \r
296     // Limiter Configuration Reg4\r
297 #define TAS2770_LimiterConfigurationReg4  TAS2770_REG(0X0, 0x19)\r
298 #define TAS2770_LimiterConfigurationReg4_LIMTHMIN60_Mask  (0x7f << 0)\r
299 \r
300     // Limiter Configuration Reg5\r
301 #define TAS2770_LimiterConfigurationReg5  TAS2770_REG(0X0, 0x1A)\r
302 #define TAS2770_LimiterConfigurationReg5_LIMINFPOINT_Mask  (0x7f << 0)\r
303 \r
304     // Brown Out Prevention Reg0\r
305 #define TAS2770_BrownOutPreventionReg0  TAS2770_REG(0X0, 0x1B)\r
306 #define TAS2770_BrownOutPreventionReg0_LIMSLOPE54_Mask  (0x3 << 4)\r
307 #define TAS2770_BrownOutPreventionReg0_LIMSLOPE54_1  (0x0 << 4)\r
308 #define TAS2770_BrownOutPreventionReg0_LIMSLOPE54_2  (0x2 << 4)\r
309 #define TAS2770_BrownOutPreventionReg0_LIMSLOPE54_4  (0x3 << 4)\r
310 #define TAS2770_BrownOutPreventionReg0_LIMSLOPE54_1_5  (0x1 << 4)\r
311 #define TAS2770_BrownOutPreventionReg0_BOPHLDCLR_Mask  (0x1 << 3)\r
312 #define TAS2770_BrownOutPreventionReg0_BOPHLDCLR_DontClear  (0x0 << 3)\r
313 #define TAS2770_BrownOutPreventionReg0_BOPHLDCLR_Clear  (0x1 << 3)\r
314 #define TAS2770_BrownOutPreventionReg0_BOPINFHLD_Mask  (0x1 << 2)\r
315 #define TAS2770_BrownOutPreventionReg0_BOPINFHLD_UseHoldTime  (0x0 << 2)\r
316 #define TAS2770_BrownOutPreventionReg0_BOPINFHLD_HoldUntilCleared  (0x1 << 2)\r
317 #define TAS2770_BrownOutPreventionReg0_BOPMUTE_Mask  (0x1 << 1)\r
318 #define TAS2770_BrownOutPreventionReg0_BOPMUTE_DoNotMute  (0x0 << 1)\r
319 #define TAS2770_BrownOutPreventionReg0_BOPMUTE_Mute  (0x1 << 1)\r
320 #define TAS2770_BrownOutPreventionReg0_BOPEN_Mask  (0x1 << 0)\r
321 #define TAS2770_BrownOutPreventionReg0_BOPEN_Disabled  (0x0 << 0)\r
322 #define TAS2770_BrownOutPreventionReg0_BOPEN_Enabled  (0x1 << 0)\r
323 \r
324     // Brown Out Prevention Reg1\r
325 #define TAS2770_BrownOutPreventionReg1  TAS2770_REG(0X0, 0x1C)\r
326 #define TAS2770_BrownOutPreventionReg1_BOPTH70_Mask  (0xff << 0)\r
327 \r
328     // Brown Out Prevention Reg2\r
329 #define TAS2770_BrownOutPreventionReg2  TAS2770_REG(0X0, 0x1D)\r
330 #define TAS2770_BrownOutPreventionReg2_BOPATKRT75_Mask  (0x7 << 5)\r
331 #define TAS2770_BrownOutPreventionReg2_BOPATKRT75_5  (0x0 << 5)\r
332 #define TAS2770_BrownOutPreventionReg2_BOPATKRT75_10  (0x1 << 5)\r
333 #define TAS2770_BrownOutPreventionReg2_BOPATKRT75_20  (0x2 << 5)\r
334 #define TAS2770_BrownOutPreventionReg2_BOPATKRT75_40  (0x3 << 5)\r
335 #define TAS2770_BrownOutPreventionReg2_BOPATKRT75_80  (0x4 << 5)\r
336 #define TAS2770_BrownOutPreventionReg2_BOPATKRT75_160  (0x5 << 5)\r
337 #define TAS2770_BrownOutPreventionReg2_BOPATKRT75_320  (0x6 << 5)\r
338 #define TAS2770_BrownOutPreventionReg2_BOPATKRT75_640  (0x7 << 5)\r
339 #define TAS2770_BrownOutPreventionReg2_BOPATKST43_Mask  (0x3 << 3)\r
340 #define TAS2770_BrownOutPreventionReg2_BOPATKST43_1  (0x1 << 3)\r
341 #define TAS2770_BrownOutPreventionReg2_BOPATKST43_2  (0x3 << 3)\r
342 #define TAS2770_BrownOutPreventionReg2_BOPATKST43_0_5  (0x0 << 3)\r
343 #define TAS2770_BrownOutPreventionReg2_BOPATKST43_1_5  (0x2 << 3)\r
344 #define TAS2770_BrownOutPreventionReg2_BOPHLDTM20_Mask  (0x7 << 0)\r
345 #define TAS2770_BrownOutPreventionReg2_BOPHLDTM20_0  (0x0 << 0)\r
346 #define TAS2770_BrownOutPreventionReg2_BOPHLDTM20_10  (0x1 << 0)\r
347 #define TAS2770_BrownOutPreventionReg2_BOPHLDTM20_25  (0x2 << 0)\r
348 #define TAS2770_BrownOutPreventionReg2_BOPHLDTM20_50  (0x3 << 0)\r
349 #define TAS2770_BrownOutPreventionReg2_BOPHLDTM20_100  (0x4 << 0)\r
350 #define TAS2770_BrownOutPreventionReg2_BOPHLDTM20_250  (0x5 << 0)\r
351 #define TAS2770_BrownOutPreventionReg2_BOPHLDTM20_500  (0x6 << 0)\r
352 #define TAS2770_BrownOutPreventionReg2_BOPHLDTM20_1000  (0x7 << 0)\r
353 \r
354     // ICLA Reg0\r
355 #define TAS2770_ICLAReg0  TAS2770_REG(0X0, 0x1E)\r
356 #define TAS2770_ICLAReg0_ICLAUSEMAX_Mask  (0x1 << 7)\r
357 #define TAS2770_ICLAReg0_ICLAUSEMAX_Min  (0x0 << 7)\r
358 #define TAS2770_ICLAReg0_ICLAUSEMAX_Max  (0x1 << 7)\r
359 #define TAS2770_ICLAReg0_ICLASLOT61_Mask  (0x3f << 1)\r
360 #define TAS2770_ICLAReg0_ICLAEN_Mask  (0x1 << 0)\r
361 #define TAS2770_ICLAReg0_ICLAEN_Disabled  (0x0 << 0)\r
362 #define TAS2770_ICLAReg0_ICLAEN_Enabled  (0x1 << 0)\r
363 \r
364     // ICLA Reg1\r
365 #define TAS2770_ICLAReg1  TAS2770_REG(0X0, 0x1F)\r
366 #define TAS2770_ICLAReg1_ICLASEN_Mask  (0xff << 0)\r
367 #define TAS2770_ICLAReg1_ICLASLOT_7_Disable  (0x0 << 7)\r
368 #define TAS2770_ICLAReg1_ICLASLOT_7_Enable  (0x1 << 7)\r
369 #define TAS2770_ICLAReg1_ICLASLOT_6_Disable  (0x0 << 6)\r
370 #define TAS2770_ICLAReg1_ICLASLOT_6_Enable  (0x1 << 6)\r
371 #define TAS2770_ICLAReg1_ICLASLOT_5_Disable  (0x0 << 5)\r
372 #define TAS2770_ICLAReg1_ICLASLOT_5_Enable  (0x1 << 5)\r
373 #define TAS2770_ICLAReg1_ICLASLOT_4_Disable  (0x0 << 4)\r
374 #define TAS2770_ICLAReg1_ICLASLOT_4_Enable  (0x1 << 4)\r
375 #define TAS2770_ICLAReg1_ICLASLOT_3_Disable  (0x0 << 3)\r
376 #define TAS2770_ICLAReg1_ICLASLOT_3_Enable  (0x1 << 3)\r
377 #define TAS2770_ICLAReg1_ICLASLOT_2_Disable  (0x0 << 2)\r
378 #define TAS2770_ICLAReg1_ICLASLOT_2_Enable  (0x1 << 2)\r
379 #define TAS2770_ICLAReg1_ICLASLOT_1_Disable  (0x0 << 1)\r
380 #define TAS2770_ICLAReg1_ICLASLOT_1_Enable  (0x1 << 1)\r
381 #define TAS2770_ICLAReg1_ICLASLOT_0_Disable  (0x0 << 0)\r
382 #define TAS2770_ICLAReg1_ICLASLOT_0_Enable  (0x1 << 0)\r
383 \r
384     // Interrupt Mask Reg0\r
385 #define TAS2770_InterruptMaskReg0  TAS2770_REG(0X0, 0x20)\r
386 #define TAS2770_InterruptMaskReg0_LIMMUTEINTMASK_Mask  (0x1 << 7)\r
387 #define TAS2770_InterruptMaskReg0_LIMMUTEINTMASK_Unmask  (0x0 << 7)\r
388 #define TAS2770_InterruptMaskReg0_LIMMUTEINTMASK_Disable  (0x1 << 7)\r
389 #define TAS2770_InterruptMaskReg0_LIMINFHLDINTMASK_Mask  (0x1 << 6)\r
390 #define TAS2770_InterruptMaskReg0_LIMINFHLDINTMASK_Unmask  (0x0 << 6)\r
391 #define TAS2770_InterruptMaskReg0_LIMINFHLDINTMASK_Disable  (0x1 << 6)\r
392 #define TAS2770_InterruptMaskReg0_LIMMAXATNINTMASK_Mask  (0x1 << 5)\r
393 #define TAS2770_InterruptMaskReg0_LIMMAXATNINTMASK_Unmask  (0x0 << 5)\r
394 #define TAS2770_InterruptMaskReg0_LIMMAXATNINTMASK_Disable  (0x1 << 5)\r
395 #define TAS2770_InterruptMaskReg0_VBATLessthanINFINTMASK_Mask  (0x1 << 4)\r
396 #define TAS2770_InterruptMaskReg0_VBATLessthanINFINTMASK_Unmask  (0x0 << 4)\r
397 #define TAS2770_InterruptMaskReg0_VBATLessthanINFINTMASK_Disable  (0x1 << 4)\r
398 #define TAS2770_InterruptMaskReg0_LIMActiveFlagINTMASK_Mask  (0x1 << 3)\r
399 #define TAS2770_InterruptMaskReg0_LIMActiveFlagINTMASK_Unmask  (0x0 << 3)\r
400 #define TAS2770_InterruptMaskReg0_LIMActiveFlagINTMASK_Disable  (0x1 << 3)\r
401 #define TAS2770_InterruptMaskReg0_TDMClockErrorINTMASK_Mask  (0x1 << 2)\r
402 #define TAS2770_InterruptMaskReg0_TDMClockErrorINTMASK_Unmask  (0x0 << 2)\r
403 #define TAS2770_InterruptMaskReg0_TDMClockErrorINTMASK_Disable  (0x1 << 2)\r
404 #define TAS2770_InterruptMaskReg0_OCEINTMASK_Mask  (0x1 << 1)\r
405 #define TAS2770_InterruptMaskReg0_OCEINTMASK_Unmask  (0x0 << 1)\r
406 #define TAS2770_InterruptMaskReg0_OCEINTMASK_Disable  (0x1 << 1)\r
407 #define TAS2770_InterruptMaskReg0_OTEINTMASK_Mask  (0x1 << 0)\r
408 #define TAS2770_InterruptMaskReg0_OTEINTMASK_Unmask  (0x0 << 0)\r
409 #define TAS2770_InterruptMaskReg0_OTEINTMASK_Disable  (0x1 << 0)\r
410 \r
411     // Interrupt Mask Reg1\r
412 #define TAS2770_InterruptMaskReg1  TAS2770_REG(0X0, 0x21)\r
413 #define TAS2770_InterruptMaskReg1_PDMAUDDATAINVALIDINTMASK_Mask  (0x1 << 7)\r
414 #define TAS2770_InterruptMaskReg1_PDMAUDDATAINVALIDINTMASK_Unmask  (0x0 << 7)\r
415 #define TAS2770_InterruptMaskReg1_PDMAUDDATAINVALIDINTMASK_Disable  (0x1 << 7)\r
416 #define TAS2770_InterruptMaskReg1_VBATOVLOINTMASK_Mask  (0x1 << 3)\r
417 #define TAS2770_InterruptMaskReg1_VBATOVLOINTMASK_Unmask  (0x0 << 3)\r
418 #define TAS2770_InterruptMaskReg1_VBATOVLOINTMASK_Disable  (0x1 << 3)\r
419 #define TAS2770_InterruptMaskReg1_VBATUVLOINTMASK_Mask  (0x1 << 2)\r
420 #define TAS2770_InterruptMaskReg1_VBATUVLOINTMASK_Unmask  (0x0 << 2)\r
421 #define TAS2770_InterruptMaskReg1_VBATUVLOINTMASK_Disable  (0x1 << 2)\r
422 #define TAS2770_InterruptMaskReg1_BrownOutFlagINTMASK_Mask  (0x1 << 1)\r
423 #define TAS2770_InterruptMaskReg1_BrownOutFlagINTMASK_Unmask  (0x0 << 1)\r
424 #define TAS2770_InterruptMaskReg1_BrownOutFlagINTMASK_Disable  (0x1 << 1)\r
425 #define TAS2770_InterruptMaskReg1_PDMClockErrorINTMASK_Mask  (0x1 << 0)\r
426 #define TAS2770_InterruptMaskReg1_PDMClockErrorINTMASK_Unmask  (0x0 << 0)\r
427 #define TAS2770_InterruptMaskReg1_PDMClockErrorINTMASK_Disable  (0x1 << 0)\r
428 \r
429     // Live-Interrupt Reg0\r
430 #define TAS2770_LiveInterruptReg0  TAS2770_REG(0X0, 0x22)\r
431 #define TAS2770_LiveInterruptReg0_LIMMUTE_Mask  (0x1 << 7)\r
432 #define TAS2770_LiveInterruptReg0_LIMMUTE_NoInterrupt  (0x0 << 7)\r
433 #define TAS2770_LiveInterruptReg0_LIMMUTE_Interrupt  (0x1 << 7)\r
434 #define TAS2770_LiveInterruptReg0_LIMINFHLD_Mask  (0x1 << 6)\r
435 #define TAS2770_LiveInterruptReg0_LIMINFHLD_NoInterrupt  (0x0 << 6)\r
436 #define TAS2770_LiveInterruptReg0_LIMINFHLD_Interrupt  (0x1 << 6)\r
437 #define TAS2770_LiveInterruptReg0_LIMMAXATN_Mask  (0x1 << 5)\r
438 #define TAS2770_LiveInterruptReg0_LIMMAXATN_NoInterrupt  (0x0 << 5)\r
439 #define TAS2770_LiveInterruptReg0_LIMMAXATN_Interrupt  (0x1 << 5)\r
440 #define TAS2770_LiveInterruptReg0_VBATLessthanINF_Mask  (0x1 << 4)\r
441 #define TAS2770_LiveInterruptReg0_VBATLessthanINF_NoInterrupt  (0x0 << 4)\r
442 #define TAS2770_LiveInterruptReg0_VBATLessthanINF_Interrupt  (0x1 << 4)\r
443 #define TAS2770_LiveInterruptReg0_LIMActiveFlag_Mask  (0x1 << 3)\r
444 #define TAS2770_LiveInterruptReg0_LIMActiveFlag_NoInterrupt  (0x0 << 3)\r
445 #define TAS2770_LiveInterruptReg0_LIMActiveFlag_Interrupt  (0x1 << 3)\r
446 #define TAS2770_LiveInterruptReg0_TDMClockError_Mask  (0x1 << 2)\r
447 #define TAS2770_LiveInterruptReg0_TDMClockError_NoInterrupt  (0x0 << 2)\r
448 #define TAS2770_LiveInterruptReg0_TDMClockError_Interrupt  (0x1 << 2)\r
449 #define TAS2770_LiveInterruptReg0_OCEFlag_Mask  (0x1 << 1)\r
450 #define TAS2770_LiveInterruptReg0_OCEFlag_NoInterrupt  (0x0 << 1)\r
451 #define TAS2770_LiveInterruptReg0_OCEFlag_Interrupt  (0x1 << 1)\r
452 #define TAS2770_LiveInterruptReg0_OTEFlag_Mask  (0x1 << 0)\r
453 #define TAS2770_LiveInterruptReg0_OTEFlag_NoInterrupt  (0x0 << 0)\r
454 #define TAS2770_LiveInterruptReg0_OTEFlag_Interrupt  (0x1 << 0)\r
455 \r
456     // Live-Interrupt Reg1\r
457 #define TAS2770_LiveInterruptReg1  TAS2770_REG(0X0, 0x23)\r
458 #define TAS2770_LiveInterruptReg1_PDMAUDDATAINVALID_Mask  (0x1 << 7)\r
459 #define TAS2770_LiveInterruptReg1_PDMAUDDATAINVALID_NoInterrupt  (0x0 << 7)\r
460 #define TAS2770_LiveInterruptReg1_PDMAUDDATAINVALID_Interrupt  (0x1 << 7)\r
461 #define TAS2770_LiveInterruptReg1_VBATOVLO_Mask  (0x1 << 3)\r
462 #define TAS2770_LiveInterruptReg1_VBATOVLO_NoInterrupt  (0x0 << 3)\r
463 #define TAS2770_LiveInterruptReg1_VBATOVLO_Interrupt  (0x1 << 3)\r
464 #define TAS2770_LiveInterruptReg1_VBATUVLO_Mask  (0x1 << 2)\r
465 #define TAS2770_LiveInterruptReg1_VBATUVLO_NoInterrupt  (0x0 << 2)\r
466 #define TAS2770_LiveInterruptReg1_VBATUVLO_Interrupt  (0x1 << 2)\r
467 #define TAS2770_LiveInterruptReg1_BrownOutFlag_Mask  (0x1 << 1)\r
468 #define TAS2770_LiveInterruptReg1_BrownOutFlag_NoInterrupt  (0x0 << 1)\r
469 #define TAS2770_LiveInterruptReg1_BrownOutFlag_Interrupt  (0x1 << 1)\r
470 #define TAS2770_LiveInterruptReg1_PDMClockError_Mask  (0x1 << 0)\r
471 #define TAS2770_LiveInterruptReg1_PDMClockError_NoInterrupt  (0x0 << 0)\r
472 #define TAS2770_LiveInterruptReg1_PDMClockError_Interrupt  (0x1 << 0)\r
473 \r
474     // Latched-Interrupt Reg0\r
475 #define TAS2770_LatchedInterruptReg0  TAS2770_REG(0X0, 0x24)\r
476 #define TAS2770_LatchedInterruptReg0_LIMMUTESticky_Mask  (0x1 << 7)\r
477 #define TAS2770_LatchedInterruptReg0_LIMMUTESticky_NoInterrupt  (0x0 << 7)\r
478 #define TAS2770_LatchedInterruptReg0_LIMMUTESticky_Interrupt  (0x1 << 7)\r
479 #define TAS2770_LatchedInterruptReg0_LIMINFHLDSticky_Mask  (0x1 << 6)\r
480 #define TAS2770_LatchedInterruptReg0_LIMINFHLDSticky_NoInterrupt  (0x0 << 6)\r
481 #define TAS2770_LatchedInterruptReg0_LIMINFHLDSticky_Interrupt  (0x1 << 6)\r
482 #define TAS2770_LatchedInterruptReg0_LIMMAXATNSticky_Mask  (0x1 << 5)\r
483 #define TAS2770_LatchedInterruptReg0_LIMMAXATNSticky_NoInterrupt  (0x0 << 5)\r
484 #define TAS2770_LatchedInterruptReg0_LIMMAXATNSticky_Interrupt  (0x1 << 5)\r
485 #define TAS2770_LatchedInterruptReg0_VBATLessthanINFSticky_Mask  (0x1 << 4)\r
486 #define TAS2770_LatchedInterruptReg0_VBATLessthanINFSticky_NoInterrupt  (0x0 << 4)\r
487 #define TAS2770_LatchedInterruptReg0_VBATLessthanINFSticky_Interrupt  (0x1 << 4)\r
488 #define TAS2770_LatchedInterruptReg0_LIMActiveFlagSticky_Mask  (0x1 << 3)\r
489 #define TAS2770_LatchedInterruptReg0_LIMActiveFlagSticky_NoInterrupt  (0x0 << 3)\r
490 #define TAS2770_LatchedInterruptReg0_LIMActiveFlagSticky_Interrupt  (0x1 << 3)\r
491 #define TAS2770_LatchedInterruptReg0_TDMClockErrorSticky_Mask  (0x1 << 2)\r
492 #define TAS2770_LatchedInterruptReg0_TDMClockErrorSticky_NoInterrupt  (0x0 << 2)\r
493 #define TAS2770_LatchedInterruptReg0_TDMClockErrorSticky_Interrupt  (0x1 << 2)\r
494 #define TAS2770_LatchedInterruptReg0_OCEFlagSticky_Mask  (0x1 << 1)\r
495 #define TAS2770_LatchedInterruptReg0_OCEFlagSticky_NoInterrupt  (0x0 << 1)\r
496 #define TAS2770_LatchedInterruptReg0_OCEFlagSticky_Interrupt  (0x1 << 1)\r
497 #define TAS2770_LatchedInterruptReg0_OTEFlagSticky_Mask  (0x1 << 0)\r
498 #define TAS2770_LatchedInterruptReg0_OTEFlagSticky_NoInterrupt  (0x0 << 0)\r
499 #define TAS2770_LatchedInterruptReg0_OTEFlagSticky_Interrupt  (0x1 << 0)\r
500 \r
501     // Latched-Interrupt Reg1\r
502 #define TAS2770_LatchedInterruptReg1  TAS2770_REG(0X0, 0x25)\r
503 #define TAS2770_LatchedInterruptReg1_PDMAUDDATAINVALIDSticky_Mask  (0x1 << 7)\r
504 #define TAS2770_LatchedInterruptReg1_PDMAUDDATAINVALIDSticky_NoInterrupt  (0x0 << 7)\r
505 #define TAS2770_LatchedInterruptReg1_PDMAUDDATAINVALIDSticky_Interrupt  (0x1 << 7)\r
506 #define TAS2770_LatchedInterruptReg1_VBATOVLOSticky_Mask  (0x1 << 3)\r
507 #define TAS2770_LatchedInterruptReg1_VBATOVLOSticky_NoInterrupt  (0x0 << 3)\r
508 #define TAS2770_LatchedInterruptReg1_VBATOVLOSticky_Interrupt  (0x1 << 3)\r
509 #define TAS2770_LatchedInterruptReg1_VBATUVLOSticky_Mask  (0x1 << 2)\r
510 #define TAS2770_LatchedInterruptReg1_VBATUVLOSticky_NoInterrupt  (0x0 << 2)\r
511 #define TAS2770_LatchedInterruptReg1_VBATUVLOSticky_Interrupt  (0x1 << 2)\r
512 #define TAS2770_LatchedInterruptReg1_BrownOutFlagSticky_Mask  (0x1 << 1)\r
513 #define TAS2770_LatchedInterruptReg1_BrownOutFlagSticky_NoInterrupt  (0x0 << 1)\r
514 #define TAS2770_LatchedInterruptReg1_BrownOutFlagSticky_Interrupt  (0x1 << 1)\r
515 #define TAS2770_LatchedInterruptReg1_PDMClockErrorSticky_Mask  (0x1 << 0)\r
516 #define TAS2770_LatchedInterruptReg1_PDMClockErrorSticky_NoInterrupt  (0x0 << 0)\r
517 #define TAS2770_LatchedInterruptReg1_PDMClockErrorSticky_Interrupt  (0x1 << 0)\r
518 \r
519     // VBAT MSB\r
520 #define TAS2770_VBATMSB  TAS2770_REG(0X0, 0x27)\r
521 #define TAS2770_VBATMSB_VBATMSB70_Mask  (0xff << 0)\r
522 \r
523     // VBAT LSB\r
524 #define TAS2770_VBATLSB  TAS2770_REG(0X0, 0x28)\r
525 #define TAS2770_VBATLSB_VBATLSB74_Mask  (0xf << 4)\r
526         \r
527     // TEMP MSB\r
528 #define TAS2770_TEMPMSB  TAS2770_REG(0X0, 0x29)\r
529 #define TAS2770_TEMPMSB_TEMPMSB70_Mask  (0xff << 0)\r
530 \r
531     // TEMP LSB\r
532 #define TAS2770_TEMPLSB  TAS2770_REG(0X0, 0x2A)\r
533 #define TAS2770_TEMPLSB_TEMPLSB74_Mask  (0xf << 4)\r
534 \r
535         // SDZ Config\r
536 #define TAS2770_SDZCONFIG  TAS2770_REG(0X0, 0x2F)\r
537 #define TAS2770_SDZCONFIG_ICLANONZEROMIN_Mask  (0x1 << 4)\r
538 #define TAS2770_SDZCONFIG_ICLANONZEROMIN_Disable  (0x0 << 4)\r
539 #define TAS2770_SDZCONFIG_ICLANONZEROMIN_Enable  (0x1 << 4)\r
540 #define TAS2770_SDZCONFIG_SDZMODECONF_Mask  (0x3 << 2)\r
541 #define TAS2770_SDZCONFIG_SDZMODECONF_ForcedShutdownAfterTimeout  (0x0 << 2)\r
542 #define TAS2770_SDZCONFIG_SDZMODECONF_ForceShutdown  (0x1 << 2)\r
543 #define TAS2770_SDZCONFIG_SDZMODECONF_NormalShutdown  (0x2 << 2)\r
544 #define TAS2770_SDZCONFIG_SDZMODETIMEOUT_Mask  (0x3 << 0)\r
545 #define TAS2770_SDZCONFIG_SDZMODETIMEOUT_2ms  (0x0 << 0)\r
546 #define TAS2770_SDZCONFIG_SDZMODETIMEOUT_4ms  (0x1 << 0)\r
547 #define TAS2770_SDZCONFIG_SDZMODETIMEOUT_6ms  (0x2 << 0)\r
548 #define TAS2770_SDZCONFIG_SDZMODETIMEOUT_23p8ms  (0x3 << 0)\r
549 \r
550 \r
551     // Interrupt Configuration\r
552 #define TAS2770_InterruptConfiguration  TAS2770_REG(0X0, 0x30)\r
553 #define TAS2770_InterruptConfiguration_INTTHRUSW_Mask  (0x1 << 2), \r
554 #define TAS2770_InterruptConfiguration_INTTHRUSW_IntOnIRQZ  (0x0 << 2)\r
555 #define TAS2770_InterruptConfiguration_INTTHRUSW_IntFor2ms  (0x1 << 2)\r
556 #define TAS2770_InterruptConfiguration_PININTConfig10_Mask  (0x3 << 0)\r
557 #define TAS2770_InterruptConfiguration_PININTConfig10_AssertOnLiveInterrupts  (0x0 << 0)\r
558 #define TAS2770_InterruptConfiguration_PININTConfig10_AssertOnLatchedInterrupts  (0x1 << 0)\r
559 #define TAS2770_InterruptConfiguration_PININTConfig10_Assert2msOnLiveInterrupts  (0x2 << 0)\r
560 #define TAS2770_InterruptConfiguration_PININTConfig10_Assert2msOnLatchedInterrupts  (0x3 << 0)\r
561 \r
562     // Digital Input Pin Pull Down\r
563 #define TAS2770_DigitalInputPinPullDown  TAS2770_REG(0X0, 0x31)\r
564 #define TAS2770_DigitalInputPinPullDown_WKPulldownSDOUT_Mask  (0x1 << 7)\r
565 #define TAS2770_DigitalInputPinPullDown_WKPulldownSDOUT_Disabled  (0x0 << 7)\r
566 #define TAS2770_DigitalInputPinPullDown_WKPulldownSDOUT_Enabled  (0x1 << 7)\r
567 #define TAS2770_DigitalInputPinPullDown_WKPulldownSDIN_Mask  (0x1 << 6)\r
568 #define TAS2770_DigitalInputPinPullDown_WKPulldownSDIN_Disabled  (0x0 << 6)\r
569 #define TAS2770_DigitalInputPinPullDown_WKPulldownSDIN_Enabled  (0x1 << 6)\r
570 #define TAS2770_DigitalInputPinPullDown_WKPulldownFSYNC_Mask  (0x1 << 5)\r
571 #define TAS2770_DigitalInputPinPullDown_WKPulldownFSYNC_Disabled  (0x0 << 5)\r
572 #define TAS2770_DigitalInputPinPullDown_WKPulldownFSYNC_Enabled  (0x1 << 5)\r
573 #define TAS2770_DigitalInputPinPullDown_WKPulldownSBCLK_Mask  (0x1 << 4)\r
574 #define TAS2770_DigitalInputPinPullDown_WKPulldownSBCLK_Disabled  (0x0 << 4)\r
575 #define TAS2770_DigitalInputPinPullDown_WKPulldownSBCLK_Enabled  (0x1 << 4)\r
576 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMD0_Mask  (0x1 << 3)\r
577 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMD0_Disabled  (0x0 << 3)\r
578 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMD0_Enabled  (0x1 << 3)\r
579 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMD1_Mask  (0x1 << 2)\r
580 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMD1_Disabled  (0x0 << 2)\r
581 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMD1_Enabled  (0x1 << 2)\r
582 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMCK0_Mask  (0x1 << 1)\r
583 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMCK0_Disabled  (0x0 << 1)\r
584 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMCK0_Enabled  (0x1 << 1)\r
585 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMCK1_Mask  (0x1 << 0)\r
586 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMCK1_Disabled  (0x0 << 0)\r
587 #define TAS2770_DigitalInputPinPullDown_WKPulldownPDMCK1_Enabled  (0x1 << 0)\r
588 \r
589     // Misc IRQ\r
590 #define TAS2770_MiscIRQ  TAS2770_REG(0X0, 0x32)\r
591 #define TAS2770_MiscIRQ_IRQZREQD_Mask  (0x1 << 7)\r
592 #define TAS2770_MiscIRQ_IRQZREQD_ActiveHigh  (0x0 << 7)\r
593 #define TAS2770_MiscIRQ_IRQZREQD_ActiveLow  (0x1 << 7)\r
594 #define TAS2770_MiscIRQ_IRQZBITBANG_Mask  (0x1 << 0)\r
595 #define TAS2770_MiscIRQ_IRQZBITBANG_IRQZInputBuf0  (0x0 << 0)\r
596 #define TAS2770_MiscIRQ_IRQZBITBANG_IRQZInputBuf1  (0x1 << 0)\r
597         \r
598 \r
599     // Clock Configuration\r
600 #define TAS2770_ClockConfiguration  TAS2770_REG(0X0, 0x3C)\r
601 #define TAS2770_ClockConfiguration_SBCLKtoFS52_Mask  (0xf << 2)\r
602 #define TAS2770_ClockConfiguration_SBCLKtoFS52_16  (0x0 << 2)\r
603 #define TAS2770_ClockConfiguration_SBCLKtoFS52_24  (0x1 << 2)\r
604 #define TAS2770_ClockConfiguration_SBCLKtoFS52_32  (0x2 << 2)\r
605 #define TAS2770_ClockConfiguration_SBCLKtoFS52_48  (0x3 << 2)\r
606 #define TAS2770_ClockConfiguration_SBCLKtoFS52_64  (0x4 << 2)\r
607 #define TAS2770_ClockConfiguration_SBCLKtoFS52_96  (0x5 << 2)\r
608 #define TAS2770_ClockConfiguration_SBCLKtoFS52_128  (0x6 << 2)\r
609 #define TAS2770_ClockConfiguration_SBCLKtoFS52_192  (0x7 << 2)\r
610 #define TAS2770_ClockConfiguration_SBCLKtoFS52_256  (0x8 << 2)\r
611 #define TAS2770_ClockConfiguration_SBCLKtoFS52_384  (0x9 << 2)\r
612 #define TAS2770_ClockConfiguration_SBCLKtoFS52_512  (0xa << 2)\r
613 #define TAS2770_ClockConfiguration_DISCLKRateDetect10_Mask  (0x3 << 0)\r
614 #define TAS2770_ClockConfiguration_DISCLKRateDetect10_Disabled  (0x1 << 0)\r
615 #define TAS2770_ClockConfiguration_DISCLKRateDetect10_Enabled  (0x0 << 0)\r
616 \r
617         \r
618 #define TAS2770_BDIVSelection_BCLKMaster  TAS2770_REG(0X0, 0x3D)\r
619 #define TAS2770_BDIVSelection_BCLKMaster_ClockSource10_Mask  (0x3 << 0)\r
620 #define TAS2770_BDIVSelection_BCLKMaster_ClockSource10_NDIV2Output  (0x0 << 0)\r
621 #define TAS2770_BDIVSelection_BCLKMaster_ClockSource10_NDIV1Output  (0x1 << 0)\r
622 #define TAS2770_BDIVSelection_BCLKMaster_ClockSource10_MCLKOutput  (0x2 << 0)\r
623 #define TAS2770_BDIVSelection_BCLKMaster_ClockSource10_PDMCLK1PAD  (0x3 << 0)\r
624 \r
625 #define TAS2770_BDIVSelection_HOLDSARUPDATE  TAS2770_REG(0X0, 0x41)\r
626 #define TAS2770_BDIVSelection_HOLDSARUPDATE10_Mask  (0x1 << 0)\r
627 #define TAS2770_BDIVSelection_HOLDSARUPDATE10_Disabled  (0x0 << 0)\r
628 #define TAS2770_BDIVSelection_HOLDSARUPDATE10_Enabled  (0x1 << 0)\r
629 \r
630 \r
631     // TDM Clock detection monitor\r
632 #define TAS2770_TDMClockdetectionmonitor  TAS2770_REG(0X0, 0x77)\r
633 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_Mask  (0xf << 3)\r
634 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_16  (0x0 << 3)\r
635 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_24  (0x1 << 3)\r
636 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_32  (0x2 << 3)\r
637 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_48  (0x3 << 3)\r
638 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_64  (0x4 << 3)\r
639 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_96  (0x5 << 3)\r
640 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_128  (0x6 << 3)\r
641 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_192  (0x7 << 3)\r
642 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_256  (0x8 << 3)\r
643 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_384  (0x9 << 3)\r
644 #define TAS2770_TDMClockdetectionmonitor_SBCLKtoFSYNC63_512  (0xf << 3)\r
645 #define TAS2770_TDMClockdetectionmonitor_DetectedSampleRate20_Mask  (0x7 << 0), \r
646 #define TAS2770_TDMClockdetectionmonitor_DetectedSampleRate20_8khz  (0x0 << 0)\r
647 #define TAS2770_TDMClockdetectionmonitor_DetectedSampleRate20_16khz  (0x1 << 0)\r
648 #define TAS2770_TDMClockdetectionmonitor_DetectedSampleRate20_32khz  (0x2 << 0)\r
649 #define TAS2770_TDMClockdetectionmonitor_DetectedSampleRate20_48khz  (0x3 << 0)\r
650 #define TAS2770_TDMClockdetectionmonitor_DetectedSampleRate20_96khz  (0x4 << 0)\r
651 #define TAS2770_TDMClockdetectionmonitor_DetectedSampleRate20_192khz  (0x5 << 0)\r
652 \r
653     // Revision and PG ID\r
654 #define TAS2770_RevisionandPGID  TAS2770_REG(0X0, 0x7D)\r
655 #define TAS2770_RevisionandPGID_RevisionID74_Mask  (0xf << 4)\r
656 #define TAS2770_RevisionandPGID_PGID30_Mask  (0xf << 0)\r
657 \r
658     // I2C Checksum\r
659 #define TAS2770_I2CChecksum  TAS2770_REG(0X0, 0x7E)\r
660 #define TAS2770_I2CChecksum_I2CChecksum70_Mask  (0xff << 0)\r
661 \r
662     // Book\r
663 #define TAS2770_Book  TAS2770_REG(0X0, 0x7F)\r
664 #define TAS2770_Book_Book70_Mask  (0xff << 0)\r
665 \r
666 \r
667 #define TAS2770_RegisterCount  55\r
668 \r
669 \r
670 \r
671 #define ERROR_NONE          0x0000000\r
672 #define ERROR_PLL_ABSENT    0x0000000\r
673 #define ERROR_DEVA_I2C_COMM 0x0000000\r
674 #define ERROR_DEVB_I2C_COMM 0x0000000\r
675 #define ERROR_PRAM_CRCCHK   0x0000000\r
676 #define ERROR_YRAM_CRCCHK   0x0000001\r
677 #define ERROR_CLK_DET2      0x0000002\r
678 #define ERROR_CLK_DET1      0x0000004\r
679 #define ERROR_CLK_LOST      0x0000008\r
680 #define ERROR_BROWNOUT      0x0000010\r
681 #define ERROR_DIE_OVERTEMP  0x0000020\r
682 #define ERROR_CLK_HALT      0x0000040\r
683 #define ERROR_UNDER_VOLTAGE 0x0000080\r
684 #define ERROR_OVER_CURRENT  0x0000100\r
685 #define ERROR_CLASSD_PWR    0x0000200\r
686 #define ERROR_FAILSAFE      0x4000000\r
687 \r
688 struct tas2770_register {\r
689     int book;\r
690     int page;\r
691     int reg;\r
692 };\r
693 \r
694 struct tas2770_dai_cfg {\r
695     unsigned int dai_fmt;\r
696     unsigned int tdm_delay;\r
697 };\r
698 \r
699 struct tas2770_priv {\r
700     struct device *dev;\r
701     struct regmap *regmap;\r
702     struct mutex dev_lock;\r
703     struct delayed_work irq_work;\r
704     struct hrtimer mtimer;\r
705     int mnClkin;\r
706     int mnClkid;\r
707     bool mbPowerUp;\r
708     int mnCurrentBook;\r
709     int mnCurrentPage;\r
710     int mnLoad;\r
711     int mnASIFormat;\r
712     int mnResetGPIO;\r
713     int mnIRQGPIO;\r
714     int mnIRQ;\r
715     bool mbIRQEnable;\r
716     int mnSamplingRate;\r
717     int mnFrameSize;\r
718     int mnPLL;\r
719     int mnPPG;\r
720     int ch_size;\r
721 \r
722     void (*hw_reset)(struct tas2770_priv *pTAS2770);\r
723     void (*clearIRQ)(struct tas2770_priv *pTAS2770);\r
724     void (*enableIRQ)(struct tas2770_priv *pTAS2770, bool enable);\r
725     /* device is working, but system is suspended */\r
726     int (*runtime_suspend)(struct tas2770_priv *pTAS2770);\r
727     int (*runtime_resume)(struct tas2770_priv *pTAS2770);\r
728     bool mbRuntimeSuspend;\r
729 \r
730     unsigned int mnErrCode;\r
731 #ifdef CONFIG_TAS2770_CODEC\r
732     struct mutex codec_lock;\r
733 #endif\r
734 \r
735 #ifdef CONFIG_TAS2770_MISC\r
736     int mnDBGCmd;\r
737     int mnCurrentReg;\r
738     struct mutex file_lock;\r
739 #endif\r
740 };\r
741 \r
742 #endif // __TAS2770_\r