summaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-6.1/950-0892-ASoC-dwc-Support-set_bclk_ratio.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-6.1/950-0892-ASoC-dwc-Support-set_bclk_ratio.patch')
-rw-r--r--target/linux/bcm27xx/patches-6.1/950-0892-ASoC-dwc-Support-set_bclk_ratio.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-6.1/950-0892-ASoC-dwc-Support-set_bclk_ratio.patch b/target/linux/bcm27xx/patches-6.1/950-0892-ASoC-dwc-Support-set_bclk_ratio.patch
new file mode 100644
index 0000000000..b18e5f888f
--- /dev/null
+++ b/target/linux/bcm27xx/patches-6.1/950-0892-ASoC-dwc-Support-set_bclk_ratio.patch
@@ -0,0 +1,59 @@
+From 06f794e8cb227249e03893e4b4923ff58556eb60 Mon Sep 17 00:00:00 2001
+From: Phil Elwell <phil@raspberrypi.com>
+Date: Thu, 4 Mar 2021 14:49:23 +0000
+Subject: [PATCH] ASoC: dwc: Support set_bclk_ratio
+
+Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+---
+ 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