summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/display/panel/panel-mipi-dbi-spi.yaml
blob: 6f0290c4e2917e55401fc490ad6f560849d834fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/display/panel/panel-mipi-dbi-spi.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: MIPI DBI SPI Panel

maintainers:
  - Noralf Trønnes <noralf@tronnes.org>

description: |
  This binding is for display panels using a MIPI DBI compatible controller
  in SPI mode.

  The MIPI Alliance Standard for Display Bus Interface defines the electrical
  and logical interfaces for display controllers historically used in mobile
  phones. The standard defines 4 display architecture types and this binding is
  for type 1 which has full frame memory. There are 3 interface types in the
  standard and type C is the serial interface.

  The standard defines the following interface signals for type C:
  - Power:
    - Vdd: Power supply for display module
      Called power-supply in this binding.
    - Vddi: Logic level supply for interface signals
      Called io-supply in this binding.
  - Interface:
    - CSx: Chip select
    - SCL: Serial clock
    - Dout: Serial out
    - Din: Serial in
    - SDA: Bidrectional in/out
    - D/CX: Data/command selection, high=data, low=command
      Called dc-gpios in this binding.
    - RESX: Reset when low
      Called reset-gpios in this binding.

  The type C interface has 3 options:

    - Option 1: 9-bit mode and D/CX as the 9th bit
      |              Command              |  the next command or following data  |
      |<0><D7><D6><D5><D4><D3><D2><D1><D0>|<D/CX><D7><D6><D5><D4><D3><D2><D1><D0>|

    - Option 2: 16-bit mode and D/CX as a 9th bit
      |              Command or data                              |
      |<X><X><X><X><X><X><X><D/CX><D7><D6><D5><D4><D3><D2><D1><D0>|

    - Option 3: 8-bit mode and D/CX as a separate interface line
      |        Command or data         |
      |<D7><D6><D5><D4><D3><D2><D1><D0>|

  The standard defines one pixel format for type C: RGB111. The industry
  however has decided to provide the type A/B interface pixel formats also on
  the Type C interface and most common among these are RGB565 and RGB666.
  The MIPI DCS command set_address_mode (36h) has one bit that controls RGB/BGR
  order. This gives each supported RGB format a BGR variant.

  The panel resolution is specified using the panel-timing node properties
  hactive (width) and vactive (height). The other mandatory panel-timing
  properties should be set to zero except clock-frequency which can be
  optionally set to inform about the actual pixel clock frequency.

  If the panel is wired to the controller at an offset specify this using
  hback-porch (x-offset) and vback-porch (y-offset).

allOf:
  - $ref: panel-common.yaml#
  - $ref: /schemas/spi/spi-peripheral-props.yaml#

properties:
  compatible:
    items:
      - enum:
          - saef,sftc154b
          - sainsmart18
          - shineworld,lh133k
      - const: panel-mipi-dbi-spi

  reg:
    maxItems: 1

  write-only:
    type: boolean
    description:
      Controller is not readable (ie. Din (MISO on the SPI interface) is not
      wired up).

  dc-gpios:
    maxItems: 1
    description: |
      Controller data/command selection (D/CX) in 4-line SPI mode.
      If not set, the controller is in 3-line SPI mode.

  io-supply:
    description: |
      Logic level supply for interface signals (Vddi).
      No need to set if this is the same as power-supply.

  spi-3wire: true

  format:
    description: >
      Pixel format in bit order as going on the wire:
        * `x2r1g1b1r1g1b1` - RGB111, 2 pixels per byte
        * `x2b1g1r1b1g1r1` - BGR111, 2 pixels per byte
        * `x1r1g1b1x1r1g1b1` - RGB111, 2 pixels per byte
        * `x1b1g1r1x1b1g1r1` - BGR111, 2 pixels per byte
        * `r5g6b5` - RGB565, 2 bytes
        * `b5g6r5` - BGR565, 2 bytes
        * `r6x2g6x2b6x2` - RGB666, 3 bytes
        * `b6x2g6x2r6x2` - BGR666, 3 bytes
    enum:
      - x2r1g1b1r1g1b1
      - x2b1g1r1b1g1r1
      - x1r1g1b1x1r1g1b1
      - x1b1g1r1x1b1g1r1
      - r5g6b5
      - b5g6r5
      - r6x2g6x2b6x2
      - b6x2g6x2r6x2
    default: r5g6b5

required:
  - compatible
  - reg
  - width-mm
  - height-mm
  - panel-timing

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>

    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        display@0{
            compatible = "sainsmart18", "panel-mipi-dbi-spi";
            reg = <0>;
            spi-max-frequency = <40000000>;

            dc-gpios = <&gpio 24 GPIO_ACTIVE_HIGH>;
            reset-gpios = <&gpio 25 GPIO_ACTIVE_HIGH>;
            write-only;

            format = "r5g6b5";

            backlight = <&backlight>;

            width-mm = <35>;
            height-mm = <28>;

            panel-timing {
                hactive = <160>;
                vactive = <128>;
                hback-porch = <0>;
                vback-porch = <0>;
                clock-frequency = <0>;
                hfront-porch = <0>;
                hsync-len = <0>;
                vfront-porch = <0>;
                vsync-len = <0>;
            };
        };
    };

...