All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sylwester Nawrocki <s.nawrocki@samsung.com>
To: broonie@kernel.org
Cc: lgirdwood@gmail.com, krzk@kernel.org, sbkim73@samsung.com,
	m.szyprowski@samsung.com, b.zolnierkie@samsung.com,
	alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org,
	linux-samsung-soc@vger.kernel.org,
	Sylwester Nawrocki <s.nawrocki@samsung.com>
Subject: [PATCH 10/22] ASoC: samsung: i2s: Move opclk data to common driver data structure
Date: Thu, 07 Feb 2019 18:00:18 +0100	[thread overview]
Message-ID: <20190207170028.720-11-s.nawrocki@samsung.com> (raw)
In-Reply-To: <20190207170028.720-1-s.nawrocki@samsung.com>

The clock for generating I2S signals is also common for both CPU DAIs
so move it to the driver's common data structure.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
---
 sound/soc/samsung/i2s.c | 70 +++++++++++++++++++----------------------
 1 file changed, 33 insertions(+), 37 deletions(-)

diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
index c2c3a3286c63..b7b28813645a 100644
--- a/sound/soc/samsung/i2s.c
+++ b/sound/soc/samsung/i2s.c
@@ -62,8 +62,6 @@ struct i2s_dai {
 	struct platform_device *pdev;
 	/* Memory mapped SFR region */
 	void __iomem	*addr;
-	/* Rate of RCLK source clock */
-	unsigned long rclk_srcrate;
 	/* Frame Clock */
 	unsigned frmclk;
 	/*
@@ -71,8 +69,6 @@ struct i2s_dai {
 	 * 0 indicates CPU driver is free to choose any value.
 	 */
 	unsigned rfs, bfs;
-	/* Clock for generating I2S signals */
-	struct clk *op_clk;
 	/* Pointer to the Primary_Fifo if this is Sec_Fifo, NULL otherwise */
 	struct i2s_dai *pri_dai;
 	/* Pointer to the Secondary_Fifo if it has one, NULL otherwise */
@@ -118,6 +114,12 @@ struct samsung_i2s_priv {
 	/* The I2S controller's core clock */
 	struct clk *clk;
 
+	/* Clock for generating I2S signals */
+	struct clk *op_clk;
+
+	/* Rate of RCLK source clock */
+	unsigned long rclk_srcrate;
+
 	/* The clock provider's data */
 	struct clk *clk_table[3];
 	struct clk_onecell_data clk_data;
@@ -496,9 +498,10 @@ static inline void i2s_fifo(struct i2s_dai *i2s, u32 flush)
 	writel(readl(fic) & ~flush, fic);
 }
 
-static int i2s_set_sysclk(struct snd_soc_dai *dai,
-	  int clk_id, unsigned int rfs, int dir)
+static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs,
+			  int dir)
 {
+	struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai);
 	struct i2s_dai *i2s = to_info(dai);
 	struct i2s_dai *other = get_other_dai(i2s);
 	const struct samsung_i2s_variant_regs *i2s_regs = i2s->variant_regs;
