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

Commit 9bb5ce8e authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: msm: add proxy port and pcm backend in machine driver"

parents 30f572a8 4dad2aea
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -383,6 +383,11 @@ SND_SOC_DAILINK_DEFS(afe_pcm_rx,
	DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")),
	DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing")));

SND_SOC_DAILINK_DEFS(afe_pcm_rx1,
	DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-q6-dev.226")),
	DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-rx")),
	DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing")));

SND_SOC_DAILINK_DEFS(afe_pcm_tx,
	DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-q6-dev.225")),
	DAILINK_COMP_ARRAY(COMP_CODEC("msm-stub-codec.1", "msm-stub-tx")),
+58 −11
Original line number Diff line number Diff line
@@ -295,10 +295,17 @@ static struct dev_config usb_tx_cfg = {
	.channels = 1,
};

static struct dev_config proxy_rx_cfg = {
static struct dev_config proxy_rx_cfg[] = {
	{
		.sample_rate = SAMPLING_RATE_48KHZ,
		.bit_format = SNDRV_PCM_FORMAT_S16_LE,
		.channels = 2,
	},
	{
		.sample_rate = SAMPLING_RATE_48KHZ,
		.bit_format = SNDRV_PCM_FORMAT_S16_LE,
		.channels = 2,
	}
};

/* Default configuration of MI2S channels */
@@ -1293,9 +1300,16 @@ static int ext_disp_rx_sample_rate_put(struct snd_kcontrol *kcontrol,
static int proxy_rx_ch_get(struct snd_kcontrol *kcontrol,
			       struct snd_ctl_elem_value *ucontrol)
{
	if(strnstr(kcontrol->id.name, "RX1", sizeof(kcontrol->id.name))) {
		ucontrol->value.integer.value[0] = proxy_rx_cfg[1].channels - 2;
		pr_debug("%s: proxy_rx1 channels = %d\n",
			 __func__, proxy_rx_cfg[1].channels);
	}
	else {
		ucontrol->value.integer.value[0] = proxy_rx_cfg[0].channels - 2;
		pr_debug("%s: proxy_rx channels = %d\n",
		 __func__, proxy_rx_cfg.channels);
	ucontrol->value.integer.value[0] = proxy_rx_cfg.channels - 2;
			 __func__, proxy_rx_cfg[0].channels);
	}

	return 0;
}
@@ -1303,9 +1317,16 @@ static int proxy_rx_ch_get(struct snd_kcontrol *kcontrol,
static int proxy_rx_ch_put(struct snd_kcontrol *kcontrol,
			       struct snd_ctl_elem_value *ucontrol)
{
	proxy_rx_cfg.channels = ucontrol->value.integer.value[0] + 2;
	if(strnstr(kcontrol->id.name, "RX1", sizeof(kcontrol->id.name))) {
		proxy_rx_cfg[1].channels = ucontrol->value.integer.value[0] + 2;
		pr_debug("%s: proxy_rx1 channels = %d\n",
			 __func__, proxy_rx_cfg[1].channels);
	}
	else {
		proxy_rx_cfg[0].channels = ucontrol->value.integer.value[0] + 2;
		pr_debug("%s: proxy_rx channels = %d\n",
		 __func__, proxy_rx_cfg.channels);
			 __func__, proxy_rx_cfg[0].channels);
	}

	return 1;
}
@@ -2630,6 +2651,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
			ext_disp_rx_ch_get, ext_disp_rx_ch_put),
	SOC_ENUM_EXT("PROXY_RX Channels", proxy_rx_chs,
			proxy_rx_ch_get, proxy_rx_ch_put),
	SOC_ENUM_EXT("PROXY_RX1 Channels", proxy_rx_chs,
			proxy_rx_ch_get, proxy_rx_ch_put),
	SOC_ENUM_EXT("USB_AUDIO_RX Format", usb_rx_format,
			usb_audio_rx_format_get, usb_audio_rx_format_put),
	SOC_ENUM_EXT("USB_AUDIO_TX Format", usb_tx_format,
@@ -3367,7 +3390,12 @@ static int msm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
		break;

	case MSM_BACKEND_DAI_AFE_PCM_RX:
		channels->min = channels->max = proxy_rx_cfg.channels;
		channels->min = channels->max = proxy_rx_cfg[0].channels;
		rate->min = rate->max = SAMPLING_RATE_48KHZ;
		break;

	case MSM_BACKEND_DAI_AFE_PCM_RX1:
		channels->min = channels->max = proxy_rx_cfg[1].channels;
		rate->min = rate->max = SAMPLING_RATE_48KHZ;
		break;

@@ -5835,6 +5863,13 @@ static struct snd_soc_dai_link msm_auto_fe_dai_links[] = {
		.id = MSM_FRONTEND_DAI_MULTIMEDIA34,
		SND_SOC_DAILINK_REG(multimedia34),
	},
	{
		.name = "MSM AFE-PCM TX1",
		.stream_name = "AFE-PROXY TX1",
		.dpcm_capture = 1,
		.ignore_suspend = 1,
		SND_SOC_DAILINK_REG(afepcm_tx1),
	},
};

static struct snd_soc_dai_link msm_custom_fe_dai_links[] = {
@@ -6561,6 +6596,18 @@ static struct snd_soc_dai_link msm_auto_be_dai_links[] = {
		.ignore_suspend = 1,
		SND_SOC_DAILINK_REG(quin_tdm_tx_7),
	},
	{
		.name = LPASS_BE_AFE_PCM_RX1,
		.stream_name = "AFE Playback1",
		.no_pcm = 1,
		.dpcm_playback = 1,
		.id = MSM_BACKEND_DAI_AFE_PCM_RX1,
		.be_hw_params_fixup = msm_be_hw_params_fixup,
		/* this dainlink has playback support */
		.ignore_pmdown_time = 1,
		.ignore_suspend = 1,
		SND_SOC_DAILINK_REG(afe_pcm_rx1),
	},
};

static struct snd_soc_dai_link ext_disp_be_dai_link[] = {
+58 −11
Original line number Diff line number Diff line
@@ -297,10 +297,17 @@ static struct dev_config usb_tx_cfg = {
	.channels = 1,
};

static struct dev_config proxy_rx_cfg = {
static struct dev_config proxy_rx_cfg[] = {
	{
		.sample_rate = SAMPLING_RATE_48KHZ,
		.bit_format = SNDRV_PCM_FORMAT_S16_LE,
		.channels = 2,
	},
	{
		.sample_rate = SAMPLING_RATE_48KHZ,
		.bit_format = SNDRV_PCM_FORMAT_S16_LE,
		.channels = 2,
	}
};

/* Default configuration of MI2S channels */
@@ -1296,9 +1303,16 @@ static int ext_disp_rx_sample_rate_put(struct snd_kcontrol *kcontrol,
static int proxy_rx_ch_get(struct snd_kcontrol *kcontrol,
			       struct snd_ctl_elem_value *ucontrol)
{
	if(strnstr(kcontrol->id.name, "RX1", sizeof(kcontrol->id.name))) {
		ucontrol->value.integer.value[0] = proxy_rx_cfg[1].channels - 2;
		pr_debug("%s: proxy_rx1 channels = %d\n",
			 __func__, proxy_rx_cfg[1].channels);
	}
	else {
		ucontrol->value.integer.value[0] = proxy_rx_cfg[0].channels - 2;
		pr_debug("%s: proxy_rx channels = %d\n",
		 __func__, proxy_rx_cfg.channels);
	ucontrol->value.integer.value[0] = proxy_rx_cfg.channels - 2;
			 __func__, proxy_rx_cfg[0].channels);
	}

	return 0;
}
@@ -1306,9 +1320,16 @@ static int proxy_rx_ch_get(struct snd_kcontrol *kcontrol,
static int proxy_rx_ch_put(struct snd_kcontrol *kcontrol,
			       struct snd_ctl_elem_value *ucontrol)
{
	proxy_rx_cfg.channels = ucontrol->value.integer.value[0] + 2;
	if(strnstr(kcontrol->id.name, "RX1", sizeof(kcontrol->id.name))) {
		proxy_rx_cfg[1].channels = ucontrol->value.integer.value[0] + 2;
		pr_debug("%s: proxy_rx1 channels = %d\n",
			 __func__, proxy_rx_cfg[1].channels);
	}
	else {
		proxy_rx_cfg[0].channels = ucontrol->value.integer.value[0] + 2;
		pr_debug("%s: proxy_rx channels = %d\n",
		 __func__, proxy_rx_cfg.channels);
			 __func__, proxy_rx_cfg[0].channels);
	}

	return 1;
}
@@ -2633,6 +2654,8 @@ static const struct snd_kcontrol_new msm_snd_controls[] = {
			ext_disp_rx_ch_get, ext_disp_rx_ch_put),
	SOC_ENUM_EXT("PROXY_RX Channels", proxy_rx_chs,
			proxy_rx_ch_get, proxy_rx_ch_put),
	SOC_ENUM_EXT("PROXY_RX1 Channels", proxy_rx_chs,
			proxy_rx_ch_get, proxy_rx_ch_put),
	SOC_ENUM_EXT("USB_AUDIO_RX Format", usb_rx_format,
			usb_audio_rx_format_get, usb_audio_rx_format_put),
	SOC_ENUM_EXT("USB_AUDIO_TX Format", usb_tx_format,
@@ -3370,7 +3393,12 @@ static int msm_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
		break;

	case MSM_BACKEND_DAI_AFE_PCM_RX:
		channels->min = channels->max = proxy_rx_cfg.channels;
		channels->min = channels->max = proxy_rx_cfg[0].channels;
		rate->min = rate->max = SAMPLING_RATE_48KHZ;
		break;

	case MSM_BACKEND_DAI_AFE_PCM_RX1:
		channels->min = channels->max = proxy_rx_cfg[1].channels;
		rate->min = rate->max = SAMPLING_RATE_48KHZ;
		break;

@@ -5832,6 +5860,13 @@ static struct snd_soc_dai_link msm_auto_fe_dai_links[] = {
		.id = MSM_FRONTEND_DAI_MULTIMEDIA34,
		SND_SOC_DAILINK_REG(multimedia34),
	},
	{
		.name = "MSM AFE-PCM TX1",
		.stream_name = "AFE-PROXY TX1",
		.dpcm_capture = 1,
		.ignore_suspend = 1,
		SND_SOC_DAILINK_REG(afepcm_tx1),
	},
};

static struct snd_soc_dai_link msm_custom_fe_dai_links[] = {
@@ -6558,6 +6593,18 @@ static struct snd_soc_dai_link msm_auto_be_dai_links[] = {
		.ignore_suspend = 1,
		SND_SOC_DAILINK_REG(quin_tdm_tx_7),
	},
	{
		.name = LPASS_BE_AFE_PCM_RX1,
		.stream_name = "AFE Playback1",
		.no_pcm = 1,
		.dpcm_playback = 1,
		.id = MSM_BACKEND_DAI_AFE_PCM_RX1,
		.be_hw_params_fixup = msm_be_hw_params_fixup,
		/* this dainlink has playback support */
		.ignore_pmdown_time = 1,
		.ignore_suspend = 1,
		SND_SOC_DAILINK_REG(afe_pcm_rx1),
	},
};

static struct snd_soc_dai_link ext_disp_be_dai_link[] = {