diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 6bba65f6a9..c299a9dac8 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -16935,3 +16935,59 @@
*: "Expert"
+
+ id: LANG_STEREOSW_MODE
+ desc: Stereo Switch Mode
+ user: core
+
+ *: "Stereo Switch Mode"
+
+
+ *: "Stereo Switch Mode"
+
+
+ *: "Stereo Switch Mode"
+
+
+
+ id: LANG_REVERSE
+ desc: in settings_menu
+ user: core
+
+ *: "Reverse"
+
+
+ *: "Reverse"
+
+
+ *: "Reverse"
+
+
+
+ id: LANG_ALWAYS_ZERO
+ desc: in settings_menu
+ user: core
+
+ *: "Always 0"
+
+
+ *: "Always 0"
+
+
+ *: "Always 0"
+
+
+
+ id: LANG_ALWAYS_ONE
+ desc: in settings_menu
+ user: core
+
+ *: "Always 1"
+
+
+ *: "Always 1"
+
+
+ *: "Always 1"
+
+
\ No newline at end of file
diff --git a/apps/menus/sound_menu.c b/apps/menus/sound_menu.c
index d72e3c7fa7..fcb0dff080 100644
--- a/apps/menus/sound_menu.c
+++ b/apps/menus/sound_menu.c
@@ -135,6 +135,10 @@ MENUITEM_SETTING(depth_3d, &global_settings.depth_3d, NULL);
MENUITEM_SETTING(roll_off, &global_settings.roll_off, NULL);
#endif
+#ifdef HAVE_EROS_QN_CODEC
+MENUITEM_SETTING(stereosw_mode, &global_settings.stereosw_mode,NULL);
+#endif
+
#ifdef AUDIOHW_HAVE_POWER_MODE
MENUITEM_SETTING(power_mode, &global_settings.power_mode, NULL);
#endif
@@ -253,6 +257,9 @@ MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio,
#ifdef AUDIOHW_HAVE_FILTER_ROLL_OFF
,&roll_off
#endif
+#ifdef HAVE_EROS_QN_CODEC
+ ,&stereosw_mode
+#endif
#ifdef AUDIOHW_HAVE_POWER_MODE
,&power_mode
#endif
diff --git a/apps/settings.h b/apps/settings.h
index e3b11430cd..1df1e0b418 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -899,6 +899,9 @@ struct user_settings
(CONFIG_KEYPAD == IRIVER_H10_PAD)
bool clear_settings_on_hold;
#endif
+#if defined(HAVE_EROS_QN_CODEC)
+ int stereosw_mode; /* indicates normal, reverse, always 0, always 1 operation */
+#endif
};
/** global variables **/
diff --git a/apps/settings_list.c b/apps/settings_list.c
index dc33c27c95..d60fa510d8 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -2295,6 +2295,11 @@ const struct settings_list settings[] = {
OFFON_SETTING(0, clear_settings_on_hold, LANG_CLEAR_SETTINGS_ON_HOLD,
true, "clear settings on hold", NULL),
#endif
+#if defined(HAVE_EROS_QN_CODEC)
+ CHOICE_SETTING(0, stereosw_mode, LANG_STEREOSW_MODE, 0, "stereo switch mode",
+ "normal,reverse,always0,always1", sound_settings_apply, 4,
+ ID2P(LANG_NORMAL), ID2P(LANG_REVERSE), ID2P(LANG_ALWAYS_ZERO), ID2P(LANG_ALWAYS_ONE)),
+#endif
};
const int nb_settings = sizeof(settings)/sizeof(*settings);
diff --git a/firmware/drivers/audio/eros_qn_codec.c b/firmware/drivers/audio/eros_qn_codec.c
index 095b3b5305..1d6753eb3a 100644
--- a/firmware/drivers/audio/eros_qn_codec.c
+++ b/firmware/drivers/audio/eros_qn_codec.c
@@ -51,10 +51,14 @@ int eros_qn_get_volume_limit(void)
void eros_qn_switch_output(int select)
{
- if (select == 0)
+ /* normal operation 0, reverse operation 1, or always 0 */
+ if ((select == 0 && global_settings.stereosw_mode == 0) \
+ || (select == 1 && global_settings.stereosw_mode == 1) \
+ || global_settings.stereosw_mode == 2)
{
gpio_set_level(GPIO_STEREOSW_SEL, 0);
}
+ /* normal operation 1, reverse operation 0, or always 1 */
else
{
gpio_set_level(GPIO_STEREOSW_SEL, 1);
diff --git a/manual/configure_rockbox/sound_settings.tex b/manual/configure_rockbox/sound_settings.tex
index 951eded31c..fd69d63317 100644
--- a/manual/configure_rockbox/sound_settings.tex
+++ b/manual/configure_rockbox/sound_settings.tex
@@ -193,6 +193,24 @@ change to customise your listening experience.
the effect of widening the stereo field. A value of 100\% will leave the
stereo field unaltered.
+\opt{erosqnative}{
+ \section{Stereo Switch Mode}
+ The Eros Q and related devices contain a stereo switch in the audio path.
+ This may be connected differently depending on the hardware revision. This
+ setting allows the behavior of the stereo switch to be changed if one of
+ the two outputs (Headphones or Line Out) is not working. There are four modes:
+ \begin{description}
+ \item[Normal.]
+ Headphones output uses a value of 0, and Line Out uses a value of 1.
+ \item[Reverse.]
+ Headphones output uses a value of 1, and Line Out uses a value of 0.
+ \item[Always 0.]
+ Both outputs use a value of 0.
+ \item[Always 1.]
+ Both outputs use a value of 1.
+ \end{description}
+}
+
\opt{dac_power_mode}{
\opt{fiiom3k}{
\section{DAC Power Mode}