ASoC: msm: qdsp6v2: updating downmix/pan_scale control type to bytes
Change the downmix/pan_scale control data type from integer to bytes to make it compatible across different archs. Change-Id: I9282673dc1e124185d7c545206bba31966b803dc Signed-off-by: Varun Balaraj <varunb@codeaurora.org>
This commit is contained in:
parent
7200f000f9
commit
0a1c253171
1 changed files with 82 additions and 58 deletions
|
@ -1607,10 +1607,8 @@ done:
|
||||||
static int msm_pcm_playback_pan_scale_ctl_info(struct snd_kcontrol *kcontrol,
|
static int msm_pcm_playback_pan_scale_ctl_info(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_ctl_elem_info *uinfo)
|
struct snd_ctl_elem_info *uinfo)
|
||||||
{
|
{
|
||||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
|
||||||
uinfo->count = 128;
|
uinfo->count = sizeof(struct asm_stream_pan_ctrl_params);
|
||||||
uinfo->value.integer.min = 0;
|
|
||||||
uinfo->value.integer.max = 0xFFFFFFFF;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1626,7 +1624,8 @@ static int msm_pcm_playback_pan_scale_ctl_put(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_pcm_substream *substream;
|
struct snd_pcm_substream *substream;
|
||||||
struct msm_audio *prtd;
|
struct msm_audio *prtd;
|
||||||
struct asm_stream_pan_ctrl_params pan_param;
|
struct asm_stream_pan_ctrl_params pan_param;
|
||||||
|
char *usr_value = NULL;
|
||||||
|
uint32_t *gain_ptr = NULL;
|
||||||
if (!usr_info) {
|
if (!usr_info) {
|
||||||
pr_err("%s: usr_info is null\n", __func__);
|
pr_err("%s: usr_info is null\n", __func__);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
@ -1662,54 +1661,71 @@ static int msm_pcm_playback_pan_scale_ctl_put(struct snd_kcontrol *kcontrol,
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
pan_param.num_output_channels =
|
usr_value = (char *) ucontrol->value.bytes.data;
|
||||||
ucontrol->value.integer.value[len++];
|
if (!usr_value) {
|
||||||
|
pr_err("%s ucontrol data is null\n", __func__);
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
memcpy(&pan_param.num_output_channels, &usr_value[len],
|
||||||
|
sizeof(pan_param.num_output_channels));
|
||||||
|
len += sizeof(pan_param.num_output_channels);
|
||||||
if (pan_param.num_output_channels >
|
if (pan_param.num_output_channels >
|
||||||
PCM_FORMAT_MAX_NUM_CHANNEL) {
|
PCM_FORMAT_MAX_NUM_CHANNEL) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
pan_param.num_input_channels =
|
memcpy(&pan_param.num_input_channels, &usr_value[len],
|
||||||
ucontrol->value.integer.value[len++];
|
sizeof(pan_param.num_input_channels));
|
||||||
|
len += sizeof(pan_param.num_input_channels);
|
||||||
if (pan_param.num_input_channels >
|
if (pan_param.num_input_channels >
|
||||||
PCM_FORMAT_MAX_NUM_CHANNEL) {
|
PCM_FORMAT_MAX_NUM_CHANNEL) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ucontrol->value.integer.value[len++]) {
|
if (usr_value[len++]) {
|
||||||
for (i = 0; i < pan_param.num_output_channels; i++) {
|
memcpy(pan_param.output_channel_map, &usr_value[len],
|
||||||
pan_param.output_channel_map[i] =
|
(pan_param.num_output_channels *
|
||||||
ucontrol->value.integer.value[len++];
|
sizeof(pan_param.output_channel_map[0])));
|
||||||
}
|
len += (pan_param.num_output_channels *
|
||||||
|
sizeof(pan_param.output_channel_map[0]));
|
||||||
}
|
}
|
||||||
if (ucontrol->value.integer.value[len++]) {
|
if (usr_value[len++]) {
|
||||||
for (i = 0; i < pan_param.num_input_channels; i++) {
|
memcpy(pan_param.input_channel_map, &usr_value[len],
|
||||||
pan_param.input_channel_map[i] =
|
(pan_param.num_input_channels *
|
||||||
ucontrol->value.integer.value[len++];
|
sizeof(pan_param.input_channel_map[0])));
|
||||||
}
|
len += (pan_param.num_input_channels *
|
||||||
|
sizeof(pan_param.input_channel_map[0]));
|
||||||
}
|
}
|
||||||
if (ucontrol->value.integer.value[len++]) {
|
if (usr_value[len++]) {
|
||||||
|
gain_ptr = (uint32_t *) &usr_value[len];
|
||||||
for (i = 0; i < pan_param.num_output_channels *
|
for (i = 0; i < pan_param.num_output_channels *
|
||||||
pan_param.num_input_channels; i++) {
|
pan_param.num_input_channels; i++) {
|
||||||
pan_param.gain[i] =
|
pan_param.gain[i] =
|
||||||
!(ucontrol->value.integer.value[len++] > 0) ?
|
!(gain_ptr[i] > 0) ?
|
||||||
0 : 2 << 13;
|
0 : 2 << 13;
|
||||||
|
len += sizeof(pan_param.gain[i]);
|
||||||
}
|
}
|
||||||
|
len += (pan_param.num_input_channels *
|
||||||
|
pan_param.num_output_channels * sizeof(pan_param.gain[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = q6asm_set_mfc_panning_params(prtd->audio_client,
|
ret = q6asm_set_mfc_panning_params(prtd->audio_client,
|
||||||
&pan_param);
|
&pan_param);
|
||||||
len -= pan_param.num_output_channels *
|
len -= pan_param.num_output_channels *
|
||||||
pan_param.num_input_channels;
|
pan_param.num_input_channels * sizeof(pan_param.gain[0]);
|
||||||
for (i = 0; i < pan_param.num_output_channels *
|
if (gain_ptr) {
|
||||||
pan_param.num_input_channels; i++) {
|
for (i = 0; i < pan_param.num_output_channels *
|
||||||
/*
|
pan_param.num_input_channels; i++) {
|
||||||
* The data userspace passes is already in Q14 format.
|
/*
|
||||||
* For volume gain is in Q28.
|
* The data userspace passes is already in Q14 format.
|
||||||
*/
|
* For volume gain is in Q28.
|
||||||
pan_param.gain[i] =
|
*/
|
||||||
ucontrol->value.integer.value[len++] << 14;
|
pan_param.gain[i] =
|
||||||
|
(gain_ptr[i]) << 14;
|
||||||
|
len += sizeof(pan_param.gain[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ret = q6asm_set_vol_ctrl_gain_pair(prtd->audio_client,
|
ret = q6asm_set_vol_ctrl_gain_pair(prtd->audio_client,
|
||||||
&pan_param);
|
&pan_param);
|
||||||
|
@ -1794,10 +1810,8 @@ static int msm_pcm_playback_dnmix_ctl_get(struct snd_kcontrol *kcontrol,
|
||||||
static int msm_pcm_playback_dnmix_ctl_info(struct snd_kcontrol *kcontrol,
|
static int msm_pcm_playback_dnmix_ctl_info(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_ctl_elem_info *uinfo)
|
struct snd_ctl_elem_info *uinfo)
|
||||||
{
|
{
|
||||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
|
||||||
uinfo->count = 128;
|
uinfo->count = sizeof(struct asm_stream_pan_ctrl_params);
|
||||||
uinfo->value.integer.min = 0;
|
|
||||||
uinfo->value.integer.max = 0xFFFFFFFF;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1806,7 +1820,6 @@ static int msm_pcm_playback_dnmix_ctl_put(struct snd_kcontrol *kcontrol,
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
struct snd_soc_component *usr_info = snd_kcontrol_chip(kcontrol);
|
struct snd_soc_component *usr_info = snd_kcontrol_chip(kcontrol);
|
||||||
struct snd_soc_platform *platform;
|
struct snd_soc_platform *platform;
|
||||||
|
@ -1814,8 +1827,8 @@ static int msm_pcm_playback_dnmix_ctl_put(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_pcm_substream *substream;
|
struct snd_pcm_substream *substream;
|
||||||
struct msm_audio *prtd;
|
struct msm_audio *prtd;
|
||||||
struct asm_stream_pan_ctrl_params dnmix_param;
|
struct asm_stream_pan_ctrl_params dnmix_param;
|
||||||
|
char *usr_value;
|
||||||
int be_id = ucontrol->value.integer.value[len++];
|
int be_id = 0;
|
||||||
int stream_id = 0;
|
int stream_id = 0;
|
||||||
|
|
||||||
if (!usr_info) {
|
if (!usr_info) {
|
||||||
|
@ -1851,40 +1864,51 @@ static int msm_pcm_playback_dnmix_ctl_put(struct snd_kcontrol *kcontrol,
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
usr_value = (char *) ucontrol->value.bytes.data;
|
||||||
|
if (!usr_value) {
|
||||||
|
pr_err("%s usrvalue is null\n", __func__);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
memcpy(&be_id, usr_value, sizeof(be_id));
|
||||||
|
len += sizeof(be_id);
|
||||||
stream_id = prtd->audio_client->session;
|
stream_id = prtd->audio_client->session;
|
||||||
dnmix_param.num_output_channels =
|
memcpy(&dnmix_param.num_output_channels, &usr_value[len],
|
||||||
ucontrol->value.integer.value[len++];
|
sizeof(dnmix_param.num_output_channels));
|
||||||
|
len += sizeof(dnmix_param.num_output_channels);
|
||||||
if (dnmix_param.num_output_channels >
|
if (dnmix_param.num_output_channels >
|
||||||
PCM_FORMAT_MAX_NUM_CHANNEL) {
|
PCM_FORMAT_MAX_NUM_CHANNEL) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
dnmix_param.num_input_channels =
|
memcpy(&dnmix_param.num_input_channels, &usr_value[len],
|
||||||
ucontrol->value.integer.value[len++];
|
sizeof(dnmix_param.num_input_channels));
|
||||||
|
len += sizeof(dnmix_param.num_input_channels);
|
||||||
if (dnmix_param.num_input_channels >
|
if (dnmix_param.num_input_channels >
|
||||||
PCM_FORMAT_MAX_NUM_CHANNEL) {
|
PCM_FORMAT_MAX_NUM_CHANNEL) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
if (usr_value[len++]) {
|
||||||
if (ucontrol->value.integer.value[len++]) {
|
memcpy(dnmix_param.output_channel_map, &usr_value[len],
|
||||||
for (i = 0; i < dnmix_param.num_output_channels; i++) {
|
(dnmix_param.num_output_channels *
|
||||||
dnmix_param.output_channel_map[i] =
|
sizeof(dnmix_param.output_channel_map[0])));
|
||||||
ucontrol->value.integer.value[len++];
|
len += (dnmix_param.num_output_channels *
|
||||||
}
|
sizeof(dnmix_param.output_channel_map[0]));
|
||||||
}
|
}
|
||||||
if (ucontrol->value.integer.value[len++]) {
|
if (usr_value[len++]) {
|
||||||
for (i = 0; i < dnmix_param.num_input_channels; i++) {
|
memcpy(dnmix_param.input_channel_map, &usr_value[len],
|
||||||
dnmix_param.input_channel_map[i] =
|
(dnmix_param.num_input_channels *
|
||||||
ucontrol->value.integer.value[len++];
|
sizeof(dnmix_param.input_channel_map[0])));
|
||||||
}
|
len += (dnmix_param.num_input_channels *
|
||||||
|
sizeof(dnmix_param.input_channel_map[0]));
|
||||||
}
|
}
|
||||||
if (ucontrol->value.integer.value[len++]) {
|
if (usr_value[len++]) {
|
||||||
for (i = 0; i < dnmix_param.num_output_channels *
|
memcpy(dnmix_param.gain, (uint32_t *) &usr_value[len],
|
||||||
dnmix_param.num_input_channels; i++) {
|
(dnmix_param.num_input_channels *
|
||||||
dnmix_param.gain[i] =
|
dnmix_param.num_output_channels *
|
||||||
ucontrol->value.integer.value[len++];
|
sizeof(dnmix_param.gain[0])));
|
||||||
}
|
len += (dnmix_param.num_input_channels *
|
||||||
|
dnmix_param.num_output_channels * sizeof(dnmix_param.gain[0]));
|
||||||
}
|
}
|
||||||
msm_routing_set_downmix_control_data(be_id,
|
msm_routing_set_downmix_control_data(be_id,
|
||||||
stream_id,
|
stream_id,
|
||||||
|
|
Loading…
Add table
Reference in a new issue