]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Jan 2024 10:16:11 +0000 (11:16 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Jan 2024 10:16:11 +0000 (11:16 +0100)
added patches:
revert-asoc-atmel-remove-system-clock-tree-configuration-for-at91sam9g20ek.patch

queue-5.15/revert-asoc-atmel-remove-system-clock-tree-configuration-for-at91sam9g20ek.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/revert-asoc-atmel-remove-system-clock-tree-configuration-for-at91sam9g20ek.patch b/queue-5.15/revert-asoc-atmel-remove-system-clock-tree-configuration-for-at91sam9g20ek.patch
new file mode 100644 (file)
index 0000000..5bd7558
--- /dev/null
@@ -0,0 +1,126 @@
+From 0586f3b2e1bd332bc455b41bc5e19028c0fa2228 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Thu, 18 Jan 2024 11:14:14 +0100
+Subject: Revert "ASoC: atmel: Remove system clock tree configuration for at91sam9g20ek"
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+This reverts commit bc7d0133181e5f33ac33ca4f6bb2bce876c8ad88 which is
+commit c775cbf62ed4911e4f0f23880f01815753123690 upstream.
+
+It is reported to cause problems, so drop it from the 5.15.y tree for now.
+
+Link: https://lore.kernel.org/r/845b3053-d47b-4717-9665-79b120da133b@sirena.org.uk
+Reported-by: Mark Brown <broonie@kernel.org>
+Cc: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
+Cc: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/soc/atmel/sam9g20_wm8731.c |   61 +++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 61 insertions(+)
+
+--- a/sound/soc/atmel/sam9g20_wm8731.c
++++ b/sound/soc/atmel/sam9g20_wm8731.c
+@@ -46,6 +46,35 @@
+  */
+ #undef ENABLE_MIC_INPUT
++static struct clk *mclk;
++
++static int at91sam9g20ek_set_bias_level(struct snd_soc_card *card,
++                                      struct snd_soc_dapm_context *dapm,
++                                      enum snd_soc_bias_level level)
++{
++      static int mclk_on;
++      int ret = 0;
++
++      switch (level) {
++      case SND_SOC_BIAS_ON:
++      case SND_SOC_BIAS_PREPARE:
++              if (!mclk_on)
++                      ret = clk_enable(mclk);
++              if (ret == 0)
++                      mclk_on = 1;
++              break;
++
++      case SND_SOC_BIAS_OFF:
++      case SND_SOC_BIAS_STANDBY:
++              if (mclk_on)
++                      clk_disable(mclk);
++              mclk_on = 0;
++              break;
++      }
++
++      return ret;
++}
++
+ static const struct snd_soc_dapm_widget at91sam9g20ek_dapm_widgets[] = {
+       SND_SOC_DAPM_MIC("Int Mic", NULL),
+       SND_SOC_DAPM_SPK("Ext Spk", NULL),
+@@ -106,6 +135,7 @@ static struct snd_soc_card snd_soc_at91s
+       .owner = THIS_MODULE,
+       .dai_link = &at91sam9g20ek_dai,
+       .num_links = 1,
++      .set_bias_level = at91sam9g20ek_set_bias_level,
+       .dapm_widgets = at91sam9g20ek_dapm_widgets,
+       .num_dapm_widgets = ARRAY_SIZE(at91sam9g20ek_dapm_widgets),
+@@ -118,6 +148,7 @@ static int at91sam9g20ek_audio_probe(str
+ {
+       struct device_node *np = pdev->dev.of_node;
+       struct device_node *codec_np, *cpu_np;
++      struct clk *pllb;
+       struct snd_soc_card *card = &snd_soc_at91sam9g20ek;
+       int ret;
+@@ -131,6 +162,31 @@ static int at91sam9g20ek_audio_probe(str
+               return -EINVAL;
+       }
++      /*
++       * Codec MCLK is supplied by PCK0 - set it up.
++       */
++      mclk = clk_get(NULL, "pck0");
++      if (IS_ERR(mclk)) {
++              dev_err(&pdev->dev, "Failed to get MCLK\n");
++              ret = PTR_ERR(mclk);
++              goto err;
++      }
++
++      pllb = clk_get(NULL, "pllb");
++      if (IS_ERR(pllb)) {
++              dev_err(&pdev->dev, "Failed to get PLLB\n");
++              ret = PTR_ERR(pllb);
++              goto err_mclk;
++      }
++      ret = clk_set_parent(mclk, pllb);
++      clk_put(pllb);
++      if (ret != 0) {
++              dev_err(&pdev->dev, "Failed to set MCLK parent\n");
++              goto err_mclk;
++      }
++
++      clk_set_rate(mclk, MCLK_RATE);
++
+       card->dev = &pdev->dev;
+       /* Parse device node info */
+@@ -174,6 +230,9 @@ static int at91sam9g20ek_audio_probe(str
+       return ret;
++err_mclk:
++      clk_put(mclk);
++      mclk = NULL;
+ err:
+       atmel_ssc_put_audio(0);
+       return ret;
+@@ -183,6 +242,8 @@ static int at91sam9g20ek_audio_remove(st
+ {
+       struct snd_soc_card *card = platform_get_drvdata(pdev);
++      clk_disable(mclk);
++      mclk = NULL;
+       snd_soc_unregister_card(card);
+       atmel_ssc_put_audio(0);
index 054c9d3a44b695b6887ab7a5f11084c170d792f2..5495590b2085be16a8055a08d436ac7168953d8c 100644 (file)
@@ -49,3 +49,4 @@ net-qrtr-ns-return-0-if-server-port-is-not-present.patch
 arm-sun9i-smp-fix-return-code-check-of-of_property_m.patch
 drm-crtc-fix-uninitialized-variable-use.patch
 acpi-resource-add-another-dmi-match-for-the-tongfang-gmxxgxx.patch
+revert-asoc-atmel-remove-system-clock-tree-configuration-for-at91sam9g20ek.patch