| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- From 06f794e8cb227249e03893e4b4923ff58556eb60 Mon Sep 17 00:00:00 2001
- From: Phil Elwell <[email protected]>
- Date: Thu, 4 Mar 2021 14:49:23 +0000
- Subject: [PATCH] ASoC: dwc: Support set_bclk_ratio
- Signed-off-by: Phil Elwell <[email protected]>
- ---
- sound/soc/dwc/dwc-i2s.c | 35 +++++++++++++++++++++++++++++++++++
- 1 file changed, 35 insertions(+)
- --- a/sound/soc/dwc/dwc-i2s.c
- +++ b/sound/soc/dwc/dwc-i2s.c
- @@ -351,11 +351,46 @@ static int dw_i2s_set_fmt(struct snd_soc
- return ret;
- }
-
- +static int dw_i2s_set_bclk_ratio(struct snd_soc_dai *cpu_dai,
- + unsigned int ratio)
- +{
- + struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(cpu_dai);
- + struct i2s_clk_config_data *config = &dev->config;
- +
- + dev_err(dev->dev, "%s(%d)\n", __func__, ratio);
- + switch (ratio) {
- + case 32:
- + config->data_width = 16;
- + dev->ccr = 0x00;
- + dev->xfer_resolution = 0x02;
- + break;
- +
- + case 48:
- + config->data_width = 24;
- + dev->ccr = 0x08;
- + dev->xfer_resolution = 0x04;
- + break;
- +
- + case 64:
- + config->data_width = 32;
- + dev->ccr = 0x10;
- + dev->xfer_resolution = 0x05;
- + break;
- + default:
- + return -EINVAL;
- + }
- +
- + i2s_write_reg(dev->i2s_base, CCR, dev->ccr);
- +
- + return 0;
- +}
- +
- static const struct snd_soc_dai_ops dw_i2s_dai_ops = {
- .hw_params = dw_i2s_hw_params,
- .prepare = dw_i2s_prepare,
- .trigger = dw_i2s_trigger,
- .set_fmt = dw_i2s_set_fmt,
- + .set_bclk_ratio = dw_i2s_set_bclk_ratio,
- };
-
- #ifdef CONFIG_PM
|