All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sam Ravnborg <sam@ravnborg.org>
To: Paul Cercueil <paul@crapouillou.net>
Cc: David Airlie <airlied@linux.ie>,
	dri-devel@lists.freedesktop.org, od@zcrc.me,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/3] DRM: ingenic: Add support for Sharp panels
Date: Sun, 30 Jun 2019 10:20:47 +0200	[thread overview]
Message-ID: <20190630082047.GD5081@ravnborg.org> (raw)
In-Reply-To: <20190627182114.27299-2-paul@crapouillou.net>

On Thu, Jun 27, 2019 at 08:21:13PM +0200, Paul Cercueil wrote:
> Add support for the LCD panels that must be driven with the
> Sharp-specific signals SPL, CLS, REV, PS.
> 
> An example of such panel is the LS020B1DD01D supported by the
> panel-simple DRM panel driver.
> 
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>

> ---
>  drivers/gpu/drm/ingenic/ingenic-drm.c | 64 +++++++++++++++++----------
>  1 file changed, 41 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ingenic/ingenic-drm.c b/drivers/gpu/drm/ingenic/ingenic-drm.c
> index 02c4788ef1c7..da966f3dc1f7 100644
> --- a/drivers/gpu/drm/ingenic/ingenic-drm.c
> +++ b/drivers/gpu/drm/ingenic/ingenic-drm.c
> @@ -166,6 +166,8 @@ struct ingenic_drm {
>  
>  	struct ingenic_dma_hwdesc *dma_hwdesc;
>  	dma_addr_t dma_hwdesc_phys;
> +
> +	bool panel_is_sharp;
>  };
>  
>  static const u32 ingenic_drm_primary_formats[] = {
> @@ -283,6 +285,13 @@ static void ingenic_drm_crtc_update_timings(struct ingenic_drm *priv,
>  	regmap_write(priv->map, JZ_REG_LCD_DAV,
>  		     vds << JZ_LCD_DAV_VDS_OFFSET |
>  		     vde << JZ_LCD_DAV_VDE_OFFSET);
> +
> +	if (priv->panel_is_sharp) {
> +		regmap_write(priv->map, JZ_REG_LCD_PS, hde << 16 | (hde + 1));
> +		regmap_write(priv->map, JZ_REG_LCD_CLS, hde << 16 | (hde + 1));
> +		regmap_write(priv->map, JZ_REG_LCD_SPL, hpe << 16 | (hpe + 1));
> +		regmap_write(priv->map, JZ_REG_LCD_REV, mode->htotal << 16);
> +	}
>  }
>  
>  static void ingenic_drm_crtc_update_ctrl(struct ingenic_drm *priv,
> @@ -378,11 +387,18 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
>  {
>  	struct ingenic_drm *priv = drm_encoder_get_priv(encoder);
>  	struct drm_display_mode *mode = &crtc_state->adjusted_mode;
> -	struct drm_display_info *info = &conn_state->connector->display_info;
> -	unsigned int cfg = JZ_LCD_CFG_PS_DISABLE
> -			 | JZ_LCD_CFG_CLS_DISABLE
> -			 | JZ_LCD_CFG_SPL_DISABLE
> -			 | JZ_LCD_CFG_REV_DISABLE;
> +	struct drm_connector *conn = conn_state->connector;
> +	struct drm_display_info *info = &conn->display_info;
> +	unsigned int cfg;
> +
> +	priv->panel_is_sharp = info->bus_flags & DRM_BUS_FLAG_SHARP_SIGNALS;
> +
> +	if (priv->panel_is_sharp) {
> +		cfg = JZ_LCD_CFG_MODE_SPECIAL_TFT_1 | JZ_LCD_CFG_REV_POLARITY;
> +	} else {
> +		cfg = JZ_LCD_CFG_PS_DISABLE | JZ_LCD_CFG_CLS_DISABLE
> +		    | JZ_LCD_CFG_SPL_DISABLE | JZ_LCD_CFG_REV_DISABLE;
> +	}
>  
>  	if (mode->flags & DRM_MODE_FLAG_NHSYNC)
>  		cfg |= JZ_LCD_CFG_HSYNC_ACTIVE_LOW;
> @@ -393,24 +409,26 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
>  	if (info->bus_flags & DRM_BUS_FLAG_PIXDATA_NEGEDGE)
>  		cfg |= JZ_LCD_CFG_PCLK_FALLING_EDGE;
>  
> -	if (conn_state->connector->connector_type == DRM_MODE_CONNECTOR_TV) {
> -		if (mode->flags & DRM_MODE_FLAG_INTERLACE)
> -			cfg |= JZ_LCD_CFG_MODE_TV_OUT_I;
> -		else
> -			cfg |= JZ_LCD_CFG_MODE_TV_OUT_P;
> -	} else {
> -		switch (*info->bus_formats) {
> -		case MEDIA_BUS_FMT_RGB565_1X16:
> -			cfg |= JZ_LCD_CFG_MODE_GENERIC_16BIT;
> -			break;
> -		case MEDIA_BUS_FMT_RGB666_1X18:
> -			cfg |= JZ_LCD_CFG_MODE_GENERIC_18BIT;
> -			break;
> -		case MEDIA_BUS_FMT_RGB888_1X24:
> -			cfg |= JZ_LCD_CFG_MODE_GENERIC_24BIT;
> -			break;
> -		default:
> -			break;
> +	if (!priv->panel_is_sharp) {
> +		if (conn->connector_type == DRM_MODE_CONNECTOR_TV) {
> +			if (mode->flags & DRM_MODE_FLAG_INTERLACE)
> +				cfg |= JZ_LCD_CFG_MODE_TV_OUT_I;
> +			else
> +				cfg |= JZ_LCD_CFG_MODE_TV_OUT_P;
> +		} else {
> +			switch (*info->bus_formats) {
> +			case MEDIA_BUS_FMT_RGB565_1X16:
> +				cfg |= JZ_LCD_CFG_MODE_GENERIC_16BIT;
> +				break;
> +			case MEDIA_BUS_FMT_RGB666_1X18:
> +				cfg |= JZ_LCD_CFG_MODE_GENERIC_18BIT;
> +				break;
> +			case MEDIA_BUS_FMT_RGB888_1X24:
> +				cfg |= JZ_LCD_CFG_MODE_GENERIC_24BIT;
> +				break;
> +			default:
> +				break;
> +			}
>  		}
>  	}
>  
> -- 
> 2.21.0.593.g511ec345e18
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

WARNING: multiple messages have this Message-ID (diff)
From: Sam Ravnborg <sam@ravnborg.org>
To: Paul Cercueil <paul@crapouillou.net>
Cc: David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
	od@zcrc.me, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 2/3] DRM: ingenic: Add support for Sharp panels
Date: Sun, 30 Jun 2019 10:20:47 +0200	[thread overview]
Message-ID: <20190630082047.GD5081@ravnborg.org> (raw)
In-Reply-To: <20190627182114.27299-2-paul@crapouillou.net>

On Thu, Jun 27, 2019 at 08:21:13PM +0200, Paul Cercueil wrote:
> Add support for the LCD panels that must be driven with the
> Sharp-specific signals SPL, CLS, REV, PS.
> 
> An example of such panel is the LS020B1DD01D supported by the
> panel-simple DRM panel driver.
> 
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>

> ---
>  drivers/gpu/drm/ingenic/ingenic-drm.c | 64 +++++++++++++++++----------
>  1 file changed, 41 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ingenic/ingenic-drm.c b/drivers/gpu/drm/ingenic/ingenic-drm.c
> index 02c4788ef1c7..da966f3dc1f7 100644
> --- a/drivers/gpu/drm/ingenic/ingenic-drm.c
> +++ b/drivers/gpu/drm/ingenic/ingenic-drm.c
> @@ -166,6 +166,8 @@ struct ingenic_drm {
>  
>  	struct ingenic_dma_hwdesc *dma_hwdesc;
>  	dma_addr_t dma_hwdesc_phys;
> +
> +	bool panel_is_sharp;
>  };
>  
>  static const u32 ingenic_drm_primary_formats[] = {
> @@ -283,6 +285,13 @@ static void ingenic_drm_crtc_update_timings(struct ingenic_drm *priv,
>  	regmap_write(priv->map, JZ_REG_LCD_DAV,
>  		     vds << JZ_LCD_DAV_VDS_OFFSET |
>  		     vde << JZ_LCD_DAV_VDE_OFFSET);
> +
> +	if (priv->panel_is_sharp) {
> +		regmap_write(priv->map, JZ_REG_LCD_PS, hde << 16 | (hde + 1));
> +		regmap_write(priv->map, JZ_REG_LCD_CLS, hde << 16 | (hde + 1));
> +		regmap_write(priv->map, JZ_REG_LCD_SPL, hpe << 16 | (hpe + 1));
> +		regmap_write(priv->map, JZ_REG_LCD_REV, mode->htotal << 16);
> +	}
>  }
>  
>  static void ingenic_drm_crtc_update_ctrl(struct ingenic_drm *priv,
> @@ -378,11 +387,18 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
>  {
>  	struct ingenic_drm *priv = drm_encoder_get_priv(encoder);
>  	struct drm_display_mode *mode = &crtc_state->adjusted_mode;
> -	struct drm_display_info *info = &conn_state->connector->display_info;
> -	unsigned int cfg = JZ_LCD_CFG_PS_DISABLE
> -			 | JZ_LCD_CFG_CLS_DISABLE
> -			 | JZ_LCD_CFG_SPL_DISABLE
> -			 | JZ_LCD_CFG_REV_DISABLE;
> +	struct drm_connector *conn = conn_state->connector;
> +	struct drm_display_info *info = &conn->display_info;
> +	unsigned int cfg;
> +
> +	priv->panel_is_sharp = info->bus_flags & DRM_BUS_FLAG_SHARP_SIGNALS;
> +
> +	if (priv->panel_is_sharp) {
> +		cfg = JZ_LCD_CFG_MODE_SPECIAL_TFT_1 | JZ_LCD_CFG_REV_POLARITY;
> +	} else {
> +		cfg = JZ_LCD_CFG_PS_DISABLE | JZ_LCD_CFG_CLS_DISABLE
> +		    | JZ_LCD_CFG_SPL_DISABLE | JZ_LCD_CFG_REV_DISABLE;
> +	}
>  
>  	if (mode->flags & DRM_MODE_FLAG_NHSYNC)
>  		cfg |= JZ_LCD_CFG_HSYNC_ACTIVE_LOW;
> @@ -393,24 +409,26 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
>  	if (info->bus_flags & DRM_BUS_FLAG_PIXDATA_NEGEDGE)
>  		cfg |= JZ_LCD_CFG_PCLK_FALLING_EDGE;
>  
> -	if (conn_state->connector->connector_type == DRM_MODE_CONNECTOR_TV) {
> -		if (mode->flags & DRM_MODE_FLAG_INTERLACE)
> -			cfg |= JZ_LCD_CFG_MODE_TV_OUT_I;
> -		else
> -			cfg |= JZ_LCD_CFG_MODE_TV_OUT_P;
> -	} else {
> -		switch (*info->bus_formats) {
> -		case MEDIA_BUS_FMT_RGB565_1X16:
> -			cfg |= JZ_LCD_CFG_MODE_GENERIC_16BIT;
> -			break;
> -		case MEDIA_BUS_FMT_RGB666_1X18:
> -			cfg |= JZ_LCD_CFG_MODE_GENERIC_18BIT;
> -			break;
> -		case MEDIA_BUS_FMT_RGB888_1X24:
> -			cfg |= JZ_LCD_CFG_MODE_GENERIC_24BIT;
> -			break;
> -		default:
> -			break;
> +	if (!priv->panel_is_sharp) {
> +		if (conn->connector_type == DRM_MODE_CONNECTOR_TV) {
> +			if (mode->flags & DRM_MODE_FLAG_INTERLACE)
> +				cfg |= JZ_LCD_CFG_MODE_TV_OUT_I;
> +			else
> +				cfg |= JZ_LCD_CFG_MODE_TV_OUT_P;
> +		} else {
> +			switch (*info->bus_formats) {
> +			case MEDIA_BUS_FMT_RGB565_1X16:
> +				cfg |= JZ_LCD_CFG_MODE_GENERIC_16BIT;
> +				break;
> +			case MEDIA_BUS_FMT_RGB666_1X18:
> +				cfg |= JZ_LCD_CFG_MODE_GENERIC_18BIT;
> +				break;
> +			case MEDIA_BUS_FMT_RGB888_1X24:
> +				cfg |= JZ_LCD_CFG_MODE_GENERIC_24BIT;
> +				break;
> +			default:
> +				break;
> +			}
>  		}
>  	}
>  
> -- 
> 2.21.0.593.g511ec345e18
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2019-06-30  8:20 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-27 18:21 [PATCH 1/3] DRM: ingenic: Use devm_platform_ioremap_resource Paul Cercueil
2019-06-27 18:21 ` [PATCH 2/3] DRM: ingenic: Add support for Sharp panels Paul Cercueil
2019-06-30  8:20   ` Sam Ravnborg [this message]
2019-06-30  8:20     ` Sam Ravnborg
2019-06-27 18:21 ` [PATCH 3/3] DRM: ingenic: Add support for panels with 8-bit serial bus Paul Cercueil
2019-06-30  8:21   ` Sam Ravnborg
2019-06-30  8:21     ` Sam Ravnborg
2019-06-30  8:18 ` [PATCH 1/3] DRM: ingenic: Use devm_platform_ioremap_resource Sam Ravnborg
2019-06-30  8:18   ` Sam Ravnborg
2019-06-30 11:09   ` Paul Cercueil
2019-06-30 20:56     ` Sam Ravnborg
2019-06-30 20:56       ` Sam Ravnborg

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=20190630082047.GD5081@ravnborg.org \
    --to=sam@ravnborg.org \
    --cc=airlied@linux.ie \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=od@zcrc.me \
    --cc=paul@crapouillou.net \
    /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.