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
This commit is contained in:
Laxminath Kasam 2015-05-29 18:37:11 +05:30
parent 73e2ea70d2
commit 8225243c24
7 changed files with 177 additions and 2 deletions

View File

@ -4090,3 +4090,57 @@ int platform_set_audio_device_interface(const char * device_name,
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;
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;
}

View File

@ -306,4 +306,10 @@ struct audio_device_to_audio_interface {
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

View File

@ -1160,3 +1160,9 @@ int platform_set_audio_device_interface(const char * device_name __unused,
{
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;
}

View File

@ -696,6 +696,14 @@ static int msm_device_to_be_id [][NO_COLS] = {
static int msm_be_id_array_len =
sizeof(msm_device_to_be_id) / sizeof(msm_device_to_be_id[0]);
/*
* 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, "", ""},
};
#define DEEP_BUFFER_PLATFORM_DELAY (29*1000LL)
#define LOW_LATENCY_PLATFORM_DELAY (13*1000LL)
@ -1375,6 +1383,22 @@ const char *platform_get_snd_device_name(snd_device_t snd_device)
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)
{
@ -3993,3 +4017,32 @@ int platform_set_audio_device_interface(const char *device_name, const char *int
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;
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;
}

View File

@ -396,4 +396,10 @@ struct audio_device_to_audio_interface {
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

View File

@ -115,4 +115,8 @@ int platform_set_hdmi_config(struct stream_out *out);
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

View File

@ -48,6 +48,7 @@ typedef enum {
PCM_ID,
BACKEND_NAME,
INTERFACE_NAME,
TZ_NAME,
} section_t;
typedef void (* section_process_fn)(const XML_Char **attr);
@ -58,6 +59,7 @@ static void process_native_support(const XML_Char **attr);
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[] = {
@ -68,6 +70,7 @@ static section_process_fn section_table[] = {
[PCM_ID] = process_pcm_id,
[BACKEND_NAME] = process_backend_name,
[INTERFACE_NAME] = process_interface_name,
[TZ_NAME] = process_tz_name,
};
static section_t section;
@ -94,6 +97,11 @@ static section_t section;
* ...
* ...
* </interface_names>
* <tz_names>
* <device name="???" spkr_1_tz_name="???" spkr_2_tz_name="???"/>
* ...
* ...
* </tz_names>
* </audio_platform_info>
*/
@ -308,6 +316,42 @@ done:
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)
{
@ -327,10 +371,12 @@ static void start_tag(void *userdata __unused, const XML_Char *tag_name,
section = INTERFACE_NAME;
} else if (strcmp(tag_name, "native_configs") == 0) {
section = NATIVESUPPORT;
} 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;
}