Change Magic Number for kernel 4.19 support
[tas2557sw-android/tas2557-android-driver.git] / tas2557.h
1 /*
2 ** =============================================================================
3 ** Copyright (c) 2016  Texas Instruments Inc.
4 **
5 ** This program is free software; you can redistribute it and/or modify it under
6 ** the terms of the GNU General Public License as published by the Free Software
7 ** Foundation; version 2.
8 **
9 ** This program is distributed in the hope that it will be useful, but WITHOUT
10 ** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 ** FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12 **
13 ** File:
14 **     tas2557.h
15 **
16 ** Description:
17 **     definitions and data structures for TAS2557 Android Linux driver
18 **
19 ** =============================================================================
20 */
22 #ifndef _TAS2557_H
23 #define _TAS2557_H
25 #include <linux/regmap.h>
26 #include <linux/workqueue.h>
27 #include <linux/timer.h>
29 /* Page Control Register */
30 #define TAS2557_PAGECTL_REG                     0
32 /* Book Control Register (available in page0 of each book) */
33 #define TAS2557_BOOKCTL_PAGE                    0
34 #define TAS2557_BOOKCTL_REG                     127
36 /* 0000 0000 0BBB BBBB BPPP PPPP PRRR RRRR */
38 #define TAS2557_REG(book, page, reg)            ((((unsigned int)book * 256 * 128) + \
39                                                  ((unsigned int)page * 128)) + reg)
41 #define TAS2557_BOOK_ID(reg)                    ((unsigned char)(reg / (256 * 128)))
42 #define TAS2557_PAGE_ID(reg)                    ((unsigned char)((reg % (256 * 128)) / 128))
43 #define TAS2557_BOOK_REG(reg)                   ((unsigned char)(reg % (256 * 128)))
44 #define TAS2557_PAGE_REG(reg)                   ((unsigned char)((reg % (256 * 128)) % 128))
46 /* Book0, Page0 registers */
47 #define TAS2557_SW_RESET_REG                    TAS2557_REG(0, 0, 1)
49 #define TAS2557_REV_PGID_REG                    TAS2557_REG(0, 0, 3)
50 #define TAS2557_PG_VERSION_1P0                  0x80
51 #define TAS2557_PG_VERSION_2P0                  0x90
52 #define TAS2557_PG_VERSION_2P1                  0xa0
54 #define TAS2557_POWER_CTRL1_REG                 TAS2557_REG(0, 0, 4)
55 #define TAS2557_POWER_CTRL2_REG                 TAS2557_REG(0, 0, 5)
57 #define TAS2557_SPK_CTRL_REG                    TAS2557_REG(0, 0, 6)
58 /* B0P0R6 - TAS2557_SPK_CTRL_REG */
59 #define TAS2557_DAC_GAIN_MASK                   (0xf << 3)
60 #define TAS2557_DAC_GAIN_SHIFT                  0x03
62 #define TAS2557_MUTE_REG                        TAS2557_REG(0, 0, 7)
63 #define TAS2557_SNS_CTRL_REG                    TAS2557_REG(0, 0, 8)
64 #define TAS2557_ADC_INPUT_SEL_REG               TAS2557_REG(0, 0, 9)
65 #define TAS2557_DBOOST_CTL_REG                  TAS2557_REG(0, 0, 10)
66 #define TAS2557_NONAME11_REG                    TAS2557_REG(0, 0, 11)
67 #define TAS2557_NONAME12_REG                    TAS2557_REG(0, 0, 12)
68 #define TAS2557_NONAME13_REG                    TAS2557_REG(0, 0, 13)
69 #define TAS2557_NONAME14_REG                    TAS2557_REG(0, 0, 14)
70 #define TAS2557_NONAME15_REG                    TAS2557_REG(0, 0, 15)
71 #define TAS2557_NONAME16_REG                    TAS2557_REG(0, 0, 16)
72 #define TAS2557_NONAME17_REG                    TAS2557_REG(0, 0, 17)
73 #define TAS2557_NONAME18_REG                    TAS2557_REG(0, 0, 18)
74 #define TAS2557_SAR_SAMPLING_TIME_REG           TAS2557_REG(0, 0, 19)
75 #define TAS2557_SAR_ADC1_REG                    TAS2557_REG(0, 0, 20)
76 #define TAS2557_SAR_ADC2_REG                    TAS2557_REG(0, 0, 21)   /* B0_P0_R0x15*/
77 #define TAS2557_CRC_CHECKSUM_REG                TAS2557_REG(0, 0, 32)
78 #define TAS2557_CRC_RESET_REG                   TAS2557_REG(0, 0, 33)
79 #define TAS2557_DSP_MODE_SELECT_REG             TAS2557_REG(0, 0, 34)
80 #define TAS2557_SAFE_GUARD_REG                  TAS2557_REG(0, 0, 37)
81 #define TAS2557_ASI_CTL1_REG                    TAS2557_REG(0, 0, 42)
82 #define TAS2557_CLK_ERR_CTRL                    TAS2557_REG(0, 0, 44)   /* B0_P0_R0x2c*/
83 #define TAS2557_CLK_ERR_CTRL2                   TAS2557_REG(0, 0, 45)   /* B0_P0_R0x2d*/
84 #define TAS2557_CLK_ERR_CTRL3                   TAS2557_REG(0, 0, 46)   /* B0_P0_R0x2e*/
85 #define TAS2557_DBOOST_CFG_REG                  TAS2557_REG(0, 0, 52)
86 #define TAS2557_POWER_UP_FLAG_REG               TAS2557_REG(0, 0, 100)
87 #define TAS2557_FLAGS_1                         TAS2557_REG(0, 0, 104)  /* B0_P0_R0x68*/
88 #define TAS2557_FLAGS_2                         TAS2557_REG(0, 0, 108)  /* B0_P0_R0x6c*/
90 /* Book0, Page1 registers */
91 #define TAS2557_ASI1_DAC_FORMAT_REG             TAS2557_REG(0, 1, 1)
92 #define TAS2557_ASI1_ADC_FORMAT_REG             TAS2557_REG(0, 1, 2)
93 #define TAS2557_ASI1_OFFSET1_REG                TAS2557_REG(0, 1, 3)
94 #define TAS2557_ASI1_ADC_PATH_REG               TAS2557_REG(0, 1, 7)
95 #define TAS2557_ASI1_DAC_BCLK_REG               TAS2557_REG(0, 1, 8)
96 #define TAS2557_ASI1_DAC_WCLK_REG               TAS2557_REG(0, 1, 9)
97 #define TAS2557_ASI1_ADC_BCLK_REG               TAS2557_REG(0, 1, 10)
98 #define TAS2557_ASI1_ADC_WCLK_REG               TAS2557_REG(0, 1, 11)
99 #define TAS2557_ASI1_DIN_DOUT_MUX_REG           TAS2557_REG(0, 1, 12)
100 #define TAS2557_ASI1_BDIV_CLK_SEL_REG           TAS2557_REG(0, 1, 13)
101 #define TAS2557_ASI1_BDIV_CLK_RATIO_REG         TAS2557_REG(0, 1, 14)
102 #define TAS2557_ASI1_WDIV_CLK_RATIO_REG         TAS2557_REG(0, 1, 15)
103 #define TAS2557_ASI1_DAC_CLKOUT_REG             TAS2557_REG(0, 1, 16)
104 #define TAS2557_ASI1_ADC_CLKOUT_REG             TAS2557_REG(0, 1, 17)
105 #define TAS2557_ASI2_DAC_FORMAT_REG             TAS2557_REG(0, 1, 21)
106 #define TAS2557_ASI2_ADC_FORMAT_REG             TAS2557_REG(0, 1, 22)
107 #define TAS2557_ASI2_OFFSET1_REG                TAS2557_REG(0, 1, 23)
108 #define TAS2557_ASI2_ADC_PATH_REG               TAS2557_REG(0, 1, 27)
109 #define TAS2557_ASI2_DAC_BCLK_REG               TAS2557_REG(0, 1, 28)
110 #define TAS2557_ASI2_DAC_WCLK_REG               TAS2557_REG(0, 1, 29)
111 #define TAS2557_ASI2_ADC_BCLK_REG               TAS2557_REG(0, 1, 30)
112 #define TAS2557_ASI2_ADC_WCLK_REG               TAS2557_REG(0, 1, 31)
113 #define TAS2557_ASI2_DIN_DOUT_MUX_REG           TAS2557_REG(0, 1, 32)
114 #define TAS2557_ASI2_BDIV_CLK_SEL_REG           TAS2557_REG(0, 1, 33)
115 #define TAS2557_ASI2_BDIV_CLK_RATIO_REG         TAS2557_REG(0, 1, 34)
116 #define TAS2557_ASI2_WDIV_CLK_RATIO_REG         TAS2557_REG(0, 1, 35)
117 #define TAS2557_ASI2_DAC_CLKOUT_REG             TAS2557_REG(0, 1, 36)
118 #define TAS2557_ASI2_ADC_CLKOUT_REG             TAS2557_REG(0, 1, 37)
119 #define TAS2557_GPIO1_PIN_REG                   TAS2557_REG(0, 1, 61)   /*B0_P1_R0x3d */
120 #define TAS2557_GPIO2_PIN_REG                   TAS2557_REG(0, 1, 62)   /*B0_P1_R0x3e */
121 #define TAS2557_GPIO3_PIN_REG                   TAS2557_REG(0, 1, 63)   /*B0_P1_R0x3f */
122 #define TAS2557_GPIO4_PIN_REG                   TAS2557_REG(0, 1, 64)   /*B0_P1_R0x40 */
123 #define TAS2557_GPIO5_PIN_REG                   TAS2557_REG(0, 1, 65)
124 #define TAS2557_GPIO6_PIN_REG                   TAS2557_REG(0, 1, 66)
125 #define TAS2557_GPIO7_PIN_REG                   TAS2557_REG(0, 1, 67)
126 #define TAS2557_GPIO8_PIN_REG                   TAS2557_REG(0, 1, 68)
127 #define TAS2557_GPIO9_PIN_REG                   TAS2557_REG(0, 1, 69)
128 #define TAS2557_GPIO10_PIN_REG                  TAS2557_REG(0, 1, 70)
129 #define TAS2557_GPI_PIN_REG                             TAS2557_REG(0, 1, 77)   /*B0_P1_R0x4d */
130 #define TAS2557_GPIO_HIZ_CTRL1_REG              TAS2557_REG(0, 1, 79)
131 #define TAS2557_GPIO_HIZ_CTRL2_REG              TAS2557_REG(0, 1, 80)   /*B0_P1_R0x50 */
132 #define TAS2557_GPIO_HIZ_CTRL3_REG              TAS2557_REG(0, 1, 81)
133 #define TAS2557_GPIO_HIZ_CTRL4_REG              TAS2557_REG(0, 1, 82)
134 #define TAS2557_GPIO_HIZ_CTRL5_REG              TAS2557_REG(0, 1, 83)
135 #define TAS2557_BIT_BANG_CTRL_REG               TAS2557_REG(0, 1, 87)
136 #define TAS2557_BIT_BANG_OUT1_REG               TAS2557_REG(0, 1, 88)
137 #define TAS2557_BIT_BANG_OUT2_REG               TAS2557_REG(0, 1, 89)
138 #define TAS2557_BIT_BANG_IN1_REG                TAS2557_REG(0, 1, 90)
139 #define TAS2557_BIT_BANG_IN2_REG                TAS2557_REG(0, 1, 91)
140 #define TAS2557_BIT_BANG_IN3_REG                TAS2557_REG(0, 1, 92)
141 #define TAS2557_PDM_IN_CLK_REG                  TAS2557_REG(0, 1, 94)
142 #define TAS2557_PDM_IN_PIN_REG                  TAS2557_REG(0, 1, 95)
143 #define TAS2557_ASIM_IFACE1_REG                 TAS2557_REG(0, 1, 98)
144 #define TAS2557_ASIM_FORMAT_REG                 TAS2557_REG(0, 1, 99)
145 #define TAS2557_ASIM_IFACE3_REG                 TAS2557_REG(0, 1, 100)
146 #define TAS2557_ASIM_IFACE4_REG                 TAS2557_REG(0, 1, 101)
147 #define TAS2557_ASIM_IFACE5_REG                 TAS2557_REG(0, 1, 102)
148 #define TAS2557_ASIM_IFACE6_REG                 TAS2557_REG(0, 1, 103)
149 #define TAS2557_ASIM_IFACE7_REG                 TAS2557_REG(0, 1, 104)
150 #define TAS2557_ASIM_IFACE8_REG                 TAS2557_REG(0, 1, 105)
151 #define TAS2557_CLK_HALT_REG                    TAS2557_REG(0, 1, 106)  /* B0_P1_R0x6a */
152 #define TAS2557_INT_GEN1_REG                    TAS2557_REG(0, 1, 108)  /* B0_P1_R0x6c */
153 #define TAS2557_INT_GEN2_REG                    TAS2557_REG(0, 1, 109)  /* B0_P1_R0x6d */
154 #define TAS2557_INT_GEN3_REG                    TAS2557_REG(0, 1, 110)  /* B0_P1_R0x6e */
155 #define TAS2557_INT_GEN4_REG                    TAS2557_REG(0, 1, 111)  /* B0_P1_R0x6f */
156 #define TAS2557_INT_MODE_REG                    TAS2557_REG(0, 1, 114)  /* B0_P1_R0x72 */
157 #define TAS2557_MAIN_CLKIN_REG                  TAS2557_REG(0, 1, 115)
158 #define TAS2557_PLL_CLKIN_REG                   TAS2557_REG(0, 1, 116)
159 #define TAS2557_CLKOUT_MUX_REG                  TAS2557_REG(0, 1, 117)
160 #define TAS2557_CLKOUT_CDIV_REG                 TAS2557_REG(0, 1, 118)
161 #define TAS2557_HACK_GP01_REG                   TAS2557_REG(0, 1, 122)
163 #define TAS2557_HACK01_REG                      TAS2557_REG(0, 2, 10)
165 #define TAS2557_ISENSE_THRESHOLD                TAS2557_REG(0, 50, 104)
166 #define TAS2557_BOOSTON_EFFICIENCY              TAS2557_REG(0, 51, 16)
167 #define TAS2557_BOOSTOFF_EFFICIENCY             TAS2557_REG(0, 51, 20)
168 #define TAS2557_BOOST_HEADROOM                  TAS2557_REG(0, 51, 24)
169 #define TAS2557_THERMAL_FOLDBACK_REG    TAS2557_REG(0, 51, 100)
171 #define TAS2557_SA_PG2P1_CHL_CTRL_REG   TAS2557_REG(0, 53, 20)  /* B0_P0x35_R0x14 */
172 #define TAS2557_SA_COEFF_SWAP_REG               TAS2557_REG(0, 53, 44)  /* B0_P0x35_R0x2c */
174 #define TAS2557_SA_PG1P0_CHL_CTRL_REG   TAS2557_REG(0, 58, 120) /* B0_P0x3a_R0x78 */
176 #define TAS2557_TEST_MODE_REG                   TAS2557_REG(0, 253, 13) /* B0_P0xfd_R0x0d */
177 #define TAS2557_BROADCAST_REG                   TAS2557_REG(0, 253, 54) /* B0_P0xfd_R0x36 */
178 #define TAS2557_CRYPTIC_REG                     TAS2557_REG(0, 253, 71)
179 #define TAS2557_PG2P1_CALI_R0_REG               TAS2557_REG(0x8c, 0x2f, 0x40)
180 #define TAS2557_PG1P0_CALI_R0_REG               TAS2557_REG(0x8c, 0x2f, 0x28)
181 #define TAS2557_PG2P1_CALI_T_REG                TAS2557_REG(0x8c, 0x30, 0x20)
182 #define TAS2557_PG1P0_CALI_T_REG                TAS2557_REG(0x8c, 0x30, 0x08)
184 #define TAS2557_DAC_INTERPOL_REG                TAS2557_REG(100, 0, 1)
185 #define TAS2557_SOFT_MUTE_REG                   TAS2557_REG(100, 0, 7)
186 #define TAS2557_PLL_P_VAL_REG                   TAS2557_REG(100, 0, 27)
187 #define TAS2557_PLL_J_VAL_REG                   TAS2557_REG(100, 0, 28)
188 #define TAS2557_PLL_D_VAL_MSB_REG               TAS2557_REG(100, 0, 29)
189 #define TAS2557_PLL_D_VAL_LSB_REG               TAS2557_REG(100, 0, 30)
190 #define TAS2557_CLK_MISC_REG                    TAS2557_REG(100, 0, 31)
191 #define TAS2557_PLL_N_VAL_REG                   TAS2557_REG(100, 0, 32)
192 #define TAS2557_DAC_MADC_VAL_REG                TAS2557_REG(100, 0, 33)
193 #define TAS2557_ISENSE_DIV_REG                  TAS2557_REG(100, 0, 42)
194 #define TAS2557_RAMP_CLK_DIV_MSB_REG            TAS2557_REG(100, 0, 43)
195 #define TAS2557_RAMP_CLK_DIV_LSB_REG            TAS2557_REG(100, 0, 44)
197 #define TAS2557_DIE_TEMP_REG                    TAS2557_REG(130, 2, 124)        /* B0x82_P0x02_R0x7C */
199 /* Bits */
200 /* B0P0R4 - TAS2557_POWER_CTRL1_REG */
201 #define TAS2557_SW_SHUTDOWN                     (0x1 << 0)
202 #define TAS2557_MADC_POWER_UP                   (0x1 << 3)
203 #define TAS2557_MDAC_POWER_UP                   (0x1 << 4)
204 #define TAS2557_NDIV_POWER_UP                   (0x1 << 5)
205 #define TAS2557_PLL_POWER_UP                    (0x1 << 6)
206 #define TAS2557_DSP_POWER_UP                    (0x1 << 7)
208 /* B0P0R5 - TAS2557_POWER_CTRL2_REG */
209 #define TAS2557_VSENSE_ENABLE                   (0x1 << 0)
210 #define TAS2557_ISENSE_ENABLE                   (0x1 << 1)
211 #define TAS2557_BOOST_ENABLE                    (0x1 << 5)
212 #define TAS2557_CLASSD_ENABLE                   (0x1 << 7)
214 /* B0P0R7 - TAS2557_MUTE_REG */
215 #define TAS2557_CLASSD_MUTE                     (0x1 << 0)
216 #define TAS2557_ISENSE_MUTE                     (0x1 << 1)
218 /* B0P253R13 - TAS2557_TEST_MODE_REG */
219 #define TAS2557_TEST_MODE_ENABLE                (13)
220 #define TAS2557_TEST_MODE_MASK                  (0xf << 0)
222 /* B0P253R71 - TAS2557_CRYPTIC_REG */
223 #define TAS2557_OSC_TRIM_CAP(x)                 ((x & 0x3f) << 0)
224 #define TAS2557_DISABLE_ENCRYPTION              (0x1 << 6)
225 #define TAS2557_SL_COMP                         (0x1 << 7)
227 /* B0P1R115/6 - TAS2557_MAIN/PLL_CLKIN_REG */
228 #define TAS2557_XXX_CLKIN_GPIO1                 (0)
229 #define TAS2557_XXX_CLKIN_GPIO2                 (1)
230 #define TAS2557_XXX_CLKIN_GPIO3                 (2)
231 #define TAS2557_XXX_CLKIN_GPIO4                 (3)
232 #define TAS2557_XXX_CLKIN_GPIO5                 (4)
233 #define TAS2557_XXX_CLKIN_GPIO6                 (5)
234 #define TAS2557_XXX_CLKIN_GPIO7                 (6)
235 #define TAS2557_XXX_CLKIN_GPIO8                 (7)
236 #define TAS2557_XXX_CLKIN_GPIO9                 (8)
237 #define TAS2557_XXX_CLKIN_GPIO10                (9)
238 #define TAS2557_XXX_CLKIN_GPI1                  (12)
239 #define TAS2557_XXX_CLKIN_GPI2                  (13)
240 #define TAS2557_XXX_CLKIN_GPI3                  (14)
241 #define TAS2557_NDIV_CLKIN_PLL                  (15)
242 #define TAS2557_PLL_CLKIN_INT_OSC               (15)
244 #define TAS2557_MCLK_CLKIN_SRC_GPIO1       (0)
245 #define TAS2557_MCLK_CLKIN_SRC_GPIO2       (1)
246 #define TAS2557_MCLK_CLKIN_SRC_GPIO3       (2)
247 #define TAS2557_MCLK_CLKIN_SRC_GPIO4       (3)
248 #define TAS2557_MCLK_CLKIN_SRC_GPIO5       (4)
249 #define TAS2557_MCLK_CLKIN_SRC_GPIO6       (5)
250 #define TAS2557_MCLK_CLKIN_SRC_GPIO7       (6)
251 #define TAS2557_MCLK_CLKIN_SRC_GPIO8       (7)
252 #define TAS2557_MCLK_CLKIN_SRC_GPIO9       (8)
253 #define TAS2557_MCLK_CLKIN_SRC_GPIO10      (9)
254 #define TAS2557_MCLK_CLKIN_SRC_GPI1        (12)
255 #define TAS2557_MCLK_CLKIN_SRC_GPI2        (13)
256 #define TAS2557_MCLK_CLKIN_SRC_GPI3        (14)
258 #define TAS2557_FORMAT_I2S                      (0x0 << 5)
259 #define TAS2557_FORMAT_DSP                      (0x1 << 5)
260 #define TAS2557_FORMAT_RIGHT_J                  (0x2 << 5)
261 #define TAS2557_FORMAT_LEFT_J                   (0x3 << 5)
262 #define TAS2557_FORMAT_MONO_PCM                 (0x4 << 5)
263 #define TAS2557_FORMAT_MASK                     (0x7 << 5)
265 #define TAS2557_WORDLENGTH_16BIT                (0x0 << 3)
266 #define TAS2557_WORDLENGTH_20BIT                (0x1 << 3)
267 #define TAS2557_WORDLENGTH_24BIT                (0x2 << 3)
268 #define TAS2557_WORDLENGTH_32BIT                (0x3 << 3)
269 #define TAS2557_WORDLENGTH_MASK                 TAS2557_WORDLENGTH_32BIT
271 /* B100P0R7 - TAS2557_SOFT_MUTE_REG */
272 #define TAS2557_PDM_SOFT_MUTE                   (0x1 << 0)
273 #define TAS2557_VSENSE_SOFT_MUTE                (0x1 << 1)
274 #define TAS2557_ISENSE_SOFT_MUTE                (0x1 << 2)
275 #define TAS2557_CLASSD_SOFT_MUTE                (0x1 << 3)
277 /* B100P0R27 - TAS2557_PLL_P_VAL_REG */
278 #define TAS2557_PLL_P_VAL_MASK                  (0x3f << 0)
280 /* B100P0R28 - TAS2557_PLL_J_VAL_REG */
281 #define TAS2557_PLL_J_VAL_MASK                  ((unsigned int) (0x7f << 0))
282 #define TAS2557_PLL_J_VAL_MASKX 0x00
284 /* B100P0R29-30 - TAS2557_PLL_D_VAL_MSB/LSB_REG */
285 #define TAS2557_PLL_D_MSB_VAL(x)                ((x >> 8) & 0x3f)
286 #define TAS2557_PLL_D_LSB_VAL(x)                (x & 0xff)
288 /* B100P0R31 - TAS2557_CLK_MISC_REG */
289 #define TAS2557_DSP_CLK_FROM_PLL                (0x1 << 5)
291 #define TAS2557_FW_NAME     "tas2557_uCDSP.bin"
292 #define TAS2557_PG1P0_FW_NAME     "tas2557_pg1p0_uCDSP.bin"
294 #define TAS2557_APP_ROM1MODE    0
295 #define TAS2557_APP_ROM2MODE    1
296 #define TAS2557_APP_TUNINGMODE  2
297 #define TAS2557_APP_ROM1_96KHZ  3
298 #define TAS2557_APP_ROM2_96KHZ  4
299 #define TAS2557_APP_RAMMODE             5
301 #define TAS2557_BOOST_OFF               0
302 #define TAS2557_BOOST_DEVA              1
303 #define TAS2557_BOOST_DEVB              2
304 #define TAS2557_BOOST_BOTH              3
306 #define ERROR_NONE                      0x00000000
307 #define ERROR_PLL_ABSENT        0x00000001
308 #define ERROR_DEVA_I2C_COMM     0x00000002
309 #define ERROR_PRAM_CRCCHK       0x00000008
310 #define ERROR_YRAM_CRCCHK       0x00000010
311 #define ERROR_CLK_DET2          0x00000020
312 #define ERROR_CLK_DET1          0x00000040
313 #define ERROR_CLK_LOST          0x00000080
314 #define ERROR_BROWNOUT          0x00000100
315 #define ERROR_DIE_OVERTEMP      0x00000200
316 #define ERROR_CLK_HALT          0x00000400
317 #define ERROR_UNDER_VOLTAGE     0x00000800
318 #define ERROR_OVER_CURRENT      0x00001000
319 #define ERROR_CLASSD_PWR        0x00002000
320 #define ERROR_SAFE_GUARD        0x00004000
321 #define ERROR_FAILSAFE          0x40000000
323 struct TBlock {
324         unsigned int mnType;
325         unsigned char mbPChkSumPresent;
326         unsigned char mnPChkSum;
327         unsigned char mbYChkSumPresent;
328         unsigned char mnYChkSum;
329         unsigned int mnCommands;
330         unsigned char *mpData;
331 };
333 struct TData {
334         char mpName[64];
335         char *mpDescription;
336         unsigned int mnBlocks;
337         struct TBlock *mpBlocks;
338 };
340 struct TProgram {
341         char mpName[64];
342         char *mpDescription;
343         unsigned char mnAppMode;
344         unsigned short mnBoost;
345         struct TData mData;
346 };
348 struct TPLL {
349         char mpName[64];
350         char *mpDescription;
351         struct TBlock mBlock;
352 };
354 struct TConfiguration {
355         char mpName[64];
356         char *mpDescription;
357         unsigned int mnDevices;
358         unsigned int mnProgram;
359         unsigned int mnPLL;
360         unsigned int mnSamplingRate;
361         unsigned char mnPLLSrc;
362         unsigned int mnPLLSrcRate;
363         struct TData mData;
364 };
366 struct TCalibration {
367         char mpName[64];
368         char *mpDescription;
369         unsigned int mnProgram;
370         unsigned int mnConfiguration;
371         struct TData mData;
372 };
374 struct TFirmware {
375         unsigned int mnFWSize;
376         unsigned int mnChecksum;
377         unsigned int mnPPCVersion;
378         unsigned int mnFWVersion;
379         unsigned int mnDriverVersion;
380         unsigned int mnTimeStamp;
381         char mpDDCName[64];
382         char *mpDescription;
383         unsigned int mnDeviceFamily;
384         unsigned int mnDevice;
385         unsigned int mnPLLs;
386         struct TPLL *mpPLLs;
387         unsigned int mnPrograms;
388         struct TProgram *mpPrograms;
389         unsigned int mnConfigurations;
390         struct TConfiguration *mpConfigurations;
391         unsigned int mnCalibrations;
392         struct TCalibration *mpCalibrations;
393 };
395 struct tas2557_register {
396         int book;
397         int page;
398         int reg;
399 };
401 struct tas2557_priv {
402         struct device *dev;
403         struct regmap *mpRegmap;
404         int mnPGID;
405         int mnResetGPIO;
406         struct mutex dev_lock;
407         struct TFirmware *mpFirmware;
408         struct TFirmware *mpCalFirmware;
409         unsigned int mnCurrentProgram;
410         unsigned int mnCurrentSampleRate;
411         unsigned int mnNewConfiguration;
412         unsigned int mnCurrentConfiguration;
413         unsigned int mnCurrentCalibration;
414         unsigned char mnCurrentBook;
415         unsigned char mnCurrentPage;
416         bool mbTILoadActive;
417         bool mbPowerUp;
418         bool mbLoadConfigurationPrePowerUp;
419         bool mbLoadCalibrationPostPowerUp;
420         bool mbCalibrationLoaded;
421         int (*read)(struct tas2557_priv *pTAS2557,
422                 unsigned int reg,
423                 unsigned int *pValue);
424         int (*write)(struct tas2557_priv *pTAS2557,
425                 unsigned int reg,
426                 unsigned int Value);
427         int (*bulk_read)(struct tas2557_priv *pTAS2557,
428                 unsigned int reg,
429                 unsigned char *pData,
430                 unsigned int len);
431         int (*bulk_write)(struct tas2557_priv *pTAS2557,
432                 unsigned int reg,
433                 unsigned char *pData,
434                 unsigned int len);
435         int (*update_bits)(struct tas2557_priv *pTAS2557,
436                 unsigned int reg,
437                 unsigned int mask,
438                 unsigned int value);
439         int (*set_config)(struct tas2557_priv *pTAS2557,
440                 int config);
441         int (*set_calibration)(struct tas2557_priv *pTAS2557,
442                 int calibration);
443         void (*clearIRQ)(struct tas2557_priv *pTAS2557);
444         void (*enableIRQ)(struct tas2557_priv *pTAS2557, bool enable, bool startup_chk);
445         void (*hw_reset)(struct tas2557_priv *pTAS2557);
446         /* device is working, but system is suspended */
447         int (*runtime_suspend)(struct tas2557_priv *pTAS2557);
448         int (*runtime_resume)(struct tas2557_priv *pTAS2557);
450         int mnGpioINT;
451         struct delayed_work irq_work;
452         unsigned int mnIRQ;
453         bool mbIRQEnable;
454         unsigned char mnI2SBits;
457         /* for low temperature check */
458         unsigned int mnDevGain;
459         unsigned int mnDevCurrentGain;
460         unsigned int mnDieTvReadCounter;
461         struct hrtimer mtimer;
462         struct work_struct mtimerwork;
464         /* device is working, but system is suspended */
465         bool mbRuntimeSuspend;
467         unsigned int mnErrCode;
468         unsigned int mnRestart;
470         /* for configurations with maximum TLimit 0x7fffffff,
471          * bypass calibration update, usually used in factory test
472         */
473         bool mbBypassTMax;
475         unsigned int mnEdge;
477 #ifdef CONFIG_TAS2557_CODEC
478         struct mutex codec_lock;
479 #endif
481 #ifdef CONFIG_TAS2557_MISC
482         int mnDBGCmd;
483         int mnCurrentReg;
484         struct mutex file_lock;
485 #endif
487 };
489 #endif /* _TAS2557_H */