Revert "Revert "Revert "hal: enable form factor based configuration"""
Build fix
This reverts commit b0b0d57b8b2eeec73e691c880dc522ba406c25d1.
Change-Id: I84040cba92da4ebde156d2b9bb9d0a52d581d592
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
deleted file mode 100644
index 52ae974..0000000
--- a/hal/msm8974/hw_info.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "hardware_info"
-/*#define LOG_NDEBUG 0*/
-#define LOG_NDDEBUG 0
-
-#include <stdlib.h>
-#include <cutils/log.h>
-#include "audio_hw.h"
-#include "platform.h"
-#include "audio_extn.h"
-
-struct hardware_info {
- char name[HW_INFO_ARRAY_MAX_SIZE];
- char type[HW_INFO_ARRAY_MAX_SIZE];
- /* variables for handling target variants */
- uint32_t num_snd_devices;
- char dev_extn[HW_INFO_ARRAY_MAX_SIZE];
- snd_device_t *snd_devices;
-};
-
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
-
-
-static const snd_device_t tasha_db_variant_devices[] = {
- SND_DEVICE_OUT_SPEAKER
-};
-
-static const snd_device_t tasha_fluid_variant_devices[] = {
- SND_DEVICE_OUT_SPEAKER,
- SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES,
- SND_DEVICE_OUT_VOICE_SPEAKER,
- SND_DEVICE_OUT_SPEAKER_AND_HDMI,
- SND_DEVICE_OUT_SPEAKER_PROTECTED,
- SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED,
-};
-
-static const snd_device_t tasha_liquid_variant_devices[] = {
- SND_DEVICE_OUT_SPEAKER,
- SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES,
- SND_DEVICE_IN_SPEAKER_MIC,
- SND_DEVICE_IN_HEADSET_MIC,
- SND_DEVICE_IN_VOICE_DMIC,
- SND_DEVICE_IN_VOICE_SPEAKER_DMIC,
- SND_DEVICE_IN_VOICE_REC_DMIC_STEREO,
- SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE,
- SND_DEVICE_IN_QUAD_MIC,
-};
-
-struct snd_card_split cur_snd_card_split = {
- .device = {0},
- .snd_card = {0},
- .form_factor = {0},
-};
-
-static void update_hardware_info_8996(struct hardware_info *hw_info)
-{
- struct snd_card_split *tmp_handle = get_snd_card_split();
- ALOGV("%s: device %s snd_card %s form_factor %s",
- __func__, tmp_handle->device, tmp_handle->snd_card, tmp_handle->form_factor);
-
- strlcpy(hw_info->name, tmp_handle->device, sizeof(hw_info->name));
- snprintf(hw_info->type, sizeof(hw_info->type), " %s", tmp_handle->form_factor);
- snprintf(hw_info->dev_extn, sizeof(hw_info->dev_extn), "-%s", tmp_handle->form_factor);
-
- if (!strncmp(tmp_handle->form_factor, "fluid", sizeof("fluid"))) {
- hw_info->snd_devices = (snd_device_t *)tasha_fluid_variant_devices;
- hw_info->num_snd_devices = ARRAY_SIZE(tasha_fluid_variant_devices);
- } else if (!strncmp(tmp_handle->form_factor, "liquid", sizeof("liquid"))) {
- hw_info->snd_devices = (snd_device_t *)tasha_liquid_variant_devices;
- hw_info->num_snd_devices = ARRAY_SIZE(tasha_liquid_variant_devices);
- } else if (!strncmp(tmp_handle->form_factor, "db", sizeof("db"))) {
- hw_info->snd_devices = (snd_device_t *)tasha_db_variant_devices;
- hw_info->num_snd_devices = ARRAY_SIZE(tasha_db_variant_devices);
- } else {
- ALOGW("%s: %s form factor doesnt need mixer path over ride", __func__, tmp_handle->form_factor);
- }
-
- ALOGV("name %s type %s dev_extn %s", hw_info->name, hw_info->type, hw_info->dev_extn);
-}
-
-
-void *hw_info_init(const char *snd_card_name)
-{
- struct hardware_info *hw_info = NULL;
- bool hw_supported = false;
-
- if (strstr(snd_card_name, "msm8996")) {
- ALOGD("8996 - variant soundcard");
- hw_supported = true;
- } else {
- ALOGE("%s: Unsupported target %s:",__func__, snd_card_name);
- }
-
- if (hw_supported) {
- hw_info = malloc(sizeof(struct hardware_info));
- if (!hw_info) {
- ALOGE("failed to allocate mem for hardware info");
- goto on_finish;
- }
-
- hw_info->snd_devices = NULL;
- hw_info->num_snd_devices = 0;
- strlcpy(hw_info->dev_extn, "", sizeof(hw_info->dev_extn));
- strlcpy(hw_info->type, "", sizeof(hw_info->type));
- strlcpy(hw_info->name, "", sizeof(hw_info->name));
- update_hardware_info_8996(hw_info);
- }
-
-on_finish:
- return hw_info;
-}
-
-void hw_info_deinit(void *hw_info)
-{
- free(hw_info);
-}
-
-void hw_info_append_hw_type(void *hw_info, snd_device_t snd_device,
- char *device_name)
-{
- struct hardware_info *my_data = (struct hardware_info*) hw_info;
- uint32_t i = 0;
-
- snd_device_t *snd_devices =
- (snd_device_t *) my_data->snd_devices;
-
- if (snd_devices != NULL) {
- for (i = 0; i < my_data->num_snd_devices; i++) {
- if (snd_device == (snd_device_t)snd_devices[i]) {
- ALOGV("extract dev_extn device %d, device_name %s extn = %s ",
- (snd_device_t)snd_devices[i], device_name, my_data->dev_extn);
- CHECK(strlcat(device_name, my_data->dev_extn,
- DEVICE_NAME_MAX_SIZE) < DEVICE_NAME_MAX_SIZE);
- break;
- }
- }
- }
- ALOGD("%s : device_name = %s", __func__,device_name);
-}
-
-struct snd_card_split *get_snd_card_split()
-{
- return &cur_snd_card_split;
-}
-
-void set_snd_card_split(const char* in_snd_card_name)
-{
- /* sound card name follows below mentioned convention
- <target name>-<sound card name>-<form factor>-snd-card
- parse target name, sound card name and form factor
- */
- char *snd_card_name = strdup(in_snd_card_name);
- char *tmp = NULL;
- char *device = NULL;
- char *snd_card = NULL;
- char *form_factor = NULL;
-
- if (in_snd_card_name == NULL) {
- ALOGE("%s: snd_card_name passed is NULL", __func__);
- goto on_error;
- }
-
- device = strtok_r(snd_card_name, "-", &tmp);
- if (device == NULL) {
- ALOGE("%s: called on invalid snd card name", __func__);
- goto on_error;
- }
- strlcpy(cur_snd_card_split.device, device, HW_INFO_ARRAY_MAX_SIZE);
-
- snd_card = strtok_r(NULL, "-", &tmp);
- if (snd_card == NULL) {
- ALOGE("%s: called on invalid snd card name", __func__);
- goto on_error;
- }
- strlcpy(cur_snd_card_split.snd_card, snd_card, HW_INFO_ARRAY_MAX_SIZE);
-
- form_factor = strtok_r(NULL, "-", &tmp);
- if (form_factor == NULL) {
- ALOGE("%s: called on invalid snd card name", __func__);
- goto on_error;
- }
- strlcpy(cur_snd_card_split.form_factor, form_factor, HW_INFO_ARRAY_MAX_SIZE);
-
- ALOGV("%s: snd_card_name(%s) device(%s) snd_card(%s) form_factor(%s)",
- __func__, in_snd_card_name, device, snd_card, form_factor);
-
-on_error:
- if (snd_card_name)
- free(snd_card_name);
-}
-
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 7dc755c..49e6801 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -129,8 +129,6 @@
char *snd_card_name;
int max_vol_index;
int max_mic_count;
-
- void *hw_info;
};
static int pcm_device_table[AUDIO_USECASE_MAX][2] = {
@@ -934,8 +932,7 @@
char *snd_internal_name = NULL;
char *tmp = NULL;
char mixer_xml_file[MIXER_PATH_MAX_LENGTH]= {0};
- char platform_info_file[MIXER_PATH_MAX_LENGTH]= {0};
- struct snd_card_split *snd_split_handle = NULL;
+
my_data = calloc(1, sizeof(struct platform_data));
my_data->adev = adev;
@@ -944,6 +941,9 @@
set_platform_defaults(my_data);
+ /* Initialize platform specific ids and/or backends*/
+ platform_info_init(my_data);
+
while (snd_card_num < MAX_SND_CARD) {
adev->mixer = mixer_open(snd_card_num);
@@ -973,67 +973,41 @@
continue;
}
- set_snd_card_split(snd_card_name);
- snd_split_handle = get_snd_card_split();
+ if ((snd_internal_name = strtok_r(snd_card_name, "-", &tmp)) != NULL) {
+ /* Get the codec internal name from the sound card name
+ * and form the mixer paths file name dynamically. This
+ * is generic way of picking any codec name based mixer
+ * files in future with no code change. This code
+ * assumes mixer files are formed with format as
+ * mixer_paths_internalcodecname.xml
- my_data->hw_info = hw_info_init(snd_card_name);
+ * If this dynamically read mixer files fails to open then it
+ * falls back to default mixer file i.e mixer_paths.xml. This is
+ * done to preserve backward compatibility but not mandatory as
+ * long as the mixer files are named as per above assumption.
+ */
- /* Get the codec internal name from the sound card and/or form factor
- * name and form the mixer paths and platfor info file name dynamically.
- * This is generic way of picking any codec and forma factor name based
- * mixer and platform info files in future with no code change.
-
- * current code extends and looks for any of the exteneded mixer path and
- * platform info file present based on codec and form factor.
-
- * order of picking appropriate file is
- * <i> mixer_paths_<codec_name>_<form_factor>.xml, if file not present
- * <ii> mixer_paths_<codec_name>.xml, if file not present
- * <iii> mixer_paths.xml
-
- * same order is followed for audio_platform_info.xml as well
- */
-
- // need to carryforward old file name
- if (!strncmp(snd_card_name, TOMTOM_8226_SND_CARD_NAME,
+ if ((snd_internal_name = strtok_r(NULL, "-", &tmp)) != NULL) {
+ // need to carryforward old file name
+ if (!strncmp(snd_card_name, TOMTOM_8226_SND_CARD_NAME,
sizeof(TOMTOM_8226_SND_CARD_NAME))) {
- snprintf(mixer_xml_file, sizeof(mixer_xml_file), "%s_%s.xml",
+ snprintf(mixer_xml_file, sizeof(mixer_xml_file), "%s_%s.xml",
MIXER_XML_BASE_STRING, TOMTOM_MIXER_FILE_SUFFIX );
- } else {
-
- snprintf(mixer_xml_file, sizeof(mixer_xml_file), "%s_%s_%s.xml",
- MIXER_XML_BASE_STRING, snd_split_handle->snd_card,
- snd_split_handle->form_factor);
-
- if (F_OK != access(mixer_xml_file, 0)) {
- memset(mixer_xml_file, 0, sizeof(mixer_xml_file));
- snprintf(mixer_xml_file, sizeof(mixer_xml_file), "%s_%s.xml",
- MIXER_XML_BASE_STRING, snd_split_handle->snd_card);
-
- if (F_OK != access(mixer_xml_file, 0)) {
- memset(mixer_xml_file, 0, sizeof(mixer_xml_file));
- strlcpy(mixer_xml_file, MIXER_XML_DEFAULT_PATH, MIXER_PATH_MAX_LENGTH);
+ } else {
+ snprintf(mixer_xml_file, sizeof(mixer_xml_file), "%s_%s.xml",
+ MIXER_XML_BASE_STRING, snd_internal_name);
}
- }
- snprintf(platform_info_file, sizeof(platform_info_file), "%s_%s_%s.xml",
- PLATFORM_INFO_XML_BASE_STRING, snd_split_handle->snd_card,
- snd_split_handle->form_factor);
-
- if (F_OK != access(platform_info_file, 0)) {
- memset(platform_info_file, 0, sizeof(platform_info_file));
- snprintf(platform_info_file, sizeof(platform_info_file), "%s_%s.xml",
- PLATFORM_INFO_XML_BASE_STRING, snd_split_handle->snd_card);
-
- if (F_OK != access(platform_info_file, 0)) {
- memset(platform_info_file, 0, sizeof(platform_info_file));
- strlcpy(platform_info_file, PLATFORM_INFO_XML_PATH, MIXER_PATH_MAX_LENGTH);
+ if (F_OK == access(mixer_xml_file, 0)) {
+ use_default_mixer_path = false;
}
}
}
- /* Initialize platform specific ids and/or backends*/
- platform_info_init(platform_info_file, my_data);
+ if (use_default_mixer_path) {
+ memset(mixer_xml_file, 0, sizeof(mixer_xml_file));
+ strlcpy(mixer_xml_file, MIXER_XML_DEFAULT_PATH, MIXER_PATH_MAX_LENGTH);
+ }
ALOGD("%s: Loading mixer file: %s", __func__, mixer_xml_file);
adev->audio_route = audio_route_init(snd_card_num, mixer_xml_file);
@@ -1221,8 +1195,6 @@
struct platform_data *my_data = (struct platform_data *)platform;
close_csd_client(my_data->csd);
- hw_info_deinit(my_data->hw_info);
-
for (dev = 0; dev < SND_DEVICE_MAX; dev++) {
if (backend_tag_table[dev])
free(backend_tag_table[dev]);
@@ -1267,29 +1239,6 @@
return "none";
}
-int platform_get_snd_device_name_extn(void *platform, snd_device_t snd_device,
- char *device_name)
-{
- struct platform_data *my_data = (struct platform_data *)platform;
-
- if (platform == NULL || device_name == NULL) {
- ALOGW("%s: something wrong, use legacy get_snd_device name", __func__);
- device_name = platform_get_snd_device_name(snd_device);
- } else if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX) {
- if (operator_specific_device_table[snd_device] != NULL) {
- strlcpy(device_name, get_operator_specific_device_mixer_path(snd_device),
- DEVICE_NAME_MAX_SIZE);
- } else {
- strlcpy(device_name, device_table[snd_device], DEVICE_NAME_MAX_SIZE);
- }
- hw_info_append_hw_type(my_data->hw_info, snd_device, device_name);
- } else {
- strlcpy(device_name, "none", DEVICE_NAME_MAX_SIZE);
- }
-
- return 0;
-}
-
void platform_add_backend_name(void *platform, char *mixer_path,
snd_device_t snd_device)
{
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 53474f6..d6c9e8e 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -149,9 +149,6 @@
};
-#define DEVICE_NAME_MAX_SIZE 128
-#define HW_INFO_ARRAY_MAX_SIZE 32
-
#define DEFAULT_OUTPUT_SAMPLING_RATE 48000
#define ALL_SESSION_VSID 0xFFFFFFFF
@@ -306,6 +303,4 @@
get_sample_rate_t get_sample_rate;
};
-#define PLATFORM_INFO_XML_PATH "/system/etc/audio_platform_info.xml"
-#define PLATFORM_INFO_XML_BASE_STRING "/system/etc/audio_platform_info"
#endif // QCOM_AUDIO_PLATFORM_H