summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/lang/english.lang42
-rw-r--r--apps/menus/sound_menu.c7
-rw-r--r--apps/settings.c3
-rw-r--r--apps/settings.h4
-rw-r--r--apps/settings_list.c7
-rw-r--r--firmware/export/audiohw.h16
-rw-r--r--firmware/export/audiohw_settings.h3
-rw-r--r--firmware/export/sound.h4
-rw-r--r--firmware/sound.c10
9 files changed, 96 insertions, 0 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 26c0051b58..dbd0baa18a 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -13114,3 +13114,45 @@
13114 *: "Select directories to scan" 13114 *: "Select directories to scan"
13115 </voice> 13115 </voice>
13116</phrase> 13116</phrase>
13117<phrase>
13118 id: LANG_FILTER_ROLL_OFF
13119 desc: in sound settings
13120 user: core
13121 <source>
13122 *: "DAC's filter roll-off"
13123 </source>
13124 <dest>
13125 *: "DAC's filter roll-off"
13126 </dest>
13127 <voice>
13128 *: "DAC's filter roll-off"
13129 </voice>
13130</phrase>
13131<phrase>
13132 id: LANG_FILTER_SHARP
13133 desc: in sound settings
13134 user: core
13135 <source>
13136 *: "Sharp"
13137 </source>
13138 <dest>
13139 *: "Sharp"
13140 </dest>
13141 <voice>
13142 *: "Sharp"
13143 </voice>
13144</phrase>
13145<phrase>
13146 id: LANG_FILTER_SLOW
13147 desc: in sound settings
13148 user: core
13149 <source>
13150 *: "Slow"
13151 </source>
13152 <dest>
13153 *: "Slow"
13154 </dest>
13155 <voice>
13156 *: "Slow"
13157 </voice>
13158</phrase>
diff --git a/apps/menus/sound_menu.c b/apps/menus/sound_menu.c
index d24a9cd695..fd192cb661 100644
--- a/apps/menus/sound_menu.c
+++ b/apps/menus/sound_menu.c
@@ -88,6 +88,10 @@ MENUITEM_SETTING(stereo_width, &global_settings.stereo_width,
88MENUITEM_SETTING(depth_3d, &global_settings.depth_3d, NULL); 88MENUITEM_SETTING(depth_3d, &global_settings.depth_3d, NULL);
89#endif 89#endif
90 90
91#ifdef AUDIOHW_HAVE_FILTER_ROLL_OFF
92MENUITEM_SETTING(roll_off, &global_settings.roll_off, NULL);
93#endif
94
91#if CONFIG_CODEC == SWCODEC 95#if CONFIG_CODEC == SWCODEC
92 /* Crossfeed Submenu */ 96 /* Crossfeed Submenu */
93 MENUITEM_SETTING(crossfeed, &global_settings.crossfeed, lowlatency_callback); 97 MENUITEM_SETTING(crossfeed, &global_settings.crossfeed, lowlatency_callback);
@@ -183,6 +187,9 @@ MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio,
183#ifdef AUDIOHW_HAVE_DEPTH_3D 187#ifdef AUDIOHW_HAVE_DEPTH_3D
184 ,&depth_3d 188 ,&depth_3d
185#endif 189#endif
190#ifdef AUDIOHW_HAVE_FILTER_ROLL_OFF
191 ,&roll_off
192#endif
186#if CONFIG_CODEC == SWCODEC 193#if CONFIG_CODEC == SWCODEC
187 ,&crossfeed_menu, &equalizer_menu, &dithering_enabled 194 ,&crossfeed_menu, &equalizer_menu, &dithering_enabled
188#ifdef HAVE_PITCHCONTROL 195#ifdef HAVE_PITCHCONTROL
diff --git a/apps/settings.c b/apps/settings.c
index b04b91cc66..adc53cd14b 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -753,6 +753,9 @@ void sound_settings_apply(void)
753#ifdef AUDIOHW_HAVE_DEPTH_3D 753#ifdef AUDIOHW_HAVE_DEPTH_3D
754 sound_set(SOUND_DEPTH_3D, global_settings.depth_3d); 754 sound_set(SOUND_DEPTH_3D, global_settings.depth_3d);
755#endif 755#endif
756#ifdef AUDIOHW_HAVE_FILTER_ROLL_OFF
757 sound_set(SOUND_FILTER_ROLL_OFF, global_settings.roll_off);
758#endif
756#ifdef AUDIOHW_HAVE_EQ 759#ifdef AUDIOHW_HAVE_EQ
757 int b; 760 int b;
758 761
diff --git a/apps/settings.h b/apps/settings.h
index 53ad70b24f..1aec931798 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -790,6 +790,10 @@ struct user_settings
790 int depth_3d; 790 int depth_3d;
791#endif 791#endif
792 792
793#ifdef AUDIOHW_HAVE_FILTER_ROLL_OFF
794 int roll_off;
795#endif
796
793#ifdef AUDIOHW_HAVE_EQ 797#ifdef AUDIOHW_HAVE_EQ
794 /** Hardware EQ tone controls **/ 798 /** Hardware EQ tone controls **/
795 struct hw_eq_band 799 struct hw_eq_band
diff --git a/apps/settings_list.c b/apps/settings_list.c
index ec34a96dc5..c1b40a64b6 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -778,6 +778,13 @@ const struct settings_list settings[] = {
778 SOUND_SETTING(0,depth_3d, LANG_DEPTH_3D, "3-d enhancement", 778 SOUND_SETTING(0,depth_3d, LANG_DEPTH_3D, "3-d enhancement",
779 SOUND_DEPTH_3D), 779 SOUND_DEPTH_3D),
780#endif 780#endif
781
782#ifdef AUDIOHW_HAVE_FILTER_ROLL_OFF
783 CHOICE_SETTING(F_SOUNDSETTING, roll_off, LANG_FILTER_ROLL_OFF, 0,
784 "roll_off", "sharp,slow", sound_set_filter_roll_off,
785 2, ID2P(LANG_FILTER_SHARP), ID2P(LANG_FILTER_SLOW)),
786#endif
787
781 /* playback */ 788 /* playback */
782 OFFON_SETTING(0, playlist_shuffle, LANG_SHUFFLE, false, "shuffle", NULL), 789 OFFON_SETTING(0, playlist_shuffle, LANG_SHUFFLE, false, "shuffle", NULL),
783 SYSTEM_SETTING(NVRAM(4), resume_index, -1), 790 SYSTEM_SETTING(NVRAM(4), resume_index, -1),
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h
index d1579b5b93..1cabf6f782 100644
--- a/firmware/export/audiohw.h
+++ b/firmware/export/audiohw.h
@@ -40,6 +40,7 @@
40#define MONO_VOL_CAP (1 << 10) 40#define MONO_VOL_CAP (1 << 10)
41#define LIN_GAIN_CAP (1 << 11) 41#define LIN_GAIN_CAP (1 << 11)
42#define MIC_GAIN_CAP (1 << 12) 42#define MIC_GAIN_CAP (1 << 12)
43#define FILTER_ROLL_OFF_CAP (1 << 13)
43 44
44/* Used by every driver to export its min/max/default values for its audio 45/* Used by every driver to export its min/max/default values for its audio
45 settings. */ 46 settings. */
@@ -269,6 +270,11 @@ enum AUDIOHW_EQ_SETTINGS
269#define AUDIOHW_HAVE_MIC_GAIN 270#define AUDIOHW_HAVE_MIC_GAIN
270#endif 271#endif
271#endif /* HAVE_RECORDING */ 272#endif /* HAVE_RECORDING */
273
274#if (AUDIOHW_CAPS & FILTER_ROLL_OFF_CAP)
275#define AUDIOHW_HAVE_FILTER_ROLL_OFF
276#endif
277
272#endif /* AUDIOHW_CAPS */ 278#endif /* AUDIOHW_CAPS */
273 279
274#ifdef HAVE_SW_TONE_CONTROLS 280#ifdef HAVE_SW_TONE_CONTROLS
@@ -454,6 +460,16 @@ void audiohw_set_eq_band_width(unsigned int band, int val);
454void audiohw_set_depth_3d(int val); 460void audiohw_set_depth_3d(int val);
455#endif 461#endif
456 462
463#ifdef AUDIOHW_HAVE_FILTER_ROLL_OFF
464/**
465 * Set DAC's oversampling filter roll-off.
466 * @param val 0 - sharp roll-off, 1 - slow roll-off.
467 * NOTE: AUDIOHW_CAPS need to contain
468 * FILTER_ROLL_OFF_CAP
469 */
470void audiohw_set_filter_roll_off(int val);
471#endif
472
457 473
458void audiohw_set_frequency(int fsel); 474void audiohw_set_frequency(int fsel);
459 475
diff --git a/firmware/export/audiohw_settings.h b/firmware/export/audiohw_settings.h
index f934c96302..675ec59a7b 100644
--- a/firmware/export/audiohw_settings.h
+++ b/firmware/export/audiohw_settings.h
@@ -110,6 +110,9 @@ AUDIOHW_SETTINGS(
110#if defined(AUDIOHW_HAVE_DEPTH_3D) 110#if defined(AUDIOHW_HAVE_DEPTH_3D)
111 AUDIOHW_SETTING_ENT(DEPTH_3D, sound_set_depth_3d) 111 AUDIOHW_SETTING_ENT(DEPTH_3D, sound_set_depth_3d)
112#endif 112#endif
113#if defined(AUDIOHW_HAVE_FILTER_ROLL_OFF)
114 AUDIOHW_SETTING_ENT(FILTER_ROLL_OFF, sound_set_filter_roll_off)
115#endif
113/* Hardware EQ tone controls */ 116/* Hardware EQ tone controls */
114#if defined(AUDIOHW_HAVE_EQ) 117#if defined(AUDIOHW_HAVE_EQ)
115 AUDIOHW_SETTING_ENT(EQ_BAND1_GAIN, sound_set_hw_eq_band1_gain) 118 AUDIOHW_SETTING_ENT(EQ_BAND1_GAIN, sound_set_hw_eq_band1_gain)
diff --git a/firmware/export/sound.h b/firmware/export/sound.h
index fa76c67b1f..501c6a48a1 100644
--- a/firmware/export/sound.h
+++ b/firmware/export/sound.h
@@ -51,6 +51,10 @@ void sound_set_treble_cutoff(int value);
51void sound_set_depth_3d(int value); 51void sound_set_depth_3d(int value);
52#endif 52#endif
53 53
54#if defined(AUDIOHW_HAVE_FILTER_ROLL_OFF)
55void sound_set_filter_roll_off(int value);
56#endif
57
54#ifdef AUDIOHW_HAVE_EQ 58#ifdef AUDIOHW_HAVE_EQ
55/* 59/*
56 * band = SOUND_EQ_BANDb 60 * band = SOUND_EQ_BANDb
diff --git a/firmware/sound.c b/firmware/sound.c
index 336fe90c25..a19cc15c41 100644
--- a/firmware/sound.c
+++ b/firmware/sound.c
@@ -314,6 +314,16 @@ void sound_set_depth_3d(int value)
314} 314}
315#endif /* AUDIOHW_HAVE_DEPTH_3D */ 315#endif /* AUDIOHW_HAVE_DEPTH_3D */
316 316
317#if defined(AUDIOHW_HAVE_FILTER_ROLL_OFF)
318void sound_set_filter_roll_off(int value)
319{
320 if (!audio_is_initialized)
321 return;
322
323 audiohw_set_filter_roll_off(value);
324}
325#endif
326
317#if defined(AUDIOHW_HAVE_EQ) 327#if defined(AUDIOHW_HAVE_EQ)
318int sound_enum_hw_eq_band_setting(unsigned int band, 328int sound_enum_hw_eq_band_setting(unsigned int band,
319 unsigned int band_setting) 329 unsigned int band_setting)