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));