hal: add snd card status callback in auto hal for ssr
Add snd card status callback in auto hal for hostless
session (early TDM clock) enablement in the event of
subsystem restart.
Change-Id: I9758f6a737f25387cffa8ffaade24bd89ef239a2
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 9a444f1..4e88023 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -1222,6 +1222,7 @@
#define audio_extn_auto_hal_get_snd_device_for_car_audio_stream(out) (0)
#define audio_extn_auto_hal_get_audio_port(dev, config) (0)
#define audio_extn_auto_hal_set_audio_port_config(dev, config) (0)
+#define audio_extn_auto_hal_set_parameters(adev, parms) (0)
#else
int32_t audio_extn_auto_hal_init(struct audio_device *adev);
void audio_extn_auto_hal_deinit(void);
@@ -1243,6 +1244,8 @@
struct audio_port *config);
int audio_extn_auto_hal_set_audio_port_config(struct audio_hw_device *dev,
const struct audio_port_config *config);
+void audio_extn_auto_hal_set_parameters(struct audio_device *adev,
+ struct str_parms *parms);
#endif
bool audio_extn_edid_is_supported_sr(edid_audio_info* info, int sr);
diff --git a/hal/audio_extn/auto_hal.c b/hal/audio_extn/auto_hal.c
index a4008c2..f008a47 100644
--- a/hal/audio_extn/auto_hal.c
+++ b/hal/audio_extn/auto_hal.c
@@ -54,6 +54,7 @@
typedef struct auto_hal_module {
struct audio_device *adev;
+ card_status_t card_status;
struct hostless_config hostless;
} auto_hal_module_t;
@@ -560,6 +561,31 @@
return ret;
}
+void audio_extn_auto_hal_set_parameters(struct audio_device *adev __unused,
+ struct str_parms *parms)
+{
+ int ret = 0;
+ char value[32]={0};
+
+ ALOGV("%s: enter", __func__);
+
+ ret = str_parms_get_str(parms, "SND_CARD_STATUS", value, sizeof(value));
+ if (ret >= 0) {
+ char *snd_card_status = value+2;
+ ALOGV("%s: snd card status %s", __func__, snd_card_status);
+ if (strstr(snd_card_status, "OFFLINE")) {
+ auto_hal->card_status = CARD_STATUS_OFFLINE;
+ audio_extn_auto_hal_disable_hostless();
+ }
+ else if (strstr(snd_card_status, "ONLINE")) {
+ auto_hal->card_status = CARD_STATUS_ONLINE;
+ audio_extn_auto_hal_enable_hostless();
+ }
+ }
+
+ ALOGV("%s: exit", __func__);
+}
+
int32_t audio_extn_auto_hal_init(struct audio_device *adev)
{
int32_t ret = 0;
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 29289f8..5ed7ce5 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -9052,6 +9052,7 @@
adev->card_status = status;
platform_snd_card_update(adev->platform, status);
audio_extn_fm_set_parameters(adev, parms);
+ audio_extn_auto_hal_set_parameters(adev, parms);
} else if (is_ext_device_status) {
platform_set_parameters(adev->platform, parms);
}