drm/ingenic: Properly compute timings when using a 3x8-bit panel
The LCD controller expects timing values in dot-clock ticks, which is 3x the timing values in pixels when using a 3x8-bit display; but it will count the display area size in pixels either way. Go figure. Signed-off-by: Paul Cercueil <paul@crapouillou.net> Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Link: https://patchwork.freedesktop.org/patch/msgid/20201119155559.14112-3-paul@crapouillou.net
This commit is contained in:
parent
15b7e07bcb
commit
28ab7d35b6
1 changed files with 14 additions and 1 deletions
|
@ -644,6 +644,7 @@ static int ingenic_drm_encoder_atomic_check(struct drm_encoder *encoder,
|
||||||
struct drm_connector_state *conn_state)
|
struct drm_connector_state *conn_state)
|
||||||
{
|
{
|
||||||
struct drm_display_info *info = &conn_state->connector->display_info;
|
struct drm_display_info *info = &conn_state->connector->display_info;
|
||||||
|
struct drm_display_mode *mode = &crtc_state->adjusted_mode;
|
||||||
|
|
||||||
if (info->num_bus_formats != 1)
|
if (info->num_bus_formats != 1)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -652,10 +653,22 @@ static int ingenic_drm_encoder_atomic_check(struct drm_encoder *encoder,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch (*info->bus_formats) {
|
switch (*info->bus_formats) {
|
||||||
|
case MEDIA_BUS_FMT_RGB888_3X8:
|
||||||
|
/*
|
||||||
|
* The LCD controller expects timing values in dot-clock ticks,
|
||||||
|
* which is 3x the timing values in pixels when using a 3x8-bit
|
||||||
|
* display; but it will count the display area size in pixels
|
||||||
|
* either way. Go figure.
|
||||||
|
*/
|
||||||
|
mode->crtc_clock = mode->clock * 3;
|
||||||
|
mode->crtc_hsync_start = mode->hsync_start * 3 - mode->hdisplay * 2;
|
||||||
|
mode->crtc_hsync_end = mode->hsync_end * 3 - mode->hdisplay * 2;
|
||||||
|
mode->crtc_hdisplay = mode->hdisplay;
|
||||||
|
mode->crtc_htotal = mode->htotal * 3 - mode->hdisplay * 2;
|
||||||
|
return 0;
|
||||||
case MEDIA_BUS_FMT_RGB565_1X16:
|
case MEDIA_BUS_FMT_RGB565_1X16:
|
||||||
case MEDIA_BUS_FMT_RGB666_1X18:
|
case MEDIA_BUS_FMT_RGB666_1X18:
|
||||||
case MEDIA_BUS_FMT_RGB888_1X24:
|
case MEDIA_BUS_FMT_RGB888_1X24:
|
||||||
case MEDIA_BUS_FMT_RGB888_3X8:
|
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
Loading…
Add table
Reference in a new issue