These patches were generated from: https://github.com/raspberrypi/linux/commits/rpi-6.12.y With the following command: git format-patch -N v6.12.27..HEAD (HEAD -> 8d3206ee456a5ecdf9ddbfd8e5e231e4f0cd716e) Exceptions: - (def)configs patches - github workflows patches - applied & reverted patches - readme patches - wireless patches Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
49 lines
1.6 KiB
Diff
49 lines
1.6 KiB
Diff
From 2890b37b818151b18d5eca57fa59e97f7fb1bf7e Mon Sep 17 00:00:00 2001
|
|
From: Stephen Gordon <gordoste@iinet.net.au>
|
|
Date: Mon, 23 Dec 2024 10:02:41 +1100
|
|
Subject: [PATCH] soc: pcm3168a: Add DT binding to force clock consumer mode
|
|
|
|
ASoC cannot configure the codec correctly when the ADC and DAC share clock
|
|
lines and one of them is the clock producer. Add a DT binding that
|
|
overrides ASoC and forces the component into clock consumer mode.
|
|
|
|
Signed-off-by: Stephen Gordon <gordoste@iinet.net.au>
|
|
---
|
|
sound/soc/codecs/pcm3168a.c | 12 ++++++++++++
|
|
1 file changed, 12 insertions(+)
|
|
|
|
--- a/sound/soc/codecs/pcm3168a.c
|
|
+++ b/sound/soc/codecs/pcm3168a.c
|
|
@@ -60,6 +60,7 @@ struct pcm3168a_priv {
|
|
struct clk *scki;
|
|
struct gpio_desc *gpio_rst;
|
|
unsigned long sysclk;
|
|
+ bool adc_fc, dac_fc; // Force clock consumer mode
|
|
|
|
struct pcm3168a_io_params io_params[2];
|
|
struct snd_soc_dai_driver dai_drv[2];
|
|
@@ -478,6 +479,12 @@ static int pcm3168a_hw_params(struct snd
|
|
ms = 0;
|
|
}
|
|
|
|
+ // Force clock consumer mode if needed
|
|
+ if (pcm3168a->adc_fc && dai->id == PCM3168A_DAI_ADC)
|
|
+ ms = 0;
|
|
+ if (pcm3168a->dac_fc && dai->id == PCM3168A_DAI_DAC)
|
|
+ ms = 0;
|
|
+
|
|
format = io_params->format;
|
|
|
|
if (io_params->slot_width)
|
|
@@ -756,6 +763,11 @@ int pcm3168a_probe(struct device *dev, s
|
|
|
|
pcm3168a->sysclk = clk_get_rate(pcm3168a->scki);
|
|
|
|
+ pcm3168a->adc_fc = of_property_read_bool(dev->of_node,
|
|
+ "adc-force-cons");
|
|
+ pcm3168a->dac_fc = of_property_read_bool(dev->of_node,
|
|
+ "dac-force-cons");
|
|
+
|
|
for (i = 0; i < ARRAY_SIZE(pcm3168a->supplies); i++)
|
|
pcm3168a->supplies[i].supply = pcm3168a_supply_names[i];
|
|
|