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

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

Merge "ASoC: msm_sdw: Add 48k TX VI sense sampling rate support"

parents 083b8cc4 ac0a983d
Loading
Loading
Loading
Loading
+47 −33
Original line number Diff line number Diff line
@@ -471,10 +471,9 @@ static int msm_sdw_codec_enable_vi_feedback(struct snd_soc_dapm_widget *w,
				MSM_SDW_TX10_SPKR_PROT_PATH_CTL, 0x20,
				0x20);
			snd_soc_update_bits(codec,
				MSM_SDW_TX9_SPKR_PROT_PATH_CTL, 0x0F, 0x00);
				MSM_SDW_TX9_SPKR_PROT_PATH_CTL, 0x0F, 0x04);
			snd_soc_update_bits(codec,
				MSM_SDW_TX10_SPKR_PROT_PATH_CTL, 0x0F,
				0x00);
				MSM_SDW_TX10_SPKR_PROT_PATH_CTL, 0x0F, 0x04);
			snd_soc_update_bits(codec,
				MSM_SDW_TX9_SPKR_PROT_PATH_CTL, 0x10, 0x10);
			snd_soc_update_bits(codec,
@@ -497,10 +496,10 @@ static int msm_sdw_codec_enable_vi_feedback(struct snd_soc_dapm_widget *w,
				0x20);
			snd_soc_update_bits(codec,
				MSM_SDW_TX11_SPKR_PROT_PATH_CTL, 0x0F,
				0x00);
				0x04);
			snd_soc_update_bits(codec,
				MSM_SDW_TX12_SPKR_PROT_PATH_CTL, 0x0F,
				0x00);
				0x04);
			snd_soc_update_bits(codec,
				MSM_SDW_TX11_SPKR_PROT_PATH_CTL, 0x10,
				0x10);
@@ -1236,7 +1235,7 @@ static int msm_sdw_hw_params(struct snd_pcm_substream *substream,
			    struct snd_pcm_hw_params *params,
			    struct snd_soc_dai *dai)
{
	u8 rx_clk_fs_rate, rx_fs_rate;
	u8 clk_fs_rate, fs_rate;

	dev_dbg(dai->codec->dev,
		"%s: dai_name = %s DAI-ID %x rate %d num_ch %d format %d\n",
@@ -1245,28 +1244,28 @@ static int msm_sdw_hw_params(struct snd_pcm_substream *substream,

	switch (params_rate(params)) {
	case 8000:
		rx_clk_fs_rate = 0x00;
		rx_fs_rate = 0x00;
		clk_fs_rate = 0x00;
		fs_rate = 0x00;
		break;
	case 16000:
		rx_clk_fs_rate = 0x01;
		rx_fs_rate = 0x01;
		clk_fs_rate = 0x01;
		fs_rate = 0x01;
		break;
	case 32000:
		rx_clk_fs_rate = 0x02;
		rx_fs_rate = 0x03;
		clk_fs_rate = 0x02;
		fs_rate = 0x03;
		break;
	case 48000:
		rx_clk_fs_rate = 0x03;
		rx_fs_rate = 0x04;
		clk_fs_rate = 0x03;
		fs_rate = 0x04;
		break;
	case 96000:
		rx_clk_fs_rate = 0x04;
		rx_fs_rate = 0x05;
		clk_fs_rate = 0x04;
		fs_rate = 0x05;
		break;
	case 192000:
		rx_clk_fs_rate = 0x05;
		rx_fs_rate = 0x06;
		clk_fs_rate = 0x05;
		fs_rate = 0x06;
		break;
	default:
		dev_err(dai->codec->dev,
@@ -1275,20 +1274,37 @@ static int msm_sdw_hw_params(struct snd_pcm_substream *substream,
		return -EINVAL;
	}

	if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
		snd_soc_update_bits(dai->codec,
				MSM_SDW_TOP_TX_I2S_CTL, 0x1C,
				(clk_fs_rate << 2));
	} else {
		snd_soc_update_bits(dai->codec,
			MSM_SDW_TOP_RX_I2S_CTL, 0x1C, (rx_clk_fs_rate << 2));
				MSM_SDW_TOP_RX_I2S_CTL, 0x1C,
				(clk_fs_rate << 2));
		snd_soc_update_bits(dai->codec,
			MSM_SDW_RX7_RX_PATH_CTL, 0x0F, rx_fs_rate);
				MSM_SDW_RX7_RX_PATH_CTL, 0x0F,
				fs_rate);
		snd_soc_update_bits(dai->codec,
			MSM_SDW_RX8_RX_PATH_CTL, 0x0F, rx_fs_rate);
				MSM_SDW_RX8_RX_PATH_CTL, 0x0F,
				fs_rate);
	}

	switch (params_format(params)) {
	case SNDRV_PCM_FORMAT_S16_LE:
		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
			snd_soc_update_bits(dai->codec,
					MSM_SDW_TOP_TX_I2S_CTL, 0x20, 0x20);
		else
			snd_soc_update_bits(dai->codec,
					MSM_SDW_TOP_RX_I2S_CTL, 0x20, 0x20);
		break;
	case SNDRV_PCM_FORMAT_S24_LE:
	case SNDRV_PCM_FORMAT_S24_3LE:
		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
			snd_soc_update_bits(dai->codec,
					MSM_SDW_TOP_TX_I2S_CTL, 0x20, 0x00);
		else
			snd_soc_update_bits(dai->codec,
					MSM_SDW_TOP_RX_I2S_CTL, 0x20, 0x00);
		break;
@@ -1297,8 +1313,6 @@ static int msm_sdw_hw_params(struct snd_pcm_substream *substream,
				__func__);
		return -EINVAL;
	}
	snd_soc_update_bits(dai->codec,
			MSM_SDW_TOP_TX_I2S_CTL, 0x20, 0x20);

	return 0;
}
@@ -1414,7 +1428,7 @@ static struct snd_soc_dai_driver msm_sdw_dai[] = {
			.rate_max = 192000,
			.rate_min = 8000,
			.channels_min = 1,
			.channels_max = 2,
			.channels_max = 4,
		},
		.ops = &msm_sdw_dai_ops,
	},
@@ -1423,9 +1437,9 @@ static struct snd_soc_dai_driver msm_sdw_dai[] = {
		.id = AIF1_SDW_VIFEED,
		.capture = {
			.stream_name = "VIfeed_SDW",
			.rates = SNDRV_PCM_RATE_8000,
			.rates = MSM_SDW_RATES,
			.formats = SNDRV_PCM_FMTBIT_S16_LE,
			.rate_max = 8000,
			.rate_max = 48000,
			.rate_min = 8000,
			.channels_min = 2,
			.channels_max = 4,