forked from rubenslte/android_kernel_samsung_msm8226
Merge "ASoC: msm8974: Add listen calibration support"
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
721c5cb104
@@ -1,5 +1,5 @@
|
||||
#ifndef __MSM_AUDIO_ACDB_H
|
||||
#define __MSM_AUDIO_ACDB_H
|
||||
#ifndef _LINUX_MSM_AUDIO_ACDB_H
|
||||
#define _LINUX_MSM_AUDIO_ACDB_H
|
||||
|
||||
#include <linux/msm_audio.h>
|
||||
|
||||
@@ -47,6 +47,8 @@
|
||||
(AUDIO_MAX_COMMON_IOCTL_NUM+20), unsigned)
|
||||
#define AUDIO_SET_VOCPROC_DEV_CFG_CAL _IOW(AUDIO_IOCTL_MAGIC, \
|
||||
(AUDIO_MAX_COMMON_IOCTL_NUM+21), unsigned)
|
||||
#define AUDIO_SET_LSM_CAL _IOW(AUDIO_IOCTL_MAGIC, \
|
||||
(AUDIO_MAX_COMMON_IOCTL_NUM+22), unsigned)
|
||||
|
||||
#define AUDIO_MAX_ACDB_IOCTL (AUDIO_MAX_COMMON_IOCTL_NUM+30)
|
||||
|
||||
@@ -85,4 +87,4 @@ struct sidetone_cal {
|
||||
|
||||
#define AUDIO_MAX_RTAC_IOCTL (AUDIO_MAX_ACDB_IOCTL+20)
|
||||
|
||||
#endif /* __MSM_AUDIO_ACDB_H */
|
||||
#endif /* _LINUX_MSM_AUDIO_ACDB_H */
|
||||
|
||||
@@ -42,6 +42,9 @@ struct acdb_data {
|
||||
/* ANC Cal */
|
||||
struct acdb_atomic_cal_block anc_cal;
|
||||
|
||||
/* LSM Cal */
|
||||
struct acdb_atomic_cal_block lsm_cal;
|
||||
|
||||
/* AudProc Cal */
|
||||
atomic_t asm_topology;
|
||||
atomic_t adm_topology[MAX_AUDPROC_TYPES];
|
||||
@@ -140,6 +143,46 @@ void get_voice_cal_allocation(struct acdb_cal_block *cal_block)
|
||||
atomic_read(&acdb_data.vocproc_cal.cal_kvaddr);
|
||||
}
|
||||
|
||||
void get_lsm_cal(struct acdb_cal_block *cal_block)
|
||||
{
|
||||
pr_debug("%s\n", __func__);
|
||||
|
||||
if (cal_block == NULL) {
|
||||
pr_err("ACDB=> NULL pointer sent to %s\n", __func__);
|
||||
goto done;
|
||||
}
|
||||
|
||||
cal_block->cal_size =
|
||||
atomic_read(&acdb_data.lsm_cal.cal_size);
|
||||
cal_block->cal_paddr =
|
||||
atomic_read(&acdb_data.lsm_cal.cal_paddr);
|
||||
cal_block->cal_kvaddr =
|
||||
atomic_read(&acdb_data.lsm_cal.cal_kvaddr);
|
||||
done:
|
||||
return;
|
||||
}
|
||||
|
||||
void store_lsm_cal(struct cal_block *cal_block)
|
||||
{
|
||||
pr_debug("%s,\n", __func__);
|
||||
|
||||
if (cal_block->cal_offset > atomic64_read(&acdb_data.mem_len)) {
|
||||
pr_err("%s: offset %d is > mem_len %ld\n",
|
||||
__func__, cal_block->cal_offset,
|
||||
(long)atomic64_read(&acdb_data.mem_len));
|
||||
goto done;
|
||||
}
|
||||
|
||||
atomic_set(&acdb_data.lsm_cal.cal_size,
|
||||
cal_block->cal_size);
|
||||
atomic_set(&acdb_data.lsm_cal.cal_paddr,
|
||||
cal_block->cal_offset + atomic64_read(&acdb_data.paddr));
|
||||
atomic_set(&acdb_data.lsm_cal.cal_kvaddr,
|
||||
cal_block->cal_offset + atomic64_read(&acdb_data.kvaddr));
|
||||
done:
|
||||
return;
|
||||
}
|
||||
|
||||
void get_anc_cal(struct acdb_cal_block *cal_block)
|
||||
{
|
||||
pr_debug("%s\n", __func__);
|
||||
@@ -879,6 +922,9 @@ static long acdb_ioctl(struct file *f,
|
||||
case AUDIO_SET_ANC_CAL:
|
||||
store_anc_cal((struct cal_block *)data);
|
||||
goto done;
|
||||
case AUDIO_SET_LSM_CAL:
|
||||
store_lsm_cal((struct cal_block *)data);
|
||||
goto done;
|
||||
default:
|
||||
pr_err("ACDB=> ACDB ioctl not found!\n");
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ uint32_t get_adm_rx_topology(void);
|
||||
uint32_t get_adm_tx_topology(void);
|
||||
uint32_t get_asm_topology(void);
|
||||
void get_voice_cal_allocation(struct acdb_cal_block *cal_block);
|
||||
void get_lsm_cal(struct acdb_cal_block *cal_block);
|
||||
void get_anc_cal(struct acdb_cal_block *cal_block);
|
||||
void get_afe_cal(int32_t path, struct acdb_cal_block *cal_block);
|
||||
void get_audproc_cal(int32_t path, struct acdb_cal_block *cal_block);
|
||||
|
||||
Reference in New Issue
Block a user