summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-06-05 00:56:53 -0600
committerLinux Build Service Account <lnxbuild@localhost>2016-06-05 00:56:53 -0600
commit865999858cc65047a7e3d6234384c420f0e19d31 (patch)
tree093b926fb5533d8f73f643e73c66e37fd862de61
parentd529b948b137196bb635ba8149d44ff7e21ef244 (diff)
parentca907cc62784596c228fbba9cfadeb34624bdb8a (diff)
downloadandroid_hardware_qcom_audio-865999858cc65047a7e3d6234384c420f0e19d31.tar.gz
android_hardware_qcom_audio-865999858cc65047a7e3d6234384c420f0e19d31.tar.bz2
android_hardware_qcom_audio-865999858cc65047a7e3d6234384c420f0e19d31.zip
Merge ca907cc62784596c228fbba9cfadeb34624bdb8a on remote branch
Change-Id: I48611d8c8f976b861991b5f69d7312187c55e457
-rw-r--r--hal/msm8916/platform.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 54163878..3f34d412 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -103,6 +103,7 @@
#define MAX_SAD_BLOCKS 10
#define SAD_BLOCK_SIZE 3
#define MAX_CVD_VERSION_STRING_SIZE 100
+#define MAX_SND_CARD_STRING_SIZE 100
/* EDID format ID for LPCM audio */
#define EDID_FORMAT_LPCM 1
@@ -129,6 +130,8 @@
#define AUDIO_PARAMETER_KEY_AUD_CALDATA "cal_data"
#define AUDIO_PARAMETER_KEY_AUD_CALRESULT "cal_result"
+/* Reload ACDB files from specified path */
+#define AUDIO_PARAMETER_KEY_RELOAD_ACDB "reload_acdb"
/* Query external audio device connection status */
#define AUDIO_PARAMETER_KEY_EXT_AUDIO_DEVICE "ext_audio_device"
@@ -195,6 +198,7 @@ typedef int (*acdb_set_audio_cal_t) (void *, void *, uint32_t);
typedef int (*acdb_get_audio_cal_t) (void *, void *, uint32_t*);
typedef int (*acdb_send_common_top_t) (void);
typedef int (*acdb_set_codec_data_t) (void *, char *);
+typedef int (*acdb_reload_t) (char *, char *, char *, int);
typedef struct codec_backend_cfg {
uint32_t sample_rate;
@@ -239,6 +243,7 @@ struct platform_data {
acdb_get_default_app_type_t acdb_get_default_app_type;
acdb_send_common_top_t acdb_send_common_top;
acdb_set_codec_data_t acdb_set_codec_data;
+ acdb_reload_t acdb_reload;
#ifdef RECORD_PLAY_CONCURRENCY
bool rec_play_conc_set;
#endif
@@ -250,6 +255,9 @@ struct platform_data {
char ec_ref_mixer_path[64];
char codec_version[CODEC_VERSION_MAX_LENGTH];
int hw_dep_fd;
+ char cvd_version[MAX_CVD_VERSION_STRING_SIZE];
+ char snd_card_name[MAX_SND_CARD_STRING_SIZE];
+ int metainfo_key;
};
static bool is_external_codec = false;
@@ -1567,6 +1575,13 @@ int platform_acdb_init(void *platform)
result = my_data->acdb_init(acdb_snd_card_name, cvd_version, key);
+ /* Save these variables in platform_data. These will be used
+ while reloading ACDB files during run time. */
+ strlcpy(my_data->cvd_version, cvd_version, MAX_CVD_VERSION_STRING_SIZE);
+ strlcpy(my_data->snd_card_name, acdb_snd_card_name,
+ MAX_SND_CARD_STRING_SIZE);
+ my_data->metainfo_key = key;
+
if (cvd_version)
free(cvd_version);
if (!result) {
@@ -1893,6 +1908,13 @@ void *platform_init(struct audio_device *adev)
ALOGE("%s: dlsym error %s for acdb_loader_init_v2", __func__, dlerror());
goto acdb_init_fail;
}
+
+ my_data->acdb_reload = (acdb_reload_t)dlsym(my_data->acdb_handle,
+ "acdb_loader_reload_acdb_files");
+ if (my_data->acdb_reload == NULL) {
+ ALOGE("%s: dlsym error %s for acdb_loader_reload_acdb_files", __func__, dlerror());
+ goto acdb_init_fail;
+ }
platform_acdb_init(my_data);
}
audio_extn_pm_vote();
@@ -3616,6 +3638,16 @@ int platform_set_parameters(void *platform, struct str_parms *parms)
}
}
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_RELOAD_ACDB,
+ value, sizeof(value));
+ if (err >= 0) {
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_RELOAD_ACDB);
+
+ my_data->acdb_reload(value, my_data->snd_card_name,
+ my_data->cvd_version, my_data->metainfo_key);
+
+ }
+
#ifdef RECORD_PLAY_CONCURRENCY
err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_REC_PLAY_CONC, value, sizeof(value));
if (err >= 0) {