mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
asoc: tegra-alt: t210: add dai ops for bclk_ratio
added dai ops for setting up bit clock ratio. Change-Id: I5dde689d8228070911eb772d65f2d619f3a96d91 Signed-off-by: Dara Ramesh <dramesh@nvidia.com> Reviewed-on: http://git-master/r/437135 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Sumit Bhattacharya <sumitb@nvidia.com> Reviewed-by: Sachin Nikam <snikam@nvidia.com>
This commit is contained in:
committed by
Sameer Pujar
parent
81b5f0ecbd
commit
b5df7e81f5
@@ -196,6 +196,14 @@ static int tegra210_i2s_set_dai_sysclk(struct snd_soc_dai *dai,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tegra210_i2s_set_dai_bclk_ratio(struct snd_soc_dai *dai,
|
||||||
|
unsigned int ratio)
|
||||||
|
{
|
||||||
|
struct tegra210_i2s *i2s = snd_soc_dai_get_drvdata(dai);
|
||||||
|
i2s->bclk_ratio = ratio;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int tegra210_i2s_hw_params(struct snd_pcm_substream *substream,
|
static int tegra210_i2s_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)
|
||||||
@@ -240,14 +248,17 @@ static int tegra210_i2s_hw_params(struct snd_pcm_substream *substream,
|
|||||||
frame_format = val & TEGRA210_I2S_CTRL_FRAME_FORMAT_MASK;
|
frame_format = val & TEGRA210_I2S_CTRL_FRAME_FORMAT_MASK;
|
||||||
|
|
||||||
if (frame_format == TEGRA210_I2S_CTRL_FRAME_FORMAT_FSYNC_MODE) {
|
if (frame_format == TEGRA210_I2S_CTRL_FRAME_FORMAT_FSYNC_MODE) {
|
||||||
i2sclock = srate * channels * sample_size;
|
|
||||||
regmap_write(i2s->regmap, TEGRA210_I2S_SLOT_CTRL, channels - 1);
|
regmap_write(i2s->regmap, TEGRA210_I2S_SLOT_CTRL, channels - 1);
|
||||||
regmap_write(i2s->regmap, TEGRA210_I2S_AXBAR_TX_SLOT_CTRL,
|
regmap_write(i2s->regmap, TEGRA210_I2S_AXBAR_TX_SLOT_CTRL,
|
||||||
((1 << channels) - 1));
|
((1 << channels) - 1));
|
||||||
regmap_write(i2s->regmap, TEGRA210_I2S_AXBAR_RX_SLOT_CTRL,
|
regmap_write(i2s->regmap, TEGRA210_I2S_AXBAR_RX_SLOT_CTRL,
|
||||||
((1 << channels) - 1));
|
((1 << channels) - 1));
|
||||||
} else
|
}
|
||||||
i2sclock = srate * channels * sample_size * 2;
|
|
||||||
|
i2sclock = srate * channels * sample_size;
|
||||||
|
|
||||||
|
if (i2s->bclk_ratio != 0)
|
||||||
|
i2sclock *= i2s->bclk_ratio;
|
||||||
|
|
||||||
bitcnt = (i2sclock / srate) - 1;
|
bitcnt = (i2sclock / srate) - 1;
|
||||||
if ((bitcnt < 0) ||
|
if ((bitcnt < 0) ||
|
||||||
@@ -330,6 +341,7 @@ static struct snd_soc_dai_ops tegra210_i2s_dai_ops = {
|
|||||||
.set_fmt = tegra210_i2s_set_fmt,
|
.set_fmt = tegra210_i2s_set_fmt,
|
||||||
.hw_params = tegra210_i2s_hw_params,
|
.hw_params = tegra210_i2s_hw_params,
|
||||||
.set_sysclk = tegra210_i2s_set_dai_sysclk,
|
.set_sysclk = tegra210_i2s_set_dai_sysclk,
|
||||||
|
.set_bclk_ratio = tegra210_i2s_set_dai_bclk_ratio,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct snd_soc_dai_driver tegra210_i2s_dais[] = {
|
static struct snd_soc_dai_driver tegra210_i2s_dais[] = {
|
||||||
@@ -540,6 +552,7 @@ static int tegra210_i2s_platform_probe(struct platform_device *pdev)
|
|||||||
dev_set_drvdata(&pdev->dev, i2s);
|
dev_set_drvdata(&pdev->dev, i2s);
|
||||||
|
|
||||||
i2s->soc_data = soc_data;
|
i2s->soc_data = soc_data;
|
||||||
|
i2s->bclk_ratio = 2;
|
||||||
|
|
||||||
/* initialize srate with default sampling rate */
|
/* initialize srate with default sampling rate */
|
||||||
i2s->srate = 48000;
|
i2s->srate = 48000;
|
||||||
|
|||||||
Reference in New Issue
Block a user