summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Ryabinin <ryabinin.a.a@gmail.com>2013-04-12 10:08:37 +0400
committerAndrew Ryabinin <ryabinin.a.a@gmail.com>2013-04-12 10:11:54 +0400
commit6be80976517709e16d587e3e30f020e41610be42 (patch)
tree0b4794ff23e06ba9df7bf701935adbdcba0efcd4
parent2dd1f37a109792b262a4000c050f7a48a145f1c4 (diff)
downloadrockbox-6be80976517709e16d587e3e30f020e41610be42.zip
rockbox-6be80976517709e16d587e3e30f020e41610be42.tar.gz
rockbox-6be80976517709e16d587e3e30f020e41610be42.tar.bz2
rockbox-6be80976517709e16d587e3e30f020e41610be42.tar.xz
hm60x/hm801: Fix balance by enabling sw volume control.
Change-Id: I8760b58d5b801409f35370d812d72f8d578d2889
-rw-r--r--firmware/drivers/audio/dummy_codec.c14
-rw-r--r--firmware/export/config/hifimanhm60x.h2
-rw-r--r--firmware/export/config/hifimanhm801.h2
-rw-r--r--firmware/export/dummy_codec.h3
4 files changed, 19 insertions, 2 deletions
diff --git a/firmware/drivers/audio/dummy_codec.c b/firmware/drivers/audio/dummy_codec.c
index ca51d95..94ba04b 100644
--- a/firmware/drivers/audio/dummy_codec.c
+++ b/firmware/drivers/audio/dummy_codec.c
@@ -23,9 +23,11 @@
#include "config.h"
#include "audio.h"
#include "audiohw.h"
+#include "system.h"
+#include "pcm_sw_volume.h"
const struct sound_settings_info audiohw_settings[] = {
- [SOUND_VOLUME] = {"dB", 0, 1, -1, 0, 0},
+ [SOUND_VOLUME] = {"dB", 0, 1, VOLUME_MIN/10, VOLUME_MAX/10, 0},
/* HAVE_SW_TONE_CONTROLS */
[SOUND_BASS] = {"dB", 0, 1, -24, 24, 0},
[SOUND_TREBLE] = {"dB", 0, 1, -24, 24, 0},
@@ -44,3 +46,13 @@ void audiohw_set_frequency(int fsel)
{
(void)fsel;
}
+
+#ifdef HAVE_SW_VOLUME_CONTROL
+void audiohw_set_master_vol(int vol_l, int vol_r)
+{
+ /* SW volume for <= 1.0 gain, HW at unity, < VOLUME_MIN == MUTE */
+ int sw_volume_l = vol_l < VOLUME_MIN ? PCM_MUTE_LEVEL : MIN(vol_l, 0);
+ int sw_volume_r = vol_r < VOLUME_MIN ? PCM_MUTE_LEVEL : MIN(vol_r, 0);
+ pcm_set_master_volume(sw_volume_l, sw_volume_r);
+}
+#endif /* HAVE_SW_VOLUME_CONTROL */
diff --git a/firmware/export/config/hifimanhm60x.h b/firmware/export/config/hifimanhm60x.h
index 088cc12..f5b768d 100644
--- a/firmware/export/config/hifimanhm60x.h
+++ b/firmware/export/config/hifimanhm60x.h
@@ -53,6 +53,8 @@
#define CONFIG_NAND NAND_RK27XX
#define HAVE_SW_TONE_CONTROLS
+#define HAVE_SW_VOLUME_CONTROL
+
/* commented for now */
/* #define HAVE_HOTSWAP */
diff --git a/firmware/export/config/hifimanhm801.h b/firmware/export/config/hifimanhm801.h
index e253fa0..bcbf5e8 100644
--- a/firmware/export/config/hifimanhm801.h
+++ b/firmware/export/config/hifimanhm801.h
@@ -50,6 +50,8 @@
#define CONFIG_NAND NAND_RK27XX
#define HAVE_SW_TONE_CONTROLS
+#define HAVE_SW_VOLUME_CONTROL
+
/* commented for now */
/* #define HAVE_HOTSWAP */
diff --git a/firmware/export/dummy_codec.h b/firmware/export/dummy_codec.h
index b85ec8f..122b55e 100644
--- a/firmware/export/dummy_codec.h
+++ b/firmware/export/dummy_codec.h
@@ -22,8 +22,9 @@
#ifndef __DUMMY_CODEC_H_
#define __DUMMY_CODEC_H_
-#define VOLUME_MIN -1
+#define VOLUME_MIN -730
#define VOLUME_MAX 0
+void audiohw_set_master_vol(int vol_l, int vol_r);
#endif /* __DUMMY_CODEC_H_ */