1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2888dcb7cSJohannes Berg /*
3888dcb7cSJohannes Berg * This file is only included exactly once!
4888dcb7cSJohannes Berg *
5888dcb7cSJohannes Berg * The tables here are derived from the tas3004 datasheet,
6888dcb7cSJohannes Berg * modulo typo corrections and some smoothing...
7888dcb7cSJohannes Berg */
8888dcb7cSJohannes Berg
9888dcb7cSJohannes Berg #define TAS3004_TREBLE_MIN 0
10888dcb7cSJohannes Berg #define TAS3004_TREBLE_MAX 72
11888dcb7cSJohannes Berg #define TAS3004_BASS_MIN 0
12888dcb7cSJohannes Berg #define TAS3004_BASS_MAX 72
13888dcb7cSJohannes Berg #define TAS3004_TREBLE_ZERO 36
14888dcb7cSJohannes Berg #define TAS3004_BASS_ZERO 36
15888dcb7cSJohannes Berg
16*fa35aa46STakashi Iwai static const u8 tas3004_treble_table[] = {
17888dcb7cSJohannes Berg 150, /* -18 dB */
18888dcb7cSJohannes Berg 149,
19888dcb7cSJohannes Berg 148,
20888dcb7cSJohannes Berg 147,
21888dcb7cSJohannes Berg 146,
22888dcb7cSJohannes Berg 145,
23888dcb7cSJohannes Berg 144,
24888dcb7cSJohannes Berg 143,
25888dcb7cSJohannes Berg 142,
26888dcb7cSJohannes Berg 141,
27888dcb7cSJohannes Berg 140,
28888dcb7cSJohannes Berg 139,
29888dcb7cSJohannes Berg 138,
30888dcb7cSJohannes Berg 137,
31888dcb7cSJohannes Berg 136,
32888dcb7cSJohannes Berg 135,
33888dcb7cSJohannes Berg 134,
34888dcb7cSJohannes Berg 133,
35888dcb7cSJohannes Berg 132,
36888dcb7cSJohannes Berg 131,
37888dcb7cSJohannes Berg 130,
38888dcb7cSJohannes Berg 129,
39888dcb7cSJohannes Berg 128,
40888dcb7cSJohannes Berg 127,
41888dcb7cSJohannes Berg 126,
42888dcb7cSJohannes Berg 125,
43888dcb7cSJohannes Berg 124,
44888dcb7cSJohannes Berg 123,
45888dcb7cSJohannes Berg 122,
46888dcb7cSJohannes Berg 121,
47888dcb7cSJohannes Berg 120,
48888dcb7cSJohannes Berg 119,
49888dcb7cSJohannes Berg 118,
50888dcb7cSJohannes Berg 117,
51888dcb7cSJohannes Berg 116,
52888dcb7cSJohannes Berg 115,
53888dcb7cSJohannes Berg 114, /* 0 dB */
54888dcb7cSJohannes Berg 113,
55888dcb7cSJohannes Berg 112,
56888dcb7cSJohannes Berg 111,
57888dcb7cSJohannes Berg 109,
58888dcb7cSJohannes Berg 108,
59888dcb7cSJohannes Berg 107,
60888dcb7cSJohannes Berg 105,
61888dcb7cSJohannes Berg 104,
62888dcb7cSJohannes Berg 103,
63888dcb7cSJohannes Berg 101,
64888dcb7cSJohannes Berg 99,
65888dcb7cSJohannes Berg 98,
66888dcb7cSJohannes Berg 96,
67888dcb7cSJohannes Berg 93,
68888dcb7cSJohannes Berg 91,
69888dcb7cSJohannes Berg 89,
70888dcb7cSJohannes Berg 86,
71888dcb7cSJohannes Berg 83,
72888dcb7cSJohannes Berg 81,
73888dcb7cSJohannes Berg 77,
74888dcb7cSJohannes Berg 74,
75888dcb7cSJohannes Berg 71,
76888dcb7cSJohannes Berg 67,
77888dcb7cSJohannes Berg 63,
78888dcb7cSJohannes Berg 59,
79888dcb7cSJohannes Berg 54,
80888dcb7cSJohannes Berg 49,
81888dcb7cSJohannes Berg 44,
82888dcb7cSJohannes Berg 38,
83888dcb7cSJohannes Berg 32,
84888dcb7cSJohannes Berg 26,
85888dcb7cSJohannes Berg 19,
86888dcb7cSJohannes Berg 10,
87888dcb7cSJohannes Berg 4,
88888dcb7cSJohannes Berg 2,
89888dcb7cSJohannes Berg 1, /* +18 dB */
90888dcb7cSJohannes Berg };
91888dcb7cSJohannes Berg
tas3004_treble(int idx)92888dcb7cSJohannes Berg static inline u8 tas3004_treble(int idx)
93888dcb7cSJohannes Berg {
94888dcb7cSJohannes Berg return tas3004_treble_table[idx];
95888dcb7cSJohannes Berg }
96888dcb7cSJohannes Berg
97888dcb7cSJohannes Berg /* I only save the difference here to the treble table
98888dcb7cSJohannes Berg * so that the binary is smaller...
99888dcb7cSJohannes Berg * I have also ignored completely differences of
100888dcb7cSJohannes Berg * +/- 1
101888dcb7cSJohannes Berg */
102*fa35aa46STakashi Iwai static const s8 tas3004_bass_diff_to_treble[] = {
103888dcb7cSJohannes Berg 2, /* 7 dB, offset 50 */
104888dcb7cSJohannes Berg 2,
105888dcb7cSJohannes Berg 2,
106888dcb7cSJohannes Berg 2,
107888dcb7cSJohannes Berg 2,
108888dcb7cSJohannes Berg 1,
109888dcb7cSJohannes Berg 2,
110888dcb7cSJohannes Berg 2,
111888dcb7cSJohannes Berg 2,
112888dcb7cSJohannes Berg 3,
113888dcb7cSJohannes Berg 4,
114888dcb7cSJohannes Berg 4,
115888dcb7cSJohannes Berg 5,
116888dcb7cSJohannes Berg 6,
117888dcb7cSJohannes Berg 7,
118888dcb7cSJohannes Berg 8,
119888dcb7cSJohannes Berg 9,
120888dcb7cSJohannes Berg 10,
121888dcb7cSJohannes Berg 11,
122888dcb7cSJohannes Berg 14,
123888dcb7cSJohannes Berg 13,
124888dcb7cSJohannes Berg 8,
125888dcb7cSJohannes Berg 1, /* 18 dB */
126888dcb7cSJohannes Berg };
127888dcb7cSJohannes Berg
tas3004_bass(int idx)128888dcb7cSJohannes Berg static inline u8 tas3004_bass(int idx)
129888dcb7cSJohannes Berg {
130888dcb7cSJohannes Berg u8 result = tas3004_treble_table[idx];
131888dcb7cSJohannes Berg
132888dcb7cSJohannes Berg if (idx >= 50)
133888dcb7cSJohannes Berg result += tas3004_bass_diff_to_treble[idx-50];
134888dcb7cSJohannes Berg return result;
135888dcb7cSJohannes Berg }
136