diff mbox

[06/10] drm/exynos/hdmi: remove redundant mode field

Message ID 1504694220-15818-7-git-send-email-a.hajda@samsung.com (mailing list archive)
State Not Applicable
Headers show

Commit Message

Andrzej Hajda Sept. 6, 2017, 10:36 a.m. UTC
Display mode is preserved in CRTC state, there is no need to keep local
copy of it. Moreover since HDMI should configure registers according to
requested mode, use it instead of adjusted_mode, which should contain
mode produced by CRTC - functionally it does not change anything, but
subsequent patches will make the difference.

Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_hdmi.c | 34 +++++++++-------------------------
 1 file changed, 9 insertions(+), 25 deletions(-)

Comments

Tobias Jakobi Sept. 12, 2017, 12:33 p.m. UTC | #1
Hello Andrzej,


Andrzej Hajda wrote:
> Display mode is preserved in CRTC state, there is no need to keep local
> copy of it. Moreover since HDMI should configure registers according to
> requested mode, use it instead of adjusted_mode, which should contain
> mode produced by CRTC - functionally it does not change anything, but
> subsequent patches will make the difference.

Reviewed-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>


> Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_hdmi.c | 34 +++++++++-------------------------
>  1 file changed, 9 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
> index 214fa5e..7225b65 100644
> --- a/drivers/gpu/drm/exynos/exynos_hdmi.c
> +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
> @@ -119,7 +119,6 @@ struct hdmi_context {
>  	bool				powered;
>  	bool				dvi_mode;
>  	struct delayed_work		hotplug_work;
> -	struct drm_display_mode		current_mode;
>  	struct cec_notifier		*notifier;
>  	const struct hdmi_driver_data	*drv_data;
>  
> @@ -770,6 +769,7 @@ static int hdmi_clk_set_parents(struct hdmi_context *hdata, bool to_phy)
>  
>  static void hdmi_reg_infoframes(struct hdmi_context *hdata)
>  {
> +	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
>  	union hdmi_infoframe frm;
>  	u8 buf[25];
>  	int ret;
> @@ -783,8 +783,7 @@ static void hdmi_reg_infoframes(struct hdmi_context *hdata)
>  		return;
>  	}
>  
> -	ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi,
> -			&hdata->current_mode, false);
> +	ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi, m, false);
>  	if (!ret)
>  		ret = hdmi_avi_infoframe_pack(&frm.avi, buf, sizeof(buf));
>  	if (ret > 0) {
> @@ -794,8 +793,7 @@ static void hdmi_reg_infoframes(struct hdmi_context *hdata)
>  		DRM_INFO("%s: invalid AVI infoframe (%d)\n", __func__, ret);
>  	}
>  
> -	ret = drm_hdmi_vendor_infoframe_from_display_mode(&frm.vendor.hdmi,
> -			&hdata->current_mode);
> +	ret = drm_hdmi_vendor_infoframe_from_display_mode(&frm.vendor.hdmi, m);
>  	if (!ret)
>  		ret = hdmi_vendor_infoframe_pack(&frm.vendor.hdmi, buf,
>  				sizeof(buf));
> @@ -1088,9 +1086,10 @@ static void hdmi_audio_control(struct hdmi_context *hdata, bool onoff)
>  
>  static void hdmi_start(struct hdmi_context *hdata, bool start)
>  {
> +	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
>  	u32 val = start ? HDMI_TG_EN : 0;
>  
> -	if (hdata->current_mode.flags & DRM_MODE_FLAG_INTERLACE)
> +	if (m->flags & DRM_MODE_FLAG_INTERLACE)
>  		val |= HDMI_FIELD_EN;
>  
>  	hdmi_reg_writemask(hdata, HDMI_CON_0, val, HDMI_EN);
> @@ -1160,7 +1159,7 @@ static void hdmiphy_wait_for_pll(struct hdmi_context *hdata)
>  
>  static void hdmi_v13_mode_apply(struct hdmi_context *hdata)
>  {
> -	struct drm_display_mode *m = &hdata->current_mode;
> +	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
>  	unsigned int val;
>  
>  	hdmi_reg_writev(hdata, HDMI_H_BLANK_0, 2, m->htotal - m->hdisplay);
> @@ -1239,7 +1238,7 @@ static void hdmi_v13_mode_apply(struct hdmi_context *hdata)
>  
>  static void hdmi_v14_mode_apply(struct hdmi_context *hdata)
>  {
> -	struct drm_display_mode *m = &hdata->current_mode;
> +	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
>  
>  	hdmi_reg_writev(hdata, HDMI_H_BLANK_0, 2, m->htotal - m->hdisplay);
>  	hdmi_reg_writev(hdata, HDMI_V_LINE_0, 2, m->vtotal);
> @@ -1372,10 +1371,11 @@ static void hdmiphy_enable_mode_set(struct hdmi_context *hdata, bool enable)
>  
>  static void hdmiphy_conf_apply(struct hdmi_context *hdata)
>  {
> +	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
>  	int ret;
>  	const u8 *phy_conf;
>  
> -	ret = hdmi_find_phy_conf(hdata, hdata->current_mode.clock * 1000);
> +	ret = hdmi_find_phy_conf(hdata, m->clock * 1000);
>  	if (ret < 0) {
>  		DRM_ERROR("failed to find hdmiphy conf\n");
>  		return;
> @@ -1407,21 +1407,6 @@ static void hdmi_conf_apply(struct hdmi_context *hdata)
>  	hdmi_audio_control(hdata, true);
>  }
>  
> -static void hdmi_mode_set(struct drm_encoder *encoder,
> -			  struct drm_display_mode *mode,
> -			  struct drm_display_mode *adjusted_mode)
> -{
> -	struct hdmi_context *hdata = encoder_to_hdmi(encoder);
> -	struct drm_display_mode *m = adjusted_mode;
> -
> -	DRM_DEBUG_KMS("xres=%d, yres=%d, refresh=%d, intl=%s\n",
> -		m->hdisplay, m->vdisplay,
> -		m->vrefresh, (m->flags & DRM_MODE_FLAG_INTERLACE) ?
> -		"INTERLACED" : "PROGRESSIVE");
> -
> -	drm_mode_copy(&hdata->current_mode, m);
> -}
> -
>  static void hdmi_set_refclk(struct hdmi_context *hdata, bool on)
>  {
>  	if (!hdata->sysreg)
> @@ -1504,7 +1489,6 @@ static void hdmi_disable(struct drm_encoder *encoder)
>  
>  static const struct drm_encoder_helper_funcs exynos_hdmi_encoder_helper_funcs = {
>  	.mode_fixup	= hdmi_mode_fixup,
> -	.mode_set	= hdmi_mode_set,
>  	.enable		= hdmi_enable,
>  	.disable	= hdmi_disable,
>  };
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index 214fa5e..7225b65 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -119,7 +119,6 @@  struct hdmi_context {
 	bool				powered;
 	bool				dvi_mode;
 	struct delayed_work		hotplug_work;
-	struct drm_display_mode		current_mode;
 	struct cec_notifier		*notifier;
 	const struct hdmi_driver_data	*drv_data;
 
@@ -770,6 +769,7 @@  static int hdmi_clk_set_parents(struct hdmi_context *hdata, bool to_phy)
 
 static void hdmi_reg_infoframes(struct hdmi_context *hdata)
 {
+	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
 	union hdmi_infoframe frm;
 	u8 buf[25];
 	int ret;
@@ -783,8 +783,7 @@  static void hdmi_reg_infoframes(struct hdmi_context *hdata)
 		return;
 	}
 
-	ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi,
-			&hdata->current_mode, false);
+	ret = drm_hdmi_avi_infoframe_from_display_mode(&frm.avi, m, false);
 	if (!ret)
 		ret = hdmi_avi_infoframe_pack(&frm.avi, buf, sizeof(buf));
 	if (ret > 0) {
@@ -794,8 +793,7 @@  static void hdmi_reg_infoframes(struct hdmi_context *hdata)
 		DRM_INFO("%s: invalid AVI infoframe (%d)\n", __func__, ret);
 	}
 
-	ret = drm_hdmi_vendor_infoframe_from_display_mode(&frm.vendor.hdmi,
-			&hdata->current_mode);
+	ret = drm_hdmi_vendor_infoframe_from_display_mode(&frm.vendor.hdmi, m);
 	if (!ret)
 		ret = hdmi_vendor_infoframe_pack(&frm.vendor.hdmi, buf,
 				sizeof(buf));
@@ -1088,9 +1086,10 @@  static void hdmi_audio_control(struct hdmi_context *hdata, bool onoff)
 
 static void hdmi_start(struct hdmi_context *hdata, bool start)
 {
+	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
 	u32 val = start ? HDMI_TG_EN : 0;
 
-	if (hdata->current_mode.flags & DRM_MODE_FLAG_INTERLACE)
+	if (m->flags & DRM_MODE_FLAG_INTERLACE)
 		val |= HDMI_FIELD_EN;
 
 	hdmi_reg_writemask(hdata, HDMI_CON_0, val, HDMI_EN);
@@ -1160,7 +1159,7 @@  static void hdmiphy_wait_for_pll(struct hdmi_context *hdata)
 
 static void hdmi_v13_mode_apply(struct hdmi_context *hdata)
 {
-	struct drm_display_mode *m = &hdata->current_mode;
+	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
 	unsigned int val;
 
 	hdmi_reg_writev(hdata, HDMI_H_BLANK_0, 2, m->htotal - m->hdisplay);
@@ -1239,7 +1238,7 @@  static void hdmi_v13_mode_apply(struct hdmi_context *hdata)
 
 static void hdmi_v14_mode_apply(struct hdmi_context *hdata)
 {
-	struct drm_display_mode *m = &hdata->current_mode;
+	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
 
 	hdmi_reg_writev(hdata, HDMI_H_BLANK_0, 2, m->htotal - m->hdisplay);
 	hdmi_reg_writev(hdata, HDMI_V_LINE_0, 2, m->vtotal);
@@ -1372,10 +1371,11 @@  static void hdmiphy_enable_mode_set(struct hdmi_context *hdata, bool enable)
 
 static void hdmiphy_conf_apply(struct hdmi_context *hdata)
 {
+	struct drm_display_mode *m = &hdata->encoder.crtc->state->mode;
 	int ret;
 	const u8 *phy_conf;
 
-	ret = hdmi_find_phy_conf(hdata, hdata->current_mode.clock * 1000);
+	ret = hdmi_find_phy_conf(hdata, m->clock * 1000);
 	if (ret < 0) {
 		DRM_ERROR("failed to find hdmiphy conf\n");
 		return;
@@ -1407,21 +1407,6 @@  static void hdmi_conf_apply(struct hdmi_context *hdata)
 	hdmi_audio_control(hdata, true);
 }
 
-static void hdmi_mode_set(struct drm_encoder *encoder,
-			  struct drm_display_mode *mode,
-			  struct drm_display_mode *adjusted_mode)
-{
-	struct hdmi_context *hdata = encoder_to_hdmi(encoder);
-	struct drm_display_mode *m = adjusted_mode;
-
-	DRM_DEBUG_KMS("xres=%d, yres=%d, refresh=%d, intl=%s\n",
-		m->hdisplay, m->vdisplay,
-		m->vrefresh, (m->flags & DRM_MODE_FLAG_INTERLACE) ?
-		"INTERLACED" : "PROGRESSIVE");
-
-	drm_mode_copy(&hdata->current_mode, m);
-}
-
 static void hdmi_set_refclk(struct hdmi_context *hdata, bool on)
 {
 	if (!hdata->sysreg)
@@ -1504,7 +1489,6 @@  static void hdmi_disable(struct drm_encoder *encoder)
 
 static const struct drm_encoder_helper_funcs exynos_hdmi_encoder_helper_funcs = {
 	.mode_fixup	= hdmi_mode_fixup,
-	.mode_set	= hdmi_mode_set,
 	.enable		= hdmi_enable,
 	.disable	= hdmi_disable,
 };