hal: restore fm volume when codec backend config changed
During FM playback, usecase play-fm may be disabled and
re-routed because of codec backend config change. Default
FM volume is applied when usecase play-fm re-routed, thus
volume may be different from previous normal one. As for
current mixer path, default value for fm is too low to be
audible.
Restore FM volume after usecase play-fm re-routed by codec
backend config change.
CRs-Fixed: 2171323
Change-Id: I88117989ffcacc48268891c7144f78e7a9875c51
diff --git a/hal/audio_extn/fm.c b/hal/audio_extn/fm.c
index b34bb22..785da65 100644
--- a/hal/audio_extn/fm.c
+++ b/hal/audio_extn/fm.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -42,6 +42,7 @@
#define AUDIO_PARAMETER_KEY_FM_VOLUME "fm_volume"
#define AUDIO_PARAMETER_KEY_REC_PLAY_CONC "rec_play_conc_on"
#define AUDIO_PARAMETER_KEY_FM_MUTE "fm_mute"
+#define AUDIO_PARAMETER_KEY_FM_RESTORE_VOLUME "fm_restore_volume"
#define FM_LOOPBACK_DRAIN_TIME_MS 2
static struct pcm_config pcm_config_fm = {
@@ -312,6 +313,14 @@
fm_set_volume(adev, fmmod.fm_volume, false);
}
+ ret = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FM_RESTORE_VOLUME,
+ value, sizeof(value));
+ if (ret >= 0) {
+ if (value[0] == '1')
+ fm_set_volume(adev, fmmod.fm_volume, false);
+ ALOGV("%s: set_fm_volume from param restore volume", __func__);
+ }
+
#ifdef RECORD_PLAY_CONCURRENCY
ret = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_REC_PLAY_CONC,
value, sizeof(value));
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 4bddaed..738eb30 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1423,6 +1423,11 @@
usecase->out_snd_device,
platform_get_input_snd_device(adev->platform, uc_info->devices));
enable_audio_route(adev, usecase);
+ if (usecase->id == USECASE_AUDIO_PLAYBACK_FM) {
+ struct str_parms *parms = str_parms_create_str("fm_restore_volume=1");
+ if (parms)
+ audio_extn_fm_set_parameters(adev, parms);
+ }
}
}
}