diff options
author | Simon Wilson <simonwilson@google.com> | 2011-10-20 10:32:27 -0700 |
---|---|---|
committer | Simon Wilson <simonwilson@google.com> | 2011-10-20 11:34:54 -0700 |
commit | 431112d4cc87ad860506ee22cf304569468324ae (patch) | |
tree | 834eee4300d47d8a7e6ea457fbbbedc37674d1be | |
parent | a01b360d8a3dd7f16b70ac9d0e9ddc48c937b3c4 (diff) | |
download | device_samsung_tuna-431112d4cc87ad860506ee22cf304569468324ae.zip device_samsung_tuna-431112d4cc87ad860506ee22cf304569468324ae.tar.gz device_samsung_tuna-431112d4cc87ad860506ee22cf304569468324ae.tar.bz2 |
audio: enable DL2 mono mixer only for speaker/media
Mono mixer is only strictly required for downmixing stereo media
content to the mono speaker, so only enable it then. This works
around an issue with modem rx mute when using handsfree.
Fixes bug 5481245
Change-Id: I8e4c5400241a0d8bb8d74966b6f612b7bab56301
-rwxr-xr-x | audio/audio_hw.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/audio/audio_hw.c b/audio/audio_hw.c index acfcbda..cf87b48 100755 --- a/audio/audio_hw.c +++ b/audio/audio_hw.c @@ -299,12 +299,6 @@ struct route_setting defaults[] = { .intval = 1, }, - /* speaker */ - { - .ctl_name = MIXER_DL2_MONO_MIXER, - .intval = 1, - }, - /* bt */ { .ctl_name = MIXER_BT_UL_VOLUME, @@ -449,6 +443,7 @@ struct mixer_ctls struct mixer_ctl *vx_dl1; struct mixer_ctl *vx_dl2; struct mixer_ctl *earpiece_enable; + struct mixer_ctl *dl2_mono; struct mixer_ctl *dl1_headset; struct mixer_ctl *dl1_bt; struct mixer_ctl *left_capture; @@ -924,6 +919,8 @@ static void select_output_device(struct tuna_audio_device *adev) mixer_ctl_set_value(adev->mixer_ctls.dl1_headset, 0, headset_on | headphone_on | earpiece_on); mixer_ctl_set_value(adev->mixer_ctls.dl1_bt, 0, bt_on); + mixer_ctl_set_value(adev->mixer_ctls.dl2_mono, 0, + (adev->mode != AUDIO_MODE_IN_CALL) && speaker_on); mixer_ctl_set_value(adev->mixer_ctls.earpiece_enable, 0, earpiece_on); /* select output stage */ @@ -2494,6 +2491,8 @@ static int adev_open(const hw_module_t* module, const char* name, MIXER_DL2_MIXER_MULTIMEDIA); adev->mixer_ctls.vx_dl2 = mixer_get_ctl_by_name(adev->mixer, MIXER_DL2_MIXER_VOICE); + adev->mixer_ctls.dl2_mono = mixer_get_ctl_by_name(adev->mixer, + MIXER_DL2_MONO_MIXER); adev->mixer_ctls.dl1_headset = mixer_get_ctl_by_name(adev->mixer, MIXER_DL1_PDM_SWITCH); adev->mixer_ctls.dl1_bt = mixer_get_ctl_by_name(adev->mixer, @@ -2517,12 +2516,12 @@ static int adev_open(const hw_module_t* module, const char* name, if (!adev->mixer_ctls.dl1_eq || !adev->mixer_ctls.mm_dl1 || !adev->mixer_ctls.vx_dl1 || !adev->mixer_ctls.mm_dl2 || - !adev->mixer_ctls.vx_dl2 || !adev->mixer_ctls.dl1_headset || - !adev->mixer_ctls.dl1_bt || !adev->mixer_ctls.earpiece_enable || - !adev->mixer_ctls.left_capture || !adev->mixer_ctls.right_capture || - !adev->mixer_ctls.amic_ul_volume || !adev->mixer_ctls.sidetone_capture || - !adev->mixer_ctls.headset_volume || !adev->mixer_ctls.speaker_volume || - !adev->mixer_ctls.earpiece_volume) { + !adev->mixer_ctls.vx_dl2 || !adev->mixer_ctls.dl2_mono || + !adev->mixer_ctls.dl1_headset || !adev->mixer_ctls.dl1_bt || + !adev->mixer_ctls.earpiece_enable || !adev->mixer_ctls.left_capture || + !adev->mixer_ctls.right_capture || !adev->mixer_ctls.amic_ul_volume || + !adev->mixer_ctls.sidetone_capture || !adev->mixer_ctls.headset_volume || + !adev->mixer_ctls.speaker_volume || !adev->mixer_ctls.earpiece_volume) { mixer_close(adev->mixer); free(adev); LOGE("Unable to locate all mixer controls, aborting."); |