diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0650-Support-RPi-DPI-interface-in-mode6-for-18-bit-color.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.10/950-0650-Support-RPi-DPI-interface-in-mode6-for-18-bit-color.patch | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0650-Support-RPi-DPI-interface-in-mode6-for-18-bit-color.patch b/target/linux/bcm27xx/patches-5.10/950-0650-Support-RPi-DPI-interface-in-mode6-for-18-bit-color.patch new file mode 100644 index 0000000000..56a1e6862b --- /dev/null +++ b/target/linux/bcm27xx/patches-5.10/950-0650-Support-RPi-DPI-interface-in-mode6-for-18-bit-color.patch @@ -0,0 +1,214 @@ +From 16edbdfde51fc3180cecb00ad0aa311bd4567650 Mon Sep 17 00:00:00 2001 +From: Joerg Quinten <aBUGSworstnightmare@gmail.com> +Date: Fri, 18 Jun 2021 13:02:29 +0200 +Subject: [PATCH] Support RPi DPI interface in mode6 for 18-bit color + +A matching media bus format was added and an overlay for using it, +both with FB and VC4 was added as well. + +Signed-off-by: Joerg Quinten <aBUGSworstnightmare@gmail.com> +--- + .../bindings/display/panel/panel-simple.yaml | 2 + + .../media/v4l/subdev-formats.rst | 74 +++++++++++++++++++ + drivers/gpu/drm/panel/panel-simple.c | 35 +++++++++ + drivers/gpu/drm/vc4/vc4_dpi.c | 10 +++ + include/uapi/linux/media-bus-format.h | 4 +- + 5 files changed, 124 insertions(+), 1 deletion(-) + +--- a/Documentation/devicetree/bindings/display/panel/panel-simple.yaml ++++ b/Documentation/devicetree/bindings/display/panel/panel-simple.yaml +@@ -147,6 +147,8 @@ properties: + - ivo,m133nwf4-r0 + # Innolux AT043TN24 4.3" WQVGA TFT LCD panel + - innolux,at043tn24 ++ # Innolux AT056tN53V1 5.6" VGA (640x480) TFT LCD panel ++ - innolux,at056tn53v1 + # Innolux AT070TN92 7.0" WQVGA TFT LCD panel + - innolux,at070tn92 + # Innolux G070Y2-L01 7" WVGA (800x480) TFT LCD panel +--- a/Documentation/userspace-api/media/v4l/subdev-formats.rst ++++ b/Documentation/userspace-api/media/v4l/subdev-formats.rst +@@ -908,6 +908,43 @@ The following tables list existing packe + - g\ :sub:`5` + - g\ :sub:`4` + - g\ :sub:`3` ++ * .. _MEDIA-BUS-FMT-BGR666-1X18: ++ ++ - MEDIA_BUS_FMT_RGB666_1X18 ++ - 0x101f ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - b\ :sub:`5` ++ - b\ :sub:`4` ++ - b\ :sub:`3` ++ - b\ :sub:`2` ++ - b\ :sub:`1` ++ - b\ :sub:`0` ++ - g\ :sub:`5` ++ - g\ :sub:`4` ++ - g\ :sub:`3` ++ - g\ :sub:`2` ++ - g\ :sub:`1` ++ - g\ :sub:`0` ++ - r\ :sub:`5` ++ - r\ :sub:`4` ++ - r\ :sub:`3` ++ - r\ :sub:`2` ++ - r\ :sub:`1` ++ - r\ :sub:`0` + * .. _MEDIA-BUS-FMT-RGB666-1X18: + + - MEDIA_BUS_FMT_RGB666_1X18 +@@ -982,6 +1019,43 @@ The following tables list existing packe + - g\ :sub:`2` + - g\ :sub:`1` + - g\ :sub:`0` ++ * .. _MEDIA-BUS-FMT-BGR666-1X24_CPADHI: ++ ++ - MEDIA_BUS_FMT_BGR666_1X24_CPADHI ++ - 0x101e ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - ++ - 0 ++ - 0 ++ - b\ :sub:`5` ++ - b\ :sub:`4` ++ - b\ :sub:`3` ++ - b\ :sub:`2` ++ - b\ :sub:`1` ++ - b\ :sub:`0` ++ - 0 ++ - 0 ++ - g\ :sub:`5` ++ - g\ :sub:`4` ++ - g\ :sub:`3` ++ - g\ :sub:`2` ++ - g\ :sub:`1` ++ - g\ :sub:`0` ++ - 0 ++ - 0 ++ - r\ :sub:`5` ++ - r\ :sub:`4` ++ - r\ :sub:`3` ++ - r\ :sub:`2` ++ - r\ :sub:`1` ++ - r\ :sub:`0` + * .. _MEDIA-BUS-FMT-RGB666-1X24_CPADHI: + + - MEDIA_BUS_FMT_RGB666_1X24_CPADHI +--- a/drivers/gpu/drm/panel/panel-simple.c ++++ b/drivers/gpu/drm/panel/panel-simple.c +@@ -2093,6 +2093,38 @@ static const struct panel_desc innolux_a + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE, + }; + ++static const struct display_timing innolux_at056tn53v1_timing = { ++ .pixelclock = { 39700000, 39700000, 39700000}, ++ .hactive = { 640, 640, 640 }, ++ .hfront_porch = { 16, 16, 16 }, ++ .hback_porch = { 134, 134, 134 }, ++ .hsync_len = { 10, 10, 10}, ++ .vactive = { 480, 480, 480 }, ++ .vfront_porch = { 32, 32, 32}, ++ .vback_porch = { 11, 11, 11 }, ++ .vsync_len = { 2, 2, 2 }, ++ .flags = DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_PHSYNC, ++}; ++ ++static const struct panel_desc innolux_at056tn53v1 = { ++ .timings = &innolux_at056tn53v1_timing, ++ .num_timings = 1, ++ .bpc = 6, ++ .size = { ++ .width = 112, ++ .height = 84, ++ }, ++ .delay = { ++ .prepare = 50, ++ .enable = 200, ++ .disable = 110, ++ .unprepare = 200, ++ }, ++ .bus_format = MEDIA_BUS_FMT_BGR666_1X24_CPADHI, ++ .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE, ++ .connector_type = DRM_MODE_CONNECTOR_DPI, ++}; ++ + static const struct drm_display_mode innolux_at070tn92_mode = { + .clock = 33333, + .hdisplay = 800, +@@ -4076,6 +4108,9 @@ static const struct of_device_id platfor + .compatible = "innolux,at043tn24", + .data = &innolux_at043tn24, + }, { ++ .compatible = "innolux,at056tn53v1", ++ .data = &innolux_at056tn53v1, ++ }, { + .compatible = "innolux,at070tn92", + .data = &innolux_at070tn92, + }, { +--- a/drivers/gpu/drm/vc4/vc4_dpi.c ++++ b/drivers/gpu/drm/vc4/vc4_dpi.c +@@ -165,10 +165,20 @@ static void vc4_dpi_encoder_enable(struc + 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); +--- a/include/uapi/linux/media-bus-format.h ++++ b/include/uapi/linux/media-bus-format.h +@@ -34,7 +34,7 @@ + + #define MEDIA_BUS_FMT_FIXED 0x0001 + +-/* RGB - next is 0x101d */ ++/* RGB - next is 0x1020 */ + #define MEDIA_BUS_FMT_RGB444_1X12 0x1016 + #define MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE 0x1001 + #define MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE 0x1002 +@@ -45,8 +45,10 @@ + #define MEDIA_BUS_FMT_BGR565_2X8_LE 0x1006 + #define MEDIA_BUS_FMT_RGB565_2X8_BE 0x1007 + #define MEDIA_BUS_FMT_RGB565_2X8_LE 0x1008 ++#define MEDIA_BUS_FMT_BGR666_1X18 0x101f + #define MEDIA_BUS_FMT_RGB666_1X18 0x1009 + #define MEDIA_BUS_FMT_RBG888_1X24 0x100e ++#define MEDIA_BUS_FMT_BGR666_1X24_CPADHI 0x101e + #define MEDIA_BUS_FMT_RGB666_1X24_CPADHI 0x1015 + #define MEDIA_BUS_FMT_RGB666_1X7X3_SPWG 0x1010 + #define MEDIA_BUS_FMT_BGR888_1X24 0x1013 |