18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * This file is only included exactly once!
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * The tables here are derived from the tas3004 datasheet,
68c2ecf20Sopenharmony_ci * modulo typo corrections and some smoothing...
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#define TAS3004_TREBLE_MIN	0
108c2ecf20Sopenharmony_ci#define TAS3004_TREBLE_MAX	72
118c2ecf20Sopenharmony_ci#define TAS3004_BASS_MIN	0
128c2ecf20Sopenharmony_ci#define TAS3004_BASS_MAX	72
138c2ecf20Sopenharmony_ci#define TAS3004_TREBLE_ZERO	36
148c2ecf20Sopenharmony_ci#define TAS3004_BASS_ZERO	36
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cistatic const u8 tas3004_treble_table[] = {
178c2ecf20Sopenharmony_ci	150, /* -18 dB */
188c2ecf20Sopenharmony_ci	149,
198c2ecf20Sopenharmony_ci	148,
208c2ecf20Sopenharmony_ci	147,
218c2ecf20Sopenharmony_ci	146,
228c2ecf20Sopenharmony_ci	145,
238c2ecf20Sopenharmony_ci	144,
248c2ecf20Sopenharmony_ci	143,
258c2ecf20Sopenharmony_ci	142,
268c2ecf20Sopenharmony_ci	141,
278c2ecf20Sopenharmony_ci	140,
288c2ecf20Sopenharmony_ci	139,
298c2ecf20Sopenharmony_ci	138,
308c2ecf20Sopenharmony_ci	137,
318c2ecf20Sopenharmony_ci	136,
328c2ecf20Sopenharmony_ci	135,
338c2ecf20Sopenharmony_ci	134,
348c2ecf20Sopenharmony_ci	133,
358c2ecf20Sopenharmony_ci	132,
368c2ecf20Sopenharmony_ci	131,
378c2ecf20Sopenharmony_ci	130,
388c2ecf20Sopenharmony_ci	129,
398c2ecf20Sopenharmony_ci	128,
408c2ecf20Sopenharmony_ci	127,
418c2ecf20Sopenharmony_ci	126,
428c2ecf20Sopenharmony_ci	125,
438c2ecf20Sopenharmony_ci	124,
448c2ecf20Sopenharmony_ci	123,
458c2ecf20Sopenharmony_ci	122,
468c2ecf20Sopenharmony_ci	121,
478c2ecf20Sopenharmony_ci	120,
488c2ecf20Sopenharmony_ci	119,
498c2ecf20Sopenharmony_ci	118,
508c2ecf20Sopenharmony_ci	117,
518c2ecf20Sopenharmony_ci	116,
528c2ecf20Sopenharmony_ci	115,
538c2ecf20Sopenharmony_ci	114, /* 0 dB */
548c2ecf20Sopenharmony_ci	113,
558c2ecf20Sopenharmony_ci	112,
568c2ecf20Sopenharmony_ci	111,
578c2ecf20Sopenharmony_ci	109,
588c2ecf20Sopenharmony_ci	108,
598c2ecf20Sopenharmony_ci	107,
608c2ecf20Sopenharmony_ci	105,
618c2ecf20Sopenharmony_ci	104,
628c2ecf20Sopenharmony_ci	103,
638c2ecf20Sopenharmony_ci	101,
648c2ecf20Sopenharmony_ci	99,
658c2ecf20Sopenharmony_ci	98,
668c2ecf20Sopenharmony_ci	96,
678c2ecf20Sopenharmony_ci	93,
688c2ecf20Sopenharmony_ci	91,
698c2ecf20Sopenharmony_ci	89,
708c2ecf20Sopenharmony_ci	86,
718c2ecf20Sopenharmony_ci	83,
728c2ecf20Sopenharmony_ci	81,
738c2ecf20Sopenharmony_ci	77,
748c2ecf20Sopenharmony_ci	74,
758c2ecf20Sopenharmony_ci	71,
768c2ecf20Sopenharmony_ci	67,
778c2ecf20Sopenharmony_ci	63,
788c2ecf20Sopenharmony_ci	59,
798c2ecf20Sopenharmony_ci	54,
808c2ecf20Sopenharmony_ci	49,
818c2ecf20Sopenharmony_ci	44,
828c2ecf20Sopenharmony_ci	38,
838c2ecf20Sopenharmony_ci	32,
848c2ecf20Sopenharmony_ci	26,
858c2ecf20Sopenharmony_ci	19,
868c2ecf20Sopenharmony_ci	10,
878c2ecf20Sopenharmony_ci	4,
888c2ecf20Sopenharmony_ci	2,
898c2ecf20Sopenharmony_ci	1, /* +18 dB */
908c2ecf20Sopenharmony_ci};
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_cistatic inline u8 tas3004_treble(int idx)
938c2ecf20Sopenharmony_ci{
948c2ecf20Sopenharmony_ci	return tas3004_treble_table[idx];
958c2ecf20Sopenharmony_ci}
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci/* I only save the difference here to the treble table
988c2ecf20Sopenharmony_ci * so that the binary is smaller...
998c2ecf20Sopenharmony_ci * I have also ignored completely differences of
1008c2ecf20Sopenharmony_ci * +/- 1
1018c2ecf20Sopenharmony_ci */
1028c2ecf20Sopenharmony_cistatic const s8 tas3004_bass_diff_to_treble[] = {
1038c2ecf20Sopenharmony_ci	2, /* 7 dB, offset 50 */
1048c2ecf20Sopenharmony_ci	2,
1058c2ecf20Sopenharmony_ci	2,
1068c2ecf20Sopenharmony_ci	2,
1078c2ecf20Sopenharmony_ci	2,
1088c2ecf20Sopenharmony_ci	1,
1098c2ecf20Sopenharmony_ci	2,
1108c2ecf20Sopenharmony_ci	2,
1118c2ecf20Sopenharmony_ci	2,
1128c2ecf20Sopenharmony_ci	3,
1138c2ecf20Sopenharmony_ci	4,
1148c2ecf20Sopenharmony_ci	4,
1158c2ecf20Sopenharmony_ci	5,
1168c2ecf20Sopenharmony_ci	6,
1178c2ecf20Sopenharmony_ci	7,
1188c2ecf20Sopenharmony_ci	8,
1198c2ecf20Sopenharmony_ci	9,
1208c2ecf20Sopenharmony_ci	10,
1218c2ecf20Sopenharmony_ci	11,
1228c2ecf20Sopenharmony_ci	14,
1238c2ecf20Sopenharmony_ci	13,
1248c2ecf20Sopenharmony_ci	8,
1258c2ecf20Sopenharmony_ci	1, /* 18 dB */
1268c2ecf20Sopenharmony_ci};
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_cistatic inline u8 tas3004_bass(int idx)
1298c2ecf20Sopenharmony_ci{
1308c2ecf20Sopenharmony_ci	u8 result = tas3004_treble_table[idx];
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ci	if (idx >= 50)
1338c2ecf20Sopenharmony_ci		result += tas3004_bass_diff_to_treble[idx-50];
1348c2ecf20Sopenharmony_ci	return result;
1358c2ecf20Sopenharmony_ci}
136