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