diff --git a/arch/arm/mach-msm/qdsp6v2/audio_multi_aac.c b/arch/arm/mach-msm/qdsp6v2/audio_multi_aac.c index 3a73666e81c..9c8525fd147 100644 --- a/arch/arm/mach-msm/qdsp6v2/audio_multi_aac.c +++ b/arch/arm/mach-msm/qdsp6v2/audio_multi_aac.c @@ -180,6 +180,25 @@ static long audio_ioctl(struct file *file, unsigned int cmd, unsigned long arg) } break; } + case AUDIO_SET_AAC_MIX_CONFIG: { + pr_debug("%s, AUDIO_SET_AAC_MIX_CONFIG", __func__); + if (copy_from_user(audio->codec_cfg, (void *)arg, + sizeof(unsigned long))) { + rc = -EFAULT; + break; + } else { + unsigned long *mix_coeff = + (unsigned long *)audio->codec_cfg; + pr_debug("%s, value of coeff = %lu", + __func__, *mix_coeff); + rc = q6asm_cfg_aac_sel_mix_coef(audio->ac, *mix_coeff); + if (rc < 0) + pr_err("%s asm aac_sel_mix_coef failed rc=%d\n", + __func__, rc); + break; + } + break; + } default: pr_debug("Calling utils ioctl\n"); rc = audio->codec_ioctl(file, cmd, arg); diff --git a/include/linux/msm_audio_aac.h b/include/linux/msm_audio_aac.h index 620e5abfc8d..e03c4f892b9 100644 --- a/include/linux/msm_audio_aac.h +++ b/include/linux/msm_audio_aac.h @@ -14,6 +14,9 @@ #define AUDIO_GET_AAC_ENC_CONFIG _IOR(AUDIO_IOCTL_MAGIC, \ (AUDIO_MAX_COMMON_IOCTL_NUM+4), struct msm_audio_aac_enc_config) +#define AUDIO_SET_AAC_MIX_CONFIG _IOR(AUDIO_IOCTL_MAGIC, \ + (AUDIO_MAX_COMMON_IOCTL_NUM+5), unsigned) + #define AUDIO_AAC_FORMAT_ADTS -1 #define AUDIO_AAC_FORMAT_RAW 0x0000 #define AUDIO_AAC_FORMAT_PSUEDO_RAW 0x0001