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