1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/display/solomon,ssd1307fb.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Solomon SSD1307 OLED Controller Framebuffer
8
9maintainers:
10  - Maxime Ripard <mripard@kernel.org>
11  - Javier Martinez Canillas <javierm@redhat.com>
12
13properties:
14  compatible:
15    oneOf:
16      # Deprecated compatible strings
17      - enum:
18          - solomon,ssd1305fb-i2c
19          - solomon,ssd1306fb-i2c
20          - solomon,ssd1307fb-i2c
21          - solomon,ssd1309fb-i2c
22        deprecated: true
23      - enum:
24          - sinowealth,sh1106
25          - solomon,ssd1305
26          - solomon,ssd1306
27          - solomon,ssd1307
28          - solomon,ssd1309
29
30  reg:
31    maxItems: 1
32
33  pwms:
34    maxItems: 1
35
36  reset-gpios:
37    maxItems: 1
38
39  # Only required for SPI
40  dc-gpios:
41    description:
42      GPIO connected to the controller's D/C# (Data/Command) pin,
43      that is needed for 4-wire SPI to tell the controller if the
44      data sent is for a command register or the display data RAM
45    maxItems: 1
46
47  vbat-supply:
48    description: The supply for VBAT
49
50  solomon,height:
51    $ref: /schemas/types.yaml#/definitions/uint32
52    default: 16
53    description:
54      Height in pixel of the screen driven by the controller
55
56  solomon,width:
57    $ref: /schemas/types.yaml#/definitions/uint32
58    default: 96
59    description:
60      Width in pixel of the screen driven by the controller
61
62  solomon,page-offset:
63    $ref: /schemas/types.yaml#/definitions/uint32
64    default: 1
65    description:
66      Offset of pages (band of 8 pixels) that the screen is mapped to
67
68  solomon,segment-no-remap:
69    type: boolean
70    description:
71      Display needs normal (non-inverted) data column to segment mapping
72
73  solomon,col-offset:
74    $ref: /schemas/types.yaml#/definitions/uint32
75    default: 0
76    description:
77      Offset of columns (COL/SEG) that the screen is mapped to
78
79  solomon,com-seq:
80    type: boolean
81    description:
82      Display uses sequential COM pin configuration
83
84  solomon,com-lrremap:
85    type: boolean
86    description:
87      Display uses left-right COM pin remap
88
89  solomon,com-invdir:
90    type: boolean
91    description:
92      Display uses inverted COM pin scan direction
93
94  solomon,com-offset:
95    $ref: /schemas/types.yaml#/definitions/uint32
96    default: 0
97    description:
98      Number of the COM pin wired to the first display line
99
100  solomon,prechargep1:
101    $ref: /schemas/types.yaml#/definitions/uint32
102    default: 2
103    description:
104      Length of deselect period (phase 1) in clock cycles
105
106  solomon,prechargep2:
107    $ref: /schemas/types.yaml#/definitions/uint32
108    default: 2
109    description:
110      Length of precharge period (phase 2) in clock cycles.  This needs to be
111      the higher, the higher the capacitance of the OLED's pixels is.
112
113  solomon,dclk-div:
114    $ref: /schemas/types.yaml#/definitions/uint32
115    minimum: 1
116    maximum: 16
117    description:
118      Clock divisor. The default value is controller-dependent.
119
120  solomon,dclk-frq:
121    $ref: /schemas/types.yaml#/definitions/uint32
122    minimum: 0
123    maximum: 15
124    description:
125      Clock frequency, higher value means higher frequency.
126      The default value is controller-dependent.
127
128  solomon,lookup-table:
129    $ref: /schemas/types.yaml#/definitions/uint8-array
130    maxItems: 4
131    description:
132      8 bit value array of current drive pulse widths for BANK0, and colors A,
133      B, and C. Each value in range of 31 to 63 for pulse widths of 32 to 64.
134      Color D is always width 64.
135
136  solomon,area-color-enable:
137    type: boolean
138    description:
139      Display uses color mode
140
141  solomon,low-power:
142    type: boolean
143    description:
144      Display runs in low power mode
145
146required:
147  - compatible
148  - reg
149
150allOf:
151  - $ref: /schemas/spi/spi-peripheral-props.yaml#
152
153  - if:
154      properties:
155        compatible:
156          contains:
157            const: sinowealth,sh1106
158    then:
159      properties:
160        solomon,dclk-div:
161          default: 1
162        solomon,dclk-frq:
163          default: 5
164
165  - if:
166      properties:
167        compatible:
168          contains:
169            enum:
170              - solomon,ssd1305-i2c
171              - solomon,ssd1305
172    then:
173      properties:
174        solomon,dclk-div:
175          default: 1
176        solomon,dclk-frq:
177          default: 7
178
179  - if:
180      properties:
181        compatible:
182          contains:
183            enum:
184              - solomon,ssd1306-i2c
185              - solomon,ssd1306
186    then:
187      properties:
188        solomon,dclk-div:
189          default: 1
190        solomon,dclk-frq:
191          default: 8
192
193  - if:
194      properties:
195        compatible:
196          contains:
197            enum:
198              - solomon,ssd1307-i2c
199              - solomon,ssd1307
200    then:
201      properties:
202        solomon,dclk-div:
203          default: 2
204        solomon,dclk-frq:
205          default: 12
206      required:
207        - pwms
208
209  - if:
210      properties:
211        compatible:
212          contains:
213            enum:
214              - solomon,ssd1309-i2c
215              - solomon,ssd1309
216    then:
217      properties:
218        solomon,dclk-div:
219          default: 1
220        solomon,dclk-frq:
221          default: 10
222
223unevaluatedProperties: false
224
225examples:
226  - |
227    i2c {
228            #address-cells = <1>;
229            #size-cells = <0>;
230
231            ssd1307_i2c: oled@3c {
232                    compatible = "solomon,ssd1307";
233                    reg = <0x3c>;
234                    pwms = <&pwm 4 3000>;
235                    reset-gpios = <&gpio2 7>;
236            };
237
238            ssd1306_i2c: oled@3d {
239                    compatible = "solomon,ssd1306";
240                    reg = <0x3d>;
241                    pwms = <&pwm 4 3000>;
242                    reset-gpios = <&gpio2 7>;
243                    solomon,com-lrremap;
244                    solomon,com-invdir;
245                    solomon,com-offset = <32>;
246                    solomon,lookup-table = /bits/ 8 <0x3f 0x3f 0x3f 0x3f>;
247            };
248    };
249  - |
250    spi {
251            #address-cells = <1>;
252            #size-cells = <0>;
253
254            ssd1307_spi: oled@0 {
255                    compatible = "solomon,ssd1307";
256                    reg = <0x0>;
257                    pwms = <&pwm 4 3000>;
258                    reset-gpios = <&gpio2 7>;
259                    dc-gpios = <&gpio2 8>;
260                    spi-max-frequency = <10000000>;
261            };
262
263            ssd1306_spi: oled@1 {
264                    compatible = "solomon,ssd1306";
265                    reg = <0x1>;
266                    pwms = <&pwm 4 3000>;
267                    reset-gpios = <&gpio2 7>;
268                    dc-gpios = <&gpio2 8>;
269                    spi-max-frequency = <10000000>;
270                    solomon,com-lrremap;
271                    solomon,com-invdir;
272                    solomon,com-offset = <32>;
273                    solomon,lookup-table = /bits/ 8 <0x3f 0x3f 0x3f 0x3f>;
274            };
275    };
276