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,
|
||||
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,30 +1274,45 @@ static int msm_sdw_hw_params(struct snd_pcm_substream *substream,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
snd_soc_update_bits(dai->codec,
|
||||
MSM_SDW_TOP_RX_I2S_CTL, 0x1C, (rx_clk_fs_rate << 2));
|
||||
snd_soc_update_bits(dai->codec,
|
||||
MSM_SDW_RX7_RX_PATH_CTL, 0x0F, rx_fs_rate);
|
||||
snd_soc_update_bits(dai->codec,
|
||||
MSM_SDW_RX8_RX_PATH_CTL, 0x0F, rx_fs_rate);
|
||||
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,
|
||||
(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)) {
|
||||
case SNDRV_PCM_FORMAT_S16_LE:
|
||||
snd_soc_update_bits(dai->codec,
|
||||
MSM_SDW_TOP_RX_I2S_CTL, 0x20, 0x20);
|
||||
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:
|
||||
snd_soc_update_bits(dai->codec,
|
||||
MSM_SDW_TOP_RX_I2S_CTL, 0x20, 0x00);
|
||||
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;
|
||||
default:
|
||||
dev_err(dai->codec->dev, "%s: wrong format selected\n",
|
||||
__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,
|
||||
|
|
Loading…
Add table
Reference in a new issue