diff options
author | Scott Mertz <scott@cyngn.com> | 2015-01-30 11:45:15 -0800 |
---|---|---|
committer | Scott Mertz <scott@cyngn.com> | 2015-01-30 11:49:19 -0800 |
commit | 8159c341b5fea4c288a804ff0a15ca4b55729d38 (patch) | |
tree | a98647efee51295933b3f7ee4af620c793f888ed | |
parent | 388173476b9ee7364f8b618135590d08c4a3bcf9 (diff) | |
download | android_hardware_qcom_audio-8159c341b5fea4c288a804ff0a15ca4b55729d38.tar.gz android_hardware_qcom_audio-8159c341b5fea4c288a804ff0a15ca4b55729d38.tar.bz2 android_hardware_qcom_audio-8159c341b5fea4c288a804ff0a15ca4b55729d38.zip |
audio: implement backend platform parser
Ported from msm8974 original patch
Change-Id: I6be3870667daf5273db5e8fbb1aa39e5e14c1530
-rw-r--r-- | hal/msm8916/platform.c | 77 |
1 files changed, 50 insertions, 27 deletions
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c index 03ca566d..5b549923 100644 --- a/hal/msm8916/platform.c +++ b/hal/msm8916/platform.c @@ -659,6 +659,35 @@ void close_csd_client(struct csd_data *csd) } } +static void set_platform_defaults() +{ + int32_t dev; + for (dev = 0; dev < SND_DEVICE_MAX; dev++) { + backend_table[dev] = NULL; + } + for (dev = 0; dev < SND_DEVICE_MAX; dev++) { + backend_bit_width_table[dev] = 16; + } + + // TBD - do these go to the platform-info.xml file. + // will help in avoiding strdups here + backend_table[SND_DEVICE_IN_BT_SCO_MIC] = strdup("bt-sco"); + backend_table[SND_DEVICE_IN_BT_SCO_MIC_WB] = strdup("bt-sco-wb"); + backend_table[SND_DEVICE_IN_BT_SCO_MIC_NREC] = strdup("bt-sco"); + backend_table[SND_DEVICE_IN_BT_SCO_MIC_WB_NREC] = strdup("bt-sco-wb"); + backend_table[SND_DEVICE_OUT_BT_SCO] = strdup("bt-sco"); + backend_table[SND_DEVICE_OUT_BT_SCO_WB] = strdup("bt-sco-wb"); + backend_table[SND_DEVICE_OUT_HDMI] = strdup("hdmi"); + backend_table[SND_DEVICE_OUT_SPEAKER_AND_HDMI] = strdup("speaker-and-hdmi"); + backend_table[SND_DEVICE_OUT_AFE_PROXY] = strdup("afe-proxy"); + backend_table[SND_DEVICE_OUT_USB_HEADSET] = strdup("usb-headphones"); + backend_table[SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] = + strdup("speaker-and-usb-headphones"); + backend_table[SND_DEVICE_IN_USB_HEADSET_MIC] = strdup("usb-headset-mic"); + backend_table[SND_DEVICE_IN_CAPTURE_FM] = strdup("capture-fm"); + backend_table[SND_DEVICE_OUT_TRANSMISSION_FM] = strdup("transmission-fm"); +} + void get_cvd_version(char *cvd_version, struct audio_device *adev) { struct mixer_ctl *ctl; @@ -858,6 +887,8 @@ void *platform_init(struct audio_device *adev) free(cvd_version); } + set_platform_defaults(my_data); + acdb_init_fail: /* Initialize ACDB ID's */ platform_info_init(PLATFORM_INFO_XML_PATH); @@ -883,6 +914,14 @@ void platform_deinit(void *platform) hw_info_deinit(my_data->hw_info); close_csd_client(my_data->csd); + int32_t dev; + for (dev = 0; dev < SND_DEVICE_MAX; dev++) { + if (backend_table[dev]) { + free(backend_table[dev]); + backend_table[dev]= NULL; + } + } + free(platform); /* deinit usb */ audio_extn_usb_deinit(); @@ -914,33 +953,17 @@ int platform_get_snd_device_name_extn(void *platform, snd_device_t snd_device, void platform_add_backend_name(char *mixer_path, snd_device_t snd_device) { - if ((snd_device == SND_DEVICE_IN_BT_SCO_MIC) || - (snd_device == SND_DEVICE_IN_BT_SCO_MIC_NREC)) - strlcat(mixer_path, " bt-sco", MIXER_PATH_MAX_LENGTH); - else if ((snd_device == SND_DEVICE_IN_BT_SCO_MIC_WB) || - (snd_device == SND_DEVICE_IN_BT_SCO_MIC_WB_NREC)) - strlcat(mixer_path, " bt-sco-wb", MIXER_PATH_MAX_LENGTH); - else if(snd_device == SND_DEVICE_OUT_BT_SCO) - strlcat(mixer_path, " bt-sco", MIXER_PATH_MAX_LENGTH); - else if(snd_device == SND_DEVICE_OUT_BT_SCO_WB) - strlcat(mixer_path, " bt-sco-wb", MIXER_PATH_MAX_LENGTH); - else if (snd_device == SND_DEVICE_OUT_HDMI) - strlcat(mixer_path, " hdmi", MIXER_PATH_MAX_LENGTH); - else if (snd_device == SND_DEVICE_OUT_SPEAKER_AND_HDMI) - strlcat(mixer_path, " speaker-and-hdmi", MIXER_PATH_MAX_LENGTH); - else if (snd_device == SND_DEVICE_OUT_AFE_PROXY) - strlcat(mixer_path, " afe-proxy", MIXER_PATH_MAX_LENGTH); - else if (snd_device == SND_DEVICE_OUT_USB_HEADSET) - strlcat(mixer_path, " usb-headphones", MIXER_PATH_MAX_LENGTH); - else if (snd_device == SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET) - strlcat(mixer_path, " speaker-and-usb-headphones", - MIXER_PATH_MAX_LENGTH); - else if (snd_device == SND_DEVICE_IN_USB_HEADSET_MIC) - strlcat(mixer_path, " usb-headset-mic", MIXER_PATH_MAX_LENGTH); - else if (snd_device == SND_DEVICE_IN_CAPTURE_FM) - strlcat(mixer_path, " capture-fm", MIXER_PATH_MAX_LENGTH); - else if (snd_device == SND_DEVICE_OUT_TRANSMISSION_FM) - strlcat(mixer_path, " transmission-fm", MIXER_PATH_MAX_LENGTH); + if ((snd_device < SND_DEVICE_MIN) || (snd_device >= SND_DEVICE_MAX)) { + ALOGE("%s: Invalid snd_device = %d", __func__, snd_device); + return; + } + + const char * suffix = backend_table[snd_device]; + + if (suffix != NULL) { + strlcat(mixer_path, " ", MIXER_PATH_MAX_LENGTH); + strlcat(mixer_path, suffix, MIXER_PATH_MAX_LENGTH); + } } int platform_get_pcm_device_id(audio_usecase_t usecase, int device_type) |