diff mbox series

[RFC,16/15] rcar-du: dsi: Unexport clock functions

Message ID 20210623110059.3408353-1-kieran.bingham@ideasonboard.com (mailing list archive)
State New
Delegated to: Kieran Bingham
Headers show
Series R-Car V3U: DSI encoder driver | expand

Commit Message

Kieran Bingham June 23, 2021, 11 a.m. UTC
The rcar_mipi_dsi_clk_enable and rcar_mipi_dsi_clk_disable functions
are exported so that they can be operated directly from the DU CRTC.

This is not required, and can be handled directly through the bridge.

The functionality is split while moving, as the rcar_mipi_dsi_startup()
and rcar_mipi_dsi_shutdown() are not handling the clocks and so
shouldn't be left in the clock specific functions.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---

This patch extends Laurent's series, and would ultimately be squashed
into the DSI driver.



 drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c | 98 ++++++++++++++-----------
 drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h | 26 -------
 2 files changed, 54 insertions(+), 70 deletions(-)
 delete mode 100644 drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h

Comments

Laurent Pinchart June 23, 2021, 1:11 p.m. UTC | #1
Hi Kieran,

Thank you for the patch.

On Wed, Jun 23, 2021 at 12:00:59PM +0100, Kieran Bingham wrote:
> The rcar_mipi_dsi_clk_enable and rcar_mipi_dsi_clk_disable functions
> are exported so that they can be operated directly from the DU CRTC.
> 
> This is not required, and can be handled directly through the bridge.
> 
> The functionality is split while moving, as the rcar_mipi_dsi_startup()
> and rcar_mipi_dsi_shutdown() are not handling the clocks and so
> shouldn't be left in the clock specific functions.
> 
> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> ---
> 
> This patch extends Laurent's series, and would ultimately be squashed
> into the DSI driver.
> 
> 
> 
>  drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c | 98 ++++++++++++++-----------
>  drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h | 26 -------
>  2 files changed, 54 insertions(+), 70 deletions(-)
>  delete mode 100644 drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h
> 
> diff --git a/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c b/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c
> index 026026bbb367..4c5ef4de0ea7 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c
> @@ -5,8 +5,6 @@
>   * Copyright (C) 2020 Renesas Electronics Corporation
>   */
>  
> -#include "rcar_mipi_dsi.h"
> -
>  #include <linux/clk.h>
>  #include <linux/delay.h>
>  #include <linux/io.h>
> @@ -451,6 +449,33 @@ static void rcar_mipi_dsi_shutdown(struct rcar_mipi_dsi *dsi)
>  	dev_dbg(dsi->dev, "DSI device is shutdown\n");
>  }
>  
> +static int rcar_mipi_dsi_clk_enable(struct rcar_mipi_dsi *dsi)
> +{
> +	int ret;
> +
> +	reset_control_deassert(dsi->rstc);
> +
> +	ret = clk_prepare_enable(dsi->clocks.mod);
> +	if (ret < 0)
> +		return ret;
> +
> +	ret = clk_prepare_enable(dsi->clocks.dsi);
> +	if (ret < 0) {
> +		clk_disable_unprepare(dsi->clocks.mod);
> +		return ret;
> +	}

I'll add a reset_control_assert() in the error paths.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> +
> +	return 0;
> +}
> +
> +static void rcar_mipi_dsi_clk_disable(struct rcar_mipi_dsi *dsi)
> +{
> +	clk_disable_unprepare(dsi->clocks.dsi);
> +	clk_disable_unprepare(dsi->clocks.mod);
> +
> +	reset_control_assert(dsi->rstc);
> +}
> +
>  static int rcar_mipi_dsi_start_hs_clock(struct rcar_mipi_dsi *dsi)
>  {
>  	/*
> @@ -542,13 +567,38 @@ static void rcar_mipi_dsi_enable(struct drm_bridge *bridge)
>  	struct rcar_mipi_dsi *dsi = bridge_to_rcar_mipi_dsi(bridge);
>  	int ret;
>  
> +	ret = rcar_mipi_dsi_clk_enable(dsi);
> +	if (ret < 0) {
> +		dev_err(dsi->dev, "failed to enable DSI clocks\n");
> +		return;
> +	}
> +
> +	ret = rcar_mipi_dsi_startup(dsi);
> +	if (ret < 0)
> +		goto err_dsi_startup;
> +
>  	rcar_mipi_dsi_set_display_timing(dsi);
>  
>  	ret = rcar_mipi_dsi_start_hs_clock(dsi);
>  	if (ret < 0)
> -		return;
> +		goto err_dsi_start_hs;
>  
>  	rcar_mipi_dsi_start_video(dsi);
> +
> +	return;
> +
> +err_dsi_start_hs:
> +	rcar_mipi_dsi_shutdown(dsi);
> +err_dsi_startup:
> +	rcar_mipi_dsi_clk_disable(dsi);
> +}
> +
> +static void rcar_mipi_dsi_disable(struct drm_bridge *bridge)
> +{
> +	struct rcar_mipi_dsi *dsi = bridge_to_rcar_mipi_dsi(bridge);
> +
> +	rcar_mipi_dsi_shutdown(dsi);
> +	rcar_mipi_dsi_clk_disable(dsi);
>  }
>  
>  static enum drm_mode_status
> @@ -566,6 +616,7 @@ static const struct drm_bridge_funcs rcar_mipi_dsi_bridge_ops = {
>  	.attach = rcar_mipi_dsi_attach,
>  	.mode_set = rcar_mipi_dsi_mode_set,
>  	.enable = rcar_mipi_dsi_enable,
> +	.disable = rcar_mipi_dsi_disable,
>  	.mode_valid = rcar_mipi_dsi_bridge_mode_valid,
>  };
>  
> @@ -573,47 +624,6 @@ static const struct drm_bridge_funcs rcar_mipi_dsi_bridge_ops = {
>   * Clock Setting
>   */
>  
> -int rcar_mipi_dsi_clk_enable(struct drm_bridge *bridge)
> -{
> -	struct rcar_mipi_dsi *dsi = bridge_to_rcar_mipi_dsi(bridge);
> -	int ret;
> -
> -	reset_control_deassert(dsi->rstc);
> -
> -	ret = clk_prepare_enable(dsi->clocks.mod);
> -	if (ret < 0)
> -		return ret;
> -
> -	ret = clk_prepare_enable(dsi->clocks.dsi);
> -	if (ret < 0)
> -		goto err_clock_mod;
> -
> -	ret = rcar_mipi_dsi_startup(dsi);
> -	if (ret < 0)
> -		goto err_clock_dsi;
> -
> -	return 0;
> -
> -err_clock_dsi:
> -	clk_disable_unprepare(dsi->clocks.dsi);
> -err_clock_mod:
> -	clk_disable_unprepare(dsi->clocks.mod);
> -	return ret;
> -}
> -EXPORT_SYMBOL_GPL(rcar_mipi_dsi_clk_enable);
> -
> -void rcar_mipi_dsi_clk_disable(struct drm_bridge *bridge)
> -{
> -	struct rcar_mipi_dsi *dsi = bridge_to_rcar_mipi_dsi(bridge);
> -
> -	rcar_mipi_dsi_shutdown(dsi);
> -
> -	clk_disable_unprepare(dsi->clocks.dsi);
> -	clk_disable_unprepare(dsi->clocks.mod);
> -
> -	reset_control_assert(dsi->rstc);
> -}
> -EXPORT_SYMBOL_GPL(rcar_mipi_dsi_clk_disable);
>  
>  /* -----------------------------------------------------------------------------
>   * Host setting
> diff --git a/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h b/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h
> deleted file mode 100644
> index a937ab7ddcd4..000000000000
> --- a/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -/*
> - * rcar_mipi_dsi.h  --  R-Car MIPI_DSI Encoder
> - *
> - * Copyright (C) 2020 Renesas Electronics Corporation
> - */
> -
> -#ifndef __RCAR_MIPI_DSI_H__
> -#define __RCAR_MIPI_DSI_H__
> -
> -struct drm_bridge;
> -
> -#if IS_ENABLED(CONFIG_DRM_RCAR_MIPI_DSI)
> -int rcar_mipi_dsi_clk_enable(struct drm_bridge *bridge);
> -void rcar_mipi_dsi_clk_disable(struct drm_bridge *bridge);
> -
> -#else
> -static inline int rcar_mipi_dsi_clk_enable(struct drm_bridge *bridge)
> -{
> -	return -ENOSYS;
> -}
> -static inline void rcar_mipi_dsi_clk_disable(struct drm_bridge *bridge) { }
> -
> -#endif /* CONFIG_DRM_RCAR_MIPI_DSI */
> -
> -#endif /* __RCAR_MIPI_DSI_H__ */
diff mbox series

Patch

diff --git a/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c b/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c
index 026026bbb367..4c5ef4de0ea7 100644
--- a/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c
+++ b/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.c
@@ -5,8 +5,6 @@ 
  * Copyright (C) 2020 Renesas Electronics Corporation
  */
 
-#include "rcar_mipi_dsi.h"
-
 #include <linux/clk.h>
 #include <linux/delay.h>
 #include <linux/io.h>
@@ -451,6 +449,33 @@  static void rcar_mipi_dsi_shutdown(struct rcar_mipi_dsi *dsi)
 	dev_dbg(dsi->dev, "DSI device is shutdown\n");
 }
 
