drm/vc4: dpi: Add option for inverting pixel clock and output enable
[ Upstream commit 3c2707632146b22e97b0fbf6778bab8add2eaa1d ] 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> Link: https://lore.kernel.org/r/20220613144800.326124-10-maxime@cerno.tech Signed-off-by: Maxime Ripard <maxime@cerno.tech> Stable-dep-of: 0870d86eac8a ("drm/vc4: dpi: Fix format mapping for RGB565") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
7ddd8a5ecf
commit
d66f26b93c
@ -151,35 +151,45 @@ static void vc4_dpi_encoder_enable(struct drm_encoder *encoder)
|
||||
}
|
||||
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_RGB666_1X18:
|
||||
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
|
||||
DPI_FORMAT);
|
||||
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_RGB666_1X18:
|
||||
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
|
||||
DPI_FORMAT);
|
||||
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 24bit if no connector found. */
|
||||
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB, DPI_FORMAT);
|
||||
|
Loading…
Reference in New Issue
Block a user