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