Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 95ae87a5 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: Add mixer control to configure port specific channel map"

parents ddc24d05 4ea92b16
Loading
Loading
Loading
Loading
+32 −1
Original line number Diff line number Diff line
/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -17445,6 +17445,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];
	uint32_t be_idx = ucontrol->value.integer.value[0];
	int i;
	for (i = 0; i < PCM_FORMAT_MAX_NUM_CHANNEL; 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 + 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)
{
@@ -17636,6 +17663,10 @@ static int msm_routing_probe(struct snd_soc_platform *platform)
					ARRAY_SIZE(aptx_dec_license_controls));
	snd_soc_add_platform_controls(platform, stereo_channel_reverse_control,
				ARRAY_SIZE(stereo_channel_reverse_control));
	snd_soc_add_platform_controls(platform,
			port_multi_channel_map_mixer_controls,
			ARRAY_SIZE(port_multi_channel_map_mixer_controls));
	return 0;
}
+7 −2
Original line number Diff line number Diff line
/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -4306,9 +4306,14 @@ struct asm_softvolume_params {
/* Rear left of center. */
#define PCM_CHANNEL_RLC  15

/* Rear right of center. */
/* Rear right of center. Update PCM_MAX_CHMAP_ID when
 * this list is extended.
 */
#define PCM_CHANNEL_RRC  16

/* Max valid channel map index */
#define PCM_MAX_CHMAP_ID PCM_CHANNEL_RRC

#define PCM_FORMAT_MAX_NUM_CHANNEL  8

#define ASM_MEDIA_FMT_MULTI_CHANNEL_PCM_V2 0x00010DA5