stereo solution first commit
[tas2555sw-android/tas2555-android-device-driver-stereo.git] / tas2555.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 ** You should have received a copy of the GNU General Public License along with
14 ** this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
15 ** Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 **
17 ** File:
18 **     tas2555.h
19 **
20 ** Description:
21 **     definitions and data structures for TAS2555 Android Linux driver
22 **
23 ** =============================================================================
24 */
26 #ifndef _TAS2555_H
27 #define _TAS2555_H
29 /* Page Control Register */
30 #define TAS2555_PAGECTL_REG                     0
32 /* Book Control Register (available in page0 of each book) */
33 #define TAS2555_BOOKCTL_PAGE                    0
34 #define TAS2555_BOOKCTL_REG                     127
36 #define TAS2555_REG(book, page, reg)            (((book * 256 * 128) + \
37                                                  (page * 128)) + reg)
39 #define TAS2555_BOOK_ID(reg)                    (reg / (256 * 128))
40 #define TAS2555_PAGE_ID(reg)                    ((reg % (256 * 128)) / 128)
41 #define TAS2555_BOOK_REG(reg)                   (reg % (256 * 128))
42 #define TAS2555_PAGE_REG(reg)                   ((reg % (256 * 128)) % 128)
44 /* Book0, Page0 registers */
45 #define TAS2555_SW_RESET_REG                    TAS2555_REG(0, 0, 1)
46 #define TAS2555_REV_PGID_REG                    TAS2555_REG(0, 0, 3)
47 #define TAS2555_POWER_CTRL1_REG                 TAS2555_REG(0, 0, 4)
48 #define TAS2555_POWER_CTRL2_REG                 TAS2555_REG(0, 0, 5)
50 #define TAS2555_SPK_CTRL_REG                    TAS2555_REG(0, 0, 6)
51 /* B0P0R6 - TAS2555_SPK_CTRL_REG */
52 #define TAS2555_DAC_GAIN_MASK                   (0xf << 3)
53 #define TAS2555_DAC_GAIN_SHIFT                  0x03
55 #define TAS2555_MUTE_REG                        TAS2555_REG(0, 0, 7)
56 #define TAS2555_CHANNEL_CTRL_REG                TAS2555_REG(0, 0, 8)
57 #define TAS2555_ADC_INPUT_SEL_REG               TAS2555_REG(0, 0, 9)
58 #define TAS2555_NONAME10_REG                    TAS2555_REG(0, 0, 10)
59 #define TAS2555_NONAME11_REG                    TAS2555_REG(0, 0, 11)
60 #define TAS2555_NONAME12_REG                    TAS2555_REG(0, 0, 12)
61 #define TAS2555_NONAME13_REG                    TAS2555_REG(0, 0, 13)
62 #define TAS2555_NONAME14_REG                    TAS2555_REG(0, 0, 14)
63 #define TAS2555_NONAME15_REG                    TAS2555_REG(0, 0, 15)
64 #define TAS2555_NONAME16_REG                    TAS2555_REG(0, 0, 16)
65 #define TAS2555_NONAME17_REG                    TAS2555_REG(0, 0, 17)
66 #define TAS2555_NONAME18_REG                    TAS2555_REG(0, 0, 18)
67 #define TAS2555_SAR_SAMPLING_TIME_REG           TAS2555_REG(0, 0, 19)
68 #define TAS2555_SAR_ADC1_REG                    TAS2555_REG(0, 0, 20)
69 #define TAS2555_SAR_ADC2_REG                    TAS2555_REG(0, 0, 21)
70 #define TAS2555_CRC_CHECKSUM_REG                TAS2555_REG(0, 0, 32)
71 #define TAS2555_CRC_RESET_REG                   TAS2555_REG(0, 0, 33)
72 #define TAS2555_DSP_MODE_SELECT_REG             TAS2555_REG(0, 0, 34)
73 #define TAS2555_NONAME42_REG                    TAS2555_REG(0, 0, 42)
74 #define TAS2555_CLK_ERR_CTRL                    TAS2555_REG(0, 0, 44)
75 #define TAS2555_POWER_UP_FLAG_REG               TAS2555_REG(0, 0, 100)
76 #define TAS2555_FLAGS_1                         TAS2555_REG(0, 0, 104)
77 #define TAS2555_FLAGS_2                         TAS2555_REG(0, 0, 108)
78 /* Book0, Page1 registers */
79 #define TAS2555_ASI1_DAC_FORMAT_REG             TAS2555_REG(0, 1, 1)
80 #define TAS2555_ASI1_ADC_FORMAT_REG             TAS2555_REG(0, 1, 2)
81 #define TAS2555_ASI1_OFFSET1_REG                TAS2555_REG(0, 1, 3)
82 #define TAS2555_ASI1_ADC_PATH_REG               TAS2555_REG(0, 1, 7)
83 #define TAS2555_ASI1_DAC_BCLK_REG               TAS2555_REG(0, 1, 8)
84 #define TAS2555_ASI1_DAC_WCLK_REG               TAS2555_REG(0, 1, 9)
85 #define TAS2555_ASI1_ADC_BCLK_REG               TAS2555_REG(0, 1, 10)
86 #define TAS2555_ASI1_ADC_WCLK_REG               TAS2555_REG(0, 1, 11)
87 #define TAS2555_ASI1_DIN_DOUT_MUX_REG           TAS2555_REG(0, 1, 12)
88 #define TAS2555_ASI1_BDIV_CLK_SEL_REG           TAS2555_REG(0, 1, 13)
89 #define TAS2555_ASI1_BDIV_CLK_RATIO_REG         TAS2555_REG(0, 1, 14)
90 #define TAS2555_ASI1_WDIV_CLK_RATIO_REG         TAS2555_REG(0, 1, 15)
91 #define TAS2555_ASI1_DAC_CLKOUT_REG             TAS2555_REG(0, 1, 16)
92 #define TAS2555_ASI1_ADC_CLKOUT_REG             TAS2555_REG(0, 1, 17)
94 #define TAS2555_ASI2_DAC_FORMAT_REG             TAS2555_REG(0, 1, 21)
95 #define TAS2555_ASI2_ADC_FORMAT_REG             TAS2555_REG(0, 1, 22)
96 #define TAS2555_ASI2_OFFSET1_REG                TAS2555_REG(0, 1, 23)
97 #define TAS2555_ASI2_ADC_PATH_REG               TAS2555_REG(0, 1, 27)
98 #define TAS2555_ASI2_DAC_BCLK_REG               TAS2555_REG(0, 1, 28)
99 #define TAS2555_ASI2_DAC_WCLK_REG               TAS2555_REG(0, 1, 29)
100 #define TAS2555_ASI2_ADC_BCLK_REG               TAS2555_REG(0, 1, 30)
101 #define TAS2555_ASI2_ADC_WCLK_REG               TAS2555_REG(0, 1, 31)
102 #define TAS2555_ASI2_DIN_DOUT_MUX_REG           TAS2555_REG(0, 1, 32)
103 #define TAS2555_ASI2_BDIV_CLK_SEL_REG           TAS2555_REG(0, 1, 33)
104 #define TAS2555_ASI2_BDIV_CLK_RATIO_REG         TAS2555_REG(0, 1, 34)
105 #define TAS2555_ASI2_WDIV_CLK_RATIO_REG         TAS2555_REG(0, 1, 35)
106 #define TAS2555_ASI2_DAC_CLKOUT_REG             TAS2555_REG(0, 1, 36)
107 #define TAS2555_ASI2_ADC_CLKOUT_REG             TAS2555_REG(0, 1, 37)
109 #define TAS2555_GPIO1_PIN_REG                   TAS2555_REG(0, 1, 61)
110 #define TAS2555_GPIO2_PIN_REG                   TAS2555_REG(0, 1, 62)
111 #define TAS2555_GPIO3_PIN_REG                   TAS2555_REG(0, 1, 63)
112 #define TAS2555_GPIO4_PIN_REG                   TAS2555_REG(0, 1, 64)
113 #define TAS2555_GPIO5_PIN_REG                   TAS2555_REG(0, 1, 65)
114 #define TAS2555_GPIO6_PIN_REG                   TAS2555_REG(0, 1, 66)
115 #define TAS2555_GPIO7_PIN_REG                   TAS2555_REG(0, 1, 67)
116 #define TAS2555_GPIO8_PIN_REG                   TAS2555_REG(0, 1, 68)
117 #define TAS2555_GPIO9_PIN_REG                   TAS2555_REG(0, 1, 69)
118 #define TAS2555_GPIO10_PIN_REG                  TAS2555_REG(0, 1, 70)
120 #define TAS2555_GPI_PIN_REG                     TAS2555_REG(0, 1, 77)
121 #define TAS2555_GPIO_HIZ_CTRL1_REG              TAS2555_REG(0, 1, 79)
122 #define TAS2555_GPIO_HIZ_CTRL2_REG              TAS2555_REG(0, 1, 80)
123 #define TAS2555_GPIO_HIZ_CTRL3_REG              TAS2555_REG(0, 1, 81)
124 #define TAS2555_GPIO_HIZ_CTRL4_REG              TAS2555_REG(0, 1, 82)
125 #define TAS2555_GPIO_HIZ_CTRL5_REG              TAS2555_REG(0, 1, 83)
127 #define TAS2555_BIT_BANG_CTRL_REG               TAS2555_REG(0, 1, 87)
128 #define TAS2555_BIT_BANG_OUT1_REG               TAS2555_REG(0, 1, 88)
129 #define TAS2555_BIT_BANG_OUT2_REG               TAS2555_REG(0, 1, 89)
130 #define TAS2555_BIT_BANG_IN1_REG                TAS2555_REG(0, 1, 90)
131 #define TAS2555_BIT_BANG_IN2_REG                TAS2555_REG(0, 1, 91)
132 #define TAS2555_BIT_BANG_IN3_REG                TAS2555_REG(0, 1, 92)
134 #define TAS2555_PDM_IN_CLK_REG                  TAS2555_REG(0, 1, 94)
135 #define TAS2555_PDM_IN_PIN_REG                  TAS2555_REG(0, 1, 95)
137 #define TAS2555_ASIM_IFACE1_REG                 TAS2555_REG(0, 1, 98)
138 #define TAS2555_ASIM_FORMAT_REG                 TAS2555_REG(0, 1, 99)
139 #define TAS2555_ASIM_IFACE3_REG                 TAS2555_REG(0, 1, 100)
140 #define TAS2555_ASIM_IFACE4_REG                 TAS2555_REG(0, 1, 101)
141 #define TAS2555_ASIM_IFACE5_REG                 TAS2555_REG(0, 1, 102)
142 #define TAS2555_ASIM_IFACE6_REG                 TAS2555_REG(0, 1, 103)
143 #define TAS2555_ASIM_IFACE7_REG                 TAS2555_REG(0, 1, 104)
144 #define TAS2555_ASIM_IFACE8_REG                 TAS2555_REG(0, 1, 105)
145 #define TAS2555_ASIM_IFACE9_REG                 TAS2555_REG(0, 1, 106)
147 #define TAS2555_MAIN_CLKIN_REG                  TAS2555_REG(0, 1, 115)
148 #define TAS2555_PLL_CLKIN_REG                   TAS2555_REG(0, 1, 116)
149 #define TAS2555_CLKOUT_MUX_REG                  TAS2555_REG(0, 1, 117)
150 #define TAS2555_CLKOUT_CDIV_REG                 TAS2555_REG(0, 1, 118)
152 #define TAS2555_HACK_GP01_REG                   TAS2555_REG(0, 1, 122)
154 #define TAS2555_HACK01_REG                      TAS2555_REG(0, 2, 10)
156 #define TAS2555_TEST_MODE_REG                   TAS2555_REG(0, 253, 13)
157 #define TAS2555_CRYPTIC_REG                     TAS2555_REG(0, 253, 71)
159 //#define TAS2555__REG      TAS2555_REG(0, 1, )
160 //#define TAS2555__REG      TAS2555_REG(1, 0, )
161 #define TAS2555_DAC_INTERPOL_REG                TAS2555_REG(100, 0, 1)
162 #define TAS2555_SOFT_MUTE_REG                   TAS2555_REG(100, 0, 7)
163 #define TAS2555_PLL_P_VAL_REG                   TAS2555_REG(100, 0, 27)
164 #define TAS2555_PLL_J_VAL_REG                   TAS2555_REG(100, 0, 28)
165 #define TAS2555_PLL_D_VAL_MSB_REG               TAS2555_REG(100, 0, 29)
166 #define TAS2555_PLL_D_VAL_LSB_REG               TAS2555_REG(100, 0, 30)
167 #define TAS2555_CLK_MISC_REG                    TAS2555_REG(100, 0, 31)
168 #define TAS2555_PLL_N_VAL_REG                   TAS2555_REG(100, 0, 32)
169 #define TAS2555_DAC_MADC_VAL_REG                TAS2555_REG(100, 0, 33)
170 #define TAS2555_ISENSE_DIV_REG                  TAS2555_REG(100, 0, 42)
171 #define TAS2555_RAMP_CLK_DIV_MSB_REG            TAS2555_REG(100, 0, 43)
172 #define TAS2555_RAMP_CLK_DIV_LSB_REG            TAS2555_REG(100, 0, 44)
173 /* Bits */
174 /* B0P0R4 - TAS2555_POWER_CTRL1_REG */
175 #define TAS2555_SW_SHUTDOWN                     (0x1 << 0)
176 #define TAS2555_MADC_POWER_UP                   (0x1 << 3)
177 #define TAS2555_MDAC_POWER_UP                   (0x1 << 4)
178 #define TAS2555_NDIV_POWER_UP                   (0x1 << 5)
179 #define TAS2555_PLL_POWER_UP                    (0x1 << 6)
180 #define TAS2555_DSP_POWER_UP                    (0x1 << 7)
182 /* B0P0R5 - TAS2555_POWER_CTRL2_REG */
183 #define TAS2555_VSENSE_ENABLE                   (0x1 << 0)
184 #define TAS2555_ISENSE_ENABLE                   (0x1 << 1)
185 #define TAS2555_BOOST_ENABLE                    (0x1 << 5)
186 #define TAS2555_CLASSD_ENABLE                   (0x1 << 7)
188 /* B0P0R7 - TAS2555_MUTE_REG */
189 #define TAS2555_CLASSD_MUTE                     (0x1 << 0)
190 #define TAS2555_ISENSE_MUTE                     (0x1 << 1)
192 /* B0P253R13 - TAS2555_TEST_MODE_REG */
193 #define TAS2555_TEST_MODE_ENABLE                (13)
194 #define TAS2555_TEST_MODE_MASK                  (0xf << 0)
196 /* B0P253R71 - TAS2555_CRYPTIC_REG */
197 #define TAS2555_OSC_TRIM_CAP(x)                 ((x & 0x3f) << 0)
198 #define TAS2555_DISABLE_ENCRYPTION              (0x1 << 6)
199 #define TAS2555_SL_COMP                         (0x1 << 7)
201 /* B0P1R115/6 - TAS2555_MAIN/PLL_CLKIN_REG */
202 #define TAS2555_XXX_CLKIN_GPIO1                 (0)
203 #define TAS2555_XXX_CLKIN_GPIO2                 (1)
204 #define TAS2555_XXX_CLKIN_GPIO3                 (2)
205 #define TAS2555_XXX_CLKIN_GPIO4                 (3)
206 #define TAS2555_XXX_CLKIN_GPIO5                 (4)
207 #define TAS2555_XXX_CLKIN_GPIO6                 (5)
208 #define TAS2555_XXX_CLKIN_GPIO7                 (6)
209 #define TAS2555_XXX_CLKIN_GPIO8                 (7)
210 #define TAS2555_XXX_CLKIN_GPIO9                 (8)
211 #define TAS2555_XXX_CLKIN_GPIO10                (9)
212 #define TAS2555_XXX_CLKIN_GPI1                  (12)
213 #define TAS2555_XXX_CLKIN_GPI2                  (13)
214 #define TAS2555_XXX_CLKIN_GPI3                  (14)
215 #define TAS2555_NDIV_CLKIN_PLL                  (15)
216 #define TAS2555_PLL_CLKIN_INT_OSC               (15)
218 #define TAS2555_MCLK_CLKIN_SRC_GPIO1       (0)
219 #define TAS2555_MCLK_CLKIN_SRC_GPIO2       (1)
220 #define TAS2555_MCLK_CLKIN_SRC_GPIO3       (2)
221 #define TAS2555_MCLK_CLKIN_SRC_GPIO4       (3)
222 #define TAS2555_MCLK_CLKIN_SRC_GPIO5       (4)
223 #define TAS2555_MCLK_CLKIN_SRC_GPIO6       (5)
224 #define TAS2555_MCLK_CLKIN_SRC_GPIO7       (6)
225 #define TAS2555_MCLK_CLKIN_SRC_GPIO8       (7)
226 #define TAS2555_MCLK_CLKIN_SRC_GPIO9       (8)
227 #define TAS2555_MCLK_CLKIN_SRC_GPIO10      (9)
228 #define TAS2555_MCLK_CLKIN_SRC_GPI1        (12)
229 #define TAS2555_MCLK_CLKIN_SRC_GPI2        (13)
230 #define TAS2555_MCLK_CLKIN_SRC_GPI3        (14)
232 #define TAS2555_FORMAT_I2S                      (0x0 << 5)
233 #define TAS2555_FORMAT_DSP                      (0x1 << 5)
234 #define TAS2555_FORMAT_RIGHT_J                  (0x2 << 5)
235 #define TAS2555_FORMAT_LEFT_J                   (0x3 << 5)
236 #define TAS2555_FORMAT_MONO_PCM                 (0x4 << 5)
237 #define TAS2555_FORMAT_MASK                     (0x7 << 5)
239 #define TAS2555_WORDLENGTH_16BIT                (0x0 << 3)
240 #define TAS2555_WORDLENGTH_20BIT                (0x1 << 3)
241 #define TAS2555_WORDLENGTH_24BIT                (0x2 << 3)
242 #define TAS2555_WORDLENGTH_32BIT                (0x3 << 3)
243 #define TAS2555_WORDLENGTH_MASK                 TAS2555_WORDLENGTH_32BIT
245 /* B100P0R7 - TAS2555_SOFT_MUTE_REG */
246 #define TAS2555_PDM_SOFT_MUTE                   (0x1 << 0)
247 #define TAS2555_VSENSE_SOFT_MUTE                (0x1 << 1)
248 #define TAS2555_ISENSE_SOFT_MUTE                (0x1 << 2)
249 #define TAS2555_CLASSD_SOFT_MUTE                (0x1 << 3)
251 /* B100P0R27 - TAS2555_PLL_P_VAL_REG */
252 #define TAS2555_PLL_P_VAL_MASK                  (0x3f << 0)
254 /* B100P0R28 - TAS2555_PLL_J_VAL_REG */
255 #define TAS2555_PLL_J_VAL_MASK                  ((unsigned int ) (0x7f << 0))
256 #define TAS2555_PLL_J_VAL_MASKX 0x00
258 /* B100P0R29-30 - TAS2555_PLL_D_VAL_MSB/LSB_REG */
259 #define TAS2555_PLL_D_MSB_VAL(x)                ((x >> 8) & 0x3f)
260 #define TAS2555_PLL_D_LSB_VAL(x)                (x & 0xff)
262 /* B100P0R31 - TAS2555_CLK_MISC_REG */
263 #define TAS2555_DSP_CLK_FROM_PLL                (0x1 << 5)
265 #define TAS2555_FW_NAME     "tas2555_uCDSP.bin"
267 typedef struct {
268         unsigned int mnType;
269         unsigned int mnCommands;
270         unsigned char *mpData;
271 } TBlock;
273 typedef struct {
274         char mpName[64];
275         char *mpDescription;
276         unsigned int mnBlocks;
277         TBlock *mpBlocks;
278 } TData;
280 typedef struct {
281         char mpName[64];
282         char *mpDescription;
283         TData mData;
284 } TProgram;
286 typedef struct {
287         char mpName[64];
288         char *mpDescription;
289         TBlock mBlock;
290 } TPLL;
292 typedef struct {
293         char mpName[64];
294         char *mpDescription;
295         unsigned int mnProgram;
296         unsigned int mnPLL;
297         unsigned int mnSamplingRate;
298         TData mData;
299 } TConfiguration;
301 typedef struct
303         char mpName[64];
304         char *mpDescription;
305         unsigned int mnProgram;
306         unsigned int mnConfiguration;
307         TBlock mBlock;
308 } TCalibration;
310 typedef struct {
311         unsigned int mnFWSize;
312         unsigned int mnChecksum;
313         unsigned int mnPPCVersion;
314         unsigned int mnDSPFWVersion;
315         unsigned int mnDrvFWVersion;
316         unsigned int mnTimeStamp;
317         char mpDDCName[64];
318         char *mpDescription;
319         unsigned int mnDeviceFamily;
320         unsigned int mnDevice;
321         unsigned int mnPLLs;
322         TPLL *mpPLLs;
323         unsigned int mnPrograms;
324         TProgram *mpPrograms;
325         unsigned int mnConfigurations;
326         TConfiguration *mpConfigurations;
327         unsigned int mnCalibrations;
328         TCalibration *mpCalibrations;
329 } TFirmware;
331 struct tas2555_register {
332         int book;
333         int page;
334         int reg;
335 };
337 enum channel{
338         channel_left = 0x01,
339         channel_right = 0x02,
340         channel_both = (channel_left|channel_right),
341 } ;
343 struct tas2555_priv {
344         struct device *dev;
345 #ifdef CONFIG_TAS2555_I2C_STEREO        
346         struct i2c_msg xfer_msg[2];
347         struct i2c_client *client;      
348 #endif  
349         int mnResetGPIO;
350         struct mutex dev_lock;  
351         TFirmware *mpFirmware;
352         TFirmware *mpCalFirmware;
353         unsigned int mnCurrentProgram;
354         unsigned int mnCurrentSampleRate;
355         unsigned int mnCurrentConfiguration;
356         unsigned int mnCurrentCalibration;
357         enum channel mnCurrentChannel;
358         unsigned char mnLAddr;
359         unsigned char mnRAddr;
360         int mnLCurrentBook;
361         int mnLCurrentPage;
362         int mnRCurrentBook;
363         int mnRCurrentPage;     
364         bool mbTILoadActive;
365         int reset_gpio;
366         bool mbPowerUp;
367         bool mbLoadConfigurationPostPowerUp;
368         bool mbLoadCalibrationPostPowerUp;
369         bool mbCalibrationLoaded;
370         int (*read) (struct tas2555_priv * pTAS2555, 
371                 enum channel chn,
372                 unsigned int reg,
373                 unsigned int *pValue);
374         int (*write) (struct tas2555_priv * pTAS2555, 
375                 enum channel chn,
376                 unsigned int reg,
377                 unsigned int Value);
378         int (*bulk_read) (struct tas2555_priv * pTAS2555, 
379                 enum channel chn,
380                 unsigned int reg,
381                 unsigned char *pData, 
382                 unsigned int len);
383         int (*bulk_write) (struct tas2555_priv * pTAS2555, 
384                 enum channel chn,
385                 unsigned int reg,
386                 unsigned char *pData, 
387                 unsigned int len);
388         int (*update_bits) (struct tas2555_priv * pTAS2555, 
389                 enum channel chn,
390                 unsigned int reg,
391                 unsigned int mask, 
392                 unsigned int value);
393         int (*set_config) (struct tas2555_priv *pTAS2555, 
394                 int config);
395         int (*set_calibration) (struct tas2555_priv *pTAS2555, 
396                 int calibration);       
398 #ifdef CONFIG_TAS2555_MISC_STEREO       
399         int mnDBGCmd;
400         int mnCurrentReg;       
401         struct mutex file_lock;
402 #endif  
403 };
405 #endif /* _TAS2555_H */