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