linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] drm/bridge: sii902x: fix audio mclk management
@ 2019-07-02 15:47 Olivier Moysan
  2019-07-02 15:47 ` [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock Olivier Moysan
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Olivier Moysan @ 2019-07-02 15:47 UTC (permalink / raw)
  To: a.hajda, narmstrong, Laurent.pinchart, jonas, jernej.skrabec,
	airlied, daniel, dri-devel, linux-kernel, benjamin.gaignard,
	alexandre.torgue, linux-arm-kernel, linux-stm32, olivier.moysan,
	jsarha, robh+dt, mark.rutland, devicetree

Fix audio master clock use for Silab sii902x HDMI transceiver.
Make audio master clock optional, as this clock is not mandatory.

Olivier Moysan (3):
  drm/bridge: sii902x: fix missing reference to mclk clock
  dt-bindings: display: sii902x: Change audio mclk binding
  drm/bridge: sii902x: make audio mclk optional

 .../devicetree/bindings/display/bridge/sii902x.txt |  5 ++-
 drivers/gpu/drm/bridge/sii902x.c                   | 40 +++++++++++++---------
 2 files changed, 26 insertions(+), 19 deletions(-)

-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock
  2019-07-02 15:47 [PATCH 0/3] drm/bridge: sii902x: fix audio mclk management Olivier Moysan
@ 2019-07-02 15:47 ` Olivier Moysan
  2019-07-04  8:03   ` Jyri Sarha
                     ` (2 more replies)
  2019-07-02 15:47 ` [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding Olivier Moysan
  2019-07-02 15:47 ` [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional Olivier Moysan
  2 siblings, 3 replies; 13+ messages in thread
From: Olivier Moysan @ 2019-07-02 15:47 UTC (permalink / raw)
  To: a.hajda, narmstrong, Laurent.pinchart, jonas, jernej.skrabec,
	airlied, daniel, dri-devel, linux-kernel, benjamin.gaignard,
	alexandre.torgue, linux-arm-kernel, linux-stm32, olivier.moysan,
	jsarha, robh+dt, mark.rutland, devicetree

Add devm_clk_get call to retrieve reference to master clock.

Fixes: ff5781634c41 ("drm/bridge: sii902x: Implement HDMI audio support")

Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
---
 drivers/gpu/drm/bridge/sii902x.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
index dd7aa466b280..36acc256e67e 100644
--- a/drivers/gpu/drm/bridge/sii902x.c
+++ b/drivers/gpu/drm/bridge/sii902x.c
@@ -750,6 +750,7 @@ static int sii902x_audio_codec_init(struct sii902x *sii902x,
 		sii902x->audio.i2s_fifo_sequence[i] |= audio_fifo_id[i] |
 			i2s_lane_id[lanes[i]] |	SII902X_TPI_I2S_FIFO_ENABLE;
 
+	sii902x->audio.mclk = devm_clk_get(dev, "mclk");
 	if (IS_ERR(sii902x->audio.mclk)) {
 		dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
 			__func__, PTR_ERR(sii902x->audio.mclk));
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding
  2019-07-02 15:47 [PATCH 0/3] drm/bridge: sii902x: fix audio mclk management Olivier Moysan
  2019-07-02 15:47 ` [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock Olivier Moysan
@ 2019-07-02 15:47 ` Olivier Moysan
  2019-07-04  8:25   ` Jyri Sarha
                     ` (2 more replies)
  2019-07-02 15:47 ` [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional Olivier Moysan
  2 siblings, 3 replies; 13+ messages in thread
From: Olivier Moysan @ 2019-07-02 15:47 UTC (permalink / raw)
  To: a.hajda, narmstrong, Laurent.pinchart, jonas, jernej.skrabec,
	airlied, daniel, dri-devel, linux-kernel, benjamin.gaignard,
	alexandre.torgue, linux-arm-kernel, linux-stm32, olivier.moysan,
	jsarha, robh+dt, mark.rutland, devicetree

As stated in SiL9022/24 datasheet, master clock is not required for I2S.
Make mclk property optional in DT bindings.

Fixes: 3f18021f43a3 ("dt-bindings: display: sii902x: Add HDMI audio bindings")

Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
---
 Documentation/devicetree/bindings/display/bridge/sii902x.txt | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/display/bridge/sii902x.txt b/Documentation/devicetree/bindings/display/bridge/sii902x.txt
index 2df44b7d3821..6e14e087c0d0 100644
--- a/Documentation/devicetree/bindings/display/bridge/sii902x.txt
+++ b/Documentation/devicetree/bindings/display/bridge/sii902x.txt
@@ -26,9 +26,8 @@ Optional properties:
 	- clocks: phandle and clock specifier for each clock listed in
            the clock-names property
 	- clock-names: "mclk"
-	   Describes SII902x MCLK input. MCLK is used to produce
-	   HDMI audio CTS values. This property is required if
-	   "#sound-dai-cells"-property is present. This property follows
+	   Describes SII902x MCLK input. MCLK can be used to produce
+	   HDMI audio CTS values. This property follows
 	   Documentation/devicetree/bindings/clock/clock-bindings.txt
 	   consumer binding.
 
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional
  2019-07-02 15:47 [PATCH 0/3] drm/bridge: sii902x: fix audio mclk management Olivier Moysan
  2019-07-02 15:47 ` [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock Olivier Moysan
  2019-07-02 15:47 ` [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding Olivier Moysan
@ 2019-07-02 15:47 ` Olivier Moysan
  2019-07-04  8:29   ` Jyri Sarha
                     ` (2 more replies)
  2 siblings, 3 replies; 13+ messages in thread
From: Olivier Moysan @ 2019-07-02 15:47 UTC (permalink / raw)
  To: a.hajda, narmstrong, Laurent.pinchart, jonas, jernej.skrabec,
	airlied, daniel, dri-devel, linux-kernel, benjamin.gaignard,
	alexandre.torgue, linux-arm-kernel, linux-stm32, olivier.moysan,
	jsarha, robh+dt, mark.rutland, devicetree

The master clock on i2s bus is not mandatory,
as sii902X internal PLL can be used instead.
Make use of mclk optional.

Fixes: ff5781634c41 ("drm/bridge: sii902x: Implement HDMI audio support")

Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
---
 drivers/gpu/drm/bridge/sii902x.c | 39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
index 36acc256e67e..a08bd9fdc046 100644
--- a/drivers/gpu/drm/bridge/sii902x.c
+++ b/drivers/gpu/drm/bridge/sii902x.c
@@ -562,19 +562,21 @@ static int sii902x_audio_hw_params(struct device *dev, void *data,
 		}
 	}
 
-	ret = clk_prepare_enable(sii902x->audio.mclk);
-	if (ret) {
-		dev_err(dev, "Enabling mclk failed: %d\n", ret);
-		return ret;
-	}
+	if (sii902x->audio.mclk) {
+		ret = clk_prepare_enable(sii902x->audio.mclk);
+		if (ret) {
+			dev_err(dev, "Enabling mclk failed: %d\n", ret);
+			return ret;
+		}
 
-	mclk_rate = clk_get_rate(sii902x->audio.mclk);
+		mclk_rate = clk_get_rate(sii902x->audio.mclk);
 
-	ret = sii902x_select_mclk_div(&i2s_config_reg, params->sample_rate,
-				      mclk_rate);
-	if (mclk_rate != ret * params->sample_rate)
-		dev_dbg(dev, "Inaccurate reference clock (%ld/%d != %u)\n",
-			mclk_rate, ret, params->sample_rate);
+		ret = sii902x_select_mclk_div(&i2s_config_reg,
+					      params->sample_rate, mclk_rate);
+		if (mclk_rate != ret * params->sample_rate)
+			dev_dbg(dev, "Inaccurate reference clock (%ld/%d != %u)\n",
+				mclk_rate, ret, params->sample_rate);
+	}
 
 	mutex_lock(&sii902x->mutex);
 
@@ -640,7 +642,8 @@ static int sii902x_audio_hw_params(struct device *dev, void *data,
 	mutex_unlock(&sii902x->mutex);
 
 	if (ret) {
-		clk_disable_unprepare(sii902x->audio.mclk);
+		if (sii902x->audio.mclk)
+			clk_disable_unprepare(sii902x->audio.mclk);
 		dev_err(dev, "%s: hdmi audio enable failed: %d\n", __func__,
 			ret);
 	}
@@ -659,7 +662,8 @@ static void sii902x_audio_shutdown(struct device *dev, void *data)
 
 	mutex_unlock(&sii902x->mutex);
 
-	clk_disable_unprepare(sii902x->audio.mclk);
+	if (sii902x->audio.mclk)
+		clk_disable_unprepare(sii902x->audio.mclk);
 }
 
 int sii902x_audio_digital_mute(struct device *dev, void *data, bool enable)
@@ -752,9 +756,12 @@ static int sii902x_audio_codec_init(struct sii902x *sii902x,
 
 	sii902x->audio.mclk = devm_clk_get(dev, "mclk");
 	if (IS_ERR(sii902x->audio.mclk)) {
-		dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
-			__func__, PTR_ERR(sii902x->audio.mclk));
-		return 0;
+		if (PTR_ERR(sii902x->audio.mclk) != -ENOENT) {
+			dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
+				__func__, PTR_ERR(sii902x->audio.mclk));
+			return PTR_ERR(sii902x->audio.mclk);
+		}
+		sii902x->audio.mclk = NULL;
 	}
 
 	sii902x->audio.pdev = platform_device_register_data(
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock
  2019-07-02 15:47 ` [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock Olivier Moysan
@ 2019-07-04  8:03   ` Jyri Sarha
  2019-07-05 12:24   ` Philippe CORNU
  2019-07-12 10:31   ` Andrzej Hajda
  2 siblings, 0 replies; 13+ messages in thread
From: Jyri Sarha @ 2019-07-04  8:03 UTC (permalink / raw)
  To: Olivier Moysan, a.hajda, narmstrong, Laurent.pinchart, jonas,
	jernej.skrabec, airlied, daniel, dri-devel, linux-kernel,
	benjamin.gaignard, alexandre.torgue, linux-arm-kernel,
	linux-stm32, robh+dt, mark.rutland, devicetree

On 02/07/2019 18:47, Olivier Moysan wrote:
> Add devm_clk_get call to retrieve reference to master clock.
> 
> Fixes: ff5781634c41 ("drm/bridge: sii902x: Implement HDMI audio support")
> 
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>

Reviewed-by: Jyri Sarha <jsarha@ti.com>

I wonder how that line was dropped and how the code past my final test.
Any way, this fix is definitely needed.

Thanks,
Jyri

> ---
>  drivers/gpu/drm/bridge/sii902x.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
> index dd7aa466b280..36acc256e67e 100644
> --- a/drivers/gpu/drm/bridge/sii902x.c
> +++ b/drivers/gpu/drm/bridge/sii902x.c
> @@ -750,6 +750,7 @@ static int sii902x_audio_codec_init(struct sii902x *sii902x,
>  		sii902x->audio.i2s_fifo_sequence[i] |= audio_fifo_id[i] |
>  			i2s_lane_id[lanes[i]] |	SII902X_TPI_I2S_FIFO_ENABLE;
>  
> +	sii902x->audio.mclk = devm_clk_get(dev, "mclk");
>  	if (IS_ERR(sii902x->audio.mclk)) {
>  		dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
>  			__func__, PTR_ERR(sii902x->audio.mclk));
> 


-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding
  2019-07-02 15:47 ` [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding Olivier Moysan
@ 2019-07-04  8:25   ` Jyri Sarha
  2019-07-05 12:35   ` Philippe CORNU
  2019-07-12 10:31   ` Andrzej Hajda
  2 siblings, 0 replies; 13+ messages in thread
From: Jyri Sarha @ 2019-07-04  8:25 UTC (permalink / raw)
  To: Olivier Moysan, a.hajda, narmstrong, Laurent.pinchart, jonas,
	jernej.skrabec, airlied, daniel, dri-devel, linux-kernel,
	benjamin.gaignard, alexandre.torgue, linux-arm-kernel,
	linux-stm32, robh+dt, mark.rutland, devicetree

On 02/07/2019 18:47, Olivier Moysan wrote:
> As stated in SiL9022/24 datasheet, master clock is not required for I2S.
> Make mclk property optional in DT bindings.
> 
> Fixes: 3f18021f43a3 ("dt-bindings: display: sii902x: Add HDMI audio bindings")
> 
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>

Looking the specs again it looks like the mclk is requred for sii9020,
but not for sii9022 and sii9024.

So I guess it is fine to accept the configurations without the mclk.

Reviewed-by: Jyri Sarha <jsarha@ti.com>

> ---
>  Documentation/devicetree/bindings/display/bridge/sii902x.txt | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/display/bridge/sii902x.txt b/Documentation/devicetree/bindings/display/bridge/sii902x.txt
> index 2df44b7d3821..6e14e087c0d0 100644
> --- a/Documentation/devicetree/bindings/display/bridge/sii902x.txt
> +++ b/Documentation/devicetree/bindings/display/bridge/sii902x.txt
> @@ -26,9 +26,8 @@ Optional properties:
>  	- clocks: phandle and clock specifier for each clock listed in
>             the clock-names property
>  	- clock-names: "mclk"
> -	   Describes SII902x MCLK input. MCLK is used to produce
> -	   HDMI audio CTS values. This property is required if
> -	   "#sound-dai-cells"-property is present. This property follows
> +	   Describes SII902x MCLK input. MCLK can be used to produce
> +	   HDMI audio CTS values. This property follows
>  	   Documentation/devicetree/bindings/clock/clock-bindings.txt
>  	   consumer binding.
>  
> 


-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional
  2019-07-02 15:47 ` [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional Olivier Moysan
@ 2019-07-04  8:29   ` Jyri Sarha
  2019-07-05 12:36   ` Philippe CORNU
  2019-07-12 10:45   ` Andrzej Hajda
  2 siblings, 0 replies; 13+ messages in thread
From: Jyri Sarha @ 2019-07-04  8:29 UTC (permalink / raw)
  To: Olivier Moysan, a.hajda, narmstrong, Laurent.pinchart, jonas,
	jernej.skrabec, airlied, daniel, dri-devel, linux-kernel,
	benjamin.gaignard, alexandre.torgue, linux-arm-kernel,
	linux-stm32, robh+dt, mark.rutland, devicetree

On 02/07/2019 18:47, Olivier Moysan wrote:
> The master clock on i2s bus is not mandatory,
> as sii902X internal PLL can be used instead.
> Make use of mclk optional.
> 
> Fixes: ff5781634c41 ("drm/bridge: sii902x: Implement HDMI audio support")
> 
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>

Reviewed-by: Jyri Sarha <jsarha@ti.com>

> ---
>  drivers/gpu/drm/bridge/sii902x.c | 39 +++++++++++++++++++++++----------------
>  1 file changed, 23 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
> index 36acc256e67e..a08bd9fdc046 100644
> --- a/drivers/gpu/drm/bridge/sii902x.c
> +++ b/drivers/gpu/drm/bridge/sii902x.c
> @@ -562,19 +562,21 @@ static int sii902x_audio_hw_params(struct device *dev, void *data,
>  		}
>  	}
>  
> -	ret = clk_prepare_enable(sii902x->audio.mclk);
> -	if (ret) {
> -		dev_err(dev, "Enabling mclk failed: %d\n", ret);
> -		return ret;
> -	}
> +	if (sii902x->audio.mclk) {
> +		ret = clk_prepare_enable(sii902x->audio.mclk);
> +		if (ret) {
> +			dev_err(dev, "Enabling mclk failed: %d\n", ret);
> +			return ret;
> +		}
>  
> -	mclk_rate = clk_get_rate(sii902x->audio.mclk);
> +		mclk_rate = clk_get_rate(sii902x->audio.mclk);
>  
> -	ret = sii902x_select_mclk_div(&i2s_config_reg, params->sample_rate,
> -				      mclk_rate);
> -	if (mclk_rate != ret * params->sample_rate)
> -		dev_dbg(dev, "Inaccurate reference clock (%ld/%d != %u)\n",
> -			mclk_rate, ret, params->sample_rate);
> +		ret = sii902x_select_mclk_div(&i2s_config_reg,
> +					      params->sample_rate, mclk_rate);
> +		if (mclk_rate != ret * params->sample_rate)
> +			dev_dbg(dev, "Inaccurate reference clock (%ld/%d != %u)\n",
> +				mclk_rate, ret, params->sample_rate);
> +	}
>  
>  	mutex_lock(&sii902x->mutex);
>  
> @@ -640,7 +642,8 @@ static int sii902x_audio_hw_params(struct device *dev, void *data,
>  	mutex_unlock(&sii902x->mutex);
>  
>  	if (ret) {
> -		clk_disable_unprepare(sii902x->audio.mclk);
> +		if (sii902x->audio.mclk)
> +			clk_disable_unprepare(sii902x->audio.mclk);
>  		dev_err(dev, "%s: hdmi audio enable failed: %d\n", __func__,
>  			ret);
>  	}
> @@ -659,7 +662,8 @@ static void sii902x_audio_shutdown(struct device *dev, void *data)
>  
>  	mutex_unlock(&sii902x->mutex);
>  
> -	clk_disable_unprepare(sii902x->audio.mclk);
> +	if (sii902x->audio.mclk)
> +		clk_disable_unprepare(sii902x->audio.mclk);
>  }
>  
>  int sii902x_audio_digital_mute(struct device *dev, void *data, bool enable)
> @@ -752,9 +756,12 @@ static int sii902x_audio_codec_init(struct sii902x *sii902x,
>  
>  	sii902x->audio.mclk = devm_clk_get(dev, "mclk");
>  	if (IS_ERR(sii902x->audio.mclk)) {
> -		dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
> -			__func__, PTR_ERR(sii902x->audio.mclk));
> -		return 0;
> +		if (PTR_ERR(sii902x->audio.mclk) != -ENOENT) {
> +			dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
> +				__func__, PTR_ERR(sii902x->audio.mclk));
> +			return PTR_ERR(sii902x->audio.mclk);
> +		}
> +		sii902x->audio.mclk = NULL;
>  	}
>  
>  	sii902x->audio.pdev = platform_device_register_data(
> 


-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock
  2019-07-02 15:47 ` [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock Olivier Moysan
  2019-07-04  8:03   ` Jyri Sarha
@ 2019-07-05 12:24   ` Philippe CORNU
  2019-07-12 10:31   ` Andrzej Hajda
  2 siblings, 0 replies; 13+ messages in thread
From: Philippe CORNU @ 2019-07-05 12:24 UTC (permalink / raw)
  To: Olivier MOYSAN, a.hajda, narmstrong, Laurent.pinchart, jonas,
	jernej.skrabec, airlied, daniel, dri-devel, linux-kernel,
	Benjamin GAIGNARD, Alexandre TORGUE, linux-arm-kernel,
	linux-stm32, jsarha, robh+dt, mark.rutland, devicetree

Hi Olivier,
and many thanks for your patch.
I do not see how audio could work without your patch, so:
Reviewed-by: Philippe Cornu <philippe.cornu@st.com>
Philippe :-)

On 7/2/19 5:47 PM, Olivier Moysan wrote:
> Add devm_clk_get call to retrieve reference to master clock.
> 
> Fixes: ff5781634c41 ("drm/bridge: sii902x: Implement HDMI audio support")
> 
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
> ---
>   drivers/gpu/drm/bridge/sii902x.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
> index dd7aa466b280..36acc256e67e 100644
> --- a/drivers/gpu/drm/bridge/sii902x.c
> +++ b/drivers/gpu/drm/bridge/sii902x.c
> @@ -750,6 +750,7 @@ static int sii902x_audio_codec_init(struct sii902x *sii902x,
>   		sii902x->audio.i2s_fifo_sequence[i] |= audio_fifo_id[i] |
>   			i2s_lane_id[lanes[i]] |	SII902X_TPI_I2S_FIFO_ENABLE;
>   
> +	sii902x->audio.mclk = devm_clk_get(dev, "mclk");
>   	if (IS_ERR(sii902x->audio.mclk)) {
>   		dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
>   			__func__, PTR_ERR(sii902x->audio.mclk));
> 
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding
  2019-07-02 15:47 ` [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding Olivier Moysan
  2019-07-04  8:25   ` Jyri Sarha
@ 2019-07-05 12:35   ` Philippe CORNU
  2019-07-12 10:31   ` Andrzej Hajda
  2 siblings, 0 replies; 13+ messages in thread
From: Philippe CORNU @ 2019-07-05 12:35 UTC (permalink / raw)
  To: Olivier MOYSAN, a.hajda, narmstrong, Laurent.pinchart, jonas,
	jernej.skrabec, airlied, daniel, dri-devel, linux-kernel,
	Benjamin GAIGNARD, Alexandre TORGUE, linux-arm-kernel,
	linux-stm32, jsarha, robh+dt, mark.rutland, devicetree

Hi Olivier,
and many thanks for your patch.
I have double checked in the sil9022/24 datasheet and you are right:

"As an option, the original MCLK signal used to strobe the I2S signals 
out from the sourcing chip can be used. If the internal PLL is used, 
then an external MCLK input is not required."

So, even if #sound-dai-cells is there, this is not mandatory to have MCLK.

Reviewed-by: Philippe Cornu <philippe.cornu@st.com>
Philippe :-)


On 7/2/19 5:47 PM, Olivier Moysan wrote:
> As stated in SiL9022/24 datasheet, master clock is not required for I2S.
> Make mclk property optional in DT bindings.
> 
> Fixes: 3f18021f43a3 ("dt-bindings: display: sii902x: Add HDMI audio bindings")
> 
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
> ---
>   Documentation/devicetree/bindings/display/bridge/sii902x.txt | 5 ++---
>   1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/display/bridge/sii902x.txt b/Documentation/devicetree/bindings/display/bridge/sii902x.txt
> index 2df44b7d3821..6e14e087c0d0 100644
> --- a/Documentation/devicetree/bindings/display/bridge/sii902x.txt
> +++ b/Documentation/devicetree/bindings/display/bridge/sii902x.txt
> @@ -26,9 +26,8 @@ Optional properties:
>   	- clocks: phandle and clock specifier for each clock listed in
>              the clock-names property
>   	- clock-names: "mclk"
> -	   Describes SII902x MCLK input. MCLK is used to produce
> -	   HDMI audio CTS values. This property is required if
> -	   "#sound-dai-cells"-property is present. This property follows
> +	   Describes SII902x MCLK input. MCLK can be used to produce
> +	   HDMI audio CTS values. This property follows
>   	   Documentation/devicetree/bindings/clock/clock-bindings.txt
>   	   consumer binding.
>   
> 
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional
  2019-07-02 15:47 ` [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional Olivier Moysan
  2019-07-04  8:29   ` Jyri Sarha
@ 2019-07-05 12:36   ` Philippe CORNU
  2019-07-12 10:45   ` Andrzej Hajda
  2 siblings, 0 replies; 13+ messages in thread
From: Philippe CORNU @ 2019-07-05 12:36 UTC (permalink / raw)
  To: Olivier MOYSAN, a.hajda, narmstrong, Laurent.pinchart, jonas,
	jernej.skrabec, airlied, daniel, dri-devel, linux-kernel,
	Benjamin GAIGNARD, Alexandre TORGUE, linux-arm-kernel,
	linux-stm32, jsarha, robh+dt, mark.rutland, devicetree

Hi Olivier,
and many thanks for your patch.

Reviewed-by: Philippe Cornu <philippe.cornu@st.com>
Philippe :-)

