diff options
Diffstat (limited to 'firmware')
42 files changed, 168 insertions, 305 deletions
diff --git a/firmware/drivers/audio/aic3x.c b/firmware/drivers/audio/aic3x.c index 60330f1779..9b705db7f5 100644 --- a/firmware/drivers/audio/aic3x.c +++ b/firmware/drivers/audio/aic3x.c | |||
@@ -37,17 +37,17 @@ static char volume_left = 0, volume_right = 0; | |||
37 | static int vol_tenthdb2hw(int db) | 37 | static int vol_tenthdb2hw(int db) |
38 | { | 38 | { |
39 | /* 0 to -63.0dB in 1dB steps, aic3x can goto -63.5 in 0.5dB steps */ | 39 | /* 0 to -63.0dB in 1dB steps, aic3x can goto -63.5 in 0.5dB steps */ |
40 | if (db < VOLUME_MIN) | 40 | if (db <= -640) |
41 | { | 41 | { |
42 | return 0x7E; | 42 | return 0x7E; |
43 | } | 43 | } |
44 | else if (db >= VOLUME_MAX) | 44 | else if (db >= 0) |
45 | { | 45 | { |
46 | return 0x00; | 46 | return 0x00; |
47 | } | 47 | } |
48 | else | 48 | else |
49 | { | 49 | { |
50 | return (-((db)/5)); /* VOLUME_MIN is negative */ | 50 | return (-((db)/5)); |
51 | } | 51 | } |
52 | } | 52 | } |
53 | 53 | ||
diff --git a/firmware/drivers/audio/ak4537.c b/firmware/drivers/audio/ak4537.c index 1628af8a5c..90d264e445 100644 --- a/firmware/drivers/audio/ak4537.c +++ b/firmware/drivers/audio/ak4537.c | |||
@@ -67,9 +67,9 @@ static void codec_set_active(int active) | |||
67 | /* convert tenth of dB volume (-1270..0) to master volume register value */ | 67 | /* convert tenth of dB volume (-1270..0) to master volume register value */ |
68 | static int vol_tenthdb2hw(int db) | 68 | static int vol_tenthdb2hw(int db) |
69 | { | 69 | { |
70 | if (db < VOLUME_MIN) | 70 | if (db <= -1280) |
71 | return 0xff; /* mute */ | 71 | return 0xff; /* mute */ |
72 | else if (db >= VOLUME_MAX) | 72 | else if (db >= 0) |
73 | return 0x00; | 73 | return 0x00; |
74 | else | 74 | else |
75 | return ((-db)/5); | 75 | return ((-db)/5); |
diff --git a/firmware/drivers/audio/as3514.c b/firmware/drivers/audio/as3514.c index e1c7f6575e..1f79277423 100644 --- a/firmware/drivers/audio/as3514.c +++ b/firmware/drivers/audio/as3514.c | |||
@@ -31,6 +31,16 @@ | |||
31 | #include "i2s.h" | 31 | #include "i2s.h" |
32 | #include "ascodec.h" | 32 | #include "ascodec.h" |
33 | 33 | ||
34 | #if CONFIG_CPU == AS3525v2 | ||
35 | /* Headphone volume goes from -81.0 ... +6dB */ | ||
36 | #define VOLUME_MIN -820 | ||
37 | #define VOLUME_MAX 60 | ||
38 | #else | ||
39 | /* Headphone volume goes from -73.5 ... +6dB */ | ||
40 | #define VOLUME_MIN -740 | ||
41 | #define VOLUME_MAX 60 | ||
42 | #endif | ||
43 | |||
34 | /* | 44 | /* |
35 | * This drivers supports: | 45 | * This drivers supports: |
36 | * as3514 , as used in the PP targets | 46 | * as3514 , as used in the PP targets |
@@ -99,13 +109,12 @@ static void as3514_write_masked(unsigned int reg, unsigned int bits, | |||
99 | /* convert tenth of dB volume to master volume register value */ | 109 | /* convert tenth of dB volume to master volume register value */ |
100 | static int vol_tenthdb2hw(int db) | 110 | static int vol_tenthdb2hw(int db) |
101 | { | 111 | { |
102 | /* +6 to -73.5dB (or -81.0 dB) in 1.5dB steps == 53 (or 58) levels */ | 112 | if (db <= VOLUME_MIN) { |
103 | if (db < VOLUME_MIN) { | ||
104 | return 0x0; | 113 | return 0x0; |
105 | } else if (db > VOLUME_MAX) { | 114 | } else if (db > VOLUME_MAX) { |
106 | return (VOLUME_MAX-VOLUME_MIN)/15; | 115 | return (VOLUME_MAX - VOLUME_MIN) / 15; |
107 | } else { | 116 | } else { |
108 | return((db-VOLUME_MIN)/15); /* VOLUME_MIN is negative */ | 117 | return (db - VOLUME_MIN) / 15; |
109 | } | 118 | } |
110 | } | 119 | } |
111 | 120 | ||
diff --git a/firmware/drivers/audio/cs42l55.c b/firmware/drivers/audio/cs42l55.c index 6c6e17abd4..02c80daf7d 100644 --- a/firmware/drivers/audio/cs42l55.c +++ b/firmware/drivers/audio/cs42l55.c | |||
@@ -38,7 +38,7 @@ static int vol_tenthdb2hw(int db) | |||
38 | /* 0001100 == +12dB (0xc) */ | 38 | /* 0001100 == +12dB (0xc) */ |
39 | /* 0000000 == 0dB (0x0) */ | 39 | /* 0000000 == 0dB (0x0) */ |
40 | /* 1000100 == -60dB (0x44, this is actually -58dB) */ | 40 | /* 1000100 == -60dB (0x44, this is actually -58dB) */ |
41 | if (db < VOLUME_MIN) return HPACTL_HPAMUTE; | 41 | if (db <= -600) return HPACTL_HPAMUTE; |
42 | return (db / 10) & HPACTL_HPAVOL_MASK; | 42 | return (db / 10) & HPACTL_HPAVOL_MASK; |
43 | } | 43 | } |
44 | 44 | ||
diff --git a/firmware/drivers/audio/dummy_codec.c b/firmware/drivers/audio/dummy_codec.c index 3e73137eb9..fbbe836499 100644 --- a/firmware/drivers/audio/dummy_codec.c +++ b/firmware/drivers/audio/dummy_codec.c | |||
@@ -40,9 +40,9 @@ void audiohw_set_frequency(int fsel) | |||
40 | #ifdef HAVE_SW_VOLUME_CONTROL | 40 | #ifdef HAVE_SW_VOLUME_CONTROL |
41 | void audiohw_set_volume(int vol_l, int vol_r) | 41 | void audiohw_set_volume(int vol_l, int vol_r) |
42 | { | 42 | { |
43 | /* SW volume for <= 1.0 gain, HW at unity, < VOLUME_MIN == MUTE */ | 43 | /* SW volume for <= 1.0 gain, HW at unity, <= DUMMY_VOLUME_MIN == MUTE */ |
44 | int sw_volume_l = vol_l < VOLUME_MIN ? PCM_MUTE_LEVEL : MIN(vol_l, 0); | 44 | int sw_volume_l = vol_l <= DUMMY_VOLUME_MIN ? PCM_MUTE_LEVEL : vol_l; |
45 | int sw_volume_r = vol_r < VOLUME_MIN ? PCM_MUTE_LEVEL : MIN(vol_r, 0); | 45 | int sw_volume_r = vol_r <= DUMMY_VOLUME_MIN ? PCM_MUTE_LEVEL : vol_r; |
46 | pcm_set_master_volume(sw_volume_l, sw_volume_r); | 46 | pcm_set_master_volume(sw_volume_l, sw_volume_r); |
47 | } | 47 | } |
48 | #endif /* HAVE_SW_VOLUME_CONTROL */ | 48 | #endif /* HAVE_SW_VOLUME_CONTROL */ |
diff --git a/firmware/drivers/audio/rk27xx_codec.c b/firmware/drivers/audio/rk27xx_codec.c index 8f294ba9f3..2b0f2dbb22 100644 --- a/firmware/drivers/audio/rk27xx_codec.c +++ b/firmware/drivers/audio/rk27xx_codec.c | |||
@@ -58,7 +58,7 @@ static int vol_tenthdb2hw(int tdb) | |||
58 | * depending on gain region. | 58 | * depending on gain region. |
59 | */ | 59 | */ |
60 | 60 | ||
61 | if (tdb < VOLUME_MIN) | 61 | if (tdb <= -340) |
62 | return 32; | 62 | return 32; |
63 | else if (tdb < -115) | 63 | else if (tdb < -115) |
64 | return -(((tdb + 115)/20) - 20); /* 2.0 dB steps */ | 64 | return -(((tdb + 115)/20) - 20); /* 2.0 dB steps */ |
diff --git a/firmware/drivers/audio/sdl.c b/firmware/drivers/audio/sdl.c index c14ba0c583..f35cec8cb7 100644 --- a/firmware/drivers/audio/sdl.c +++ b/firmware/drivers/audio/sdl.c | |||
@@ -23,6 +23,12 @@ | |||
23 | #include "config.h" | 23 | #include "config.h" |
24 | #include "sound.h" | 24 | #include "sound.h" |
25 | #include "pcm_sampr.h" | 25 | #include "pcm_sampr.h" |
26 | #if CONFIG_CODEC == SWCODEC | ||
27 | #include "fixedpoint.h" | ||
28 | #ifdef HAVE_SW_VOLUME_CONTROL | ||
29 | #include "pcm_sw_volume.h" | ||
30 | #endif | ||
31 | #endif | ||
26 | 32 | ||
27 | /** | 33 | /** |
28 | * Audio Hardware api. Make them do nothing as we cannot properly simulate with | 34 | * Audio Hardware api. Make them do nothing as we cannot properly simulate with |
@@ -30,8 +36,6 @@ | |||
30 | **/ | 36 | **/ |
31 | 37 | ||
32 | #ifdef HAVE_SW_VOLUME_CONTROL | 38 | #ifdef HAVE_SW_VOLUME_CONTROL |
33 | #include "pcm_sw_volume.h" | ||
34 | |||
35 | void audiohw_set_volume(int vol_l, int vol_r) | 39 | void audiohw_set_volume(int vol_l, int vol_r) |
36 | { | 40 | { |
37 | pcm_set_master_volume(vol_l, vol_r); | 41 | pcm_set_master_volume(vol_l, vol_r); |
@@ -39,21 +43,13 @@ void audiohw_set_volume(int vol_l, int vol_r) | |||
39 | 43 | ||
40 | #else /* ndef HAVE_SW_VOLUME_CONTROL */ | 44 | #else /* ndef HAVE_SW_VOLUME_CONTROL */ |
41 | 45 | ||
42 | extern void pcm_set_mixer_volume(int); | ||
43 | 46 | ||
44 | void audiohw_set_volume(int volume) | 47 | void audiohw_set_volume(int volume) |
45 | { | 48 | { |
46 | #if CONFIG_CODEC == SWCODEC | 49 | #if CONFIG_CODEC == SWCODEC |
47 | #if !(CONFIG_PLATFORM & PLATFORM_MAEMO5) | 50 | extern void pcm_set_mixer_volume(int volume); |
48 | if (volume < VOLUME_MIN) | ||
49 | volume = 0; | ||
50 | else | ||
51 | volume = SDL_MIX_MAXVOLUME * (volume - VOLUME_MIN + ONE_DB) / | ||
52 | (VOLUME_RANGE + ONE_DB); | ||
53 | #endif /* !(CONFIG_PLATFORM & PLATFORM_MAEMO5) */ | ||
54 | |||
55 | pcm_set_mixer_volume(volume); | 51 | pcm_set_mixer_volume(volume); |
56 | #endif /* CONFIG_CODEC == SWCODEC */ | 52 | #endif |
57 | (void)volume; | 53 | (void)volume; |
58 | } | 54 | } |
59 | #endif /* HAVE_SW_VOLUME_CONTROL */ | 55 | #endif /* HAVE_SW_VOLUME_CONTROL */ |
diff --git a/firmware/drivers/audio/tlv320.c b/firmware/drivers/audio/tlv320.c index 6118734d37..9fa676f3d5 100644 --- a/firmware/drivers/audio/tlv320.c +++ b/firmware/drivers/audio/tlv320.c | |||
@@ -40,7 +40,7 @@ static int vol_tenthdb2hw(int db) | |||
40 | /* 0110000 == -73dB (0x30) */ | 40 | /* 0110000 == -73dB (0x30) */ |
41 | /* 0101111 == mute (0x2f) */ | 41 | /* 0101111 == mute (0x2f) */ |
42 | 42 | ||
43 | if (db < VOLUME_MIN) { | 43 | if (db <= -740) { |
44 | return 0x2f; | 44 | return 0x2f; |
45 | } else { | 45 | } else { |
46 | return((db/10)+73+0x30); | 46 | return((db/10)+73+0x30); |
diff --git a/firmware/drivers/audio/tsc2100.c b/firmware/drivers/audio/tsc2100.c index fda192a62a..b74d445056 100644 --- a/firmware/drivers/audio/tsc2100.c +++ b/firmware/drivers/audio/tsc2100.c | |||
@@ -34,12 +34,12 @@ static bool is_muted = false; | |||
34 | static int vol_tenthdb2hw(int db) | 34 | static int vol_tenthdb2hw(int db) |
35 | { | 35 | { |
36 | /* 0 to -63.0dB in 1dB steps, tsc2100 can goto -63.5 in 0.5dB steps */ | 36 | /* 0 to -63.0dB in 1dB steps, tsc2100 can goto -63.5 in 0.5dB steps */ |
37 | if (db < VOLUME_MIN) { | 37 | if (db <= -640) { |
38 | return 0x7E; | 38 | return 0x7E; |
39 | } else if (db >= VOLUME_MAX) { | 39 | } else if (db >= 0) { |
40 | return 0x00; | 40 | return 0x00; |
41 | } else { | 41 | } else { |
42 | return(-((db)/5)); /* VOLUME_MIN is negative */ | 42 | return(-((db)/5)); |
43 | } | 43 | } |
44 | } | 44 | } |
45 | 45 | ||
diff --git a/firmware/drivers/audio/uda1341.c b/firmware/drivers/audio/uda1341.c index e15cd39bfc..75573105de 100644 --- a/firmware/drivers/audio/uda1341.c +++ b/firmware/drivers/audio/uda1341.c | |||
@@ -31,7 +31,7 @@ | |||
31 | /* convert tenth of dB volume (-600..0) to volume register value */ | 31 | /* convert tenth of dB volume (-600..0) to volume register value */ |
32 | static int vol_tenthdb2hw(int db) | 32 | static int vol_tenthdb2hw(int db) |
33 | { | 33 | { |
34 | if (db < -600) | 34 | if (db <= -610) |
35 | return 63; | 35 | return 63; |
36 | else /* 1 dB steps */ | 36 | else /* 1 dB steps */ |
37 | return -(db / 10) + 1; | 37 | return -(db / 10) + 1; |
diff --git a/firmware/drivers/audio/wm8731.c b/firmware/drivers/audio/wm8731.c index f84edc55da..5c1e623a35 100644 --- a/firmware/drivers/audio/wm8731.c +++ b/firmware/drivers/audio/wm8731.c | |||
@@ -101,7 +101,7 @@ static int vol_tenthdb2hw(int db) | |||
101 | /* 1111001 == 0dB (0x79) */ | 101 | /* 1111001 == 0dB (0x79) */ |
102 | /* 0110000 == -73dB (0x30) */ | 102 | /* 0110000 == -73dB (0x30) */ |
103 | /* 0101111 == mute (0x2f) */ | 103 | /* 0101111 == mute (0x2f) */ |
104 | if (db < VOLUME_MIN) { | 104 | if (db <= -740) { |
105 | return 0x2f; | 105 | return 0x2f; |
106 | } else { | 106 | } else { |
107 | return((db/10)+0x30+73); | 107 | return((db/10)+0x30+73); |
diff --git a/firmware/drivers/audio/wm8751.c b/firmware/drivers/audio/wm8751.c index feba05e504..476c6c342a 100644 --- a/firmware/drivers/audio/wm8751.c +++ b/firmware/drivers/audio/wm8751.c | |||
@@ -117,7 +117,7 @@ static int vol_tenthdb2hw(int db) | |||
117 | /* 1111001 == 0dB (0x79) */ | 117 | /* 1111001 == 0dB (0x79) */ |
118 | /* 0110000 == -73dB (0x30) */ | 118 | /* 0110000 == -73dB (0x30) */ |
119 | /* 0101111..0000000 == mute (<= 0x2f) */ | 119 | /* 0101111..0000000 == mute (<= 0x2f) */ |
120 | if (db < VOLUME_MIN) | 120 | if (db <= -740) |
121 | return 0x0; | 121 | return 0x0; |
122 | else | 122 | else |
123 | return (db / 10) + 73 + 0x30; | 123 | return (db / 10) + 73 + 0x30; |
diff --git a/firmware/drivers/audio/wm8758.c b/firmware/drivers/audio/wm8758.c index 3f3ac79229..f7d7a5bc22 100644 --- a/firmware/drivers/audio/wm8758.c +++ b/firmware/drivers/audio/wm8758.c | |||
@@ -38,7 +38,7 @@ static unsigned short eq1_reg = EQ1_EQ3DMODE | EQ_GAIN_VALUE(0); | |||
38 | static unsigned short eq5_reg = EQ_GAIN_VALUE(0); | 38 | static unsigned short eq5_reg = EQ_GAIN_VALUE(0); |
39 | 39 | ||
40 | /* convert tenth of dB volume (-89..6) to master volume register value */ | 40 | /* convert tenth of dB volume (-89..6) to master volume register value */ |
41 | int tenthdb2master(int db) | 41 | static int vol_tenthdb2hw(int db) |
42 | { | 42 | { |
43 | /* att DAC AMP result | 43 | /* att DAC AMP result |
44 | +6dB 0 +6 96 | 44 | +6dB 0 +6 96 |
@@ -47,10 +47,10 @@ int tenthdb2master(int db) | |||
47 | -58dB -1 -57 32 | 47 | -58dB -1 -57 32 |
48 | -89dB -32 -57 1 | 48 | -89dB -32 -57 1 |
49 | -90dB -oo -oo 0 */ | 49 | -90dB -oo -oo 0 */ |
50 | if (db < VOLUME_MIN) { | 50 | if (db <= -900) { |
51 | return 0; | 51 | return 0; |
52 | } else { | 52 | } else { |
53 | return (db-VOLUME_MIN)/10 + 1; | 53 | return db / 10 - -90; |
54 | } | 54 | } |
55 | } | 55 | } |
56 | 56 | ||
@@ -137,6 +137,10 @@ void audiohw_postinit(void) | |||
137 | void audiohw_set_volume(int vol_l, int vol_r) | 137 | void audiohw_set_volume(int vol_l, int vol_r) |
138 | { | 138 | { |
139 | int dac_l, amp_l, dac_r, amp_r; | 139 | int dac_l, amp_l, dac_r, amp_r; |
140 | |||
141 | vol_l = vol_tenthdb2hw(vol_l); | ||
142 | vol_r = vol_tenthdb2hw(vol_r); | ||
143 | |||
140 | get_volume_params(vol_l, &dac_l, &_l); | 144 | get_volume_params(vol_l, &dac_l, &_l); |
141 | get_volume_params(vol_r, &dac_r, &_r); | 145 | get_volume_params(vol_r, &dac_r, &_r); |
142 | 146 | ||
diff --git a/firmware/drivers/audio/wm8975.c b/firmware/drivers/audio/wm8975.c index 4905445aea..931dae9c6f 100644 --- a/firmware/drivers/audio/wm8975.c +++ b/firmware/drivers/audio/wm8975.c | |||
@@ -79,7 +79,7 @@ static int vol_tenthdb2hw(int db) | |||
79 | /* 0110000 == -73dB (0x30 */ | 79 | /* 0110000 == -73dB (0x30 */ |
80 | /* 0101111..0000000 == mute (0x2f) */ | 80 | /* 0101111..0000000 == mute (0x2f) */ |
81 | 81 | ||
82 | if (db < VOLUME_MIN) { | 82 | if (db <= -740) { |
83 | return 0x0; | 83 | return 0x0; |
84 | } else { | 84 | } else { |
85 | return((db/10)+73+0x30); | 85 | return((db/10)+73+0x30); |
diff --git a/firmware/drivers/audio/wm8978.c b/firmware/drivers/audio/wm8978.c index 3a86ef204e..69ae608e5d 100644 --- a/firmware/drivers/audio/wm8978.c +++ b/firmware/drivers/audio/wm8978.c | |||
@@ -155,20 +155,17 @@ static void wmc_write_masked(unsigned int reg, unsigned int bits, | |||
155 | * (000000...111111) */ | 155 | * (000000...111111) */ |
156 | static int vol_tenthdb2hw(int db) | 156 | static int vol_tenthdb2hw(int db) |
157 | { | 157 | { |
158 | /* -90dB to +6dB 1dB steps (96 levels) 7bits */ | 158 | /* att DAC AMP result |
159 | /* 1100000 == +6dB (0x60,96) */ | 159 | +6dB 0 +6 96 |
160 | /* 1101010 == 0dB (0x5a,90) */ | 160 | 0dB 0 0 90 |
161 | /* 1000001 == -57dB (0x21,33,DAC) */ | 161 | -57dB 0 -57 33 |
162 | /* 0000001 == -89dB (0x01,01) */ | 162 | -58dB -1 -57 32 |
163 | /* 0000000 == -90dB (0x00,00,Mute) */ | 163 | -89dB -32 -57 1 |
164 | if (db < VOLUME_MIN) | 164 | -90dB -oo -oo 0 */ |
165 | { | 165 | if (db <= -900) |
166 | return 0x0; | 166 | return 0x0; |
167 | } | ||
168 | else | 167 | else |
169 | { | 168 | return db / 10 - -90; |
170 | return (db - VOLUME_MIN) / 10; | ||
171 | } | ||
172 | } | 169 | } |
173 | 170 | ||
174 | void audiohw_preinit(void) | 171 | void audiohw_preinit(void) |
diff --git a/firmware/drivers/audio/wm8985.c b/firmware/drivers/audio/wm8985.c index 2d49e706c8..fab7354685 100644 --- a/firmware/drivers/audio/wm8985.c +++ b/firmware/drivers/audio/wm8985.c | |||
@@ -104,10 +104,10 @@ static int vol_tenthdb2hw(int db) | |||
104 | -89dB -32 -57 1 | 104 | -89dB -32 -57 1 |
105 | -90dB -oo -oo 0 */ | 105 | -90dB -oo -oo 0 */ |
106 | 106 | ||
107 | if (db < VOLUME_MIN) { | 107 | if (db <= -900) { |
108 | return 0; | 108 | return 0; |
109 | } else { | 109 | } else { |
110 | return (db-VOLUME_MIN)/10 + 1; | 110 | return db / 10 - -90; |
111 | } | 111 | } |
112 | } | 112 | } |
113 | 113 | ||
diff --git a/firmware/export/aic3x.h b/firmware/export/aic3x.h index 65e1ebd62c..1baf52684a 100644 --- a/firmware/export/aic3x.h +++ b/firmware/export/aic3x.h | |||
@@ -22,9 +22,6 @@ | |||
22 | #ifndef _AIC3X_H_ | 22 | #ifndef _AIC3X_H_ |
23 | #define _AIC3X_H_ | 23 | #define _AIC3X_H_ |
24 | 24 | ||
25 | #define VOLUME_MIN -630 | ||
26 | #define VOLUME_MAX 0 | ||
27 | |||
28 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -64, 0, -25) | 25 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -64, 0, -25) |
29 | 26 | ||
30 | /*** definitions ***/ | 27 | /*** definitions ***/ |
diff --git a/firmware/export/ak4537.h b/firmware/export/ak4537.h index abf2a378ae..d66205af7c 100644 --- a/firmware/export/ak4537.h +++ b/firmware/export/ak4537.h | |||
@@ -23,9 +23,6 @@ | |||
23 | #define _AK4537_H | 23 | #define _AK4537_H |
24 | 24 | ||
25 | /* Volume goes from -127.0 ... 0 dB in 0.5 dB increments */ | 25 | /* Volume goes from -127.0 ... 0 dB in 0.5 dB increments */ |
26 | #define VOLUME_MIN -1270 | ||
27 | #define VOLUME_MAX 0 | ||
28 | |||
29 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -128, 0, -25) | 26 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -128, 0, -25) |
30 | 27 | ||
31 | #define AKC_NUM_REGS 0x11 | 28 | #define AKC_NUM_REGS 0x11 |
diff --git a/firmware/export/as3514.h b/firmware/export/as3514.h index e9e48fab63..b5c9438786 100644 --- a/firmware/export/as3514.h +++ b/firmware/export/as3514.h | |||
@@ -32,14 +32,8 @@ | |||
32 | 32 | ||
33 | /*different volume ranges for different AMS chips*/ | 33 | /*different volume ranges for different AMS chips*/ |
34 | #if CONFIG_CPU == AS3525v2 | 34 | #if CONFIG_CPU == AS3525v2 |
35 | /* Headphone volume goes from -81.0 ... +6dB */ | ||
36 | #define VOLUME_MIN -810 | ||
37 | #define VOLUME_MAX 60 | ||
38 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -82, 6, -25) | 35 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -82, 6, -25) |
39 | #else /* AS3525v1 */ | 36 | #else /* AS3525v1 */ |
40 | /* Headphone volume goes from -73.5 ... +6dB */ | ||
41 | #define VOLUME_MIN -735 | ||
42 | #define VOLUME_MAX 60 | ||
43 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 6, -25) | 37 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 6, -25) |
44 | #endif /* CONFIG_CPU == AS3525v2 */ | 38 | #endif /* CONFIG_CPU == AS3525v2 */ |
45 | 39 | ||
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h index 3fce3fc6d4..e3b9623262 100644 --- a/firmware/export/audiohw.h +++ b/firmware/export/audiohw.h | |||
@@ -126,22 +126,6 @@ AUDIOHW_SETTING(BALANCE, "%", 0, 1, -100, 100, 0) | |||
126 | AUDIOHW_SETTING(CHANNELS, "", 0, 1, 0, 5, 0) | 126 | AUDIOHW_SETTING(CHANNELS, "", 0, 1, 0, 5, 0) |
127 | AUDIOHW_SETTING(STEREO_WIDTH, "%", 0, 5, 0, 250, 100) | 127 | AUDIOHW_SETTING(STEREO_WIDTH, "%", 0, 5, 0, 250, 100) |
128 | 128 | ||
129 | #define ONE_DB 10 | ||
130 | |||
131 | #if !defined(VOLUME_MIN) && !defined(VOLUME_MAX) | ||
132 | #warning define for VOLUME_MIN and VOLUME_MAX is missing | ||
133 | #define VOLUME_MIN -700 | ||
134 | #define VOLUME_MAX 0 | ||
135 | #endif | ||
136 | |||
137 | #ifndef AUDIOHW_NUM_TONE_CONTROLS | ||
138 | #define AUDIOHW_NUM_TONE_CONTROLS 0 | ||
139 | #endif | ||
140 | |||
141 | /* volume/balance/treble/bass interdependency main part */ | ||
142 | #define VOLUME_RANGE (VOLUME_MAX - VOLUME_MIN) | ||
143 | |||
144 | |||
145 | /* convert caps into defines */ | 129 | /* convert caps into defines */ |
146 | #ifdef AUDIOHW_CAPS | 130 | #ifdef AUDIOHW_CAPS |
147 | /* Tone controls */ | 131 | /* Tone controls */ |
@@ -183,7 +167,7 @@ AUDIOHW_SETTING(STEREO_WIDTH, "%", 0, 5, 0, 250, 100) | |||
183 | enum | 167 | enum |
184 | { | 168 | { |
185 | /* Band 1 is implied; bands must be contiguous, 1 to N */ | 169 | /* Band 1 is implied; bands must be contiguous, 1 to N */ |
186 | AUDIOHW_EQ_BAND1 = 0, | 170 | AUDIOHW_EQ_BAND1, |
187 | #define AUDIOHW_HAVE_EQ_BAND1 | 171 | #define AUDIOHW_HAVE_EQ_BAND1 |
188 | #if (AUDIOHW_EQ_BAND_CAPS & (EQ_CAP << 1)) | 172 | #if (AUDIOHW_EQ_BAND_CAPS & (EQ_CAP << 1)) |
189 | AUDIOHW_EQ_BAND2, | 173 | AUDIOHW_EQ_BAND2, |
@@ -209,7 +193,6 @@ enum | |||
209 | #define AUDIOHW_HAVE_EQ_FREQUENCY | 193 | #define AUDIOHW_HAVE_EQ_FREQUENCY |
210 | enum | 194 | enum |
211 | { | 195 | { |
212 | __AUDIOHW_EQ_BAND_FREQUENCY = -1, | ||
213 | #if defined(AUDIOHW_HAVE_EQ_BAND1) && \ | 196 | #if defined(AUDIOHW_HAVE_EQ_BAND1) && \ |
214 | (AUDIOHW_EQ_FREQUENCY_CAPS & (EQ_CAP << 0)) | 197 | (AUDIOHW_EQ_FREQUENCY_CAPS & (EQ_CAP << 0)) |
215 | AUDIOHW_EQ_BAND1_FREQUENCY, | 198 | AUDIOHW_EQ_BAND1_FREQUENCY, |
@@ -235,7 +218,7 @@ enum | |||
235 | AUDIOHW_EQ_BAND5_FREQUENCY, | 218 | AUDIOHW_EQ_BAND5_FREQUENCY, |
236 | #define AUDIOHW_HAVE_EQ_BAND5_FREQUENCY | 219 | #define AUDIOHW_HAVE_EQ_BAND5_FREQUENCY |
237 | #endif | 220 | #endif |
238 | AUDIOHW_EQ_FREQUENCY_NUM, | 221 | AUDIOHW_EQ_FREQUENCY_NUM, /* Keep last */ |
239 | }; | 222 | }; |
240 | #endif /* AUDIOHW_EQ_FREQUENCY_CAPS */ | 223 | #endif /* AUDIOHW_EQ_FREQUENCY_CAPS */ |
241 | 224 | ||
@@ -244,7 +227,6 @@ enum | |||
244 | #define AUDIOHW_HAVE_EQ_WIDTH | 227 | #define AUDIOHW_HAVE_EQ_WIDTH |
245 | enum | 228 | enum |
246 | { | 229 | { |
247 | __AUDIOHW_EQ_BAND_WIDTH = -1, | ||
248 | #if defined(AUDIOHW_HAVE_EQ_BAND1) && \ | 230 | #if defined(AUDIOHW_HAVE_EQ_BAND1) && \ |
249 | (AUDIOHW_EQ_WIDTH_CAPS & (EQ_CAP << 1)) | 231 | (AUDIOHW_EQ_WIDTH_CAPS & (EQ_CAP << 1)) |
250 | AUDIOHW_EQ_BAND2_WIDTH, | 232 | AUDIOHW_EQ_BAND2_WIDTH, |
@@ -267,7 +249,7 @@ enum | |||
267 | /* Types and number of settings types (gain, frequency, width) */ | 249 | /* Types and number of settings types (gain, frequency, width) */ |
268 | enum AUDIOHW_EQ_SETTINGS | 250 | enum AUDIOHW_EQ_SETTINGS |
269 | { | 251 | { |
270 | AUDIOHW_EQ_GAIN = 0, | 252 | AUDIOHW_EQ_GAIN, |
271 | #ifdef AUDIOHW_HAVE_EQ_FREQUENCY | 253 | #ifdef AUDIOHW_HAVE_EQ_FREQUENCY |
272 | AUDIOHW_EQ_FREQUENCY, | 254 | AUDIOHW_EQ_FREQUENCY, |
273 | #endif | 255 | #endif |
@@ -309,104 +291,8 @@ enum AUDIOHW_EQ_SETTINGS | |||
309 | #endif | 291 | #endif |
310 | #endif /* AUDIOHW_CAPS */ | 292 | #endif /* AUDIOHW_CAPS */ |
311 | 293 | ||
312 | enum { | 294 | /* Generate enumeration of SOUND_xxx constants */ |
313 | /* TODO: Volume shouldn't be needed if device doesn't have digital control */ | 295 | #include "audiohw_settings.h" |
314 | SOUND_VOLUME = 0, | ||
315 | /* Tone control */ | ||
316 | #if defined(AUDIOHW_HAVE_BASS) | ||
317 | SOUND_BASS, | ||
318 | #endif | ||
319 | #if defined(AUDIOHW_HAVE_TREBLE) | ||
320 | SOUND_TREBLE, | ||
321 | #endif | ||
322 | SOUND_BALANCE, | ||
323 | SOUND_CHANNELS, | ||
324 | SOUND_STEREO_WIDTH, | ||
325 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
326 | SOUND_LOUDNESS, | ||
327 | SOUND_AVC, | ||
328 | SOUND_MDB_STRENGTH, | ||
329 | SOUND_MDB_HARMONICS, | ||
330 | SOUND_MDB_CENTER, | ||
331 | SOUND_MDB_SHAPE, | ||
332 | SOUND_MDB_ENABLE, | ||
333 | SOUND_SUPERBASS, | ||
334 | #endif | ||
335 | #if defined(AUDIOHW_HAVE_LIN_GAIN) | ||
336 | SOUND_LEFT_GAIN, | ||
337 | SOUND_RIGHT_GAIN, | ||
338 | #endif | ||
339 | #if defined(AUDIOHW_HAVE_MIC_GAIN) | ||
340 | SOUND_MIC_GAIN, | ||
341 | #endif | ||
342 | /* Bass and treble tone controls */ | ||
343 | #if defined(AUDIOHW_HAVE_BASS_CUTOFF) | ||
344 | SOUND_BASS_CUTOFF, | ||
345 | #endif | ||
346 | #if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) | ||
347 | SOUND_TREBLE_CUTOFF, | ||
348 | #endif | ||
349 | /* 3D effect */ | ||
350 | #if defined(AUDIOHW_HAVE_DEPTH_3D) | ||
351 | SOUND_DEPTH_3D, | ||
352 | #endif | ||
353 | /* Hardware EQ tone controls */ | ||
354 | /* Band gains */ | ||
355 | #if defined(AUDIOHW_HAVE_EQ) | ||
356 | /* Band 1 implied */ | ||
357 | SOUND_EQ_BAND1_GAIN, | ||
358 | #if defined(AUDIOHW_HAVE_EQ_BAND2) | ||
359 | SOUND_EQ_BAND2_GAIN, | ||
360 | #endif | ||
361 | #if defined(AUDIOHW_HAVE_EQ_BAND3) | ||
362 | SOUND_EQ_BAND3_GAIN, | ||
363 | #endif | ||
364 | #if defined(AUDIOHW_HAVE_EQ_BAND4) | ||
365 | SOUND_EQ_BAND4_GAIN, | ||
366 | #endif | ||
367 | #if defined(AUDIOHW_HAVE_EQ_BAND5) | ||
368 | SOUND_EQ_BAND5_GAIN, | ||
369 | #endif | ||
370 | /* Band frequencies */ | ||
371 | #if defined(AUDIOHW_HAVE_EQ_BAND1_FREQUENCY) | ||
372 | SOUND_EQ_BAND1_FREQUENCY, | ||
373 | #endif | ||
374 | #if defined(AUDIOHW_HAVE_EQ_BAND2_FREQUENCY) | ||
375 | SOUND_EQ_BAND2_FREQUENCY, | ||
376 | #endif | ||
377 | #if defined(AUDIOHW_HAVE_EQ_BAND3_FREQUENCY) | ||
378 | SOUND_EQ_BAND3_FREQUENCY, | ||
379 | #endif | ||
380 | #if defined(AUDIOHW_HAVE_EQ_BAND4_FREQUENCY) | ||
381 | SOUND_EQ_BAND4_FREQUENCY, | ||
382 | #endif | ||
383 | #if defined(AUDIOHW_HAVE_EQ_BAND5_FREQUENCY) | ||
384 | SOUND_EQ_BAND5_FREQUENCY, | ||
385 | #endif | ||
386 | /* Band widths */ | ||
387 | #if defined(AUDIOHW_HAVE_EQ_BAND2_WIDTH) | ||
388 | SOUND_EQ_BAND2_WIDTH, | ||
389 | #endif | ||
390 | #if defined(AUDIOHW_HAVE_EQ_BAND3_WIDTH) | ||
391 | SOUND_EQ_BAND3_WIDTH, | ||
392 | #endif | ||
393 | #if defined(AUDIOHW_HAVE_EQ_BAND4_WIDTH) | ||
394 | SOUND_EQ_BAND4_WIDTH, | ||
395 | #endif | ||
396 | #endif /* AUDIOHW_HAVE_EQ */ | ||
397 | SOUND_LAST_SETTING, /* Keep this last */ | ||
398 | }; | ||
399 | |||
400 | enum Channel | ||
401 | { | ||
402 | SOUND_CHAN_STEREO, | ||
403 | SOUND_CHAN_MONO, | ||
404 | SOUND_CHAN_CUSTOM, | ||
405 | SOUND_CHAN_MONO_LEFT, | ||
406 | SOUND_CHAN_MONO_RIGHT, | ||
407 | SOUND_CHAN_KARAOKE, | ||
408 | SOUND_CHAN_NUM_MODES, | ||
409 | }; | ||
410 | 296 | ||
411 | /* All usable functions implemented by a audio codec drivers. Most of | 297 | /* All usable functions implemented by a audio codec drivers. Most of |
412 | * the function in sound settings are only called, when in audio codecs | 298 | * the function in sound settings are only called, when in audio codecs |
@@ -619,8 +505,19 @@ void audiohw_set_monitor(bool enable); | |||
619 | 505 | ||
620 | /** | 506 | /** |
621 | * Set channel configuration. | 507 | * Set channel configuration. |
622 | * @param val new channel value (see enum Channel). | 508 | * @param val new channel value (see enum below). |
623 | */ | 509 | */ |
510 | enum AUDIOHW_CHANNEL_CONFIG | ||
511 | { | ||
512 | SOUND_CHAN_STEREO, | ||
513 | SOUND_CHAN_MONO, | ||
514 | SOUND_CHAN_CUSTOM, | ||
515 | SOUND_CHAN_MONO_LEFT, | ||
516 | SOUND_CHAN_MONO_RIGHT, | ||
517 | SOUND_CHAN_KARAOKE, | ||
518 | SOUND_CHAN_NUM_MODES, | ||
519 | }; | ||
520 | |||
624 | void audiohw_set_channel(int val); | 521 | void audiohw_set_channel(int val); |
625 | 522 | ||
626 | #ifdef HAVE_PITCHCONTROL | 523 | #ifdef HAVE_PITCHCONTROL |
diff --git a/firmware/export/audiohw_settings.h b/firmware/export/audiohw_settings.h index 8efbc0dbe7..f934c96302 100644 --- a/firmware/export/audiohw_settings.h +++ b/firmware/export/audiohw_settings.h | |||
@@ -21,6 +21,7 @@ | |||
21 | * | 21 | * |
22 | ****************************************************************************/ | 22 | ****************************************************************************/ |
23 | #if defined(AUDIOHW_SOUND_SETTINGS_ENTRIES) | 23 | #if defined(AUDIOHW_SOUND_SETTINGS_ENTRIES) |
24 | #undef AUDIOHW_SOUND_SETTINGS_ENTRIES | ||
24 | /* Define sound_setting_entries table */ | 25 | /* Define sound_setting_entries table */ |
25 | 26 | ||
26 | #define AUDIOHW_SETTINGS(...) \ | 27 | #define AUDIOHW_SETTINGS(...) \ |
@@ -38,6 +39,7 @@ | |||
38 | [SOUND_##name] = { .info = &_audiohw_setting_##name, .function = fn }, | 39 | [SOUND_##name] = { .info = &_audiohw_setting_##name, .function = fn }, |
39 | 40 | ||
40 | #elif defined(AUDIOHW_SOUND_SETTINGS_VAL2PHYS) | 41 | #elif defined(AUDIOHW_SOUND_SETTINGS_VAL2PHYS) |
42 | #undef AUDIOHW_SOUND_SETTINGS_VAL2PHYS | ||
41 | 43 | ||
42 | /* Implements sound_val2phys */ | 44 | /* Implements sound_val2phys */ |
43 | #define AUDIOHW_SETTINGS(...) \ | 45 | #define AUDIOHW_SETTINGS(...) \ |
@@ -54,6 +56,19 @@ | |||
54 | #define AUDIOHW_SETTING_ENT(name, fn) \ | 56 | #define AUDIOHW_SETTING_ENT(name, fn) \ |
55 | case SOUND_##name: return _sound_val2phys_##name(value); | 57 | case SOUND_##name: return _sound_val2phys_##name(value); |
56 | 58 | ||
59 | #else | ||
60 | |||
61 | /* Generate enumeration of SOUND_xxx constants */ | ||
62 | #define AUDIOHW_SETTINGS(...) \ | ||
63 | enum \ | ||
64 | { \ | ||
65 | __VA_ARGS__ \ | ||
66 | SOUND_LAST_SETTING, \ | ||
67 | }; | ||
68 | |||
69 | #define AUDIOHW_SETTING_ENT(name, fn) \ | ||
70 | SOUND_##name, | ||
71 | |||
57 | #endif /* setting table type selection */ | 72 | #endif /* setting table type selection */ |
58 | 73 | ||
59 | AUDIOHW_SETTINGS( | 74 | AUDIOHW_SETTINGS( |
@@ -139,5 +154,3 @@ AUDIOHW_SETTINGS( | |||
139 | 154 | ||
140 | #undef AUDIOHW_SETTINGS | 155 | #undef AUDIOHW_SETTINGS |
141 | #undef AUDIOHW_SETTING_ENT | 156 | #undef AUDIOHW_SETTING_ENT |
142 | #undef AUDIOHW_SOUND_SETTINGS_ENTRIES | ||
143 | #undef AUDIOHW_SOUND_SETTINGS_VAL2PHYS | ||
diff --git a/firmware/export/cs42l55.h b/firmware/export/cs42l55.h index 4584706dfd..d8d177e693 100644 --- a/firmware/export/cs42l55.h +++ b/firmware/export/cs42l55.h | |||
@@ -22,10 +22,6 @@ | |||
22 | #ifndef __CS42L55_H__ | 22 | #ifndef __CS42L55_H__ |
23 | #define __CS42L55_H__ | 23 | #define __CS42L55_H__ |
24 | 24 | ||
25 | /* volume/balance/treble/bass interdependency */ | ||
26 | #define VOLUME_MIN -580 | ||
27 | #define VOLUME_MAX 120 | ||
28 | |||
29 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BASS_CUTOFF_CAP | \ | 25 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BASS_CUTOFF_CAP | \ |
30 | TREBLE_CUTOFF_CAP | PRESCALER_CAP | LINEOUT_CAP) | 26 | TREBLE_CUTOFF_CAP | PRESCALER_CAP | LINEOUT_CAP) |
31 | 27 | ||
diff --git a/firmware/export/dummy_codec.h b/firmware/export/dummy_codec.h index 90fd7b03c2..7337c2c730 100644 --- a/firmware/export/dummy_codec.h +++ b/firmware/export/dummy_codec.h | |||
@@ -22,9 +22,8 @@ | |||
22 | #ifndef __DUMMY_CODEC_H_ | 22 | #ifndef __DUMMY_CODEC_H_ |
23 | #define __DUMMY_CODEC_H_ | 23 | #define __DUMMY_CODEC_H_ |
24 | 24 | ||
25 | #define VOLUME_MIN -730 | 25 | #define DUMMY_VOLUME_MIN -740 |
26 | #define VOLUME_MAX 0 | 26 | #define DUMMY_VOLUME_MAX 0 |
27 | 27 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 0, 0) | |
28 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, VOLUME_MIN/10, VOLUME_MAX/10, 0) | ||
29 | 28 | ||
30 | #endif /* __DUMMY_CODEC_H_ */ | 29 | #endif /* __DUMMY_CODEC_H_ */ |
diff --git a/firmware/export/hosted_codec.h b/firmware/export/hosted_codec.h index e44da37c8d..72495709e8 100644 --- a/firmware/export/hosted_codec.h +++ b/firmware/export/hosted_codec.h | |||
@@ -21,11 +21,8 @@ | |||
21 | #ifndef HOSTED_CODEC_H | 21 | #ifndef HOSTED_CODEC_H |
22 | #define HOSTED_CODEC_H | 22 | #define HOSTED_CODEC_H |
23 | 23 | ||
24 | #define VOLUME_MIN -990 | ||
25 | #define VOLUME_MAX 0 | ||
26 | |||
27 | #define AUDIOHW_CAPS (MONO_VOL_CAP) | 24 | #define AUDIOHW_CAPS (MONO_VOL_CAP) |
28 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1,-100, 0, 0) | 25 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -99, 0, 0) |
29 | 26 | ||
30 | #if (CONFIG_PLATFORM & PLATFORM_ANDROID) | 27 | #if (CONFIG_PLATFORM & PLATFORM_ANDROID) |
31 | /* Bass and treble tone controls */ | 28 | /* Bass and treble tone controls */ |
diff --git a/firmware/export/imx233-codec.h b/firmware/export/imx233-codec.h index 2fbd8bde59..a02ef22fec 100644 --- a/firmware/export/imx233-codec.h +++ b/firmware/export/imx233-codec.h | |||
@@ -24,9 +24,6 @@ | |||
24 | /* i.MX233 can boost up to 6dB in DAC mode and 12dB in line mode. Since mic/line | 24 | /* i.MX233 can boost up to 6dB in DAC mode and 12dB in line mode. Since mic/line |
25 | * already have adjustable gain, keep lowest of both. With chained DAC volume | 25 | * already have adjustable gain, keep lowest of both. With chained DAC volume |
26 | * and headphone volume, the i.MX233 can achieve < -100dB but stay at -100dB. */ | 26 | * and headphone volume, the i.MX233 can achieve < -100dB but stay at -100dB. */ |
27 | #define VOLUME_MIN -1000 | ||
28 | #define VOLUME_MAX 60 | ||
29 | |||
30 | #define AUDIOHW_CAPS (DEPTH_3D_CAP | BASS_CAP | TREBLE_CAP | \ | 27 | #define AUDIOHW_CAPS (DEPTH_3D_CAP | BASS_CAP | TREBLE_CAP | \ |
31 | LIN_GAIN_CAP | MIC_GAIN_CAP) | 28 | LIN_GAIN_CAP | MIC_GAIN_CAP) |
32 | 29 | ||
diff --git a/firmware/export/jz4740-codec.h b/firmware/export/jz4740-codec.h index fc731fdf50..4a2ca19a82 100644 --- a/firmware/export/jz4740-codec.h +++ b/firmware/export/jz4740-codec.h | |||
@@ -21,10 +21,6 @@ | |||
21 | #ifndef __JZ4740_CODEC_H_ | 21 | #ifndef __JZ4740_CODEC_H_ |
22 | #define __JZ4740_CODEC_H_ | 22 | #define __JZ4740_CODEC_H_ |
23 | 23 | ||
24 | #define VOLUME_MIN -730 | ||
25 | #define VOLUME_MAX 60 | ||
26 | |||
27 | /* TODO */ | ||
28 | #ifdef HAVE_SW_VOLUME_CONTROL | 24 | #ifdef HAVE_SW_VOLUME_CONTROL |
29 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 6, -25) | 25 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 6, -25) |
30 | #else | 26 | #else |
diff --git a/firmware/export/mas35xx.h b/firmware/export/mas35xx.h index 0c6d21140c..02691f3de2 100644 --- a/firmware/export/mas35xx.h +++ b/firmware/export/mas35xx.h | |||
@@ -39,8 +39,6 @@ | |||
39 | 39 | ||
40 | #if CONFIG_CODEC == MAS3507D | 40 | #if CONFIG_CODEC == MAS3507D |
41 | 41 | ||
42 | #define VOLUME_MIN -780 | ||
43 | #define VOLUME_MAX 180 | ||
44 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP) | 42 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP) |
45 | 43 | ||
46 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -78, 18, -18) | 44 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -78, 18, -18) |
@@ -171,9 +169,6 @@ static const unsigned int prescale_table[] = | |||
171 | 169 | ||
172 | #else /* CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F */ | 170 | #else /* CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F */ |
173 | 171 | ||
174 | #define VOLUME_MIN -400 | ||
175 | #define VOLUME_MAX 600 | ||
176 | |||
177 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1,-100, 12, -25) | 172 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1,-100, 12, -25) |
178 | AUDIOHW_SETTING(BASS, "dB", 0, 1, -12, 12, 6) | 173 | AUDIOHW_SETTING(BASS, "dB", 0, 1, -12, 12, 6) |
179 | AUDIOHW_SETTING(TREBLE, "dB", 0, 1, -12, 12, 6) | 174 | AUDIOHW_SETTING(TREBLE, "dB", 0, 1, -12, 12, 6) |
diff --git a/firmware/export/rk27xx_codec.h b/firmware/export/rk27xx_codec.h index 5a6796d63c..28ab4730d8 100644 --- a/firmware/export/rk27xx_codec.h +++ b/firmware/export/rk27xx_codec.h | |||
@@ -24,8 +24,6 @@ | |||
24 | #ifndef _RK27XX_CODEC_H_ | 24 | #ifndef _RK27XX_CODEC_H_ |
25 | #define _RK27XX_CODEC_H_ | 25 | #define _RK27XX_CODEC_H_ |
26 | 26 | ||
27 | #define VOLUME_MIN -330 | ||
28 | #define VOLUME_MAX 40 | ||
29 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | LIN_GAIN_CAP | MIC_GAIN_CAP) | 27 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | LIN_GAIN_CAP | MIC_GAIN_CAP) |
30 | 28 | ||
31 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -34, 4, -25) | 29 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -34, 4, -25) |
diff --git a/firmware/export/tlv320.h b/firmware/export/tlv320.h index ea7ccfceb2..75f98bc142 100644 --- a/firmware/export/tlv320.h +++ b/firmware/export/tlv320.h | |||
@@ -22,9 +22,6 @@ | |||
22 | #ifndef _TLV320_H_ | 22 | #ifndef _TLV320_H_ |
23 | #define _TLV320_H_ | 23 | #define _TLV320_H_ |
24 | 24 | ||
25 | #define VOLUME_MIN -730 | ||
26 | #define VOLUME_MAX 60 | ||
27 | |||
28 | #define AUDIOHW_CAPS (LIN_GAIN_CAP | MIC_GAIN_CAP) | 25 | #define AUDIOHW_CAPS (LIN_GAIN_CAP | MIC_GAIN_CAP) |
29 | 26 | ||
30 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 6, -20) | 27 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 6, -20) |
diff --git a/firmware/export/tsc2100.h b/firmware/export/tsc2100.h index 4e1e7d9287..11baf3ffcb 100644 --- a/firmware/export/tsc2100.h +++ b/firmware/export/tsc2100.h | |||
@@ -21,10 +21,6 @@ | |||
21 | #ifndef __TSC2100_H_ | 21 | #ifndef __TSC2100_H_ |
22 | #define __TSC2100_H_ | 22 | #define __TSC2100_H_ |
23 | 23 | ||
24 | /* volume/balance/treble/bass interdependency */ | ||
25 | #define VOLUME_MIN -630 | ||
26 | #define VOLUME_MAX 0 | ||
27 | |||
28 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -64, 0, -25) | 24 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -64, 0, -25) |
29 | 25 | ||
30 | void tsc2100_read_data(void); | 26 | void tsc2100_read_data(void); |
@@ -94,8 +90,6 @@ void tsc2100_keyclick(void); | |||
94 | /* ts codec dac gain control */ | 90 | /* ts codec dac gain control */ |
95 | #define TSDACGAIN_PAGE 2 | 91 | #define TSDACGAIN_PAGE 2 |
96 | #define TSDACGAIN_ADDRESS 0x02 | 92 | #define TSDACGAIN_ADDRESS 0x02 |
97 | #define VOLUME_MAX 0 | ||
98 | #define VOLUME_MIN -630 | ||
99 | 93 | ||
100 | /* ts audio control 2 */ | 94 | /* ts audio control 2 */ |
101 | #define TSAC2_PAGE 2 | 95 | #define TSAC2_PAGE 2 |
diff --git a/firmware/export/uda1341.h b/firmware/export/uda1341.h index 81eb1a3fa9..f07b4c62bf 100644 --- a/firmware/export/uda1341.h +++ b/firmware/export/uda1341.h | |||
@@ -22,14 +22,10 @@ | |||
22 | #ifndef _UDA1341_H | 22 | #ifndef _UDA1341_H |
23 | #define _UDA1341_H | 23 | #define _UDA1341_H |
24 | 24 | ||
25 | /* volume/balance/treble/bass interdependency */ | ||
26 | #define VOLUME_MIN -840 | ||
27 | #define VOLUME_MAX 0 | ||
28 | |||
29 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | MIC_GAIN_CAP | LIN_GAIN_CAP\ | 25 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | MIC_GAIN_CAP | LIN_GAIN_CAP\ |
30 | | MONO_VOL_CAP) | 26 | | MONO_VOL_CAP) |
31 | 27 | ||
32 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -84, 0, -25) | 28 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -61, 0, -25) |
33 | AUDIOHW_SETTING(BASS, "dB", 0, 2, 0, 24, 0) | 29 | AUDIOHW_SETTING(BASS, "dB", 0, 2, 0, 24, 0) |
34 | AUDIOHW_SETTING(TREBLE, "dB", 0, 2, 0, 6, 0) | 30 | AUDIOHW_SETTING(TREBLE, "dB", 0, 2, 0, 6, 0) |
35 | #ifdef HAVE_RECORDING | 31 | #ifdef HAVE_RECORDING |
diff --git a/firmware/export/uda1380.h b/firmware/export/uda1380.h index a2200967dd..4d4f22ff82 100644 --- a/firmware/export/uda1380.h +++ b/firmware/export/uda1380.h | |||
@@ -22,14 +22,10 @@ | |||
22 | #ifndef _UDA1380_H | 22 | #ifndef _UDA1380_H |
23 | #define _UDA1380_H | 23 | #define _UDA1380_H |
24 | 24 | ||
25 | /* volume/balance/treble/bass interdependency */ | ||
26 | #define VOLUME_MIN -840 | ||
27 | #define VOLUME_MAX 0 | ||
28 | |||
29 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP | \ | 25 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP | \ |
30 | LIN_GAIN_CAP | MIC_GAIN_CAP) | 26 | LIN_GAIN_CAP | MIC_GAIN_CAP) |
31 | 27 | ||
32 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -85, 0, -25) | 28 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -84, 0, -25) |
33 | AUDIOHW_SETTING(BASS, "dB", 0, 2, 0, 24, 0) | 29 | AUDIOHW_SETTING(BASS, "dB", 0, 2, 0, 24, 0) |
34 | AUDIOHW_SETTING(TREBLE, "dB", 0, 2, 0, 6, 0) | 30 | AUDIOHW_SETTING(TREBLE, "dB", 0, 2, 0, 6, 0) |
35 | #ifdef HAVE_RECORDING | 31 | #ifdef HAVE_RECORDING |
diff --git a/firmware/export/wm8731.h b/firmware/export/wm8731.h index 086c847ee1..10925880c3 100644 --- a/firmware/export/wm8731.h +++ b/firmware/export/wm8731.h | |||
@@ -24,10 +24,6 @@ | |||
24 | #ifndef _WM8731_H | 24 | #ifndef _WM8731_H |
25 | #define _WM8731_H | 25 | #define _WM8731_H |
26 | 26 | ||
27 | /* volume/balance/treble/bass interdependency */ | ||
28 | #define VOLUME_MIN -730 | ||
29 | #define VOLUME_MAX 60 | ||
30 | |||
31 | #define AUDIOHW_CAPS (LIN_GAIN_CAP | MIC_GAIN_CAP) | 27 | #define AUDIOHW_CAPS (LIN_GAIN_CAP | MIC_GAIN_CAP) |
32 | 28 | ||
33 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 6, -25) | 29 | AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -74, 6, -25) |
diff --git a/firmware/export/wm8751.h b/firmware/export/wm8751.h index aa18972c23..214643c64d 100644 --- a/firmware/export/wm8751.h +++ b/firmware/export/wm8751.h | |||
@@ -21,10 +21,6 @@ | |||
21 | #ifndef _WM8751_H | 21 | #ifndef _WM8751_H |
22 | #define _WM8751_H | 22 | #define _WM8751_H |
23 | 23 | ||
24 | /* volume/balance/treble/bass interdependency */ | ||
25 | #define VOLUME_MIN -730 | ||
26 | #define VOLUME_MAX 60 | ||
27 | |||
28 | #if defined(HAVE_WM8750) | 24 | #if defined(HAVE_WM8750) |
29 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP | \ | 25 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP | \ |
30 | BASS_CUTOFF_CAP | TREBLE_CUTOFF_CAP | \ | 26 | BASS_CUTOFF_CAP | TREBLE_CUTOFF_CAP | \ |
diff --git a/firmware/export/wm8758.h b/firmware/export/wm8758.h index 89b000cf8c..db6dd083dd 100644 --- a/firmware/export/wm8758.h +++ b/firmware/export/wm8758.h | |||
@@ -22,10 +22,6 @@ | |||
22 | #ifndef _WM8758_H | 22 | #ifndef _WM8758_H |
23 | #define _WM8758_H | 23 | #define _WM8758_H |
24 | 24 | ||
25 | /* volume/balance/treble/bass interdependency */ | ||
26 | #define VOLUME_MIN -890 | ||
27 | #define VOLUME_MAX 60 | ||
28 | |||
29 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BASS_CUTOFF_CAP | \ | 25 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BASS_CUTOFF_CAP | \ |
30 | TREBLE_CUTOFF_CAP | LINEOUT_CAP | LIN_GAIN_CAP | \ | 26 | TREBLE_CUTOFF_CAP | LINEOUT_CAP | LIN_GAIN_CAP | \ |
31 | MIC_GAIN_CAP) | 27 | MIC_GAIN_CAP) |
diff --git a/firmware/export/wm8975.h b/firmware/export/wm8975.h index bc0d113c4c..cdae7af865 100644 --- a/firmware/export/wm8975.h +++ b/firmware/export/wm8975.h | |||
@@ -22,10 +22,6 @@ | |||
22 | #ifndef _WM8975_H | 22 | #ifndef _WM8975_H |
23 | #define _WM8975_H | 23 | #define _WM8975_H |
24 | 24 | ||
25 | /* volume/balance/treble/bass interdependency */ | ||
26 | #define VOLUME_MIN -730 | ||
27 | #define VOLUME_MAX 60 | ||
28 | |||
29 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | LINEOUT_CAP | \ | 25 | #define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | LINEOUT_CAP | \ |
30 | LIN_GAIN_CAP | MIC_GAIN_CAP) | 26 | LIN_GAIN_CAP | MIC_GAIN_CAP) |
31 | 27 | ||
diff --git a/firmware/export/wm8978.h b/firmware/export/wm8978.h index d5ed8f184c..00f46a02d5 100644 --- a/firmware/export/wm8978.h +++ b/firmware/export/wm8978.h | |||
@@ -23,9 +23,6 @@ | |||
23 | #ifndef _WM8978_H | 23 | #ifndef _WM8978_H |
24 | #define _WM8978_H | 24 | #define _WM8978_H |
25 | 25 | ||
26 | #define VOLUME_MIN -890 | ||
27 | #define VOLUME_MAX 60 | ||
28 | |||
29 | #if 0 | 26 | #if 0 |
30 | #define AUDIOHW_CAPS (EQ_CAP | PRESCALER_CAP | DEPTH_3D_CAP | \ | 27 | #define AUDIOHW_CAPS (EQ_CAP | PRESCALER_CAP | DEPTH_3D_CAP | \ |
31 | LIN_GAIN_CAP | MIC_GAIN_CAP) | 28 | LIN_GAIN_CAP | MIC_GAIN_CAP) |
diff --git a/firmware/export/wm8985.h b/firmware/export/wm8985.h index a5eb59f159..f733133917 100644 --- a/firmware/export/wm8985.h +++ b/firmware/export/wm8985.h | |||
@@ -22,10 +22,6 @@ | |||
22 | #ifndef _WM8985_H | 22 | #ifndef _WM8985_H |
23 | #define _WM8985_H | 23 | #define _WM8985_H |
24 | 24 | ||
25 | /* volume/balance/treble/bass interdependency */ | ||
26 | #define VOLUME_MIN -890 | ||
27 | #define VOLUME_MAX 60 | ||
28 | |||
29 | #ifdef COWON_D2 | 25 | #ifdef COWON_D2 |
30 | /* FIXME: somehow something was out of sync in the .lang, settings and caps. Keep the | 26 | /* FIXME: somehow something was out of sync in the .lang, settings and caps. Keep the |
31 | * cutoffs disabled until someone with the device works it out. */ | 27 | * cutoffs disabled until someone with the device works it out. */ |
diff --git a/firmware/sound.c b/firmware/sound.c index f8358c690d..336fe90c25 100644 --- a/firmware/sound.c +++ b/firmware/sound.c | |||
@@ -112,18 +112,6 @@ void sound_set(int setting, int value) | |||
112 | * by 12 dB after processing. | 112 | * by 12 dB after processing. |
113 | */ | 113 | */ |
114 | 114 | ||
115 | static int current_volume = 0; /* tenth dB */ | ||
116 | static int current_balance = 0; /* percent */ | ||
117 | #ifdef AUDIOHW_HAVE_TREBLE | ||
118 | static int current_treble = 0; /* tenth dB */ | ||
119 | #endif | ||
120 | #ifdef AUDIOHW_HAVE_BASS | ||
121 | static int current_bass = 0; /* tenth dB */ | ||
122 | #endif | ||
123 | #ifdef AUDIOHW_HAVE_EQ | ||
124 | static int current_eq_band_gain[AUDIOHW_EQ_BAND_NUM]; /* tenth dB */ | ||
125 | #endif | ||
126 | |||
127 | /* Return the sound value scaled to centibels (tenth-decibels) */ | 115 | /* Return the sound value scaled to centibels (tenth-decibels) */ |
128 | static int sound_value_to_cb(int setting, int value) | 116 | static int sound_value_to_cb(int setting, int value) |
129 | { | 117 | { |
@@ -133,20 +121,44 @@ static int sound_value_to_cb(int setting, int value) | |||
133 | return value; | 121 | return value; |
134 | } | 122 | } |
135 | 123 | ||
124 | static struct | ||
125 | { | ||
126 | int volume; /* tenth dB */ | ||
127 | int balance; /* percent */ | ||
128 | #if defined(AUDIOHW_HAVE_BASS) | ||
129 | int bass; /* tenth dB */ | ||
130 | #endif | ||
131 | #if defined(AUDIOHW_HAVE_TREBLE) | ||
132 | int treble; /* tenth dB */ | ||
133 | #endif | ||
134 | #if defined(AUDIOHW_HAVE_EQ) | ||
135 | int eq_gain[AUDIOHW_EQ_BAND_NUM]; /* tenth dB */ | ||
136 | #endif | ||
137 | } sound_prescaler; | ||
138 | |||
139 | #if defined(AUDIOHW_HAVE_BASS) || defined (AUDIOHW_HAVE_TREBLE) \ | ||
140 | || defined(AUDIOHW_HAVE_EQ) | ||
141 | #define TONE_PRESCALER | ||
142 | #endif | ||
143 | |||
136 | static void set_prescaled_volume(void) | 144 | static void set_prescaled_volume(void) |
137 | { | 145 | { |
138 | int prescale = 0; | 146 | #if defined(TONE_PRESCALER) || !defined(AUDIOHW_HAVE_MONO_VOLUME) |
147 | const int minvol = sound_value_to_cb(SOUND_VOLUME, sound_min(SOUND_VOLUME)); | ||
148 | #endif | ||
149 | int volume = sound_prescaler.volume; | ||
139 | 150 | ||
140 | #if defined(AUDIOHW_HAVE_BASS) || defined(AUDIOHW_HAVE_TREBLE) \ | 151 | #if defined(TONE_PRESCALER) |
141 | || defined(AUDIOHW_HAVE_EQ) | 152 | int prescale = 0; |
142 | 153 | ||
143 | /* Note: Having Tone + EQ isn't prohibited */ | 154 | /* Note: Having Tone + EQ isn't prohibited */ |
144 | #if defined(AUDIOHW_HAVE_BASS) && defined(AUDIOHW_HAVE_TREBLE) | 155 | #if defined(AUDIOHW_HAVE_BASS) && defined(AUDIOHW_HAVE_TREBLE) |
145 | prescale = MAX(current_bass, current_treble); | 156 | prescale = MAX(sound_prescaler.bass, sound_prescaler.treble); |
146 | #endif | 157 | #endif |
158 | |||
147 | #if defined(AUDIOHW_HAVE_EQ) | 159 | #if defined(AUDIOHW_HAVE_EQ) |
148 | for (int i = 0; i < AUDIOHW_EQ_BAND_NUM; i++) | 160 | for (int i = 0; i < AUDIOHW_EQ_BAND_NUM; i++) |
149 | prescale = MAX(current_eq_band_gain[i], prescale); | 161 | prescale = MAX(sound_prescaler.eq_gain[i], prescale); |
150 | #endif | 162 | #endif |
151 | 163 | ||
152 | if (prescale < 0) | 164 | if (prescale < 0) |
@@ -156,31 +168,38 @@ static void set_prescaled_volume(void) | |||
156 | /* Gain up the analog volume to compensate the prescale gain reduction, | 168 | /* Gain up the analog volume to compensate the prescale gain reduction, |
157 | * but if this would push the volume over the top, reduce prescaling | 169 | * but if this would push the volume over the top, reduce prescaling |
158 | * instead (might cause clipping). */ | 170 | * instead (might cause clipping). */ |
159 | if (current_volume + prescale > VOLUME_MAX) | 171 | const int maxvol = sound_value_to_cb(SOUND_VOLUME, sound_max(SOUND_VOLUME)); |
160 | prescale = VOLUME_MAX - current_volume; | 172 | |
173 | if (volume + prescale > maxvol) | ||
174 | prescale = maxvol - volume; | ||
161 | 175 | ||
162 | audiohw_set_prescaler(prescale); | 176 | audiohw_set_prescaler(prescale); |
163 | 177 | ||
164 | if (current_volume < VOLUME_MIN) | 178 | if (volume <= minvol) |
165 | prescale = 0; /* Make sure the audio gets muted */ | 179 | prescale = 0; /* Make sure the audio gets muted */ |
166 | #endif /* AUDIOHW_HAVE_BASS || AUDIOHW_HAVE_TREBLE || AUDIOHW_HAVE_EQ */ | 180 | |
181 | #ifndef AUDIOHW_HAVE_MONO_VOLUME | ||
182 | /* At the moment, such targets have lousy volume resolution and so minute | ||
183 | boost won't work how we'd like */ | ||
184 | volume += prescale; | ||
185 | #endif | ||
186 | #endif /* TONE_PRESCALER */ | ||
167 | 187 | ||
168 | #if defined(AUDIOHW_HAVE_MONO_VOLUME) | 188 | #if defined(AUDIOHW_HAVE_MONO_VOLUME) |
169 | audiohw_set_volume(current_volume); | 189 | audiohw_set_volume(volume); |
170 | #else /* Stereo volume */ | 190 | #else /* Stereo volume */ |
171 | int l = current_volume + prescale, r = l; | 191 | int l = volume, r = volume; |
172 | 192 | ||
173 | /* Balance the channels scaled by the current volume and min volume. */ | 193 | /* Balance the channels scaled by the current volume and min volume */ |
174 | /* Subtract a dB from VOLUME_MIN to get it to a mute level */ | 194 | int balance = sound_prescaler.balance; /* percent */ |
175 | int volshift = current_balance * VOLUME_RANGE / 100; /* tenth of dB */ | ||
176 | 195 | ||
177 | if (volshift > 0) | 196 | if (balance > 0) |
178 | { | 197 | { |
179 | l -= ((l - (VOLUME_MIN - ONE_DB)) * volshift) / VOLUME_RANGE; | 198 | l -= (l - minvol) * balance / 100; |
180 | } | 199 | } |
181 | else if (volshift < 0) | 200 | else if (balance < 0) |
182 | { | 201 | { |
183 | r += ((r - (VOLUME_MIN - ONE_DB)) * volshift) / VOLUME_RANGE; | 202 | r += (r - minvol) * balance / 100; |
184 | } | 203 | } |
185 | 204 | ||
186 | audiohw_set_volume(l, r); | 205 | audiohw_set_volume(l, r); |
@@ -190,8 +209,6 @@ static void set_prescaled_volume(void) | |||
190 | /* For now, lineout stays at unity */ | 209 | /* For now, lineout stays at unity */ |
191 | audiohw_set_lineout_volume(0, 0); | 210 | audiohw_set_lineout_volume(0, 0); |
192 | #endif /* AUDIOHW_HAVE_LINEOUT */ | 211 | #endif /* AUDIOHW_HAVE_LINEOUT */ |
193 | |||
194 | (void)prescale; /* In case of no tone controls + mono volume */ | ||
195 | } | 212 | } |
196 | #endif /* AUDIOIHW_HAVE_CLIPPING */ | 213 | #endif /* AUDIOIHW_HAVE_CLIPPING */ |
197 | 214 | ||
@@ -203,7 +220,7 @@ void sound_set_volume(int value) | |||
203 | #if defined(AUDIOHW_HAVE_CLIPPING) | 220 | #if defined(AUDIOHW_HAVE_CLIPPING) |
204 | audiohw_set_volume(value); | 221 | audiohw_set_volume(value); |
205 | #else | 222 | #else |
206 | current_volume = sound_value_to_cb(SOUND_VOLUME, value); | 223 | sound_prescaler.volume = sound_value_to_cb(SOUND_VOLUME, value); |
207 | set_prescaled_volume(); | 224 | set_prescaled_volume(); |
208 | #endif | 225 | #endif |
209 | } | 226 | } |
@@ -216,12 +233,12 @@ void sound_set_balance(int value) | |||
216 | #if defined(AUDIOHW_HAVE_BALANCE) | 233 | #if defined(AUDIOHW_HAVE_BALANCE) |
217 | audiohw_set_balance(value); | 234 | audiohw_set_balance(value); |
218 | #else | 235 | #else |
219 | current_balance = value; | 236 | sound_prescaler.balance = value; |
220 | set_prescaled_volume(); | 237 | set_prescaled_volume(); |
221 | #endif | 238 | #endif |
222 | } | 239 | } |
223 | 240 | ||
224 | #ifdef AUDIOHW_HAVE_BASS | 241 | #if defined(AUDIOHW_HAVE_BASS) |
225 | void sound_set_bass(int value) | 242 | void sound_set_bass(int value) |
226 | { | 243 | { |
227 | if (!audio_is_initialized) | 244 | if (!audio_is_initialized) |
@@ -230,13 +247,13 @@ void sound_set_bass(int value) | |||
230 | audiohw_set_bass(value); | 247 | audiohw_set_bass(value); |
231 | 248 | ||
232 | #if !defined(AUDIOHW_HAVE_CLIPPING) | 249 | #if !defined(AUDIOHW_HAVE_CLIPPING) |
233 | current_bass = sound_value_to_cb(SOUND_BASS, value); | 250 | sound_prescaler.bass = sound_value_to_cb(SOUND_BASS, value); |
234 | set_prescaled_volume(); | 251 | set_prescaled_volume(); |
235 | #endif | 252 | #endif |
236 | } | 253 | } |
237 | #endif /* AUDIOHW_HAVE_BASS */ | 254 | #endif /* AUDIOHW_HAVE_BASS */ |
238 | 255 | ||
239 | #ifdef AUDIOHW_HAVE_TREBLE | 256 | #if defined(AUDIOHW_HAVE_TREBLE) |
240 | void sound_set_treble(int value) | 257 | void sound_set_treble(int value) |
241 | { | 258 | { |
242 | if (!audio_is_initialized) | 259 | if (!audio_is_initialized) |
@@ -245,7 +262,7 @@ void sound_set_treble(int value) | |||
245 | audiohw_set_treble(value); | 262 | audiohw_set_treble(value); |
246 | 263 | ||
247 | #if !defined(AUDIOHW_HAVE_CLIPPING) | 264 | #if !defined(AUDIOHW_HAVE_CLIPPING) |
248 | current_treble = sound_value_to_cb(SOUND_TREBLE, value); | 265 | sound_prescaler.treble = sound_value_to_cb(SOUND_TREBLE, value); |
249 | set_prescaled_volume(); | 266 | set_prescaled_volume(); |
250 | #endif | 267 | #endif |
251 | } | 268 | } |
@@ -259,7 +276,7 @@ void sound_set_bass_cutoff(int value) | |||
259 | 276 | ||
260 | audiohw_set_bass_cutoff(value); | 277 | audiohw_set_bass_cutoff(value); |
261 | } | 278 | } |
262 | #endif | 279 | #endif /* AUDIOHW_HAVE_BASS_CUTOFF */ |
263 | 280 | ||
264 | #if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) | 281 | #if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) |
265 | void sound_set_treble_cutoff(int value) | 282 | void sound_set_treble_cutoff(int value) |
@@ -269,7 +286,7 @@ void sound_set_treble_cutoff(int value) | |||
269 | 286 | ||
270 | audiohw_set_treble_cutoff(value); | 287 | audiohw_set_treble_cutoff(value); |
271 | } | 288 | } |
272 | #endif | 289 | #endif /* AUDIOHW_HAVE_TREBLE_CUTOFF */ |
273 | 290 | ||
274 | void sound_set_channels(int value) | 291 | void sound_set_channels(int value) |
275 | { | 292 | { |
@@ -295,7 +312,7 @@ void sound_set_depth_3d(int value) | |||
295 | 312 | ||
296 | audiohw_set_depth_3d(value); | 313 | audiohw_set_depth_3d(value); |
297 | } | 314 | } |
298 | #endif | 315 | #endif /* AUDIOHW_HAVE_DEPTH_3D */ |
299 | 316 | ||
300 | #if defined(AUDIOHW_HAVE_EQ) | 317 | #if defined(AUDIOHW_HAVE_EQ) |
301 | int sound_enum_hw_eq_band_setting(unsigned int band, | 318 | int sound_enum_hw_eq_band_setting(unsigned int band, |
@@ -370,11 +387,13 @@ static void sound_set_hw_eq_band_gain(unsigned int band, int value) | |||
370 | if (!audio_is_initialized) | 387 | if (!audio_is_initialized) |
371 | return; | 388 | return; |
372 | 389 | ||
373 | int setting = sound_enum_hw_eq_band_setting(band, AUDIOHW_EQ_GAIN); | ||
374 | current_eq_band_gain[band] = sound_value_to_cb(setting, value); | ||
375 | |||
376 | audiohw_set_eq_band_gain(band, value); | 390 | audiohw_set_eq_band_gain(band, value); |
391 | |||
392 | #if !defined (AUDIOHW_HAVE_CLIPPING) | ||
393 | int setting = sound_enum_hw_eq_band_setting(band, AUDIOHW_EQ_GAIN); | ||
394 | sound_prescaler.eq_gain[band] = sound_value_to_cb(setting, value); | ||
377 | set_prescaled_volume(); | 395 | set_prescaled_volume(); |
396 | #endif /* AUDIOHW_HAVE_CLIPPING */ | ||
378 | } | 397 | } |
379 | 398 | ||
380 | void sound_set_hw_eq_band1_gain(int value) | 399 | void sound_set_hw_eq_band1_gain(int value) |
@@ -557,7 +576,7 @@ void sound_set_superbass(int value) | |||
557 | } | 576 | } |
558 | #endif /* CONFIG_CODEC == MAS3587F || CONFIG_CODEC == MAS3539F */ | 577 | #endif /* CONFIG_CODEC == MAS3587F || CONFIG_CODEC == MAS3539F */ |
559 | 578 | ||
560 | #ifdef HAVE_PITCHCONTROL | 579 | #if defined(HAVE_PITCHCONTROL) |
561 | void sound_set_pitch(int32_t pitch) | 580 | void sound_set_pitch(int32_t pitch) |
562 | { | 581 | { |
563 | if (!audio_is_initialized) | 582 | if (!audio_is_initialized) |
diff --git a/firmware/target/hosted/maemo/pcm-gstreamer.c b/firmware/target/hosted/maemo/pcm-gstreamer.c index 10a9d77880..5bca6f2d92 100644 --- a/firmware/target/hosted/maemo/pcm-gstreamer.c +++ b/firmware/target/hosted/maemo/pcm-gstreamer.c | |||
@@ -427,9 +427,9 @@ void pcm_play_dma_postinit(void) | |||
427 | 427 | ||
428 | void pcm_set_mixer_volume(int volume) | 428 | void pcm_set_mixer_volume(int volume) |
429 | { | 429 | { |
430 | /* gstreamer volume range is from 0.00 to 1.00 */ | 430 | /* gstreamer volume range is from 0.00 to 1.00 |
431 | gdouble gst_vol = (gdouble)(volume - VOLUME_MIN) / (gdouble)VOLUME_RANGE; | 431 | * input is -990..0 */ |
432 | 432 | gdouble gst_vol = 1.0f - (gdouble)volume / -990.0f; | |
433 | g_object_set (G_OBJECT(gst_volume), "volume", gst_vol, NULL); | 433 | g_object_set (G_OBJECT(gst_volume), "volume", gst_vol, NULL); |
434 | } | 434 | } |
435 | 435 | ||
diff --git a/firmware/target/hosted/sdl/pcm-sdl.c b/firmware/target/hosted/sdl/pcm-sdl.c index 812211288e..beefc7818c 100644 --- a/firmware/target/hosted/sdl/pcm-sdl.c +++ b/firmware/target/hosted/sdl/pcm-sdl.c | |||
@@ -421,7 +421,9 @@ void pcm_play_dma_postinit(void) | |||
421 | #ifndef HAVE_SW_VOLUME_CONTROL | 421 | #ifndef HAVE_SW_VOLUME_CONTROL |
422 | void pcm_set_mixer_volume(int volume) | 422 | void pcm_set_mixer_volume(int volume) |
423 | { | 423 | { |
424 | sim_volume = volume; | 424 | int minvol = sound_min(SOUND_VOLUME); |
425 | int volrange = sound_max(SOUND_VOLUME) - minvol; | ||
426 | sim_volume = SDL_MIX_MAXVOLUME * (volume / 10 - minvol) / volrange; | ||
425 | } | 427 | } |
426 | #endif /* HAVE_SW_VOLUME_CONTROL */ | 428 | #endif /* HAVE_SW_VOLUME_CONTROL */ |
427 | 429 | ||
diff --git a/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c b/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c index ee15b27fae..702f3bb50e 100644 --- a/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c | |||
@@ -273,9 +273,9 @@ void audiohw_init(void) | |||
273 | void audiohw_set_volume(int vol_l, int vol_r) | 273 | void audiohw_set_volume(int vol_l, int vol_r) |
274 | { | 274 | { |
275 | #ifdef HAVE_SW_VOLUME_CONTROL | 275 | #ifdef HAVE_SW_VOLUME_CONTROL |
276 | /* SW volume for <= 1.0 gain, HW at unity, < VOLUME_MIN == MUTE */ | 276 | /* SW volume for <= 1.0 gain, HW at unity, < -740 == MUTE */ |
277 | int sw_volume_l = vol_l < VOLUME_MIN ? PCM_MUTE_LEVEL : MIN(vol_l, 0); | 277 | int sw_volume_l = vol_l <= -740 ? PCM_MUTE_LEVEL : MIN(vol_l, 0); |
278 | int sw_volume_r = vol_r < VOLUME_MIN ? PCM_MUTE_LEVEL : MIN(vol_r, 0); | 278 | int sw_volume_r = vol_r <= -740 ? PCM_MUTE_LEVEL : MIN(vol_r, 0); |
279 | pcm_set_master_volume(sw_volume_l, sw_volume_r); | 279 | pcm_set_master_volume(sw_volume_l, sw_volume_r); |
280 | #endif /* HAVE_SW_VOLUME_CONTROL */ | 280 | #endif /* HAVE_SW_VOLUME_CONTROL */ |
281 | 281 | ||