xref: /OK3568_Linux_fs/kernel/sound/aoa/codecs/tas-basstreble.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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