ASoC: Add mixer control to configure port specific channel map

Add mixer control to configure multi channel map for
each backend separately.

Change-Id: Ie114fa38ee5ce47841cda4cd7f31349905f5c2c7
Signed-off-by: Rohit kumar <rohitkr@codeaurora.org>
This commit is contained in:
Rohit kumar 2019-02-01 18:05:33 +05:30 • committed by Meng Wang
commit 63ffaa76d5
2 changed files with 36 additions and 1 deletions

View file

@ -24531,6 +24531,33 @@ static const struct snd_kcontrol_new aptx_dec_license_controls[] = {
msm_aptx_dec_license_control_put),
};
static int msm_routing_put_port_chmap_mixer(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
uint8_t channel_map[PCM_FORMAT_MAX_NUM_CHANNEL_V8];
uint32_t be_idx = ucontrol->value.integer.value[0];
int i;
for (i = 0; i < PCM_FORMAT_MAX_NUM_CHANNEL_V8; i++) {
channel_map[i] = (char)(ucontrol->value.integer.value[i + 1]);
if (channel_map[i] > PCM_MAX_CHMAP_ID) {
pr_err("%s: Invalid channel map %d\n",
__func__, channel_map[i]);
return -EINVAL;
}
}
adm_set_port_multi_ch_map(channel_map, msm_bedais[be_idx].port_id);
return 0;
}
static const struct snd_kcontrol_new port_multi_channel_map_mixer_controls[] = {
SOC_SINGLE_MULTI_EXT("Backend Device Channel Map", SND_SOC_NOPM, 0,
MSM_BACKEND_DAI_MAX, 0,
PCM_FORMAT_MAX_NUM_CHANNEL_V8 + 1, NULL,
msm_routing_put_port_chmap_mixer),
};
static int msm_routing_be_dai_name_table_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo)
{
@ -24769,6 +24796,9 @@ static int msm_routing_probe(struct snd_soc_component *component)
snd_soc_add_component_controls(
component, msm_routing_feature_support_mixer_controls,
ARRAY_SIZE(msm_routing_feature_support_mixer_controls));
snd_soc_add_component_controls(component,
port_multi_channel_map_mixer_controls,
ARRAY_SIZE(port_multi_channel_map_mixer_controls));
return 0;
}

View file

@ -5569,12 +5569,17 @@ struct asm_softvolume_params {
/* Left side direct channel. */
#define PCM_CHANNEL_LSD 33
/* Right side direct channel. */
/* Right side direct channel. Update PCM_MAX_CHMAP_ID when
* this list is extended.
*/
#define PCM_CHANNEL_RSD 34
/* Mark unused channel. */
#define PCM_CHANNEL_UNUSED 47
/* Max valid channel map index */
#define PCM_MAX_CHMAP_ID PCM_CHANNEL_RSD
#define PCM_FORMAT_MAX_NUM_CHANNEL 8
#define PCM_FORMAT_MAX_CHANNELS_9 9