1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * This file is only included exactly once!
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * The tables here are derived from the tas3004 datasheet,
6*4882a593Smuzhiyun * modulo typo corrections and some smoothing...
7*4882a593Smuzhiyun */
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun #define TAS3004_TREBLE_MIN 0
10*4882a593Smuzhiyun #define TAS3004_TREBLE_MAX 72
11*4882a593Smuzhiyun #define TAS3004_BASS_MIN 0
12*4882a593Smuzhiyun #define TAS3004_BASS_MAX 72
13*4882a593Smuzhiyun #define TAS3004_TREBLE_ZERO 36
14*4882a593Smuzhiyun #define TAS3004_BASS_ZERO 36
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun static const u8 tas3004_treble_table[] = {
17*4882a593Smuzhiyun 150, /* -18 dB */
18*4882a593Smuzhiyun 149,
19*4882a593Smuzhiyun 148,
20*4882a593Smuzhiyun 147,
21*4882a593Smuzhiyun 146,
22*4882a593Smuzhiyun 145,
23*4882a593Smuzhiyun 144,
24*4882a593Smuzhiyun 143,
25*4882a593Smuzhiyun 142,
26*4882a593Smuzhiyun 141,
27*4882a593Smuzhiyun 140,
28*4882a593Smuzhiyun 139,
29*4882a593Smuzhiyun 138,
30*4882a593Smuzhiyun 137,
31*4882a593Smuzhiyun 136,
32*4882a593Smuzhiyun 135,
33*4882a593Smuzhiyun 134,
34*4882a593Smuzhiyun 133,
35*4882a593Smuzhiyun 132,
36*4882a593Smuzhiyun 131,
37*4882a593Smuzhiyun 130,
38*4882a593Smuzhiyun 129,
39*4882a593Smuzhiyun 128,
40*4882a593Smuzhiyun 127,
41*4882a593Smuzhiyun 126,
42*4882a593Smuzhiyun 125,
43*4882a593Smuzhiyun 124,
44*4882a593Smuzhiyun 123,
45*4882a593Smuzhiyun 122,
46*4882a593Smuzhiyun 121,
47*4882a593Smuzhiyun 120,
48*4882a593Smuzhiyun 119,
49*4882a593Smuzhiyun 118,
50*4882a593Smuzhiyun 117,
51*4882a593Smuzhiyun 116,
52*4882a593Smuzhiyun 115,
53*4882a593Smuzhiyun 114, /* 0 dB */
54*4882a593Smuzhiyun 113,
55*4882a593Smuzhiyun 112,
56*4882a593Smuzhiyun 111,
57*4882a593Smuzhiyun 109,
58*4882a593Smuzhiyun 108,
59*4882a593Smuzhiyun 107,
60*4882a593Smuzhiyun 105,
61*4882a593Smuzhiyun 104,
62*4882a593Smuzhiyun 103,
63*4882a593Smuzhiyun 101,
64*4882a593Smuzhiyun 99,
65*4882a593Smuzhiyun 98,
66*4882a593Smuzhiyun 96,
67*4882a593Smuzhiyun 93,
68*4882a593Smuzhiyun 91,
69*4882a593Smuzhiyun 89,
70*4882a593Smuzhiyun 86,
71*4882a593Smuzhiyun 83,
72*4882a593Smuzhiyun 81,
73*4882a593Smuzhiyun 77,
74*4882a593Smuzhiyun 74,
75*4882a593Smuzhiyun 71,
76*4882a593Smuzhiyun 67,
77*4882a593Smuzhiyun 63,
78*4882a593Smuzhiyun 59,
79*4882a593Smuzhiyun 54,
80*4882a593Smuzhiyun 49,
81*4882a593Smuzhiyun 44,
82*4882a593Smuzhiyun 38,
83*4882a593Smuzhiyun 32,
84*4882a593Smuzhiyun 26,
85*4882a593Smuzhiyun 19,
86*4882a593Smuzhiyun 10,
87*4882a593Smuzhiyun 4,
88*4882a593Smuzhiyun 2,
89*4882a593Smuzhiyun 1, /* +18 dB */
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun
tas3004_treble(int idx)92*4882a593Smuzhiyun static inline u8 tas3004_treble(int idx)
93*4882a593Smuzhiyun {
94*4882a593Smuzhiyun return tas3004_treble_table[idx];
95*4882a593Smuzhiyun }
96*4882a593Smuzhiyun
97*4882a593Smuzhiyun /* I only save the difference here to the treble table
98*4882a593Smuzhiyun * so that the binary is smaller...
99*4882a593Smuzhiyun * I have also ignored completely differences of
100*4882a593Smuzhiyun * +/- 1
101*4882a593Smuzhiyun */
102*4882a593Smuzhiyun static const s8 tas3004_bass_diff_to_treble[] = {
103*4882a593Smuzhiyun 2, /* 7 dB, offset 50 */
104*4882a593Smuzhiyun 2,
105*4882a593Smuzhiyun 2,
106*4882a593Smuzhiyun 2,
107*4882a593Smuzhiyun 2,
108*4882a593Smuzhiyun 1,
109*4882a593Smuzhiyun 2,
110*4882a593Smuzhiyun 2,
111*4882a593Smuzhiyun 2,
112*4882a593Smuzhiyun 3,
113*4882a593Smuzhiyun 4,
114*4882a593Smuzhiyun 4,
115*4882a593Smuzhiyun 5,
116*4882a593Smuzhiyun 6,
117*4882a593Smuzhiyun 7,
118*4882a593Smuzhiyun 8,
119*4882a593Smuzhiyun 9,
120*4882a593Smuzhiyun 10,
121*4882a593Smuzhiyun 11,
122*4882a593Smuzhiyun 14,
123*4882a593Smuzhiyun 13,
124*4882a593Smuzhiyun 8,
125*4882a593Smuzhiyun 1, /* 18 dB */
126*4882a593Smuzhiyun };
127*4882a593Smuzhiyun
tas3004_bass(int idx)128*4882a593Smuzhiyun static inline u8 tas3004_bass(int idx)
129*4882a593Smuzhiyun {
130*4882a593Smuzhiyun u8 result = tas3004_treble_table[idx];
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun if (idx >= 50)
133*4882a593Smuzhiyun result += tas3004_bass_diff_to_treble[idx-50];
134*4882a593Smuzhiyun return result;
135*4882a593Smuzhiyun }
136