Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dt-bindings: display: panel: mipi-dbi-spi: Add a pixel format property

The MIPI DBI 2.0 specification (2005) lists only two pixel formats for
the Type C Interface (SPI) and that is 3-bits/pixel RGB111 with
2 options for bit layout.

For Type A and B (parallel) the following formats are listed: RGB332,
RGB444, RGB565, RGB666 and RGB888 (some have 2 options for the bit layout).

Many MIPI DBI compatible controllers support all interface types on the
same chip and often the manufacturers have chosen to provide support for
the Type A/B interface pixel formats also on the Type C interface.

Some chips provide many pixel formats with optional bit layouts over SPI,
but the most common by far are RGB565 and RGB666. So even if the
specification doesn't list these formats for the Type C interface, the
industry has chosen to include them.

The MIPI DCS specification lists the standard commands that can be sent
over the MIPI DBI interface. The set_address_mode (36h) command has one
bit in the parameter that controls RGB/BGR order:
This bit controls the RGB data latching order transferred from the
peripheral’s frame memory to the display device.
This means that each supported RGB format also has a BGR variant.

Based on this rationale document the following pixel formats describing
the bit layout going over the wire:
- RGB111 (option 1): x2r1g1b1r1g1b1 (2 pixels per byte)
- BGR111 (option 1): x2b1g1r1b1g1r1 (2 pixels per byte)
- RGB111 (option 2): x1r1g1b1x1r1g1b1 (2 pixels per byte)
- BGR111 (option 2): x1b1g1r1x1b1g1r1 (2 pixels per byte)
- RGB565: r5g6b5 (2 bytes)
- BGR565: b5g6r5 (2 bytes)
- RGB666: r6x2g6x2b6x2 (3 bytes)
- BGR666: b6x2g6x2r6x2 (3 bytes)
(x: don't care)

v2:
- Use 'default: r5g6b5' (Rob)

Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240604-panel-mipi-dbi-rgb666-v4-1-d7c2bcb9b78d@tronnes.org
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

+30
+30
Documentation/devicetree/bindings/display/panel/panel-mipi-dbi-spi.yaml
··· 50 50 | Command or data | 51 51 |<D7><D6><D5><D4><D3><D2><D1><D0>| 52 52 53 + The standard defines one pixel format for type C: RGB111. The industry 54 + however has decided to provide the type A/B interface pixel formats also on 55 + the Type C interface and most common among these are RGB565 and RGB666. 56 + The MIPI DCS command set_address_mode (36h) has one bit that controls RGB/BGR 57 + order. This gives each supported RGB format a BGR variant. 58 + 53 59 The panel resolution is specified using the panel-timing node properties 54 60 hactive (width) and vactive (height). The other mandatory panel-timing 55 61 properties should be set to zero except clock-frequency which can be ··· 99 93 100 94 spi-3wire: true 101 95 96 + format: 97 + description: > 98 + Pixel format in bit order as going on the wire: 99 + * `x2r1g1b1r1g1b1` - RGB111, 2 pixels per byte 100 + * `x2b1g1r1b1g1r1` - BGR111, 2 pixels per byte 101 + * `x1r1g1b1x1r1g1b1` - RGB111, 2 pixels per byte 102 + * `x1b1g1r1x1b1g1r1` - BGR111, 2 pixels per byte 103 + * `r5g6b5` - RGB565, 2 bytes 104 + * `b5g6r5` - BGR565, 2 bytes 105 + * `r6x2g6x2b6x2` - RGB666, 3 bytes 106 + * `b6x2g6x2r6x2` - BGR666, 3 bytes 107 + enum: 108 + - x2r1g1b1r1g1b1 109 + - x2b1g1r1b1g1r1 110 + - x1r1g1b1x1r1g1b1 111 + - x1b1g1r1x1b1g1r1 112 + - r5g6b5 113 + - b5g6r5 114 + - r6x2g6x2b6x2 115 + - b6x2g6x2r6x2 116 + default: r5g6b5 117 + 102 118 required: 103 119 - compatible 104 120 - reg ··· 146 118 dc-gpios = <&gpio 24 GPIO_ACTIVE_HIGH>; 147 119 reset-gpios = <&gpio 25 GPIO_ACTIVE_HIGH>; 148 120 write-only; 121 + 122 + format = "r5g6b5"; 149 123 150 124 backlight = <&backlight>; 151 125