@@ -554,44 +557,39 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
 			clk_id = 1;
 
 		if (!any_active(i2s)) {
-			if (i2s->op_clk && !IS_ERR(i2s->op_clk)) {
+			if (priv->op_clk && !IS_ERR(priv->op_clk)) {
 				if ((clk_id && !(mod & rsrc_mask)) ||
 					(!clk_id && (mod & rsrc_mask))) {
-					clk_disable_unprepare(i2s->op_clk);
-					clk_put(i2s->op_clk);
+					clk_disable_unprepare(priv->op_clk);
+					clk_put(priv->op_clk);
 				} else {
-					i2s->rclk_srcrate =
-						clk_get_rate(i2s->op_clk);
+					priv->rclk_srcrate =
+						clk_get_rate(priv->op_clk);
 					goto done;
 				}
 			}
 
 			if (clk_id)
-				i2s->op_clk = clk_get(&i2s->pdev->dev,
+				priv->op_clk = clk_get(&i2s->pdev->dev,
 						"i2s_opclk1");
 			else
-				i2s->op_clk = clk_get(&i2s->pdev->dev,
+				priv->op_clk = clk_get(&i2s->pdev->dev,
 						"i2s_opclk0");
 
-			if (WARN_ON(IS_ERR(i2s->op_clk))) {
-				ret = PTR_ERR(i2s->op_clk);
-				i2s->op_clk = NULL;
+			if (WARN_ON(IS_ERR(priv->op_clk))) {
+				ret = PTR_ERR(priv->op_clk);
+				priv->op_clk = NULL;
 				goto err;
 			}
 
-			ret = clk_prepare_enable(i2s->op_clk);
+			ret = clk_prepare_enable(priv->op_clk);
 			if (ret) {
-				clk_put(i2s->op_clk);
-				i2s->op_clk = NULL;
+				clk_put(priv->op_clk);
+				priv->op_clk = NULL;
 				goto err;
 			}
-			i2s->rclk_srcrate = clk_get_rate(i2s->op_clk);
+			priv->rclk_srcrate = clk_get_rate(priv->op_clk);
 
-			/* Over-ride the other's */
-			if (other) {
-				other->op_clk = i2s->op_clk;
-				other->rclk_srcrate = i2s->rclk_srcrate;
-			}
 		} else if ((!clk_id && (mod & rsrc_mask))
 				|| (clk_id && !(mod & rsrc_mask))) {
 			dev_err(&i2s->pdev->dev,
@@ -600,8 +598,6 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
 			goto err;
 		} else {
 			/* Call can't be on the active DAI */
-			i2s->op_clk = other->op_clk;
-			i2s->rclk_srcrate = other->rclk_srcrate;
 			goto done;
 		}
 
@@ -689,7 +685,7 @@ static int i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 		 * CLK_I2S_RCLK_SRC clock is not exposed so we ensure any
 		 * clock configuration assigned in DT is not overwritten.
 		 */
-		if (i2s->rclk_srcrate == 0 && priv->clk_data.clks == NULL)
+		if (priv->rclk_srcrate == 0 && priv->clk_data.clks == NULL)
 			i2s_set_sysclk(dai, SAMSUNG_I2S_RCLKSRC_0,
 							0, SND_SOC_CLOCK_IN);
 		break;
@@ -814,7 +810,7 @@ static int i2s_hw_params(struct snd_pcm_substream *substream,
 
 	rclksrc = priv->clk_table[CLK_I2S_RCLK_SRC];
 	if (rclksrc && !IS_ERR(rclksrc))
-		i2s->rclk_srcrate = clk_get_rate(rclksrc);
+		priv->rclk_srcrate = clk_get_rate(rclksrc);
 
 	return 0;
 }
@@ -872,6 +868,7 @@ static void i2s_shutdown(struct snd_pcm_substream *substream,
 
 static int config_setup(struct i2s_dai *i2s)
 {
+	struct samsung_i2s_priv *priv = i2s->priv;
 	struct i2s_dai *other = get_other_dai(i2s);
 	unsigned rfs, bfs, blc;
 	u32 psr;
@@ -920,11 +917,11 @@ static int config_setup(struct i2s_dai *i2s)
 		return 0;
 
 	if (!(i2s->quirks & QUIRK_NO_MUXPSR)) {
-		psr = i2s->rclk_srcrate / i2s->frmclk / rfs;
+		psr = priv->rclk_srcrate / i2s->frmclk / rfs;
 		writel(((psr - 1) << 8) | PSR_PSREN, i2s->addr + I2SPSR);
 		dev_dbg(&i2s->pdev->dev,
 			"RCLK_SRC=%luHz PSR=%u, RCLK=%dfs, BCLK=%dfs\n",
-				i2s->rclk_srcrate, psr, rfs, bfs);
+				priv->rclk_srcrate, psr, rfs, bfs);
 	}
 
 	return 0;
@@ -1067,7 +1064,6 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai)
 	/* Reset any constraint on RFS and BFS */
 	i2s->rfs = 0;
 	i2s->bfs = 0;
-	i2s->rclk_srcrate = 0;
 
 	spin_lock_irqsave(i2s->lock, flags);
 	i2s_txctrl(i2s, 0);
@@ -1213,8 +1209,8 @@ static int i2s_runtime_suspend(struct device *dev)
 	i2s->suspend_i2scon = readl(i2s->addr + I2SCON);
 	i2s->suspend_i2spsr = readl(i2s->addr + I2SPSR);
 
-	if (i2s->op_clk)
-		clk_disable_unprepare(i2s->op_clk);
+	if (priv->op_clk)
+		clk_disable_unprepare(priv->op_clk);
 	clk_disable_unprepare(priv->clk);
 
 	return 0;
@@ -1230,8 +1226,8 @@ static int i2s_runtime_resume(struct device *dev)
 	if (ret)
 		return ret;
 
-	if (i2s->op_clk) {
-		ret = clk_prepare_enable(i2s->op_clk);
+	if (priv->op_clk) {
+		ret = clk_prepare_enable(priv->op_clk);
 		if (ret) {
 			clk_disable_unprepare(priv->clk);
 			return ret;
@@ -1514,7 +1510,7 @@ static int samsung_i2s_probe(struct platform_device *pdev)
 	if (ret < 0)
 		goto err_disable_pm;
 
-	pri_dai->op_clk = clk_get_parent(priv->clk_table[CLK_I2S_RCLK_SRC]);
+	priv->op_clk = clk_get_parent(priv->clk_table[CLK_I2S_RCLK_SRC]);
 
 	return 0;
 
-- 
2.20.1


  parent reply	other threads:[~2019-02-07 17:01 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20190207170044epcas2p3d00762663b971845bc86db84af7d3b23@epcas2p3.samsung.com>
2019-02-07 17:00 ` [PATCH 00/22] ASoC: dmaengine updates, secondary CPU DAI for Odroid boards Sylwester Nawrocki
2019-02-07 17:00   ` Sylwester Nawrocki
     [not found]   ` <CGME20190207170047epcas1p42d7ec4acfd976871c676efa5aecb33bc@epcas1p4.samsung.com>
2019-02-07 17:00     ` [PATCH 01/22] ASoC: dmaengine: Improve of_node test in dmaengine_pcm_request_chan_of() Sylwester Nawrocki
2019-02-11 13:29       ` Krzysztof Kozlowski
2019-02-12 16:58       ` Applied "ASoC: dmaengine: Improve of_node test in dmaengine_pcm_request_chan_of()" to the asoc tree Mark Brown
2019-02-12 16:58         ` Mark Brown
     [not found]   ` <CGME20190207170051epcas1p37a1acaef52cffb01af00c8d34dd9b1dd@epcas1p3.samsung.com>
2019-02-07 17:00     ` [PATCH 02/22] ASoC: dmaengine: Extend use of chan_names provided in custom DMA config Sylwester Nawrocki
2019-02-11 13:31       ` Krzysztof Kozlowski
2019-02-12 16:58       ` Applied "ASoC: dmaengine: Extend use of chan_names provided in custom DMA config" to the asoc tree Mark Brown
2019-02-12 16:58         ` Mark Brown
     [not found]   ` <CGME20190207170054epcas1p1e61320d308bc5be30187919f3360f501@epcas1p1.samsung.com>
2019-02-07 17:00     ` [PATCH 03/22] ASoC: samsung: dmaengine: Allow to specify custom DMA device Sylwester Nawrocki
2019-02-11 13:31       ` Krzysztof Kozlowski
2019-02-12 16:58       ` Applied "ASoC: samsung: dmaengine: Allow to specify custom DMA device" to the asoc tree Mark Brown
2019-02-12 16:58         ` Mark Brown
     [not found]   ` <CGME20190207170058epcas1p4e2fadf4aae2ece3c47c0750a094a4fbb@epcas1p4.samsung.com>
2019-02-07 17:00     ` [PATCH 04/22] ASoC: samsung: i2s: Fix prescaler setting for the secondary DAI Sylwester Nawrocki
2019-02-11 13:37       ` Krzysztof Kozlowski
2019-02-11 14:32         ` Sylwester Nawrocki
2019-02-11 14:32           ` Sylwester Nawrocki
2019-02-11 15:03           ` Krzysztof Kozlowski
2019-02-11 15:03             ` Krzysztof Kozlowski
2019-02-12 16:58       ` Applied "ASoC: samsung: i2s: Fix prescaler setting for the secondary DAI" to the asoc tree Mark Brown
2019-02-12 16:58         ` Mark Brown
     [not found]   ` <CGME20190207170102epcas1p445f2a5d8e70bc3a6e42424034c2eb34a@epcas1p4.samsung.com>
2019-02-07 17:00     ` [PATCH 05/22] ASoC: samsung: i2s: Convert to single component with multiple DAIs Sylwester Nawrocki
2019-02-11 13:38       ` Krzysztof Kozlowski
2019-02-12 16:58       ` Applied "ASoC: samsung: i2s: Convert to single component with multiple DAIs" to the asoc tree Mark Brown
2019-02-12 16:58         ` Mark Brown
     [not found]   ` <CGME20190207170105epcas1p3d4a1da9ae268f8e95b32fb499e5a1dad@epcas1p3.samsung.com>
2019-02-07 17:00     ` [PATCH 06/22] ASoC: samsung: i2s: Restore support for the secondary PCM Sylwester Nawrocki
2019-02-11 13:41       ` Krzysztof Kozlowski
2019-02-11 14:50         ` Sylwester Nawrocki
2019-02-11 14:50           ` Sylwester Nawrocki
     [not found]   ` <CGME20190207170109epcas1p20929934c01ae67a05cd6a56f13ed8486@epcas1p2.samsung.com>
2019-02-07 17:00     ` [PATCH 07/22] ASoC: samsung: i2s: Move clk supplier data to common driver data structure Sylwester Nawrocki
2019-02-11 13:41       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170112epcas1p31ed740ef43d8a3eb71ca7245fba1bc3d@epcas1p3.samsung.com>
2019-02-07 17:00     ` [PATCH 08/22] ASoC: samsung: i2s: Add widgets and routes for DPCM support Sylwester Nawrocki
2019-02-11 13:42       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170116epcas2p1e0768a74062c8af83842ddb59309850f@epcas2p1.samsung.com>
2019-02-07 17:00     ` [PATCH 09/22] ASoC: samsung: i2s: Move core clk to the driver common data structure Sylwester Nawrocki
2019-02-11 13:44       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170120epcas1p211e1582a6124d6b7d0e33db6c0017480@epcas1p2.samsung.com>
2019-02-07 17:00     ` Sylwester Nawrocki [this message]
2019-02-11 13:44       ` [PATCH 10/22] ASoC: samsung: i2s: Move opclk data to common driver " Krzysztof Kozlowski
     [not found]   ` <CGME20190207170123epcas1p2fae464ba7f102d841548c5a523cc6660@epcas1p2.samsung.com>
2019-02-07 17:00     ` [PATCH 11/22] ASoC: samsung: i2s: Move registers cache " Sylwester Nawrocki
2019-02-11 13:45       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170127epcas2p31da340c3f63e75e7bcb5c9c864a42173@epcas2p3.samsung.com>
2019-02-07 17:00     ` [PATCH 12/22] ASoC: samsung: i2s: Move SFR pointer " Sylwester Nawrocki
2019-02-11 13:46       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170130epcas1p4809b7a8dc797ced2982dc3b305a0991b@epcas1p4.samsung.com>
2019-02-07 17:00     ` [PATCH 13/22] ASoC: samsung: i2s: Drop spinlock pointer from i2s_dai " Sylwester Nawrocki
2019-02-11 13:47       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170134epcas2p1a22a5c2f680f33fe562fa22f3aec9e6a@epcas2p1.samsung.com>
2019-02-07 17:00     ` [PATCH 14/22] ASoC: samsung: i2s: Move IP variant data to common driver " Sylwester Nawrocki
2019-02-11 13:48       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170138epcas2p31134b2beee877922d27fab5c79fdc7b1@epcas2p3.samsung.com>
2019-02-07 17:00     ` [PATCH 15/22] ASoC: samsung: i2s: Move quirks " Sylwester Nawrocki
2019-02-11 13:49       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170141epcas1p29a038bfd0df69df10e916ea8a695a85b@epcas1p2.samsung.com>
2019-02-07 17:00     ` [PATCH 16/22] ASoC: samsung: i2s: Get rid of a static spinlock Sylwester Nawrocki
2019-02-11 13:51       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170145epcas1p465da0715aa629b525c17d263c1b49a68@epcas1p4.samsung.com>
2019-02-07 17:00     ` [PATCH 17/22] ASoC: samsung: odroid: Add support for secondary CPU DAI Sylwester Nawrocki
2019-02-11 13:57       ` Krzysztof Kozlowski
2019-02-11 15:19         ` Sylwester Nawrocki
2019-02-11 15:34           ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170148epcas2p2e0f4a1e154cb8cd52d257978a669e84c@epcas2p2.samsung.com>
2019-02-07 17:00     ` [PATCH 18/22] ASoC: samsung: Specify DMA channel names through custom DMA config Sylwester Nawrocki
2019-02-11 13:58       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170152epcas1p254264a82287a54dc2452f5e73daab13d@epcas1p2.samsung.com>
2019-02-07 17:00     ` [PATCH 19/22] ASoC: samsung: Drop DAI DMA data chan_name assignments Sylwester Nawrocki
2019-02-11 14:03       ` Krzysztof Kozlowski
     [not found]   ` <CGME20190207170155epcas1p42ba30c540d35290c010b5bfa4645e3b1@epcas1p4.samsung.com>
2019-02-07 17:00     ` [PATCH 20/22] ASoC: dmaengine: Remove unused SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME flag Sylwester Nawrocki
2019-02-11 14:04       ` Krzysztof Kozlowski
2019-02-12 16:40   ` [PATCH 00/22] ASoC: dmaengine updates, secondary CPU DAI for Odroid boards Mark Brown
2019-02-12 18:17     ` Sylwester Nawrocki

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=20190207170028.720-11-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=krzk@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.