hal: audio: add tz_names extn to support from audio platform_info xml
To add Speaker TZ names from audio_platform_info xml, add required
support.
Change-Id: Idd31ed9e7b7235245c3dda4ccb11b47762db5ee8
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 9de87ca..b4f2ff9 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -4171,3 +4171,58 @@
done:
return ret;
}
+
+/*
+ * This is a lookup table to map names of speaker device with respective left and right TZ names.
+ * Also the tz names for a particular left or right speaker can be overriden by adding
+ * corresponding entry in audio_platform_info.xml file.
+ */
+struct speaker_device_to_tz_names speaker_device_tz_names = {
+ {SND_DEVICE_OUT_SPEAKER, "", ""},
+};
+
+const char *platform_get_spkr_1_tz_name(snd_device_t snd_device)
+{
+ if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX)
+ return speaker_device_tz_names.spkr_1_tz_name;
+ else
+ return "";
+}
+
+const char *platform_get_spkr_2_tz_name(snd_device_t snd_device)
+{
+ if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX)
+ return speaker_device_tz_names.spkr_2_tz_name;
+ else
+ return "";
+}
+
+int platform_set_spkr_device_tz_names(snd_device_t index,
+ const char *spkr_1_tz_name, const char *spkr_2_tz_name)
+{
+ int ret = 0;
+ int i;
+
+ if (spkr_1_tz_name == NULL && spkr_2_tz_name == NULL) {
+ ALOGE("%s: Invalid input", __func__);
+ ret = -EINVAL;
+ goto done;
+ }
+ if (index != speaker_device_tz_names.snd_device) {
+ ALOGE("%s: not matching speaker device\n");
+ ret = -EINVAL;
+ goto done;
+ }
+ ALOGD("%s: Enter, spkr_1_tz_name :%s, spkr_2_tz_name:%s",
+ __func__, spkr_1_tz_name, spkr_2_tz_name);
+
+ if (spkr_1_tz_name != NULL)
+ strlcpy(speaker_device_tz_names.spkr_1_tz_name, spkr_1_tz_name,
+ sizeof(speaker_device_tz_names.spkr_1_tz_name));
+
+ if (spkr_2_tz_name != NULL)
+ strlcpy(speaker_device_tz_names.spkr_2_tz_name, spkr_2_tz_name,
+ sizeof(speaker_device_tz_names.spkr_2_tz_name));
+done:
+ return ret;
+}
diff --git a/hal/msm8916/platform.h b/hal/msm8916/platform.h
index 78c9ff8..d564839 100644
--- a/hal/msm8916/platform.h
+++ b/hal/msm8916/platform.h
@@ -298,4 +298,10 @@
char device_name[100];
char interface_name[100];
};
+
+struct speaker_device_to_tz_names {
+ snd_device_t snd_device;
+ char spkr_1_tz_name[100];
+ char spkr_2_tz_name[100];
+};
#endif // QCOM_AUDIO_PLATFORM_H
diff --git a/hal/msm8960/platform.c b/hal/msm8960/platform.c
index e5ecda1..2065b54 100644
--- a/hal/msm8960/platform.c
+++ b/hal/msm8960/platform.c
@@ -1169,3 +1169,9 @@
{
return -ENOSYS;
}
+
+int platform_set_spkr_device_tz_names(snd_device_t index,
+ const char *spkr_1_tz_name, const char *spkr_2_tz_name)
+{
+ return -ENOSYS;
+}
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index dbfc8ff..4f90850 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -1346,6 +1346,22 @@
return "";
}
+const char *platform_get_spkr_1_tz_name(snd_device_t snd_device)
+{
+ if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX)
+ return speaker_device_tz_names.spkr_1_tz_name;
+ else
+ return "";
+}
+
+const char *platform_get_spkr_2_tz_name(snd_device_t snd_device)
+{
+ if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX)
+ return speaker_device_tz_names.spkr_2_tz_name;
+ else
+ return "";
+}
+
int platform_get_snd_device_name_extn(void *platform, snd_device_t snd_device,
char *device_name)
{
@@ -3773,6 +3789,15 @@
}
/*
+ * This is a lookup table to map names of speaker device with respective left and right TZ names.
+ * Also the tz names for a particular left or right speaker can be overriden by adding
+ * corresponding entry in audio_platform_info.xml file.
+ */
+struct speaker_device_to_tz_names speaker_device_tz_names = {
+ {SND_DEVICE_OUT_SPEAKER, "", ""},
+};
+
+/*
* This is a lookup table to map android audio input device to audio h/w interface (backend).
* The table can be extended for other input devices by adding appropriate entries.
* Also the audio interface for a particular input device can be overriden by adding
@@ -3823,3 +3848,33 @@
done:
return ret;
}
+
+int platform_set_spkr_device_tz_names(snd_device_t index,
+ const char *spkr_1_tz_name, const char *spkr_2_tz_name)
+{
+ int ret = 0;
+ int i;
+
+ if (spkr_1_tz_name == NULL && spkr_2_tz_name == NULL) {
+ ALOGE("%s: Invalid input", __func__);
+ ret = -EINVAL;
+ goto done;
+ }
+ if (index != speaker_device_tz_names.snd_device) {
+ ALOGE("%s: not matching speaker device\n");
+ ret = -EINVAL;
+ goto done;
+ }
+ ALOGD("%s: Enter, spkr_1_tz_name :%s, spkr_2_tz_name:%s",
+ __func__, spkr_1_tz_name, spkr_2_tz_name);
+
+ if (spkr_1_tz_name != NULL)
+ strlcpy(speaker_device_tz_names.spkr_1_tz_name, spkr_1_tz_name,
+ sizeof(speaker_device_tz_names.spkr_1_tz_name));
+
+ if (spkr_2_tz_name != NULL)
+ strlcpy(speaker_device_tz_names.spkr_2_tz_name, spkr_2_tz_name,
+ sizeof(speaker_device_tz_names.spkr_2_tz_name));
+done:
+ return ret;
+}
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 83922d5..41e2c55 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -382,4 +382,10 @@
char device_name[100];
char interface_name[100];
};
+
+struct speaker_device_to_tz_names {
+ snd_device_t snd_device;
+ char spkr_1_tz_name[100];
+ char spkr_2_tz_name[100];
+};
#endif // QCOM_AUDIO_PLATFORM_H
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 4ecdd36..2f9af6c 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -111,4 +111,8 @@
int platform_set_device_params(struct stream_out *out, int param, int value);
int platform_set_audio_device_interface(const char * device_name, const char *intf_name,
const char * codec_type);
+int platform_set_spkr_device_tz_names(snd_device_t index,
+ const char *spkr_1_tz_name, const char *spkr_2_tz_name);
+const char *platform_get_spkr_1_tz_name(snd_device_t snd_device);
+const char *platform_get_spkr_2_tz_name(snd_device_t snd_device);
#endif // AUDIO_PLATFORM_API_H
diff --git a/hal/platform_info.c b/hal/platform_info.c
index b65411f..6a35be5 100644
--- a/hal/platform_info.c
+++ b/hal/platform_info.c
@@ -47,6 +47,7 @@
PCM_ID,
BACKEND_NAME,
INTERFACE_NAME,
+ TZ_NAME,
} section_t;
typedef void (* section_process_fn)(const XML_Char **attr);
@@ -56,6 +57,7 @@
static void process_pcm_id(const XML_Char **attr);
static void process_backend_name(const XML_Char **attr);
static void process_interface_name(const XML_Char **attr);
+static void process_tz_name(const XML_Char **attr);
static void process_root(const XML_Char **attr);
static section_process_fn section_table[] = {
@@ -65,6 +67,7 @@
[PCM_ID] = process_pcm_id,
[BACKEND_NAME] = process_backend_name,
[INTERFACE_NAME] = process_interface_name,
+ [TZ_NAME] = process_tz_name,
};
static section_t section;
@@ -91,6 +94,11 @@
* ...
* ...
* </interface_names>
+ * <tz_names>
+ * <device name="???" spkr_1_tz_name="???" spkr_2_tz_name="???"/>
+ * ...
+ * ...
+ * </tz_names>
* </audio_platform_info>
*/
@@ -281,6 +289,42 @@
return;
}
+static void process_tz_name(const XML_Char **attr)
+{
+ int ret, index;
+
+ if (strcmp(attr[0], "name") != 0) {
+ ALOGE("%s: 'name' not found, no Audio Interface set!", __func__);
+ goto done;
+ }
+
+ index = platform_get_snd_device_index((char *)attr[1]);
+ if (index < 0) {
+ ALOGE("%s: Device %s not found, no snd device set!",
+ __func__, attr[1]);
+ goto done;
+ }
+
+ if (strcmp(attr[2], "spkr_1_tz_name") != 0) {
+ ALOGE("%s: Device %s has no spkr_1_tz_name set!",
+ __func__, attr[1]);
+ }
+
+ if (strcmp(attr[4], "spkr_2_tz_name") != 0) {
+ ALOGE("%s: Device %s has no spkr_2_tz_name set!",
+ __func__, attr[1]);
+ }
+
+ ret = platform_set_spkr_device_tz_names(index, (char *)attr[3], (char *)attr[5]);
+ if (ret < 0) {
+ ALOGE("%s: Audio Interface not set!", __func__);
+ goto done;
+ }
+
+done:
+ return;
+}
+
static void start_tag(void *userdata __unused, const XML_Char *tag_name,
const XML_Char **attr)
{
@@ -298,10 +342,12 @@
section = BACKEND_NAME;
} else if (strcmp(tag_name, "interface_names") == 0) {
section = INTERFACE_NAME;
+ } else if (strcmp(tag_name, "tz_names") == 0) {
+ section = TZ_NAME;
} else if (strcmp(tag_name, "device") == 0) {
if ((section != ACDB) && (section != BACKEND_NAME) && (section != BITWIDTH) &&
- (section != INTERFACE_NAME)) {
- ALOGE("device tag only supported for acdb/backend names/bitwitdh/interface names");
+ (section != INTERFACE_NAME) && (section != TZ_NAME)) {
+ ALOGE("device tag only supported for acdb/backend names/bitwitdh/interface/tz names");
return;
}