From: Sylwester Nawrocki <s.nawrocki@samsung.com>
To: broonie@kernel.org, krzk@kernel.org
Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org,
linux-samsung-soc@vger.kernel.org, ckeepax@opensource.cirrus.com,
b.zolnierkie@samsung.com, sbkim73@samsung.com,
patches@opensource.cirrus.com, lgirdwood@gmail.com,
robh+dt@kernel.org, Sylwester Nawrocki <s.nawrocki@samsung.com>,
linux-arm-kernel@lists.infradead.org, m.szyprowski@samsung.com
Subject: [alsa-devel] [PATCH v2 03/10] ASoC: wm8994: Add support for setting MCLK clock rate
Date: Fri, 20 Sep 2019 15:02:12 +0200 [thread overview]
Message-ID: <20190920130218.32690-4-s.nawrocki@samsung.com> (raw)
In-Reply-To: <20190920130218.32690-1-s.nawrocki@samsung.com>
Extend the set_sysclk() handler so we also set frequency of the MCLK1,
MCLK2 clocks through clk API when those clocks are specified in DT.
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
---
Changes since v1:
- getting of clocks moved from MFD to the CODEC's driver probe()
---
sound/soc/codecs/wm8994.c | 48 +++++++++++++++++++++++++++++++++++----
sound/soc/codecs/wm8994.h | 10 +++++++-
2 files changed, 52 insertions(+), 6 deletions(-)
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index d5fb7f5dd551..f69545dced25 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -167,12 +167,12 @@ static int configure_aif_clock(struct snd_soc_component *component, int aif)
switch (wm8994->sysclk[aif]) {
case WM8994_SYSCLK_MCLK1:
- rate = wm8994->mclk[0];
+ rate = wm8994->mclk_rate[0];
break;
case WM8994_SYSCLK_MCLK2:
reg1 |= 0x8;
- rate = wm8994->mclk[1];
+ rate = wm8994->mclk_rate[1];
break;
case WM8994_SYSCLK_FLL1:
@@ -2372,12 +2372,29 @@ static int wm8994_set_fll(struct snd_soc_dai *dai, int id, int src,
return _wm8994_set_fll(dai->component, id, src, freq_in, freq_out);
}
+static int wm8994_set_mclk_rate(struct wm8994_priv *wm8994, unsigned int id,
+ unsigned int *freq)
+{
+ int ret;
+
+ if (!wm8994->mclk[id].clk || *freq == wm8994->mclk_rate[id])
+ return 0;
+
+ ret = clk_set_rate(wm8994->mclk[id].clk, *freq);
+ if (ret < 0)
+ return ret;
+
+ *freq = clk_get_rate(wm8994->mclk[id].clk);
+
+ return 0;
+}
+
static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai,
int clk_id, unsigned int freq, int dir)
{
struct snd_soc_component *component = dai->component;
struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
- int i;
+ int ret, i;
switch (dai->id) {
case 1:
@@ -2392,7 +2409,12 @@ static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai,
switch (clk_id) {
case WM8994_SYSCLK_MCLK1:
wm8994->sysclk[dai->id - 1] = WM8994_SYSCLK_MCLK1;
- wm8994->mclk[0] = freq;
+
+ ret = wm8994_set_mclk_rate(wm8994, dai->id - 1, &freq);
+ if (ret < 0)
+ return ret;
+
+ wm8994->mclk_rate[0] = freq;
dev_dbg(dai->dev, "AIF%d using MCLK1 at %uHz\n",
dai->id, freq);
break;
@@ -2400,7 +2422,12 @@ static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai,
case WM8994_SYSCLK_MCLK2:
/* TODO: Set GPIO AF */
wm8994->sysclk[dai->id - 1] = WM8994_SYSCLK_MCLK2;
- wm8994->mclk[1] = freq;
+
+ ret = wm8994_set_mclk_rate(wm8994, dai->id - 1, &freq);
+ if (ret < 0)
+ return ret;
+
+ wm8994->mclk_rate[1] = freq;
dev_dbg(dai->dev, "AIF%d using MCLK2 at %uHz\n",
dai->id, freq);
break;
@@ -4456,6 +4483,7 @@ static const struct snd_soc_component_driver soc_component_dev_wm8994 = {
static int wm8994_probe(struct platform_device *pdev)
{
struct wm8994_priv *wm8994;
+ int ret;
wm8994 = devm_kzalloc(&pdev->dev, sizeof(struct wm8994_priv),
GFP_KERNEL);
@@ -4467,6 +4495,16 @@ static int wm8994_probe(struct platform_device *pdev)
wm8994->wm8994 = dev_get_drvdata(pdev->dev.parent);
+ wm8994->mclk[WM8994_MCLK1].id = "MCLK1";
+ wm8994->mclk[WM8994_MCLK2].id = "MCLK2";
+
+ ret = devm_clk_bulk_get_optional(pdev->dev.parent, ARRAY_SIZE(wm8994->mclk),
+ wm8994->mclk);
+ if (ret < 0) {
+ dev_err(&pdev->dev, "Failed to get clocks: %d\n", ret);
+ return ret;
+ }
+
pm_runtime_enable(&pdev->dev);
pm_runtime_idle(&pdev->dev);
diff --git a/sound/soc/codecs/wm8994.h b/sound/soc/codecs/wm8994.h
index 1d6f2abe1c11..41c4b126114d 100644
--- a/sound/soc/codecs/wm8994.h
+++ b/sound/soc/codecs/wm8994.h
@@ -6,6 +6,7 @@
#ifndef _WM8994_H
#define _WM8994_H
+#include <linux/clk.h>
#include <sound/soc.h>
#include <linux/firmware.h>
#include <linux/completion.h>
@@ -14,6 +15,12 @@
#include "wm_hubs.h"
+enum {
+ WM8994_MCLK1,
+ WM8994_MCLK2,
+ WM8994_NUM_MCLK
+};
+
/* Sources for AIF1/2 SYSCLK - use with set_dai_sysclk() */
#define WM8994_SYSCLK_MCLK1 1
#define WM8994_SYSCLK_MCLK2 2
@@ -73,9 +80,10 @@ struct wm8994;
struct wm8994_priv {
struct wm_hubs_data hubs;
struct wm8994 *wm8994;
+ struct clk_bulk_data mclk[WM8994_NUM_MCLK];
int sysclk[2];
int sysclk_rate[2];
- int mclk[2];
+ int mclk_rate[2];
int aifclk[2];
int aifdiv[2];
int channels[2];
--
2.17.1
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2019-09-20 13:06 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20190920130238eucas1p147fca337fa84592ac7f83760449e26a1@eucas1p1.samsung.com>
2019-09-20 13:02 ` [alsa-devel] [PATCH v2 00/10] Basic sound support for Arndale board / wm8994 updates Sylwester Nawrocki
[not found] ` <CGME20190920130313eucas1p27758c613ab3a10296b92974f14bd521d@eucas1p2.samsung.com>
2019-09-20 13:02 ` [alsa-devel] [PATCH v2 01/10] ASoC: wm8994: Do not register inapplicable controls for WM1811 Sylwester Nawrocki
[not found] ` <CGME20190920130711eucas1p29497b40981e4e0a24769ced4e06be208@eucas1p2.samsung.com>
2019-09-20 13:07 ` [alsa-devel] [PATCH v2 10/10] ARM: exynos_defconfig: Enable Arndale audio driver Sylwester Nawrocki
2019-10-02 17:20 ` Krzysztof Kozlowski
2019-09-23 21:22 ` [alsa-devel] Applied "ASoC: wm8994: Do not register inapplicable controls for WM1811" to the asoc tree Mark Brown
[not found] ` <CGME20190920130315eucas1p2a31543214fedcdfe86196f176f554a35@eucas1p2.samsung.com>
2019-09-20 13:02 ` [alsa-devel] [PATCH v2 02/10] ASoC: samsung: arndale: Add missing OF node dereferencing Sylwester Nawrocki
2019-09-23 9:08 ` Krzysztof Kozlowski
2019-09-23 21:22 ` [alsa-devel] Applied "ASoC: samsung: arndale: Add missing OF node dereferencing" to the asoc tree Mark Brown
[not found] ` <CGME20190920130316eucas1p2de713006a13c62c0b895c2e33e0d14c7@eucas1p2.samsung.com>
2019-09-20 13:02 ` Sylwester Nawrocki [this message]
2019-09-23 9:10 ` [alsa-devel] [PATCH v2 03/10] ASoC: wm8994: Add support for setting MCLK clock rate Sylwester Nawrocki
2019-09-23 9:25 ` Charles Keepax
2019-09-23 10:09 ` Krzysztof Kozlowski
2019-10-01 11:40 ` [alsa-devel] Applied "ASoC: wm8994: Add support for setting MCLK clock rate" to the asoc tree Mark Brown
[not found] ` <CGME20190920130317eucas1p188d724710077d704f768798c6555c741@eucas1p1.samsung.com>
2019-09-20 13:02 ` [alsa-devel] [PATCH v2 04/10] ASoC: wm8994: Add support for MCLKn clock gating Sylwester Nawrocki
2019-09-23 8:51 ` Charles Keepax
2019-09-23 9:13 ` Sylwester Nawrocki
2019-09-23 9:09 ` Krzysztof Kozlowski
2019-10-01 11:40 ` [alsa-devel] Applied "ASoC: wm8994: Add support for MCLKn clock gating" to the asoc tree Mark Brown
[not found] ` <CGME20190920130318eucas1p126cc8be60118ffbf1f332626dde1c05a@eucas1p1.samsung.com>
2019-09-20 13:02 ` [alsa-devel] [PATCH v2 05/10] ASoC: samsung: arndale: Simplify DAI link initialization Sylwester Nawrocki
2019-10-01 11:21 ` Mark Brown
[not found] ` <CGME20190920130320eucas1p1ade2cf71fadfd442bcd79748e8512e09@eucas1p1.samsung.com>
2019-09-20 13:02 ` [alsa-devel] [PATCH v2 06/10] ASoC: dt-bindings: Document "samsung, arndale-wm1811" compatible Sylwester Nawrocki
2019-10-01 11:40 ` [alsa-devel] Applied "ASoC: dt-bindings: Document "samsung, arndale-wm1811" compatible" to the asoc tree Mark Brown
[not found] ` <CGME20190920130321eucas1p2efe85adb3df4c546a7d81326b4c75873@eucas1p2.samsung.com>
2019-09-20 13:02 ` [alsa-devel] [PATCH v2 07/10] ASoC: samsung: arndale: Add support for WM1811 CODEC Sylwester Nawrocki
2019-09-23 9:16 ` Krzysztof Kozlowski
2019-10-01 11:22 ` Mark Brown
[not found] ` <CGME20190920130323eucas1p218c6822eca3869eb0d3b7380497bbca4@eucas1p2.samsung.com>
2019-09-20 13:02 ` [alsa-devel] [PATCH v2 08/10] ASoC: samsung: Rename Arndale card driver Sylwester Nawrocki
2019-09-23 9:17 ` Krzysztof Kozlowski
2019-10-01 11:22 ` Mark Brown
[not found] ` <CGME20190920130324eucas1p118bfab45306a29752bf4c1cfdd8f61a1@eucas1p1.samsung.com>
2019-09-20 13:02 ` [alsa-devel] [PATCH v2 09/10] ARM: dts: arndale: Add audio support (WM1811 CODEC boards) Sylwester Nawrocki
2019-10-02 14:42 ` Krzysztof Kozlowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190920130218.32690-4-s.nawrocki@samsung.com \
--to=s.nawrocki@samsung.com \
--cc=alsa-devel@alsa-project.org \
--cc=b.zolnierkie@samsung.com \
--cc=broonie@kernel.org \
--cc=ckeepax@opensource.cirrus.com \
--cc=devicetree@vger.kernel.org \
--cc=krzk@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=patches@opensource.cirrus.com \
--cc=robh+dt@kernel.org \
--cc=sbkim73@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).