On 7/2/19 5:47 PM, Olivier Moysan wrote:
> The master clock on i2s bus is not mandatory,
> as sii902X internal PLL can be used instead.
> Make use of mclk optional.
> 
> Fixes: ff5781634c41 ("drm/bridge: sii902x: Implement HDMI audio support")
> 
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
> ---
>   drivers/gpu/drm/bridge/sii902x.c | 39 +++++++++++++++++++++++----------------
>   1 file changed, 23 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
> index 36acc256e67e..a08bd9fdc046 100644
> --- a/drivers/gpu/drm/bridge/sii902x.c
> +++ b/drivers/gpu/drm/bridge/sii902x.c
> @@ -562,19 +562,21 @@ static int sii902x_audio_hw_params(struct device *dev, void *data,
>   		}
>   	}
>   
> -	ret = clk_prepare_enable(sii902x->audio.mclk);
> -	if (ret) {
> -		dev_err(dev, "Enabling mclk failed: %d\n", ret);
> -		return ret;
> -	}
> +	if (sii902x->audio.mclk) {
> +		ret = clk_prepare_enable(sii902x->audio.mclk);
> +		if (ret) {
> +			dev_err(dev, "Enabling mclk failed: %d\n", ret);
> +			return ret;
> +		}
>   
> -	mclk_rate = clk_get_rate(sii902x->audio.mclk);
> +		mclk_rate = clk_get_rate(sii902x->audio.mclk);
>   
> -	ret = sii902x_select_mclk_div(&i2s_config_reg, params->sample_rate,
> -				      mclk_rate);
> -	if (mclk_rate != ret * params->sample_rate)
> -		dev_dbg(dev, "Inaccurate reference clock (%ld/%d != %u)\n",
> -			mclk_rate, ret, params->sample_rate);
> +		ret = sii902x_select_mclk_div(&i2s_config_reg,
> +					      params->sample_rate, mclk_rate);
> +		if (mclk_rate != ret * params->sample_rate)
> +			dev_dbg(dev, "Inaccurate reference clock (%ld/%d != %u)\n",
> +				mclk_rate, ret, params->sample_rate);
> +	}
>   
>   	mutex_lock(&sii902x->mutex);
>   
> @@ -640,7 +642,8 @@ static int sii902x_audio_hw_params(struct device *dev, void *data,
>   	mutex_unlock(&sii902x->mutex);
>   
>   	if (ret) {
> -		clk_disable_unprepare(sii902x->audio.mclk);
> +		if (sii902x->audio.mclk)
> +			clk_disable_unprepare(sii902x->audio.mclk);
>   		dev_err(dev, "%s: hdmi audio enable failed: %d\n", __func__,
>   			ret);
>   	}
> @@ -659,7 +662,8 @@ static void sii902x_audio_shutdown(struct device *dev, void *data)
>   
>   	mutex_unlock(&sii902x->mutex);
>   
> -	clk_disable_unprepare(sii902x->audio.mclk);
> +	if (sii902x->audio.mclk)
> +		clk_disable_unprepare(sii902x->audio.mclk);
>   }
>   
>   int sii902x_audio_digital_mute(struct device *dev, void *data, bool enable)
> @@ -752,9 +756,12 @@ static int sii902x_audio_codec_init(struct sii902x *sii902x,
>   
>   	sii902x->audio.mclk = devm_clk_get(dev, "mclk");
>   	if (IS_ERR(sii902x->audio.mclk)) {
> -		dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
> -			__func__, PTR_ERR(sii902x->audio.mclk));
> -		return 0;
> +		if (PTR_ERR(sii902x->audio.mclk) != -ENOENT) {
> +			dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
> +				__func__, PTR_ERR(sii902x->audio.mclk));
> +			return PTR_ERR(sii902x->audio.mclk);
> +		}
> +		sii902x->audio.mclk = NULL;
>   	}
>   
>   	sii902x->audio.pdev = platform_device_register_data(
> 
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock
  2019-07-02 15:47 ` [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock Olivier Moysan
  2019-07-04  8:03   ` Jyri Sarha
  2019-07-05 12:24   ` Philippe CORNU
@ 2019-07-12 10:31   ` Andrzej Hajda
  2 siblings, 0 replies; 13+ messages in thread
From: Andrzej Hajda @ 2019-07-12 10:31 UTC (permalink / raw)
  To: Olivier Moysan, narmstrong, Laurent.pinchart, jonas,
	jernej.skrabec, airlied, daniel, dri-devel, linux-kernel,
	benjamin.gaignard, alexandre.torgue, linux-arm-kernel,
	linux-stm32, jsarha, robh+dt, mark.rutland, devicetree

On 02.07.2019 17:47, Olivier Moysan wrote:
> Add devm_clk_get call to retrieve reference to master clock.
>
> Fixes: ff5781634c41 ("drm/bridge: sii902x: Implement HDMI audio support")
>
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
> ---
>  drivers/gpu/drm/bridge/sii902x.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
> index dd7aa466b280..36acc256e67e 100644
> --- a/drivers/gpu/drm/bridge/sii902x.c
> +++ b/drivers/gpu/drm/bridge/sii902x.c
> @@ -750,6 +750,7 @@ static int sii902x_audio_codec_init(struct sii902x *sii902x,
>  		sii902x->audio.i2s_fifo_sequence[i] |= audio_fifo_id[i] |
>  			i2s_lane_id[lanes[i]] |	SII902X_TPI_I2S_FIFO_ENABLE;
>  
> +	sii902x->audio.mclk = devm_clk_get(dev, "mclk");
>  	if (IS_ERR(sii902x->audio.mclk)) {
>  		dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
>  			__func__, PTR_ERR(sii902x->audio.mclk));

Acked-by: Andrzej Hajda <a.hajda@samsung.com>

 --
Regards
Andrzej


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding
  2019-07-02 15:47 ` [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding Olivier Moysan
  2019-07-04  8:25   ` Jyri Sarha
  2019-07-05 12:35   ` Philippe CORNU
@ 2019-07-12 10:31   ` Andrzej Hajda
  2 siblings, 0 replies; 13+ messages in thread
From: Andrzej Hajda @ 2019-07-12 10:31 UTC (permalink / raw)
  To: Olivier Moysan, narmstrong, Laurent.pinchart, jonas,
	jernej.skrabec, airlied, daniel, dri-devel, linux-kernel,
	benjamin.gaignard, alexandre.torgue, linux-arm-kernel,
	linux-stm32, jsarha, robh+dt, mark.rutland, devicetree

On 02.07.2019 17:47, Olivier Moysan wrote:
> As stated in SiL9022/24 datasheet, master clock is not required for I2S.
> Make mclk property optional in DT bindings.
>
> Fixes: 3f18021f43a3 ("dt-bindings: display: sii902x: Add HDMI audio bindings")
>
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
> ---
>  Documentation/devicetree/bindings/display/bridge/sii902x.txt | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/display/bridge/sii902x.txt b/Documentation/devicetree/bindings/display/bridge/sii902x.txt
> index 2df44b7d3821..6e14e087c0d0 100644
> --- a/Documentation/devicetree/bindings/display/bridge/sii902x.txt
> +++ b/Documentation/devicetree/bindings/display/bridge/sii902x.txt
> @@ -26,9 +26,8 @@ Optional properties:
>  	- clocks: phandle and clock specifier for each clock listed in
>             the clock-names property
>  	- clock-names: "mclk"
> -	   Describes SII902x MCLK input. MCLK is used to produce
> -	   HDMI audio CTS values. This property is required if
> -	   "#sound-dai-cells"-property is present. This property follows
> +	   Describes SII902x MCLK input. MCLK can be used to produce
> +	   HDMI audio CTS values. This property follows
>  	   Documentation/devicetree/bindings/clock/clock-bindings.txt
>  	   consumer binding.
>  

Acked-by: Andrzej Hajda <a.hajda@samsung.com>

 --
Regards
Andrzej


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional
  2019-07-02 15:47 ` [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional Olivier Moysan
  2019-07-04  8:29   ` Jyri Sarha
  2019-07-05 12:36   ` Philippe CORNU
@ 2019-07-12 10:45   ` Andrzej Hajda
  2 siblings, 0 replies; 13+ messages in thread
From: Andrzej Hajda @ 2019-07-12 10:45 UTC (permalink / raw)
  To: Olivier Moysan, narmstrong, Laurent.pinchart, jonas,
	jernej.skrabec, airlied, daniel, dri-devel, linux-kernel,
	benjamin.gaignard, alexandre.torgue, linux-arm-kernel,
	linux-stm32, jsarha, robh+dt, mark.rutland, devicetree

On 02.07.2019 17:47, Olivier Moysan wrote:
> The master clock on i2s bus is not mandatory,
> as sii902X internal PLL can be used instead.
> Make use of mclk optional.
>
> Fixes: ff5781634c41 ("drm/bridge: sii902x: Implement HDMI audio support")
>
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
> ---
>  drivers/gpu/drm/bridge/sii902x.c | 39 +++++++++++++++++++++++----------------
>  1 file changed, 23 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
> index 36acc256e67e..a08bd9fdc046 100644
> --- a/drivers/gpu/drm/bridge/sii902x.c
> +++ b/drivers/gpu/drm/bridge/sii902x.c
> @@ -562,19 +562,21 @@ static int sii902x_audio_hw_params(struct device *dev, void *data,
>  		}
>  	}
>  
> -	ret = clk_prepare_enable(sii902x->audio.mclk);
> -	if (ret) {
> -		dev_err(dev, "Enabling mclk failed: %d\n", ret);
> -		return ret;
> -	}
> +	if (sii902x->audio.mclk) {
> +		ret = clk_prepare_enable(sii902x->audio.mclk);
> +		if (ret) {
> +			dev_err(dev, "Enabling mclk failed: %d\n", ret);
> +			return ret;
> +		}
>  
> -	mclk_rate = clk_get_rate(sii902x->audio.mclk);
> +		mclk_rate = clk_get_rate(sii902x->audio.mclk);
>  
> -	ret = sii902x_select_mclk_div(&i2s_config_reg, params->sample_rate,
> -				      mclk_rate);
> -	if (mclk_rate != ret * params->sample_rate)
> -		dev_dbg(dev, "Inaccurate reference clock (%ld/%d != %u)\n",
> -			mclk_rate, ret, params->sample_rate);
> +		ret = sii902x_select_mclk_div(&i2s_config_reg,
> +					      params->sample_rate, mclk_rate);
> +		if (mclk_rate != ret * params->sample_rate)
> +			dev_dbg(dev, "Inaccurate reference clock (%ld/%d != %u)\n",
> +				mclk_rate, ret, params->sample_rate);
> +	}
>  
>  	mutex_lock(&sii902x->mutex);
>  
> @@ -640,7 +642,8 @@ static int sii902x_audio_hw_params(struct device *dev, void *data,
>  	mutex_unlock(&sii902x->mutex);
>  
>  	if (ret) {
> -		clk_disable_unprepare(sii902x->audio.mclk);
> +		if (sii902x->audio.mclk)
> +			clk_disable_unprepare(sii902x->audio.mclk);


"if" clause is not necessary


>  		dev_err(dev, "%s: hdmi audio enable failed: %d\n", __func__,
>  			ret);
>  	}
> @@ -659,7 +662,8 @@ static void sii902x_audio_shutdown(struct device *dev, void *data)
>  
>  	mutex_unlock(&sii902x->mutex);
>  
> -	clk_disable_unprepare(sii902x->audio.mclk);
> +	if (sii902x->audio.mclk)

ditto

> +		clk_disable_unprepare(sii902x->audio.mclk);
>  }
>  
>  int sii902x_audio_digital_mute(struct device *dev, void *data, bool enable)
> @@ -752,9 +756,12 @@ static int sii902x_audio_codec_init(struct sii902x *sii902x,
>  
>  	sii902x->audio.mclk = devm_clk_get(dev, "mclk");
>  	if (IS_ERR(sii902x->audio.mclk)) {
> -		dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
> -			__func__, PTR_ERR(sii902x->audio.mclk));
> -		return 0;
> +		if (PTR_ERR(sii902x->audio.mclk) != -ENOENT) {
> +			dev_err(dev, "%s: No clock (audio mclk) found: %ld\n",
> +				__func__, PTR_ERR(sii902x->audio.mclk));
> +			return PTR_ERR(sii902x->audio.mclk);
> +		}
> +		sii902x->audio.mclk = NULL;


devm_clk_get_optional should be used here.

Summarizing, clk framework supports NULL clocks so you can adjust code
to benefit from it: no need to checks "if (sii902x->audio.mclk)". The
only place you should care is near clk_get_rate, for null clock it will
return 0, so you should react appropriately.

With that changed:

Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>

 --
Regards
Andrzej


>  	}
>  
>  	sii902x->audio.pdev = platform_device_register_data(



_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2019-07-12 10:46 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-02 15:47 [PATCH 0/3] drm/bridge: sii902x: fix audio mclk management Olivier Moysan
2019-07-02 15:47 ` [PATCH 1/3] drm/bridge: sii902x: fix missing reference to mclk clock Olivier Moysan
2019-07-04  8:03   ` Jyri Sarha
2019-07-05 12:24   ` Philippe CORNU
2019-07-12 10:31   ` Andrzej Hajda
2019-07-02 15:47 ` [PATCH 2/3] dt-bindings: display: sii902x: Change audio mclk binding Olivier Moysan
2019-07-04  8:25   ` Jyri Sarha
2019-07-05 12:35   ` Philippe CORNU
2019-07-12 10:31   ` Andrzej Hajda
2019-07-02 15:47 ` [PATCH 3/3] drm/bridge: sii902x: make audio mclk optional Olivier Moysan
2019-07-04  8:29   ` Jyri Sarha
2019-07-05 12:36   ` Philippe CORNU
2019-07-12 10:45   ` Andrzej Hajda

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).