+static int rcar_mipi_dsi_clk_enable(struct rcar_mipi_dsi *dsi)
+{
+	int ret;
+
+	reset_control_deassert(dsi->rstc);
+
+	ret = clk_prepare_enable(dsi->clocks.mod);
+	if (ret < 0)
+		return ret;
+
+	ret = clk_prepare_enable(dsi->clocks.dsi);
+	if (ret < 0) {
+		clk_disable_unprepare(dsi->clocks.mod);
+		return ret;
+	}
+
+	return 0;
+}
+
+static void rcar_mipi_dsi_clk_disable(struct rcar_mipi_dsi *dsi)
+{
+	clk_disable_unprepare(dsi->clocks.dsi);
+	clk_disable_unprepare(dsi->clocks.mod);
+
+	reset_control_assert(dsi->rstc);
+}
+
 static int rcar_mipi_dsi_start_hs_clock(struct rcar_mipi_dsi *dsi)
 {
 	/*
@@ -542,13 +567,38 @@  static void rcar_mipi_dsi_enable(struct drm_bridge *bridge)
 	struct rcar_mipi_dsi *dsi = bridge_to_rcar_mipi_dsi(bridge);
 	int ret;
 
+	ret = rcar_mipi_dsi_clk_enable(dsi);
+	if (ret < 0) {
+		dev_err(dsi->dev, "failed to enable DSI clocks\n");
+		return;
+	}
+
+	ret = rcar_mipi_dsi_startup(dsi);
+	if (ret < 0)
+		goto err_dsi_startup;
+
 	rcar_mipi_dsi_set_display_timing(dsi);
 
 	ret = rcar_mipi_dsi_start_hs_clock(dsi);
 	if (ret < 0)
-		return;
+		goto err_dsi_start_hs;
 
 	rcar_mipi_dsi_start_video(dsi);
+
+	return;
+
+err_dsi_start_hs:
+	rcar_mipi_dsi_shutdown(dsi);
+err_dsi_startup:
+	rcar_mipi_dsi_clk_disable(dsi);
+}
+
+static void rcar_mipi_dsi_disable(struct drm_bridge *bridge)
+{
+	struct rcar_mipi_dsi *dsi = bridge_to_rcar_mipi_dsi(bridge);
+
+	rcar_mipi_dsi_shutdown(dsi);
+	rcar_mipi_dsi_clk_disable(dsi);
 }
 
 static enum drm_mode_status
@@ -566,6 +616,7 @@  static const struct drm_bridge_funcs rcar_mipi_dsi_bridge_ops = {
 	.attach = rcar_mipi_dsi_attach,
 	.mode_set = rcar_mipi_dsi_mode_set,
 	.enable = rcar_mipi_dsi_enable,
+	.disable = rcar_mipi_dsi_disable,
 	.mode_valid = rcar_mipi_dsi_bridge_mode_valid,
 };
 
@@ -573,47 +624,6 @@  static const struct drm_bridge_funcs rcar_mipi_dsi_bridge_ops = {
  * Clock Setting
  */
 
-int rcar_mipi_dsi_clk_enable(struct drm_bridge *bridge)
-{
-	struct rcar_mipi_dsi *dsi = bridge_to_rcar_mipi_dsi(bridge);
-	int ret;
-
-	reset_control_deassert(dsi->rstc);
-
-	ret = clk_prepare_enable(dsi->clocks.mod);
-	if (ret < 0)
-		return ret;
-
-	ret = clk_prepare_enable(dsi->clocks.dsi);
-	if (ret < 0)
-		goto err_clock_mod;
-
-	ret = rcar_mipi_dsi_startup(dsi);
-	if (ret < 0)
-		goto err_clock_dsi;
-
-	return 0;
-
-err_clock_dsi:
-	clk_disable_unprepare(dsi->clocks.dsi);
-err_clock_mod:
-	clk_disable_unprepare(dsi->clocks.mod);
-	return ret;
-}
-EXPORT_SYMBOL_GPL(rcar_mipi_dsi_clk_enable);
-
-void rcar_mipi_dsi_clk_disable(struct drm_bridge *bridge)
-{
-	struct rcar_mipi_dsi *dsi = bridge_to_rcar_mipi_dsi(bridge);
-
-	rcar_mipi_dsi_shutdown(dsi);
-
-	clk_disable_unprepare(dsi->clocks.dsi);
-	clk_disable_unprepare(dsi->clocks.mod);
-
-	reset_control_assert(dsi->rstc);
-}
-EXPORT_SYMBOL_GPL(rcar_mipi_dsi_clk_disable);
 
 /* -----------------------------------------------------------------------------
  * Host setting
diff --git a/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h b/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h
deleted file mode 100644
index a937ab7ddcd4..000000000000
--- a/drivers/gpu/drm/rcar-du/rcar_mipi_dsi.h
+++ /dev/null
@@ -1,26 +0,0 @@ 
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * rcar_mipi_dsi.h  --  R-Car MIPI_DSI Encoder
- *
- * Copyright (C) 2020 Renesas Electronics Corporation
- */
-
-#ifndef __RCAR_MIPI_DSI_H__
-#define __RCAR_MIPI_DSI_H__
-
-struct drm_bridge;
-
-#if IS_ENABLED(CONFIG_DRM_RCAR_MIPI_DSI)
-int rcar_mipi_dsi_clk_enable(struct drm_bridge *bridge);
-void rcar_mipi_dsi_clk_disable(struct drm_bridge *bridge);
-
-#else
-static inline int rcar_mipi_dsi_clk_enable(struct drm_bridge *bridge)
-{
-	return -ENOSYS;
-}
-static inline void rcar_mipi_dsi_clk_disable(struct drm_bridge *bridge) { }
-
-#endif /* CONFIG_DRM_RCAR_MIPI_DSI */
-
-#endif /* __RCAR_MIPI_DSI_H__ */