Fix rpi touchscreen support on master
[AGL/meta-agl.git] / meta-agl-bsp / meta-raspberrypi / recipes-kernel / linux / linux-raspberrypi / dsi / 0001-Add-devicetree-support-for-RaspberryPi-7-panel-over-.patch
1 From 380fd9f0da44ed62dff59a7c7e06f1190b58aa64 Mon Sep 17 00:00:00 2001
2 From: Kevin Quigley <kevin@kquigley.co.uk>
3 Date: Mon, 24 Sep 2018 12:22:31 +0000
4 Subject: [PATCH 1/4] Add devicetree support for RaspberryPi 7" panel over DSI
5  I2C
6
7 ---
8  arch/arm/boot/dts/bcm2708-rpi-b-plus.dts      |  5 +++
9  arch/arm/boot/dts/bcm2708-rpi-b.dts           |  6 +++
10  arch/arm/boot/dts/bcm2708-rpi.dtsi            | 21 ++++++++++
11  arch/arm/boot/dts/bcm2709-rpi-2-b.dts         |  5 +++
12  arch/arm/boot/dts/bcm270x.dtsi                | 39 +++++++++++++++++
13  arch/arm/boot/dts/bcm2710-rpi-3-b.dts         |  6 +++
14  arch/arm/boot/dts/bcm2835-rpi-b-plus.dts      |  5 +++
15  arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts      |  5 +++
16  arch/arm/boot/dts/bcm2835-rpi-b.dts           |  5 +++
17  arch/arm/boot/dts/bcm2835-rpi.dtsi            |  2 +
18  arch/arm/boot/dts/bcm2836-rpi-2-b.dts         |  5 +++
19  arch/arm/boot/dts/bcm2837-rpi-3-b.dts         |  5 +++
20  arch/arm/boot/dts/bcm283x.dtsi                | 16 ++++++-
21  arch/arm/boot/dts/overlays/Makefile           |  1 +
22  .../boot/dts/overlays/rpi-7inch-overlay.dts   | 42 +++++++++++++++++++
23  15 files changed, 167 insertions(+), 1 deletion(-)
24  create mode 100644 arch/arm/boot/dts/overlays/rpi-7inch-overlay.dts
25
26 diff --git a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
27 index ef0beea3a3a3..83b95b9a6ec3 100644
28 --- a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
29 +++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
30 @@ -121,3 +121,8 @@
31                 pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
32         };
33  };
34 +
35 +&i2c_dsi {
36 +       gpios = <&gpio 28 0
37 +                &gpio 29 0>;
38 +};
39 diff --git a/arch/arm/boot/dts/bcm2708-rpi-b.dts b/arch/arm/boot/dts/bcm2708-rpi-b.dts
40 index dea70fae90e6..ea5de651d59d 100644
41 --- a/arch/arm/boot/dts/bcm2708-rpi-b.dts
42 +++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts
43 @@ -111,3 +111,9 @@
44                 act_led_trigger = <&act_led>,"linux,default-trigger";
45         };
46  };
47 +
48 +
49 +&i2c_dsi {
50 +       gpios = <&gpio 2 0
51 +                &gpio 3 0>;
52 +};
53 diff --git a/arch/arm/boot/dts/bcm2708-rpi.dtsi b/arch/arm/boot/dts/bcm2708-rpi.dtsi
54 index b13632932192..2d8421f6681c 100644
55 --- a/arch/arm/boot/dts/bcm2708-rpi.dtsi
56 +++ b/arch/arm/boot/dts/bcm2708-rpi.dtsi
57 @@ -132,6 +132,27 @@
58         power-domains = <&power RPI_POWER_DOMAIN_USB>;
59  };
60  
61 +&v3d {
62 +        power-domains = <&power RPI_POWER_DOMAIN_V3D>;
63 +};
64 +
65 +&vec {
66 +        power-domains = <&power RPI_POWER_DOMAIN_VEC>;
67 +        status = "okay";
68 +};
69 +
70 +&dsi0 {
71 +        power-domains = <&power RPI_POWER_DOMAIN_DSI0>;
72 +        status = "okay";
73 +};
74 +
75 +&dsi1 {
76 +        power-domains = <&power RPI_POWER_DOMAIN_DSI1>;
77 +        status = "okay";
78 +};
79 +
80 +
81 +
82  &clocks {
83         firmware = <&firmware>;
84  };
85 diff --git a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
86 index 34659505055a..c23f79395791 100644
87 --- a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
88 +++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
89 @@ -122,3 +122,8 @@
90                 pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
91         };
92  };
93 +
94 +&i2c_dsi {
95 +       gpios = <&gpio 28 0
96 +                &gpio 29 0>;
97 +};
98 diff --git a/arch/arm/boot/dts/bcm270x.dtsi b/arch/arm/boot/dts/bcm270x.dtsi
99 index f086ff0deec5..0b1ef47b18b0 100644
100 --- a/arch/arm/boot/dts/bcm270x.dtsi
101 +++ b/arch/arm/boot/dts/bcm270x.dtsi
102 @@ -84,6 +84,26 @@
103                         status = "disabled";
104                 };
105  
106 +               dsi1: dsi@7e700000 {
107 +                       compatible = "brcm,bcm2835-dsi1";
108 +                       reg = <0x7e700000 0x8c>;
109 +                       interrupts = <2 12>;
110 +                       #address-cells = <1>;
111 +                       #size-cells = <0>;
112 +                       #clock-cells = <1>;
113 +
114 +                       clocks = <&clocks BCM2835_PLLD_DSI1>,
115 +                                <&clocks BCM2835_CLOCK_DSI1E>,
116 +                                <&clocks BCM2835_CLOCK_DSI1P>;
117 +                       clock-names = "phy", "escape", "pixel";
118 +
119 +                       clock-output-names = "dsi1_byte",
120 +                                            "dsi1_ddr2",
121 +                                            "dsi1_ddr";
122 +
123 +                       status = "disabled";
124 +               };
125 +
126                 firmwarekms: firmwarekms@7e600000 {
127                         compatible = "raspberrypi,rpi-firmware-kms";
128                         /* SMI interrupt reg */
129 @@ -93,6 +113,21 @@
130                         status = "disabled";
131                 };
132  
133 +                i2c_dsi: i2cdsi {
134 +                        /* We have to use i2c-gpio because the
135 +                         * firmware is also polling another device
136 +                         * using the only hardware I2C bus that could
137 +                         * connect to these pins.
138 +                         */
139 +                        compatible = "i2c-gpio";
140 +                        #address-cells = <1>;
141 +                        #size-cells = <0>;
142 +                        status = "disabled";
143 +                        gpios = <&gpio 28 0
144 +                                 &gpio 29 0>;
145 +
146 +                };
147 +
148                 smi: smi@7e600000 {
149                         compatible = "brcm,bcm2835-smi";
150                         reg = <0x7e600000 0x100>;
151 @@ -187,3 +222,7 @@
152  &vc4 {
153         status = "disabled";
154  };
155 +
156 +&dsi1 {
157 +       power-domains = <&power RPI_POWER_DOMAIN_DSI1>;
158 +};
159 diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
160 index 37aed344cbbf..6ec9b28999f3 100644
161 --- a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
162 +++ b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
163 @@ -190,3 +190,9 @@
164                 pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
165         };
166  };
167 +
168 +&i2c_dsi {
169 +       gpios = <&gpio 44 0
170 +                &gpio 45 0>;
171 +};
172 +
173 diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
174 index a462de2ce37e..346efbd4a95f 100644
175 --- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
176 +++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
177 @@ -109,3 +109,8 @@
178         pinctrl-0 = <&uart0_gpio14>;
179         status = "okay";
180  };
181 +
182 +&i2c_dsi {
183 +       gpios = <&gpio 28 0
184 +                &gpio 29 0>;
185 +};
186 diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
187 index 264c84e94329..8b9ebf3670c2 100644
188 --- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
189 +++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
190 @@ -102,3 +102,8 @@
191         pinctrl-0 = <&uart0_gpio14>;
192         status = "okay";
193  };
194 +
195 +&i2c_dsi {
196 +       gpios = <&gpio 2 0
197 +                &gpio 3 0>;
198 +};
199 diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts
200 index 03e3a7a7dc5e..4020e79fc989 100644
201 --- a/arch/arm/boot/dts/bcm2835-rpi-b.dts
202 +++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts
203 @@ -97,3 +97,8 @@
204         pinctrl-0 = <&uart0_gpio14>;
205         status = "okay";
206  };
207 +
208 +&i2c_dsi {
209 +       gpios = <&gpio 28 0
210 +                &gpio 29 0>;
211 +};
212 diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
213 index 356d4e6a17e5..0599f0a27e5f 100644
214 --- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
215 +++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
216 @@ -101,10 +101,12 @@
217  
218  &dsi0 {
219         power-domains = <&power RPI_POWER_DOMAIN_DSI0>;
220 +       status = "okay";
221  };
222  
223  &dsi1 {
224         power-domains = <&power RPI_POWER_DOMAIN_DSI1>;
225 +       status = "okay";
226  };
227  
228  &csi0 {
229 diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts
230 index 59e70f4a19e5..6c4c9c8d8ed0 100644
231 --- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts
232 +++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts
233 @@ -47,3 +47,8 @@
234         pinctrl-0 = <&uart0_gpio14>;
235         status = "okay";
236  };
237 +
238 +&i2c_dsi {
239 +       gpios = <&gpio 28 0
240 +                &gpio 29 0>;
241 +};
242 diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
243 index 8703d006a206..c99f70cefa61 100644
244 --- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
245 +++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
246 @@ -56,3 +56,8 @@
247         status = "okay";
248         bus-width = <4>;
249  };
250 +
251 +&i2c_dsi {
252 +       gpios = <&gpio 44 0
253 +                &gpio 45 0>;
254 +};
255 diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
256 index 22eca6fad427..3ee99963f827 100644
257 --- a/arch/arm/boot/dts/bcm283x.dtsi
258 +++ b/arch/arm/boot/dts/bcm283x.dtsi
259 @@ -551,7 +551,6 @@
260                         clock-output-names = "dsi1_byte",
261                                              "dsi1_ddr2",
262                                              "dsi1_ddr";
263 -
264                         status = "disabled";
265                 };
266  
267 @@ -652,6 +651,21 @@
268                 vc4: gpu {
269                         compatible = "brcm,bcm2835-vc4";
270                 };
271 +
272 +               i2c_dsi: i2cdsi {
273 +                       /* We have to use i2c-gpio because the
274 +                        * firmware is also polling another device
275 +                        * using the only hardware I2C bus that could
276 +                        * connect to these pins.
277 +                        */
278 +                       compatible = "i2c-gpio";
279 +                       #address-cells = <1>;
280 +                       #size-cells = <0>;
281 +                       status = "disabled";
282 +                       gpios = <&gpio 28 0
283 +                                &gpio 29 0>;
284 +
285 +               };
286         };
287  
288         clocks {
289 diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
290 index e0bdd84d21c5..f983d0180b8b 100644
291 --- a/arch/arm/boot/dts/overlays/Makefile
292 +++ b/arch/arm/boot/dts/overlays/Makefile
293 @@ -110,6 +110,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
294         rpi-cirrus-wm5102.dtbo \
295         rpi-dac.dtbo \
296         rpi-display.dtbo \
297 +       rpi-7inch.dtbo \
298         rpi-ft5406.dtbo \
299         rpi-poe.dtbo \
300         rpi-proto.dtbo \
301 diff --git a/arch/arm/boot/dts/overlays/rpi-7inch-overlay.dts b/arch/arm/boot/dts/overlays/rpi-7inch-overlay.dts
302 new file mode 100644
303 index 000000000000..3bb882d79086
304 --- /dev/null
305 +++ b/arch/arm/boot/dts/overlays/rpi-7inch-overlay.dts
306 @@ -0,0 +1,42 @@
307 +/*
308 + * Device Tree overlay for RaspberryPi 7" Touchscreen panel
309 + *
310 + */
311 +
312 +/dts-v1/; 
313 +/plugin/; 
314 +
315 +/ {
316 +        compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
317 +
318 +        fragment@1 {
319 +                target = <&dsi1>;
320 +                __overlay__ {
321 +                        #address-cells = <1>; size-cells = <0>;
322 +                        status = "okay";
323 +                        port {
324 +                                dsi_out_port: endpoint {
325 +                                        remote-endpoint = <&panel_dsi_port>;
326 +                                };
327 +                        };
328 +                };
329 +        };
330 +
331 +        fragment@2 {
332 +                target = <&i2c_dsi>;
333 +                __overlay__ {
334 +                        #address-cells = <1>;
335 +                       #size-cells = <0>;
336 +                        status = "okay";
337 +                       lcd@45 {
338 +                               compatible = "raspberrypi,7inch-touchscreen-panel";
339 +                               reg = <0x45>;
340 +                               port {
341 +                                       panel_dsi_port: endpoint {
342 +                                               remote-endpoint = <&dsi_out_port>;
343 +                                       };
344 +                               };
345 +                       };
346 +                };
347 +        };
348 +};
349 -- 
350 2.21.0
351