Merge "ASoC: msm_sdw: Add 48k TX VI sense sampling rate support"
This commit is contained in:
commit
b7fb0e4bdf
1 changed files with 47 additions and 33 deletions
|
@ -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,
|
MSM_SDW_TX10_SPKR_PROT_PATH_CTL, 0x20,
|
||||||
0x20);
|
0x20);
|
||||||
snd_soc_update_bits(codec,
|
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,
|
snd_soc_update_bits(codec,
|
||||||
MSM_SDW_TX10_SPKR_PROT_PATH_CTL, 0x0F,
|
MSM_SDW_TX10_SPKR_PROT_PATH_CTL, 0x0F, 0x04);
|
||||||
0x00);
|
|
||||||
snd_soc_update_bits(codec,
|
snd_soc_update_bits(codec,
|
||||||
MSM_SDW_TX9_SPKR_PROT_PATH_CTL, 0x10, 0x10);
|
MSM_SDW_TX9_SPKR_PROT_PATH_CTL, 0x10, 0x10);
|
||||||
snd_soc_update_bits(codec,
|
snd_soc_update_bits(codec,
|
||||||
|
@ -497,10 +496,10 @@ static int msm_sdw_codec_enable_vi_feedback(struct snd_soc_dapm_widget *w,
|
||||||
0x20);
|
0x20);
|
||||||
snd_soc_update_bits(codec,
|
snd_soc_update_bits(codec,
|
||||||
MSM_SDW_TX11_SPKR_PROT_PATH_CTL, 0x0F,
|
MSM_SDW_TX11_SPKR_PROT_PATH_CTL, 0x0F,
|
||||||
0x00);
|
0x04);
|
||||||
snd_soc_update_bits(codec,
|
snd_soc_update_bits(codec,
|
||||||
MSM_SDW_TX12_SPKR_PROT_PATH_CTL, 0x0F,
|
MSM_SDW_TX12_SPKR_PROT_PATH_CTL, 0x0F,
|
||||||
0x00);
|
0x04);
|
||||||
snd_soc_update_bits(codec,
|
snd_soc_update_bits(codec,
|
||||||
MSM_SDW_TX11_SPKR_PROT_PATH_CTL, 0x10,
|
MSM_SDW_TX11_SPKR_PROT_PATH_CTL, 0x10,
|
||||||
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_pcm_hw_params *params,
|
||||||
struct snd_soc_dai *dai)
|
struct snd_soc_dai *dai)
|
||||||
{
|
{
|
||||||
u8 rx_clk_fs_rate, rx_fs_rate;
|
u8 clk_fs_rate, fs_rate;
|
||||||
|
|
||||||
dev_dbg(dai->codec->dev,
|
dev_dbg(dai->codec->dev,
|
||||||
"%s: dai_name = %s DAI-ID %x rate %d num_ch %d format %d\n",
|
"%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)) {
|
switch (params_rate(params)) {
|
||||||
case 8000:
|
case 8000:
|
||||||
rx_clk_fs_rate = 0x00;
|
clk_fs_rate = 0x00;
|
||||||
rx_fs_rate = 0x00;
|
fs_rate = 0x00;
|
||||||
break;
|
break;
|
||||||
case 16000:
|
case 16000:
|
||||||
rx_clk_fs_rate = 0x01;
|
clk_fs_rate = 0x01;
|
||||||
rx_fs_rate = 0x01;
|
fs_rate = 0x01;
|
||||||
break;
|
break;
|
||||||
case 32000:
|
case 32000:
|
||||||
rx_clk_fs_rate = 0x02;
|
clk_fs_rate = 0x02;
|
||||||
rx_fs_rate = 0x03;
|
fs_rate = 0x03;
|
||||||
break;
|
break;
|
||||||
case 48000:
|
case 48000:
|
||||||
rx_clk_fs_rate = 0x03;
|
clk_fs_rate = 0x03;
|
||||||
rx_fs_rate = 0x04;
|
fs_rate = 0x04;
|
||||||
break;
|
break;
|
||||||
case 96000:
|
case 96000:
|
||||||
rx_clk_fs_rate = 0x04;
|
clk_fs_rate = 0x04;
|
||||||
rx_fs_rate = 0x05;
|
fs_rate = 0x05;
|
||||||
break;
|
break;
|
||||||
case 192000:
|
case 192000:
|
||||||
rx_clk_fs_rate = 0x05;
|
clk_fs_rate = 0x05;
|
||||||
rx_fs_rate = 0x06;
|
fs_rate = 0x06;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(dai->codec->dev,
|
dev_err(dai->codec->dev,
|
||||||
|
@ -1275,30 +1274,45 @@ static int msm_sdw_hw_params(struct snd_pcm_substream *substream,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
snd_soc_update_bits(dai->codec,
|
if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
|
||||||
MSM_SDW_TOP_RX_I2S_CTL, 0x1C, (rx_clk_fs_rate << 2));
|
snd_soc_update_bits(dai->codec,
|
||||||
snd_soc_update_bits(dai->codec,
|
MSM_SDW_TOP_TX_I2S_CTL, 0x1C,
|
||||||
MSM_SDW_RX7_RX_PATH_CTL, 0x0F, rx_fs_rate);
|
(clk_fs_rate << 2));
|
||||||
snd_soc_update_bits(dai->codec,
|
} else {
|
||||||
MSM_SDW_RX8_RX_PATH_CTL, 0x0F, rx_fs_rate);
|
snd_soc_update_bits(dai->codec,
|
||||||
|
MSM_SDW_TOP_RX_I2S_CTL, 0x1C,
|
||||||
|
(clk_fs_rate << 2));
|
||||||
|
snd_soc_update_bits(dai->codec,
|
||||||
|
MSM_SDW_RX7_RX_PATH_CTL, 0x0F,
|
||||||
|
fs_rate);
|
||||||
|
snd_soc_update_bits(dai->codec,
|
||||||
|
MSM_SDW_RX8_RX_PATH_CTL, 0x0F,
|
||||||
|
fs_rate);
|
||||||
|
}
|
||||||
|
|
||||||
switch (params_format(params)) {
|
switch (params_format(params)) {
|
||||||
case SNDRV_PCM_FORMAT_S16_LE:
|
case SNDRV_PCM_FORMAT_S16_LE:
|
||||||
snd_soc_update_bits(dai->codec,
|
if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
|
||||||
MSM_SDW_TOP_RX_I2S_CTL, 0x20, 0x20);
|
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;
|
break;
|
||||||
case SNDRV_PCM_FORMAT_S24_LE:
|
case SNDRV_PCM_FORMAT_S24_LE:
|
||||||
case SNDRV_PCM_FORMAT_S24_3LE:
|
case SNDRV_PCM_FORMAT_S24_3LE:
|
||||||
snd_soc_update_bits(dai->codec,
|
if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
|
||||||
MSM_SDW_TOP_RX_I2S_CTL, 0x20, 0x00);
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(dai->codec->dev, "%s: wrong format selected\n",
|
dev_err(dai->codec->dev, "%s: wrong format selected\n",
|
||||||
__func__);
|
__func__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
snd_soc_update_bits(dai->codec,
|
|
||||||
MSM_SDW_TOP_TX_I2S_CTL, 0x20, 0x20);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1414,7 +1428,7 @@ static struct snd_soc_dai_driver msm_sdw_dai[] = {
|
||||||
.rate_max = 192000,
|
.rate_max = 192000,
|
||||||
.rate_min = 8000,
|
.rate_min = 8000,
|
||||||
.channels_min = 1,
|
.channels_min = 1,
|
||||||
.channels_max = 2,
|
.channels_max = 4,
|
||||||
},
|
},
|
||||||
.ops = &msm_sdw_dai_ops,
|
.ops = &msm_sdw_dai_ops,
|
||||||
},
|
},
|
||||||
|
@ -1423,9 +1437,9 @@ static struct snd_soc_dai_driver msm_sdw_dai[] = {
|
||||||
.id = AIF1_SDW_VIFEED,
|
.id = AIF1_SDW_VIFEED,
|
||||||
.capture = {
|
.capture = {
|
||||||
.stream_name = "VIfeed_SDW",
|
.stream_name = "VIfeed_SDW",
|
||||||
.rates = SNDRV_PCM_RATE_8000,
|
.rates = MSM_SDW_RATES,
|
||||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||||
.rate_max = 8000,
|
.rate_max = 48000,
|
||||||
.rate_min = 8000,
|
.rate_min = 8000,
|
||||||
.channels_min = 2,
|
.channels_min = 2,
|
||||||
.channels_max = 4,
|
.channels_max = 4,
|
||||||
|
|
Loading…
Add table
Reference in a new issue