mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 16:31:13 +00:00
115 lines
3.7 KiB
Diff
115 lines
3.7 KiB
Diff
|
From e664a91ea54b3488d6c08dd82dac2af1239c3275 Mon Sep 17 00:00:00 2001
|
||
|
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||
|
Date: Thu, 2 Dec 2021 18:21:46 +0000
|
||
|
Subject: [PATCH] drm/vc4: dpi: Add option for inverting pixel clock
|
||
|
and output enable
|
||
|
|
||
|
DRM provides flags for inverting pixel clock and output enable
|
||
|
signals, but these were not mapped to the relevant registers.
|
||
|
|
||
|
Add those mappings.
|
||
|
|
||
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||
|
---
|
||
|
drivers/gpu/drm/vc4/vc4_dpi.c | 89 ++++++++++++++++++++---------------
|
||
|
1 file changed, 51 insertions(+), 38 deletions(-)
|
||
|
|
||
|
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
|
||
|
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
|
||
|
@@ -148,45 +148,58 @@ static void vc4_dpi_encoder_enable(struc
|
||
|
}
|
||
|
drm_connector_list_iter_end(&conn_iter);
|
||
|
|
||
|
- if (connector && connector->display_info.num_bus_formats) {
|
||
|
- u32 bus_format = connector->display_info.bus_formats[0];
|
||
|
+ if (connector) {
|
||
|
+ if (connector->display_info.num_bus_formats) {
|
||
|
+ u32 bus_format = connector->display_info.bus_formats[0];
|
||
|
|
||
|
- switch (bus_format) {
|
||
|
- case MEDIA_BUS_FMT_RGB888_1X24:
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
|
||
|
- DPI_FORMAT);
|
||
|
- break;
|
||
|
- case MEDIA_BUS_FMT_BGR888_1X24:
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
|
||
|
- DPI_FORMAT);
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
|
||
|
- break;
|
||
|
- case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
|
||
|
- DPI_FORMAT);
|
||
|
- break;
|
||
|
- case MEDIA_BUS_FMT_BGR666_1X24_CPADHI:
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
|
||
|
- DPI_FORMAT);
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
|
||
|
- break;
|
||
|
- case MEDIA_BUS_FMT_RGB666_1X18:
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
|
||
|
- DPI_FORMAT);
|
||
|
- break;
|
||
|
- case MEDIA_BUS_FMT_BGR666_1X18:
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
|
||
|
- DPI_FORMAT);
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
|
||
|
- break;
|
||
|
- case MEDIA_BUS_FMT_RGB565_1X16:
|
||
|
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3,
|
||
|
- DPI_FORMAT);
|
||
|
- break;
|
||
|
- default:
|
||
|
- DRM_ERROR("Unknown media bus format %d\n", bus_format);
|
||
|
- break;
|
||
|
+ switch (bus_format) {
|
||
|
+ case MEDIA_BUS_FMT_RGB888_1X24:
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
|
||
|
+ DPI_FORMAT);
|
||
|
+ break;
|
||
|
+ case MEDIA_BUS_FMT_BGR888_1X24:
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
|
||
|
+ DPI_FORMAT);
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR,
|
||
|
+ DPI_ORDER);
|
||
|
+ break;
|
||
|
+ case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
|
||
|
+ DPI_FORMAT);
|
||
|
+ break;
|
||
|
+ case MEDIA_BUS_FMT_BGR666_1X24_CPADHI:
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
|
||
|
+ DPI_FORMAT);
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR,
|
||
|
+ DPI_ORDER);
|
||
|
+ break;
|
||
|
+ case MEDIA_BUS_FMT_RGB666_1X18:
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
|
||
|
+ DPI_FORMAT);
|
||
|
+ break;
|
||
|
+ case MEDIA_BUS_FMT_BGR666_1X18:
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
|
||
|
+ DPI_FORMAT);
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR,
|
||
|
+ DPI_ORDER);
|
||
|
+ break;
|
||
|
+ case MEDIA_BUS_FMT_RGB565_1X16:
|
||
|
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3,
|
||
|
+ DPI_FORMAT);
|
||
|
+ break;
|
||
|
+ default:
|
||
|
+ DRM_ERROR("Unknown media bus format %d\n",
|
||
|
+ bus_format);
|
||
|
+ break;
|
||
|
+ }
|
||
|
}
|
||
|
+
|
||
|
+ if (connector->display_info.bus_flags &
|
||
|
+ DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
|
||
|
+ dpi_c |= DPI_PIXEL_CLK_INVERT;
|
||
|
+
|
||
|
+ if (connector->display_info.bus_flags & DRM_BUS_FLAG_DE_LOW)
|
||
|
+ dpi_c |= DPI_OUTPUT_ENABLE_INVERT;
|
||
|
} else {
|
||
|
/* Default to 18bit if no connector found. */
|
||
|
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1, DPI_FORMAT);
|