Message ID | 20220729141153.798001-1-juerg.haefliger@canonical.com |
---|---|
State | New |
Headers | show |
Series | [SRU,F/raspi] overlays: Add fbtft overlay | expand |
On 7/29/22 08:11, Juerg Haefliger wrote: > From: Noralf Trønnes <noralf@tronnes.org> > > BugLink: https://bugs.launchpad.net/bugs/1963919 > > Add an overlay that provides much of the functionality that fbtft_device did. > > Signed-off-by: Noralf Trønnes <noralf@tronnes.org> > > (cherry picked from commit 6a4525924c43f343951c67af4963386b477938af rpi-5.15-y) > Signed-off-by: Juerg Haefliger <juerg.haefliger@canonical.com> > --- > arch/arm/boot/dts/overlays/Makefile | 1 + > arch/arm/boot/dts/overlays/README | 124 ++++ > arch/arm/boot/dts/overlays/fbtft-overlay.dts | 611 +++++++++++++++++++ > 3 files changed, 736 insertions(+) > create mode 100644 arch/arm/boot/dts/overlays/fbtft-overlay.dts > > diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile > index b2c782407fe0..bfb27ab9e928 100644 > --- a/arch/arm/boot/dts/overlays/Makefile > +++ b/arch/arm/boot/dts/overlays/Makefile > @@ -44,6 +44,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ > enc28j60.dtbo \ > enc28j60-spi2.dtbo \ > exc3000.dtbo \ > + fbtft.dtbo \ > fe-pi-audio.dtbo \ > fsm-demo.dtbo \ > ghost-amp.dtbo \ > diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README > index 03fdbdbe4729..a88f0710466c 100644 > --- a/arch/arm/boot/dts/overlays/README > +++ b/arch/arm/boot/dts/overlays/README > @@ -805,6 +805,130 @@ Params: interrupt GPIO used for interrupt (default 4) > swapxy Touchscreen swapped x y axis > > > +Name: fbtft > +Info: Overlay for SPI-connected displays using the fbtft drivers. > + > + This overlay seeks to replace the functionality provided by fbtft_device > + which is now gone from the kernel. > + > + Most displays from fbtft_device have been ported over. > + Example: > + dtoverlay=fbtft,spi0-0,rpi-display,reset_pin=23,dc_pin=24,led_pin=18,rotate=270 > + > + It is also possible to specify the controller (this will use the default > + init sequence in the driver). > + Example: > + dtoverlay=fbtft,spi0-0,ili9341,bgr,reset_pin=23,dc_pin=24,led_pin=18,rotate=270 > + > + For devices on spi1 or spi2, the interfaces should be enabled > + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays. > + > + The following features of fbtft_device have not been ported over: > + - parallel bus is not supported > + - the init property which overrides the controller initialization > + sequence is not supported as a parameter due to memory limitations in > + the bootloader responsible for applying the overlay. > + > + See https://github.com/notro/fbtft/wiki/FBTFT-RPI-overlays for how to > + create an overlay. > + > +Load: dtoverlay=fbtft,<param>=<val> > +Params: > + spi<n>-<m> Configure device at spi<n>, cs<m> > + (boolean, required) > + speed SPI bus speed in Hz (default 32000000) > + cpha Shifted clock phase (CPHA) mode > + cpol Inverse clock polarity (CPOL) mode > + > + adafruit18 Adafruit 1.8 > + adafruit22 Adafruit 2.2 (old) > + adafruit22a Adafruit 2.2 > + adafruit28 Adafruit 2.8 > + adafruit13m Adafruit 1.3 OLED > + admatec_c-berry28 C-Berry28 > + dogs102 EA DOGS102 > + er_tftm050_2 ER-TFTM070-2 > + er_tftm070_5 ER-TFTM070-5 > + ew24ha0 EW24HA0 > + ew24ha0_9bit EW24HA0 in 9-bit mode > + freetronicsoled128 Freetronics OLED128 > + hy28a HY28A > + hy28b HY28B > + itdb28_spi ITDB02-2.8 with SPI interface circuit > + mi0283qt-2 Watterott MI0283QT-2 > + mi0283qt-9a Watterott MI0283QT-9A > + nokia3310 Nokia 3310 > + nokia3310a Nokia 3310a > + nokia5110 Nokia 5110 > + piscreen PiScreen > + pitft Adafruit PiTFT 2.8 > + pioled ILSoft OLED > + rpi-display Watterott rpi-display > + sainsmart18 Sainsmart 1.8 > + sainsmart32_spi Sainsmart 3.2 with SPI interfce circuit > + tinylcd35 TinyLCD 3.5 > + tm022hdh26 Tianma TM022HDH26 > + tontec35_9481 Tontect 3.5 with ILI9481 controller > + tontec35_9486 Tontect 3.5 with ILI9486 controller > + waveshare32b Waveshare 3.2 > + waveshare22 Waveshare 2.2 > + > + bd663474 BD663474 display controller > + hx8340bn HX8340BN display controller > + hx8347d HX8347D display controller > + hx8353d HX8353D display controller > + hx8357d HX8357D display controller > + ili9163 ILI9163 display controller > + ili9320 ILI9320 display controller > + ili9325 ILI9325 display controller > + ili9340 ILI9340 display controller > + ili9341 ILI9341 display controller > + ili9481 ILI9481 display controller > + ili9486 ILI9486 display controller > + pcd8544 PCD8544 display controller > + ra8875 RA8875 display controller > + s6d02a1 S6D02A1 display controller > + s6d1121 S6D1121 display controller > + seps525 SEPS525 display controller > + sh1106 SH1106 display controller > + ssd1289 SSD1289 display controller > + ssd1305 SSD1305 display controller > + ssd1306 SSD1306 display controller > + ssd1325 SSD1325 display controller > + ssd1331 SSD1331 display controller > + ssd1351 SSD1351 display controller > + st7735r ST7735R display controller > + st7789v ST7789V display controller > + tls8204 TLS8204 display controller > + uc1611 UC1611 display controller > + uc1701 UC1701 display controller > + upd161704 UPD161704 display controller > + > + width Display width in pixels > + height Display height in pixels > + regwidth Display controller register width (default is > + driver specific) > + buswidth Display bus interface width (default 8) > + debug Debug output level {0-7} > + rotate Display rotation {0, 90, 180, 270} (counter > + clockwise). Not supported by all drivers. > + bgr Enable BGR mode (default off). Use if Red and > + Blue are swapped. Not supported by all drivers. > + fps Frames per second (default 30). In effect this > + states how long the driver will wait after video > + memory has been changed until display update > + transfer is started. > + txbuflen Length of the FBTFT transmit buffer > + (default 4096) > + startbyte Sets the Start byte used by fb_ili9320, > + fb_ili9325 and fb_hx8347d. Common value is 0x70. > + gamma String representation of Gamma Curve(s). Driver > + specific. Not supported by all drivers. > + reset_pin GPIO pin for RESET > + dc_pin GPIO pin for D/C > + led_pin GPIO pin for LED backlight > + > + > Name: fe-pi-audio > Info: Configures the Fe-Pi Audio Sound Card > Load: dtoverlay=fe-pi-audio > diff --git a/arch/arm/boot/dts/overlays/fbtft-overlay.dts b/arch/arm/boot/dts/overlays/fbtft-overlay.dts > new file mode 100644 > index 000000000000..db45f8c53bcc > --- /dev/null > +++ b/arch/arm/boot/dts/overlays/fbtft-overlay.dts > @@ -0,0 +1,611 @@ > +/* > + * Device Tree overlay for fbtft drivers > + */ > + > +/dts-v1/; > +/plugin/; > + > +/ { > + compatible = "brcm,bcm2835"; > + > + /* adafruit18 */ > + fragment@0 { > + target = <&display>; > + __dormant__ { > + compatible = "sitronix,st7735r"; > + spi-max-frequency = <32000000>; > + gamma = "02 1c 07 12 37 32 29 2d 29 25 2B 39 00 01 03 10\n03 1d 07 06 2E 2C 29 2D 2E 2E 37 3F 00 00 02 10"; > + }; > + }; > + > + /* adafruit22 */ > + fragment@1 { > + target = <&display>; > + __dormant__ { > + compatible = "himax,hx8340bn"; > + spi-max-frequency = <32000000>; > + buswidth = <9>; > + bgr; > + }; > + }; > + > + /* adafruit22a */ > + fragment@2 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9340"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* adafruit28 */ > + fragment@3 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* adafruit13m */ > + fragment@4 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1306"; > + spi-max-frequency = <16000000>; > + }; > + }; > + > + /* admatec_c-berry28 */ > + fragment@5 { > + target = <&display>; > + __dormant__ { > + compatible = "sitronix,st7789v"; > + spi-max-frequency = <48000000>; > + init = <0x01000011 > + 0x02000078 > + 0x0100003A 0x05 > + 0x010000B2 0x0C 0x0C 0x00 0x33 0x33 > + 0x010000B7 0x35 > + 0x010000C2 0x01 0xFF > + 0x010000C3 0x17 > + 0x010000C4 0x20 > + 0x010000BB 0x17 > + 0x010000C5 0x20 > + 0x010000D0 0xA4 0xA1 > + 0x01000029>; > + gamma = "D0 00 14 15 13 2C 42 43 4E 09 16 14 18 21\nD0 00 14 15 13 0B 43 55 53 0C 17 14 23 20"; > + }; > + }; > + > + /* dogs102 */ > + fragment@6 { > + target = <&display>; > + __dormant__ { > + compatible = "UltraChip,uc1701"; > + spi-max-frequency = <8000000>; > + bgr; > + }; > + }; > + > + /* er_tftm050_2 */ > + fragment@7 { > + target = <&display>; > + __dormant__ { > + compatible = "raio,ra8875"; > + spi-max-frequency = <5000000>; > + spi-cpha; > + spi-cpol; > + width = <480>; > + height = <272>; > + bgr; > + }; > + }; > + > + /* er_tftm070_5 */ > + fragment@8 { > + target = <&display>; > + __dormant__ { > + compatible = "raio,ra8875"; > + spi-max-frequency = <5000000>; > + spi-cpha; > + spi-cpol; > + width = <800>; > + height = <480>; > + bgr; > + }; > + }; > + > + /* ew24ha0 */ > + fragment@9 { > + target = <&display>; > + __dormant__ { > + compatible = "ultrachip,uc1611"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + }; > + }; > + > + /* ew24ha0_9bit */ > + fragment@10 { > + target = <&display>; > + __dormant__ { > + compatible = "ultrachip,uc1611"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + buswidth = <9>; > + }; > + }; > + > + /* freetronicsoled128 */ > + fragment@11 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1351"; > + spi-max-frequency = <20000000>; > + backlight = <2>; /* FBTFT_ONBOARD_BACKLIGHT */ > + bgr; > + }; > + }; > + > + /* hy28a */ > + fragment@12 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9320"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + startbyte = <0x70>; > + bgr; > + }; > + }; > + > + /* hy28b */ > + fragment@13 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9325"; > + spi-max-frequency = <48000000>; > + spi-cpha; > + spi-cpol; > + init = <0x010000e7 0x0010 > + 0x01000000 0x0001 > + 0x01000001 0x0100 > + 0x01000002 0x0700 > + 0x01000003 0x1030 > + 0x01000004 0x0000 > + 0x01000008 0x0207 > + 0x01000009 0x0000 > + 0x0100000a 0x0000 > + 0x0100000c 0x0001 > + 0x0100000d 0x0000 > + 0x0100000f 0x0000 > + 0x01000010 0x0000 > + 0x01000011 0x0007 > + 0x01000012 0x0000 > + 0x01000013 0x0000 > + 0x02000032 > + 0x01000010 0x1590 > + 0x01000011 0x0227 > + 0x02000032 > + 0x01000012 0x009c > + 0x02000032 > + 0x01000013 0x1900 > + 0x01000029 0x0023 > + 0x0100002b 0x000e > + 0x02000032 > + 0x01000020 0x0000 > + 0x01000021 0x0000 > + 0x02000032 > + 0x01000050 0x0000 > + 0x01000051 0x00ef > + 0x01000052 0x0000 > + 0x01000053 0x013f > + 0x01000060 0xa700 > + 0x01000061 0x0001 > + 0x0100006a 0x0000 > + 0x01000080 0x0000 > + 0x01000081 0x0000 > + 0x01000082 0x0000 > + 0x01000083 0x0000 > + 0x01000084 0x0000 > + 0x01000085 0x0000 > + 0x01000090 0x0010 > + 0x01000092 0x0000 > + 0x01000093 0x0003 > + 0x01000095 0x0110 > + 0x01000097 0x0000 > + 0x01000098 0x0000 > + 0x01000007 0x0133 > + 0x01000020 0x0000 > + 0x01000021 0x0000 > + 0x02000064>; > + startbyte = <0x70>; > + bgr; > + fps = <50>; > + gamma = "04 1F 4 7 7 0 7 7 6 0\n0F 00 1 7 4 0 0 0 6 7"; > + }; > + }; > + > + /* itdb28_spi */ > + fragment@14 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9325"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* mi0283qt-2 */ > + fragment@15 { > + target = <&display>; > + __dormant__ { > + compatible = "himax,hx8347d"; > + spi-max-frequency = <32000000>; > + startbyte = <0x70>; > + bgr; > + }; > + }; > + > + /* mi0283qt-9a */ > + fragment@16 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + buswidth = <9>; > + bgr; > + }; > + }; > + > + /* nokia3310 */ > + fragment@17 { > + target = <&display>; > + __dormant__ { > + compatible = "philips,pcd8544"; > + spi-max-frequency = <400000>; > + }; > + }; > + > + /* nokia3310a */ > + fragment@18 { > + target = <&display>; > + __dormant__ { > + compatible = "teralane,tls8204"; > + spi-max-frequency = <1000000>; > + }; > + }; > + > + /* nokia5110 */ > + fragment@19 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9163"; > + spi-max-frequency = <12000000>; > + bgr; > + }; > + }; > + > + /* piscreen */ > + fragment@20 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9486"; > + spi-max-frequency = <32000000>; > + regwidth = <16>; > + bgr; > + }; > + }; > + > + /* pitft */ > + fragment@21 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9340"; > + spi-max-frequency = <32000000>; > + init = <0x01000001 > + 0x02000005 > + 0x01000028 > + 0x010000EF 0x03 0x80 0x02 > + 0x010000CF 0x00 0xC1 0x30 > + 0x010000ED 0x64 0x03 0x12 0x81 > + 0x010000E8 0x85 0x00 0x78 > + 0x010000CB 0x39 0x2C 0x00 0x34 0x02 > + 0x010000F7 0x20 > + 0x010000EA 0x00 0x00 > + 0x010000C0 0x23 > + 0x010000C1 0x10 > + 0x010000C5 0x3E 0x28 > + 0x010000C7 0x86 > + 0x0100003A 0x55 > + 0x010000B1 0x00 0x18 > + 0x010000B6 0x08 0x82 0x27 > + 0x010000F2 0x00 > + 0x01000026 0x01 > + 0x010000E0 0x0F 0x31 0x2B 0x0C 0x0E 0x08 0x4E 0xF1 0x37 0x07 0x10 0x03 0x0E 0x09 0x00 > + 0x010000E1 0x00 0x0E 0x14 0x03 0x11 0x07 0x31 0xC1 0x48 0x08 0x0F 0x0C 0x31 0x36 0x0F > + 0x01000011 > + 0x02000064 > + 0x01000029 > + 0x02000014>; > + bgr; > + }; > + }; > + > + /* pioled */ > + fragment@22 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1351"; > + spi-max-frequency = <20000000>; > + bgr; > + gamma = "0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4"; > + }; > + }; > + > + /* rpi-display */ > + fragment@23 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* sainsmart18 */ > + fragment@24 { > + target = <&display>; > + __dormant__ { > + compatible = "sitronix,st7735r"; > + spi-max-frequency = <32000000>; > + }; > + }; > + > + /* sainsmart32_spi */ > + fragment@25 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1289"; > + spi-max-frequency = <16000000>; > + bgr; > + }; > + }; > + > + /* tinylcd35 */ > + fragment@26 { > + target = <&display>; > + __dormant__ { > + compatible = "neosec,tinylcd"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* tm022hdh26 */ > + fragment@27 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* tontec35_9481 - boards before 02 July 2014 */ > + fragment@28 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9481"; > + spi-max-frequency = <128000000>; > + spi-cpha; > + spi-cpol; > + bgr; > + }; > + }; > + > + /* tontec35_9486 - boards after 02 July 2014 */ > + fragment@29 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9486"; > + spi-max-frequency = <128000000>; > + spi-cpha; > + spi-cpol; > + bgr; > + }; > + }; > + > + /* waveshare32b */ > + fragment@30 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9340"; > + spi-max-frequency = <48000000>; > + init = <0x010000CB 0x39 0x2C 0x00 0x34 0x02 > + 0x010000CF 0x00 0xC1 0x30 > + 0x010000E8 0x85 0x00 0x78 > + 0x010000EA 0x00 0x00 > + 0x010000ED 0x64 0x03 0x12 0x81 > + 0x010000F7 0x20 > + 0x010000C0 0x23 > + 0x010000C1 0x10 > + 0x010000C5 0x3E 0x28 > + 0x010000C7 0x86 > + 0x01000036 0x28 > + 0x0100003A 0x55 > + 0x010000B1 0x00 0x18 > + 0x010000B6 0x08 0x82 0x27 > + 0x010000F2 0x00 > + 0x01000026 0x01 > + 0x010000E0 0x0F 0x31 0x2B 0x0C 0x0E 0x08 0x4E 0xF1 0x37 0x07 0x10 0x03 0x0E 0x09 0x00 > + 0x010000E1 0x00 0x0E 0x14 0x03 0x11 0x07 0x31 0xC1 0x48 0x08 0x0F 0x0C 0x31 0x36 0x0F > + 0x01000011 > + 0x02000078 > + 0x01000029 > + 0x0100002C>; > + bgr; > + }; > + }; > + > + /* waveshare22 */ > + fragment@31 { > + target = <&display>; > + __dormant__ { > + compatible = "hitachi,bd663474"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + }; > + }; > + > + spidev_fragment: fragment@100 { > + target-path = "spi0/spidev@0"; > + __overlay__ { > + status = "disabled"; > + }; > + }; > + > + display_fragment: fragment@101 { > + target = <&spi0>; > + __overlay__ { > + /* needed to avoid dtc warning */ > + #address-cells = <1>; > + #size-cells = <0>; > + > + status = "okay"; > + > + display: display@0{ > + reg = <0>; > + spi-max-frequency = <32000000>; > + fps = <30>; > + buswidth = <8>; > + }; > + }; > + }; > + > + __overrides__ { > + spi0-0 = <&display_fragment>, "target:0=",<&spi0>, > + <&spidev_fragment>, "target-path=spi0/spidev@0", > + <&display>, "reg:0=0"; > + spi0-1 = <&display_fragment>, "target:0=",<&spi0>, > + <&spidev_fragment>, "target-path=spi0/spidev@1", > + <&display>, "reg:0=1"; > + spi1-0 = <&display_fragment>, "target:0=",<&spi1>, > + <&spidev_fragment>, "target-path=spi1/spidev@0", > + <&display>, "reg:0=0"; > + spi1-1 = <&display_fragment>, "target:0=",<&spi1>, > + <&spidev_fragment>, "target-path=spi1/spidev@1", > + <&display>, "reg:0=1"; > + spi1-2 = <&display_fragment>, "target:0=",<&spi1>, > + <&spidev_fragment>, "target-path=spi1/spidev@2", > + <&display>, "reg:0=2"; > + spi2-0 = <&display_fragment>, "target:0=",<&spi2>, > + <&spidev_fragment>, "target-path=spi2/spidev@0", > + <&display>, "reg:0=0"; > + spi2-1 = <&display_fragment>, "target:0=",<&spi2>, > + <&spidev_fragment>, "target-path=spi2/spidev@1", > + <&display>, "reg:0=1"; > + spi2-2 = <&display_fragment>, "target:0=",<&spi2>, > + <&spidev_fragment>, "target-path=spi2/spidev@2", > + <&display>, "reg:0=2"; > + > + speed = <&display>, "spi-max-frequency:0"; > + cpha = <&display>, "spi-cpha?"; > + cpol = <&display>, "spi-cpol?"; > + > + /* Displays */ > + adafruit18 = <0>, "+0"; > + adafruit22 = <0>, "+1"; > + adafruit22a = <0>, "+2"; > + adafruit28 = <0>, "+3"; > + adafruit13m = <0>, "+4"; > + admatec_c-berry28 = <0>, "+5"; > + dogs102 = <0>, "+6"; > + er_tftm050_2 = <0>, "+7"; > + er_tftm070_5 = <0>, "+8"; > + ew24ha0 = <0>, "+9"; > + ew24ha0_9bit = <0>, "+10"; > + freetronicsoled128 = <0>, "+11"; > + hy28a = <0>, "+12"; > + hy28b = <0>, "+13"; > + itdb28_spi = <0>, "+14"; > + mi0283qt-2 = <0>, "+15"; > + mi0283qt-9a = <0>, "+16"; > + nokia3310 = <0>, "+17"; > + nokia3310a = <0>, "+18"; > + nokia5110 = <0>, "+19"; > + piscreen = <0>, "+20"; > + pitft = <0>, "+21"; > + pioled = <0>, "+22"; > + rpi-display = <0>, "+23"; > + sainsmart18 = <0>, "+24"; > + sainsmart32_spi = <0>, "+25"; > + tinylcd35 = <0>, "+26"; > + tm022hdh26 = <0>, "+27"; > + tontec35_9481 = <0>, "+28"; > + tontec35_9486 = <0>, "+29"; > + waveshare32b = <0>, "+30"; > + waveshare22 = <0>, "+31"; > + > + /* Controllers */ > + bd663474 = <&display>, "compatible=hitachi,bd663474"; > + hx8340bn = <&display>, "compatible=himax,hx8340bn"; > + hx8347d = <&display>, "compatible=himax,hx8347d"; > + hx8353d = <&display>, "compatible=himax,hx8353d"; > + hx8357d = <&display>, "compatible=himax,hx8357d"; > + ili9163 = <&display>, "compatible=ilitek,ili9163"; > + ili9320 = <&display>, "compatible=ilitek,ili9320"; > + ili9325 = <&display>, "compatible=ilitek,ili9325"; > + ili9340 = <&display>, "compatible=ilitek,ili9340"; > + ili9341 = <&display>, "compatible=ilitek,ili9341"; > + ili9481 = <&display>, "compatible=ilitek,ili9481"; > + ili9486 = <&display>, "compatible=ilitek,ili9486"; > + pcd8544 = <&display>, "compatible=philips,pcd8544"; > + ra8875 = <&display>, "compatible=raio,ra8875"; > + s6d02a1 = <&display>, "compatible=samsung,s6d02a1"; > + s6d1121 = <&display>, "compatible=samsung,s6d1121"; > + seps525 = <&display>, "compatible=syncoam,seps525"; > + sh1106 = <&display>, "compatible=sinowealth,sh1106"; > + ssd1289 = <&display>, "compatible=solomon,ssd1289"; > + ssd1305 = <&display>, "compatible=solomon,ssd1305"; > + ssd1306 = <&display>, "compatible=solomon,ssd1306"; > + ssd1325 = <&display>, "compatible=solomon,ssd1325"; > + ssd1331 = <&display>, "compatible=solomon,ssd1331"; > + ssd1351 = <&display>, "compatible=solomon,ssd1351"; > + st7735r = <&display>, "compatible=sitronix,st7735r"; > + st7789v = <&display>, "compatible=sitronix,st7789v"; > + tls8204 = <&display>, "compatible=teralane,tls8204"; > + uc1611 = <&display>, "compatible=ultrachip,uc1611"; > + uc1701 = <&display>, "compatible=UltraChip,uc1701"; > + upd161704 = <&display>, "compatible=nec,upd161704"; > + > + width = <&display>, "width:0"; > + height = <&display>, "height:0"; > + regwidth = <&display>, "regwidth:0"; > + buswidth = <&display>, "buswidth:0"; > + debug = <&display>, "debug:0"; > + rotate = <&display>, "rotate:0"; > + bgr = <&display>, "bgr?"; > + fps = <&display>, "fps:0"; > + txbuflen = <&display>, "txbuflen:0"; > + startbyte = <&display>, "startbyte:0"; > + gamma = <&display>, "gamma"; > + > + reset_pin = <&display>, "reset-gpios:0=", <&gpio>, > + <&display>, "reset-gpios:4", > + <&display>, "reset-gpios:8=1"; /* GPIO_ACTIVE_LOW */ > + dc_pin = <&display>, "dc-gpios:0=", <&gpio>, > + <&display>, "dc-gpios:4", > + <&display>, "dc-gpios:8=0"; /* GPIO_ACTIVE_HIGH */ > + led_pin = <&display>, "led-gpios:0=", <&gpio>, > + <&display>, "led-gpios:4", > + <&display>, "led-gpios:8=0"; /* GPIO_ACTIVE_HIGH */ > + }; > +}; Acked-by: Tim Gardner <tim.gardner@canonical.com> Not really reviewable.
On 29.07.22 16:11, Juerg Haefliger wrote: > From: Noralf Trønnes <noralf@tronnes.org> > > BugLink: https://bugs.launchpad.net/bugs/1963919 > > Add an overlay that provides much of the functionality that fbtft_device did. > > Signed-off-by: Noralf Trønnes <noralf@tronnes.org> > > (cherry picked from commit 6a4525924c43f343951c67af4963386b477938af rpi-5.15-y) > Signed-off-by: Juerg Haefliger <juerg.haefliger@canonical.com> Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com> Thanks > --- > arch/arm/boot/dts/overlays/Makefile | 1 + > arch/arm/boot/dts/overlays/README | 124 ++++ > arch/arm/boot/dts/overlays/fbtft-overlay.dts | 611 +++++++++++++++++++ > 3 files changed, 736 insertions(+) > create mode 100644 arch/arm/boot/dts/overlays/fbtft-overlay.dts > > diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile > index b2c782407fe0..bfb27ab9e928 100644 > --- a/arch/arm/boot/dts/overlays/Makefile > +++ b/arch/arm/boot/dts/overlays/Makefile > @@ -44,6 +44,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ > enc28j60.dtbo \ > enc28j60-spi2.dtbo \ > exc3000.dtbo \ > + fbtft.dtbo \ > fe-pi-audio.dtbo \ > fsm-demo.dtbo \ > ghost-amp.dtbo \ > diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README > index 03fdbdbe4729..a88f0710466c 100644 > --- a/arch/arm/boot/dts/overlays/README > +++ b/arch/arm/boot/dts/overlays/README > @@ -805,6 +805,130 @@ Params: interrupt GPIO used for interrupt (default 4) > swapxy Touchscreen swapped x y axis > > > +Name: fbtft > +Info: Overlay for SPI-connected displays using the fbtft drivers. > + > + This overlay seeks to replace the functionality provided by fbtft_device > + which is now gone from the kernel. > + > + Most displays from fbtft_device have been ported over. > + Example: > + dtoverlay=fbtft,spi0-0,rpi-display,reset_pin=23,dc_pin=24,led_pin=18,rotate=270 > + > + It is also possible to specify the controller (this will use the default > + init sequence in the driver). > + Example: > + dtoverlay=fbtft,spi0-0,ili9341,bgr,reset_pin=23,dc_pin=24,led_pin=18,rotate=270 > + > + For devices on spi1 or spi2, the interfaces should be enabled > + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays. > + > + The following features of fbtft_device have not been ported over: > + - parallel bus is not supported > + - the init property which overrides the controller initialization > + sequence is not supported as a parameter due to memory limitations in > + the bootloader responsible for applying the overlay. > + > + See https://github.com/notro/fbtft/wiki/FBTFT-RPI-overlays for how to > + create an overlay. > + > +Load: dtoverlay=fbtft,<param>=<val> > +Params: > + spi<n>-<m> Configure device at spi<n>, cs<m> > + (boolean, required) > + speed SPI bus speed in Hz (default 32000000) > + cpha Shifted clock phase (CPHA) mode > + cpol Inverse clock polarity (CPOL) mode > + > + adafruit18 Adafruit 1.8 > + adafruit22 Adafruit 2.2 (old) > + adafruit22a Adafruit 2.2 > + adafruit28 Adafruit 2.8 > + adafruit13m Adafruit 1.3 OLED > + admatec_c-berry28 C-Berry28 > + dogs102 EA DOGS102 > + er_tftm050_2 ER-TFTM070-2 > + er_tftm070_5 ER-TFTM070-5 > + ew24ha0 EW24HA0 > + ew24ha0_9bit EW24HA0 in 9-bit mode > + freetronicsoled128 Freetronics OLED128 > + hy28a HY28A > + hy28b HY28B > + itdb28_spi ITDB02-2.8 with SPI interface circuit > + mi0283qt-2 Watterott MI0283QT-2 > + mi0283qt-9a Watterott MI0283QT-9A > + nokia3310 Nokia 3310 > + nokia3310a Nokia 3310a > + nokia5110 Nokia 5110 > + piscreen PiScreen > + pitft Adafruit PiTFT 2.8 > + pioled ILSoft OLED > + rpi-display Watterott rpi-display > + sainsmart18 Sainsmart 1.8 > + sainsmart32_spi Sainsmart 3.2 with SPI interfce circuit > + tinylcd35 TinyLCD 3.5 > + tm022hdh26 Tianma TM022HDH26 > + tontec35_9481 Tontect 3.5 with ILI9481 controller > + tontec35_9486 Tontect 3.5 with ILI9486 controller > + waveshare32b Waveshare 3.2 > + waveshare22 Waveshare 2.2 > + > + bd663474 BD663474 display controller > + hx8340bn HX8340BN display controller > + hx8347d HX8347D display controller > + hx8353d HX8353D display controller > + hx8357d HX8357D display controller > + ili9163 ILI9163 display controller > + ili9320 ILI9320 display controller > + ili9325 ILI9325 display controller > + ili9340 ILI9340 display controller > + ili9341 ILI9341 display controller > + ili9481 ILI9481 display controller > + ili9486 ILI9486 display controller > + pcd8544 PCD8544 display controller > + ra8875 RA8875 display controller > + s6d02a1 S6D02A1 display controller > + s6d1121 S6D1121 display controller > + seps525 SEPS525 display controller > + sh1106 SH1106 display controller > + ssd1289 SSD1289 display controller > + ssd1305 SSD1305 display controller > + ssd1306 SSD1306 display controller > + ssd1325 SSD1325 display controller > + ssd1331 SSD1331 display controller > + ssd1351 SSD1351 display controller > + st7735r ST7735R display controller > + st7789v ST7789V display controller > + tls8204 TLS8204 display controller > + uc1611 UC1611 display controller > + uc1701 UC1701 display controller > + upd161704 UPD161704 display controller > + > + width Display width in pixels > + height Display height in pixels > + regwidth Display controller register width (default is > + driver specific) > + buswidth Display bus interface width (default 8) > + debug Debug output level {0-7} > + rotate Display rotation {0, 90, 180, 270} (counter > + clockwise). Not supported by all drivers. > + bgr Enable BGR mode (default off). Use if Red and > + Blue are swapped. Not supported by all drivers. > + fps Frames per second (default 30). In effect this > + states how long the driver will wait after video > + memory has been changed until display update > + transfer is started. > + txbuflen Length of the FBTFT transmit buffer > + (default 4096) > + startbyte Sets the Start byte used by fb_ili9320, > + fb_ili9325 and fb_hx8347d. Common value is 0x70. > + gamma String representation of Gamma Curve(s). Driver > + specific. Not supported by all drivers. > + reset_pin GPIO pin for RESET > + dc_pin GPIO pin for D/C > + led_pin GPIO pin for LED backlight > + > + > Name: fe-pi-audio > Info: Configures the Fe-Pi Audio Sound Card > Load: dtoverlay=fe-pi-audio > diff --git a/arch/arm/boot/dts/overlays/fbtft-overlay.dts b/arch/arm/boot/dts/overlays/fbtft-overlay.dts > new file mode 100644 > index 000000000000..db45f8c53bcc > --- /dev/null > +++ b/arch/arm/boot/dts/overlays/fbtft-overlay.dts > @@ -0,0 +1,611 @@ > +/* > + * Device Tree overlay for fbtft drivers > + */ > + > +/dts-v1/; > +/plugin/; > + > +/ { > + compatible = "brcm,bcm2835"; > + > + /* adafruit18 */ > + fragment@0 { > + target = <&display>; > + __dormant__ { > + compatible = "sitronix,st7735r"; > + spi-max-frequency = <32000000>; > + gamma = "02 1c 07 12 37 32 29 2d 29 25 2B 39 00 01 03 10\n03 1d 07 06 2E 2C 29 2D 2E 2E 37 3F 00 00 02 10"; > + }; > + }; > + > + /* adafruit22 */ > + fragment@1 { > + target = <&display>; > + __dormant__ { > + compatible = "himax,hx8340bn"; > + spi-max-frequency = <32000000>; > + buswidth = <9>; > + bgr; > + }; > + }; > + > + /* adafruit22a */ > + fragment@2 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9340"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* adafruit28 */ > + fragment@3 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* adafruit13m */ > + fragment@4 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1306"; > + spi-max-frequency = <16000000>; > + }; > + }; > + > + /* admatec_c-berry28 */ > + fragment@5 { > + target = <&display>; > + __dormant__ { > + compatible = "sitronix,st7789v"; > + spi-max-frequency = <48000000>; > + init = <0x01000011 > + 0x02000078 > + 0x0100003A 0x05 > + 0x010000B2 0x0C 0x0C 0x00 0x33 0x33 > + 0x010000B7 0x35 > + 0x010000C2 0x01 0xFF > + 0x010000C3 0x17 > + 0x010000C4 0x20 > + 0x010000BB 0x17 > + 0x010000C5 0x20 > + 0x010000D0 0xA4 0xA1 > + 0x01000029>; > + gamma = "D0 00 14 15 13 2C 42 43 4E 09 16 14 18 21\nD0 00 14 15 13 0B 43 55 53 0C 17 14 23 20"; > + }; > + }; > + > + /* dogs102 */ > + fragment@6 { > + target = <&display>; > + __dormant__ { > + compatible = "UltraChip,uc1701"; > + spi-max-frequency = <8000000>; > + bgr; > + }; > + }; > + > + /* er_tftm050_2 */ > + fragment@7 { > + target = <&display>; > + __dormant__ { > + compatible = "raio,ra8875"; > + spi-max-frequency = <5000000>; > + spi-cpha; > + spi-cpol; > + width = <480>; > + height = <272>; > + bgr; > + }; > + }; > + > + /* er_tftm070_5 */ > + fragment@8 { > + target = <&display>; > + __dormant__ { > + compatible = "raio,ra8875"; > + spi-max-frequency = <5000000>; > + spi-cpha; > + spi-cpol; > + width = <800>; > + height = <480>; > + bgr; > + }; > + }; > + > + /* ew24ha0 */ > + fragment@9 { > + target = <&display>; > + __dormant__ { > + compatible = "ultrachip,uc1611"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + }; > + }; > + > + /* ew24ha0_9bit */ > + fragment@10 { > + target = <&display>; > + __dormant__ { > + compatible = "ultrachip,uc1611"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + buswidth = <9>; > + }; > + }; > + > + /* freetronicsoled128 */ > + fragment@11 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1351"; > + spi-max-frequency = <20000000>; > + backlight = <2>; /* FBTFT_ONBOARD_BACKLIGHT */ > + bgr; > + }; > + }; > + > + /* hy28a */ > + fragment@12 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9320"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + startbyte = <0x70>; > + bgr; > + }; > + }; > + > + /* hy28b */ > + fragment@13 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9325"; > + spi-max-frequency = <48000000>; > + spi-cpha; > + spi-cpol; > + init = <0x010000e7 0x0010 > + 0x01000000 0x0001 > + 0x01000001 0x0100 > + 0x01000002 0x0700 > + 0x01000003 0x1030 > + 0x01000004 0x0000 > + 0x01000008 0x0207 > + 0x01000009 0x0000 > + 0x0100000a 0x0000 > + 0x0100000c 0x0001 > + 0x0100000d 0x0000 > + 0x0100000f 0x0000 > + 0x01000010 0x0000 > + 0x01000011 0x0007 > + 0x01000012 0x0000 > + 0x01000013 0x0000 > + 0x02000032 > + 0x01000010 0x1590 > + 0x01000011 0x0227 > + 0x02000032 > + 0x01000012 0x009c > + 0x02000032 > + 0x01000013 0x1900 > + 0x01000029 0x0023 > + 0x0100002b 0x000e > + 0x02000032 > + 0x01000020 0x0000 > + 0x01000021 0x0000 > + 0x02000032 > + 0x01000050 0x0000 > + 0x01000051 0x00ef > + 0x01000052 0x0000 > + 0x01000053 0x013f > + 0x01000060 0xa700 > + 0x01000061 0x0001 > + 0x0100006a 0x0000 > + 0x01000080 0x0000 > + 0x01000081 0x0000 > + 0x01000082 0x0000 > + 0x01000083 0x0000 > + 0x01000084 0x0000 > + 0x01000085 0x0000 > + 0x01000090 0x0010 > + 0x01000092 0x0000 > + 0x01000093 0x0003 > + 0x01000095 0x0110 > + 0x01000097 0x0000 > + 0x01000098 0x0000 > + 0x01000007 0x0133 > + 0x01000020 0x0000 > + 0x01000021 0x0000 > + 0x02000064>; > + startbyte = <0x70>; > + bgr; > + fps = <50>; > + gamma = "04 1F 4 7 7 0 7 7 6 0\n0F 00 1 7 4 0 0 0 6 7"; > + }; > + }; > + > + /* itdb28_spi */ > + fragment@14 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9325"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* mi0283qt-2 */ > + fragment@15 { > + target = <&display>; > + __dormant__ { > + compatible = "himax,hx8347d"; > + spi-max-frequency = <32000000>; > + startbyte = <0x70>; > + bgr; > + }; > + }; > + > + /* mi0283qt-9a */ > + fragment@16 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + buswidth = <9>; > + bgr; > + }; > + }; > + > + /* nokia3310 */ > + fragment@17 { > + target = <&display>; > + __dormant__ { > + compatible = "philips,pcd8544"; > + spi-max-frequency = <400000>; > + }; > + }; > + > + /* nokia3310a */ > + fragment@18 { > + target = <&display>; > + __dormant__ { > + compatible = "teralane,tls8204"; > + spi-max-frequency = <1000000>; > + }; > + }; > + > + /* nokia5110 */ > + fragment@19 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9163"; > + spi-max-frequency = <12000000>; > + bgr; > + }; > + }; > + > + /* piscreen */ > + fragment@20 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9486"; > + spi-max-frequency = <32000000>; > + regwidth = <16>; > + bgr; > + }; > + }; > + > + /* pitft */ > + fragment@21 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9340"; > + spi-max-frequency = <32000000>; > + init = <0x01000001 > + 0x02000005 > + 0x01000028 > + 0x010000EF 0x03 0x80 0x02 > + 0x010000CF 0x00 0xC1 0x30 > + 0x010000ED 0x64 0x03 0x12 0x81 > + 0x010000E8 0x85 0x00 0x78 > + 0x010000CB 0x39 0x2C 0x00 0x34 0x02 > + 0x010000F7 0x20 > + 0x010000EA 0x00 0x00 > + 0x010000C0 0x23 > + 0x010000C1 0x10 > + 0x010000C5 0x3E 0x28 > + 0x010000C7 0x86 > + 0x0100003A 0x55 > + 0x010000B1 0x00 0x18 > + 0x010000B6 0x08 0x82 0x27 > + 0x010000F2 0x00 > + 0x01000026 0x01 > + 0x010000E0 0x0F 0x31 0x2B 0x0C 0x0E 0x08 0x4E 0xF1 0x37 0x07 0x10 0x03 0x0E 0x09 0x00 > + 0x010000E1 0x00 0x0E 0x14 0x03 0x11 0x07 0x31 0xC1 0x48 0x08 0x0F 0x0C 0x31 0x36 0x0F > + 0x01000011 > + 0x02000064 > + 0x01000029 > + 0x02000014>; > + bgr; > + }; > + }; > + > + /* pioled */ > + fragment@22 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1351"; > + spi-max-frequency = <20000000>; > + bgr; > + gamma = "0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4"; > + }; > + }; > + > + /* rpi-display */ > + fragment@23 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* sainsmart18 */ > + fragment@24 { > + target = <&display>; > + __dormant__ { > + compatible = "sitronix,st7735r"; > + spi-max-frequency = <32000000>; > + }; > + }; > + > + /* sainsmart32_spi */ > + fragment@25 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1289"; > + spi-max-frequency = <16000000>; > + bgr; > + }; > + }; > + > + /* tinylcd35 */ > + fragment@26 { > + target = <&display>; > + __dormant__ { > + compatible = "neosec,tinylcd"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* tm022hdh26 */ > + fragment@27 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* tontec35_9481 - boards before 02 July 2014 */ > + fragment@28 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9481"; > + spi-max-frequency = <128000000>; > + spi-cpha; > + spi-cpol; > + bgr; > + }; > + }; > + > + /* tontec35_9486 - boards after 02 July 2014 */ > + fragment@29 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9486"; > + spi-max-frequency = <128000000>; > + spi-cpha; > + spi-cpol; > + bgr; > + }; > + }; > + > + /* waveshare32b */ > + fragment@30 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9340"; > + spi-max-frequency = <48000000>; > + init = <0x010000CB 0x39 0x2C 0x00 0x34 0x02 > + 0x010000CF 0x00 0xC1 0x30 > + 0x010000E8 0x85 0x00 0x78 > + 0x010000EA 0x00 0x00 > + 0x010000ED 0x64 0x03 0x12 0x81 > + 0x010000F7 0x20 > + 0x010000C0 0x23 > + 0x010000C1 0x10 > + 0x010000C5 0x3E 0x28 > + 0x010000C7 0x86 > + 0x01000036 0x28 > + 0x0100003A 0x55 > + 0x010000B1 0x00 0x18 > + 0x010000B6 0x08 0x82 0x27 > + 0x010000F2 0x00 > + 0x01000026 0x01 > + 0x010000E0 0x0F 0x31 0x2B 0x0C 0x0E 0x08 0x4E 0xF1 0x37 0x07 0x10 0x03 0x0E 0x09 0x00 > + 0x010000E1 0x00 0x0E 0x14 0x03 0x11 0x07 0x31 0xC1 0x48 0x08 0x0F 0x0C 0x31 0x36 0x0F > + 0x01000011 > + 0x02000078 > + 0x01000029 > + 0x0100002C>; > + bgr; > + }; > + }; > + > + /* waveshare22 */ > + fragment@31 { > + target = <&display>; > + __dormant__ { > + compatible = "hitachi,bd663474"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + }; > + }; > + > + spidev_fragment: fragment@100 { > + target-path = "spi0/spidev@0"; > + __overlay__ { > + status = "disabled"; > + }; > + }; > + > + display_fragment: fragment@101 { > + target = <&spi0>; > + __overlay__ { > + /* needed to avoid dtc warning */ > + #address-cells = <1>; > + #size-cells = <0>; > + > + status = "okay"; > + > + display: display@0{ > + reg = <0>; > + spi-max-frequency = <32000000>; > + fps = <30>; > + buswidth = <8>; > + }; > + }; > + }; > + > + __overrides__ { > + spi0-0 = <&display_fragment>, "target:0=",<&spi0>, > + <&spidev_fragment>, "target-path=spi0/spidev@0", > + <&display>, "reg:0=0"; > + spi0-1 = <&display_fragment>, "target:0=",<&spi0>, > + <&spidev_fragment>, "target-path=spi0/spidev@1", > + <&display>, "reg:0=1"; > + spi1-0 = <&display_fragment>, "target:0=",<&spi1>, > + <&spidev_fragment>, "target-path=spi1/spidev@0", > + <&display>, "reg:0=0"; > + spi1-1 = <&display_fragment>, "target:0=",<&spi1>, > + <&spidev_fragment>, "target-path=spi1/spidev@1", > + <&display>, "reg:0=1"; > + spi1-2 = <&display_fragment>, "target:0=",<&spi1>, > + <&spidev_fragment>, "target-path=spi1/spidev@2", > + <&display>, "reg:0=2"; > + spi2-0 = <&display_fragment>, "target:0=",<&spi2>, > + <&spidev_fragment>, "target-path=spi2/spidev@0", > + <&display>, "reg:0=0"; > + spi2-1 = <&display_fragment>, "target:0=",<&spi2>, > + <&spidev_fragment>, "target-path=spi2/spidev@1", > + <&display>, "reg:0=1"; > + spi2-2 = <&display_fragment>, "target:0=",<&spi2>, > + <&spidev_fragment>, "target-path=spi2/spidev@2", > + <&display>, "reg:0=2"; > + > + speed = <&display>, "spi-max-frequency:0"; > + cpha = <&display>, "spi-cpha?"; > + cpol = <&display>, "spi-cpol?"; > + > + /* Displays */ > + adafruit18 = <0>, "+0"; > + adafruit22 = <0>, "+1"; > + adafruit22a = <0>, "+2"; > + adafruit28 = <0>, "+3"; > + adafruit13m = <0>, "+4"; > + admatec_c-berry28 = <0>, "+5"; > + dogs102 = <0>, "+6"; > + er_tftm050_2 = <0>, "+7"; > + er_tftm070_5 = <0>, "+8"; > + ew24ha0 = <0>, "+9"; > + ew24ha0_9bit = <0>, "+10"; > + freetronicsoled128 = <0>, "+11"; > + hy28a = <0>, "+12"; > + hy28b = <0>, "+13"; > + itdb28_spi = <0>, "+14"; > + mi0283qt-2 = <0>, "+15"; > + mi0283qt-9a = <0>, "+16"; > + nokia3310 = <0>, "+17"; > + nokia3310a = <0>, "+18"; > + nokia5110 = <0>, "+19"; > + piscreen = <0>, "+20"; > + pitft = <0>, "+21"; > + pioled = <0>, "+22"; > + rpi-display = <0>, "+23"; > + sainsmart18 = <0>, "+24"; > + sainsmart32_spi = <0>, "+25"; > + tinylcd35 = <0>, "+26"; > + tm022hdh26 = <0>, "+27"; > + tontec35_9481 = <0>, "+28"; > + tontec35_9486 = <0>, "+29"; > + waveshare32b = <0>, "+30"; > + waveshare22 = <0>, "+31"; > + > + /* Controllers */ > + bd663474 = <&display>, "compatible=hitachi,bd663474"; > + hx8340bn = <&display>, "compatible=himax,hx8340bn"; > + hx8347d = <&display>, "compatible=himax,hx8347d"; > + hx8353d = <&display>, "compatible=himax,hx8353d"; > + hx8357d = <&display>, "compatible=himax,hx8357d"; > + ili9163 = <&display>, "compatible=ilitek,ili9163"; > + ili9320 = <&display>, "compatible=ilitek,ili9320"; > + ili9325 = <&display>, "compatible=ilitek,ili9325"; > + ili9340 = <&display>, "compatible=ilitek,ili9340"; > + ili9341 = <&display>, "compatible=ilitek,ili9341"; > + ili9481 = <&display>, "compatible=ilitek,ili9481"; > + ili9486 = <&display>, "compatible=ilitek,ili9486"; > + pcd8544 = <&display>, "compatible=philips,pcd8544"; > + ra8875 = <&display>, "compatible=raio,ra8875"; > + s6d02a1 = <&display>, "compatible=samsung,s6d02a1"; > + s6d1121 = <&display>, "compatible=samsung,s6d1121"; > + seps525 = <&display>, "compatible=syncoam,seps525"; > + sh1106 = <&display>, "compatible=sinowealth,sh1106"; > + ssd1289 = <&display>, "compatible=solomon,ssd1289"; > + ssd1305 = <&display>, "compatible=solomon,ssd1305"; > + ssd1306 = <&display>, "compatible=solomon,ssd1306"; > + ssd1325 = <&display>, "compatible=solomon,ssd1325"; > + ssd1331 = <&display>, "compatible=solomon,ssd1331"; > + ssd1351 = <&display>, "compatible=solomon,ssd1351"; > + st7735r = <&display>, "compatible=sitronix,st7735r"; > + st7789v = <&display>, "compatible=sitronix,st7789v"; > + tls8204 = <&display>, "compatible=teralane,tls8204"; > + uc1611 = <&display>, "compatible=ultrachip,uc1611"; > + uc1701 = <&display>, "compatible=UltraChip,uc1701"; > + upd161704 = <&display>, "compatible=nec,upd161704"; > + > + width = <&display>, "width:0"; > + height = <&display>, "height:0"; > + regwidth = <&display>, "regwidth:0"; > + buswidth = <&display>, "buswidth:0"; > + debug = <&display>, "debug:0"; > + rotate = <&display>, "rotate:0"; > + bgr = <&display>, "bgr?"; > + fps = <&display>, "fps:0"; > + txbuflen = <&display>, "txbuflen:0"; > + startbyte = <&display>, "startbyte:0"; > + gamma = <&display>, "gamma"; > + > + reset_pin = <&display>, "reset-gpios:0=", <&gpio>, > + <&display>, "reset-gpios:4", > + <&display>, "reset-gpios:8=1"; /* GPIO_ACTIVE_LOW */ > + dc_pin = <&display>, "dc-gpios:0=", <&gpio>, > + <&display>, "dc-gpios:4", > + <&display>, "dc-gpios:8=0"; /* GPIO_ACTIVE_HIGH */ > + led_pin = <&display>, "led-gpios:0=", <&gpio>, > + <&display>, "led-gpios:4", > + <&display>, "led-gpios:8=0"; /* GPIO_ACTIVE_HIGH */ > + }; > +};
Applied to focal/raspi master-next branch. ...Juerg > From: Noralf Trønnes <noralf@tronnes.org> > > BugLink: https://bugs.launchpad.net/bugs/1963919 > > Add an overlay that provides much of the functionality that fbtft_device did. > > Signed-off-by: Noralf Trønnes <noralf@tronnes.org> > > (cherry picked from commit 6a4525924c43f343951c67af4963386b477938af rpi-5.15-y) > Signed-off-by: Juerg Haefliger <juerg.haefliger@canonical.com> > --- > arch/arm/boot/dts/overlays/Makefile | 1 + > arch/arm/boot/dts/overlays/README | 124 ++++ > arch/arm/boot/dts/overlays/fbtft-overlay.dts | 611 +++++++++++++++++++ > 3 files changed, 736 insertions(+) > create mode 100644 arch/arm/boot/dts/overlays/fbtft-overlay.dts > > diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile > index b2c782407fe0..bfb27ab9e928 100644 > --- a/arch/arm/boot/dts/overlays/Makefile > +++ b/arch/arm/boot/dts/overlays/Makefile > @@ -44,6 +44,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ > enc28j60.dtbo \ > enc28j60-spi2.dtbo \ > exc3000.dtbo \ > + fbtft.dtbo \ > fe-pi-audio.dtbo \ > fsm-demo.dtbo \ > ghost-amp.dtbo \ > diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README > index 03fdbdbe4729..a88f0710466c 100644 > --- a/arch/arm/boot/dts/overlays/README > +++ b/arch/arm/boot/dts/overlays/README > @@ -805,6 +805,130 @@ Params: interrupt GPIO used for interrupt (default 4) > swapxy Touchscreen swapped x y axis > > > +Name: fbtft > +Info: Overlay for SPI-connected displays using the fbtft drivers. > + > + This overlay seeks to replace the functionality provided by fbtft_device > + which is now gone from the kernel. > + > + Most displays from fbtft_device have been ported over. > + Example: > + dtoverlay=fbtft,spi0-0,rpi-display,reset_pin=23,dc_pin=24,led_pin=18,rotate=270 > + > + It is also possible to specify the controller (this will use the default > + init sequence in the driver). > + Example: > + dtoverlay=fbtft,spi0-0,ili9341,bgr,reset_pin=23,dc_pin=24,led_pin=18,rotate=270 > + > + For devices on spi1 or spi2, the interfaces should be enabled > + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays. > + > + The following features of fbtft_device have not been ported over: > + - parallel bus is not supported > + - the init property which overrides the controller initialization > + sequence is not supported as a parameter due to memory limitations in > + the bootloader responsible for applying the overlay. > + > + See https://github.com/notro/fbtft/wiki/FBTFT-RPI-overlays for how to > + create an overlay. > + > +Load: dtoverlay=fbtft,<param>=<val> > +Params: > + spi<n>-<m> Configure device at spi<n>, cs<m> > + (boolean, required) > + speed SPI bus speed in Hz (default 32000000) > + cpha Shifted clock phase (CPHA) mode > + cpol Inverse clock polarity (CPOL) mode > + > + adafruit18 Adafruit 1.8 > + adafruit22 Adafruit 2.2 (old) > + adafruit22a Adafruit 2.2 > + adafruit28 Adafruit 2.8 > + adafruit13m Adafruit 1.3 OLED > + admatec_c-berry28 C-Berry28 > + dogs102 EA DOGS102 > + er_tftm050_2 ER-TFTM070-2 > + er_tftm070_5 ER-TFTM070-5 > + ew24ha0 EW24HA0 > + ew24ha0_9bit EW24HA0 in 9-bit mode > + freetronicsoled128 Freetronics OLED128 > + hy28a HY28A > + hy28b HY28B > + itdb28_spi ITDB02-2.8 with SPI interface circuit > + mi0283qt-2 Watterott MI0283QT-2 > + mi0283qt-9a Watterott MI0283QT-9A > + nokia3310 Nokia 3310 > + nokia3310a Nokia 3310a > + nokia5110 Nokia 5110 > + piscreen PiScreen > + pitft Adafruit PiTFT 2.8 > + pioled ILSoft OLED > + rpi-display Watterott rpi-display > + sainsmart18 Sainsmart 1.8 > + sainsmart32_spi Sainsmart 3.2 with SPI interfce circuit > + tinylcd35 TinyLCD 3.5 > + tm022hdh26 Tianma TM022HDH26 > + tontec35_9481 Tontect 3.5 with ILI9481 controller > + tontec35_9486 Tontect 3.5 with ILI9486 controller > + waveshare32b Waveshare 3.2 > + waveshare22 Waveshare 2.2 > + > + bd663474 BD663474 display controller > + hx8340bn HX8340BN display controller > + hx8347d HX8347D display controller > + hx8353d HX8353D display controller > + hx8357d HX8357D display controller > + ili9163 ILI9163 display controller > + ili9320 ILI9320 display controller > + ili9325 ILI9325 display controller > + ili9340 ILI9340 display controller > + ili9341 ILI9341 display controller > + ili9481 ILI9481 display controller > + ili9486 ILI9486 display controller > + pcd8544 PCD8544 display controller > + ra8875 RA8875 display controller > + s6d02a1 S6D02A1 display controller > + s6d1121 S6D1121 display controller > + seps525 SEPS525 display controller > + sh1106 SH1106 display controller > + ssd1289 SSD1289 display controller > + ssd1305 SSD1305 display controller > + ssd1306 SSD1306 display controller > + ssd1325 SSD1325 display controller > + ssd1331 SSD1331 display controller > + ssd1351 SSD1351 display controller > + st7735r ST7735R display controller > + st7789v ST7789V display controller > + tls8204 TLS8204 display controller > + uc1611 UC1611 display controller > + uc1701 UC1701 display controller > + upd161704 UPD161704 display controller > + > + width Display width in pixels > + height Display height in pixels > + regwidth Display controller register width (default is > + driver specific) > + buswidth Display bus interface width (default 8) > + debug Debug output level {0-7} > + rotate Display rotation {0, 90, 180, 270} (counter > + clockwise). Not supported by all drivers. > + bgr Enable BGR mode (default off). Use if Red and > + Blue are swapped. Not supported by all drivers. > + fps Frames per second (default 30). In effect this > + states how long the driver will wait after video > + memory has been changed until display update > + transfer is started. > + txbuflen Length of the FBTFT transmit buffer > + (default 4096) > + startbyte Sets the Start byte used by fb_ili9320, > + fb_ili9325 and fb_hx8347d. Common value is 0x70. > + gamma String representation of Gamma Curve(s). Driver > + specific. Not supported by all drivers. > + reset_pin GPIO pin for RESET > + dc_pin GPIO pin for D/C > + led_pin GPIO pin for LED backlight > + > + > Name: fe-pi-audio > Info: Configures the Fe-Pi Audio Sound Card > Load: dtoverlay=fe-pi-audio > diff --git a/arch/arm/boot/dts/overlays/fbtft-overlay.dts b/arch/arm/boot/dts/overlays/fbtft-overlay.dts > new file mode 100644 > index 000000000000..db45f8c53bcc > --- /dev/null > +++ b/arch/arm/boot/dts/overlays/fbtft-overlay.dts > @@ -0,0 +1,611 @@ > +/* > + * Device Tree overlay for fbtft drivers > + */ > + > +/dts-v1/; > +/plugin/; > + > +/ { > + compatible = "brcm,bcm2835"; > + > + /* adafruit18 */ > + fragment@0 { > + target = <&display>; > + __dormant__ { > + compatible = "sitronix,st7735r"; > + spi-max-frequency = <32000000>; > + gamma = "02 1c 07 12 37 32 29 2d 29 25 2B 39 00 01 03 10\n03 1d 07 06 2E 2C 29 2D 2E 2E 37 3F 00 00 02 10"; > + }; > + }; > + > + /* adafruit22 */ > + fragment@1 { > + target = <&display>; > + __dormant__ { > + compatible = "himax,hx8340bn"; > + spi-max-frequency = <32000000>; > + buswidth = <9>; > + bgr; > + }; > + }; > + > + /* adafruit22a */ > + fragment@2 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9340"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* adafruit28 */ > + fragment@3 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* adafruit13m */ > + fragment@4 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1306"; > + spi-max-frequency = <16000000>; > + }; > + }; > + > + /* admatec_c-berry28 */ > + fragment@5 { > + target = <&display>; > + __dormant__ { > + compatible = "sitronix,st7789v"; > + spi-max-frequency = <48000000>; > + init = <0x01000011 > + 0x02000078 > + 0x0100003A 0x05 > + 0x010000B2 0x0C 0x0C 0x00 0x33 0x33 > + 0x010000B7 0x35 > + 0x010000C2 0x01 0xFF > + 0x010000C3 0x17 > + 0x010000C4 0x20 > + 0x010000BB 0x17 > + 0x010000C5 0x20 > + 0x010000D0 0xA4 0xA1 > + 0x01000029>; > + gamma = "D0 00 14 15 13 2C 42 43 4E 09 16 14 18 21\nD0 00 14 15 13 0B 43 55 53 0C 17 14 23 20"; > + }; > + }; > + > + /* dogs102 */ > + fragment@6 { > + target = <&display>; > + __dormant__ { > + compatible = "UltraChip,uc1701"; > + spi-max-frequency = <8000000>; > + bgr; > + }; > + }; > + > + /* er_tftm050_2 */ > + fragment@7 { > + target = <&display>; > + __dormant__ { > + compatible = "raio,ra8875"; > + spi-max-frequency = <5000000>; > + spi-cpha; > + spi-cpol; > + width = <480>; > + height = <272>; > + bgr; > + }; > + }; > + > + /* er_tftm070_5 */ > + fragment@8 { > + target = <&display>; > + __dormant__ { > + compatible = "raio,ra8875"; > + spi-max-frequency = <5000000>; > + spi-cpha; > + spi-cpol; > + width = <800>; > + height = <480>; > + bgr; > + }; > + }; > + > + /* ew24ha0 */ > + fragment@9 { > + target = <&display>; > + __dormant__ { > + compatible = "ultrachip,uc1611"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + }; > + }; > + > + /* ew24ha0_9bit */ > + fragment@10 { > + target = <&display>; > + __dormant__ { > + compatible = "ultrachip,uc1611"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + buswidth = <9>; > + }; > + }; > + > + /* freetronicsoled128 */ > + fragment@11 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1351"; > + spi-max-frequency = <20000000>; > + backlight = <2>; /* FBTFT_ONBOARD_BACKLIGHT */ > + bgr; > + }; > + }; > + > + /* hy28a */ > + fragment@12 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9320"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + startbyte = <0x70>; > + bgr; > + }; > + }; > + > + /* hy28b */ > + fragment@13 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9325"; > + spi-max-frequency = <48000000>; > + spi-cpha; > + spi-cpol; > + init = <0x010000e7 0x0010 > + 0x01000000 0x0001 > + 0x01000001 0x0100 > + 0x01000002 0x0700 > + 0x01000003 0x1030 > + 0x01000004 0x0000 > + 0x01000008 0x0207 > + 0x01000009 0x0000 > + 0x0100000a 0x0000 > + 0x0100000c 0x0001 > + 0x0100000d 0x0000 > + 0x0100000f 0x0000 > + 0x01000010 0x0000 > + 0x01000011 0x0007 > + 0x01000012 0x0000 > + 0x01000013 0x0000 > + 0x02000032 > + 0x01000010 0x1590 > + 0x01000011 0x0227 > + 0x02000032 > + 0x01000012 0x009c > + 0x02000032 > + 0x01000013 0x1900 > + 0x01000029 0x0023 > + 0x0100002b 0x000e > + 0x02000032 > + 0x01000020 0x0000 > + 0x01000021 0x0000 > + 0x02000032 > + 0x01000050 0x0000 > + 0x01000051 0x00ef > + 0x01000052 0x0000 > + 0x01000053 0x013f > + 0x01000060 0xa700 > + 0x01000061 0x0001 > + 0x0100006a 0x0000 > + 0x01000080 0x0000 > + 0x01000081 0x0000 > + 0x01000082 0x0000 > + 0x01000083 0x0000 > + 0x01000084 0x0000 > + 0x01000085 0x0000 > + 0x01000090 0x0010 > + 0x01000092 0x0000 > + 0x01000093 0x0003 > + 0x01000095 0x0110 > + 0x01000097 0x0000 > + 0x01000098 0x0000 > + 0x01000007 0x0133 > + 0x01000020 0x0000 > + 0x01000021 0x0000 > + 0x02000064>; > + startbyte = <0x70>; > + bgr; > + fps = <50>; > + gamma = "04 1F 4 7 7 0 7 7 6 0\n0F 00 1 7 4 0 0 0 6 7"; > + }; > + }; > + > + /* itdb28_spi */ > + fragment@14 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9325"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* mi0283qt-2 */ > + fragment@15 { > + target = <&display>; > + __dormant__ { > + compatible = "himax,hx8347d"; > + spi-max-frequency = <32000000>; > + startbyte = <0x70>; > + bgr; > + }; > + }; > + > + /* mi0283qt-9a */ > + fragment@16 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + buswidth = <9>; > + bgr; > + }; > + }; > + > + /* nokia3310 */ > + fragment@17 { > + target = <&display>; > + __dormant__ { > + compatible = "philips,pcd8544"; > + spi-max-frequency = <400000>; > + }; > + }; > + > + /* nokia3310a */ > + fragment@18 { > + target = <&display>; > + __dormant__ { > + compatible = "teralane,tls8204"; > + spi-max-frequency = <1000000>; > + }; > + }; > + > + /* nokia5110 */ > + fragment@19 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9163"; > + spi-max-frequency = <12000000>; > + bgr; > + }; > + }; > + > + /* piscreen */ > + fragment@20 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9486"; > + spi-max-frequency = <32000000>; > + regwidth = <16>; > + bgr; > + }; > + }; > + > + /* pitft */ > + fragment@21 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9340"; > + spi-max-frequency = <32000000>; > + init = <0x01000001 > + 0x02000005 > + 0x01000028 > + 0x010000EF 0x03 0x80 0x02 > + 0x010000CF 0x00 0xC1 0x30 > + 0x010000ED 0x64 0x03 0x12 0x81 > + 0x010000E8 0x85 0x00 0x78 > + 0x010000CB 0x39 0x2C 0x00 0x34 0x02 > + 0x010000F7 0x20 > + 0x010000EA 0x00 0x00 > + 0x010000C0 0x23 > + 0x010000C1 0x10 > + 0x010000C5 0x3E 0x28 > + 0x010000C7 0x86 > + 0x0100003A 0x55 > + 0x010000B1 0x00 0x18 > + 0x010000B6 0x08 0x82 0x27 > + 0x010000F2 0x00 > + 0x01000026 0x01 > + 0x010000E0 0x0F 0x31 0x2B 0x0C 0x0E 0x08 0x4E 0xF1 0x37 0x07 0x10 0x03 0x0E 0x09 0x00 > + 0x010000E1 0x00 0x0E 0x14 0x03 0x11 0x07 0x31 0xC1 0x48 0x08 0x0F 0x0C 0x31 0x36 0x0F > + 0x01000011 > + 0x02000064 > + 0x01000029 > + 0x02000014>; > + bgr; > + }; > + }; > + > + /* pioled */ > + fragment@22 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1351"; > + spi-max-frequency = <20000000>; > + bgr; > + gamma = "0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4"; > + }; > + }; > + > + /* rpi-display */ > + fragment@23 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* sainsmart18 */ > + fragment@24 { > + target = <&display>; > + __dormant__ { > + compatible = "sitronix,st7735r"; > + spi-max-frequency = <32000000>; > + }; > + }; > + > + /* sainsmart32_spi */ > + fragment@25 { > + target = <&display>; > + __dormant__ { > + compatible = "solomon,ssd1289"; > + spi-max-frequency = <16000000>; > + bgr; > + }; > + }; > + > + /* tinylcd35 */ > + fragment@26 { > + target = <&display>; > + __dormant__ { > + compatible = "neosec,tinylcd"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* tm022hdh26 */ > + fragment@27 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9341"; > + spi-max-frequency = <32000000>; > + bgr; > + }; > + }; > + > + /* tontec35_9481 - boards before 02 July 2014 */ > + fragment@28 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9481"; > + spi-max-frequency = <128000000>; > + spi-cpha; > + spi-cpol; > + bgr; > + }; > + }; > + > + /* tontec35_9486 - boards after 02 July 2014 */ > + fragment@29 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9486"; > + spi-max-frequency = <128000000>; > + spi-cpha; > + spi-cpol; > + bgr; > + }; > + }; > + > + /* waveshare32b */ > + fragment@30 { > + target = <&display>; > + __dormant__ { > + compatible = "ilitek,ili9340"; > + spi-max-frequency = <48000000>; > + init = <0x010000CB 0x39 0x2C 0x00 0x34 0x02 > + 0x010000CF 0x00 0xC1 0x30 > + 0x010000E8 0x85 0x00 0x78 > + 0x010000EA 0x00 0x00 > + 0x010000ED 0x64 0x03 0x12 0x81 > + 0x010000F7 0x20 > + 0x010000C0 0x23 > + 0x010000C1 0x10 > + 0x010000C5 0x3E 0x28 > + 0x010000C7 0x86 > + 0x01000036 0x28 > + 0x0100003A 0x55 > + 0x010000B1 0x00 0x18 > + 0x010000B6 0x08 0x82 0x27 > + 0x010000F2 0x00 > + 0x01000026 0x01 > + 0x010000E0 0x0F 0x31 0x2B 0x0C 0x0E 0x08 0x4E 0xF1 0x37 0x07 0x10 0x03 0x0E 0x09 0x00 > + 0x010000E1 0x00 0x0E 0x14 0x03 0x11 0x07 0x31 0xC1 0x48 0x08 0x0F 0x0C 0x31 0x36 0x0F > + 0x01000011 > + 0x02000078 > + 0x01000029 > + 0x0100002C>; > + bgr; > + }; > + }; > + > + /* waveshare22 */ > + fragment@31 { > + target = <&display>; > + __dormant__ { > + compatible = "hitachi,bd663474"; > + spi-max-frequency = <32000000>; > + spi-cpha; > + spi-cpol; > + }; > + }; > + > + spidev_fragment: fragment@100 { > + target-path = "spi0/spidev@0"; > + __overlay__ { > + status = "disabled"; > + }; > + }; > + > + display_fragment: fragment@101 { > + target = <&spi0>; > + __overlay__ { > + /* needed to avoid dtc warning */ > + #address-cells = <1>; > + #size-cells = <0>; > + > + status = "okay"; > + > + display: display@0{ > + reg = <0>; > + spi-max-frequency = <32000000>; > + fps = <30>; > + buswidth = <8>; > + }; > + }; > + }; > + > + __overrides__ { > + spi0-0 = <&display_fragment>, "target:0=",<&spi0>, > + <&spidev_fragment>, "target-path=spi0/spidev@0", > + <&display>, "reg:0=0"; > + spi0-1 = <&display_fragment>, "target:0=",<&spi0>, > + <&spidev_fragment>, "target-path=spi0/spidev@1", > + <&display>, "reg:0=1"; > + spi1-0 = <&display_fragment>, "target:0=",<&spi1>, > + <&spidev_fragment>, "target-path=spi1/spidev@0", > + <&display>, "reg:0=0"; > + spi1-1 = <&display_fragment>, "target:0=",<&spi1>, > + <&spidev_fragment>, "target-path=spi1/spidev@1", > + <&display>, "reg:0=1"; > + spi1-2 = <&display_fragment>, "target:0=",<&spi1>, > + <&spidev_fragment>, "target-path=spi1/spidev@2", > + <&display>, "reg:0=2"; > + spi2-0 = <&display_fragment>, "target:0=",<&spi2>, > + <&spidev_fragment>, "target-path=spi2/spidev@0", > + <&display>, "reg:0=0"; > + spi2-1 = <&display_fragment>, "target:0=",<&spi2>, > + <&spidev_fragment>, "target-path=spi2/spidev@1", > + <&display>, "reg:0=1"; > + spi2-2 = <&display_fragment>, "target:0=",<&spi2>, > + <&spidev_fragment>, "target-path=spi2/spidev@2", > + <&display>, "reg:0=2"; > + > + speed = <&display>, "spi-max-frequency:0"; > + cpha = <&display>, "spi-cpha?"; > + cpol = <&display>, "spi-cpol?"; > + > + /* Displays */ > + adafruit18 = <0>, "+0"; > + adafruit22 = <0>, "+1"; > + adafruit22a = <0>, "+2"; > + adafruit28 = <0>, "+3"; > + adafruit13m = <0>, "+4"; > + admatec_c-berry28 = <0>, "+5"; > + dogs102 = <0>, "+6"; > + er_tftm050_2 = <0>, "+7"; > + er_tftm070_5 = <0>, "+8"; > + ew24ha0 = <0>, "+9"; > + ew24ha0_9bit = <0>, "+10"; > + freetronicsoled128 = <0>, "+11"; > + hy28a = <0>, "+12"; > + hy28b = <0>, "+13"; > + itdb28_spi = <0>, "+14"; > + mi0283qt-2 = <0>, "+15"; > + mi0283qt-9a = <0>, "+16"; > + nokia3310 = <0>, "+17"; > + nokia3310a = <0>, "+18"; > + nokia5110 = <0>, "+19"; > + piscreen = <0>, "+20"; > + pitft = <0>, "+21"; > + pioled = <0>, "+22"; > + rpi-display = <0>, "+23"; > + sainsmart18 = <0>, "+24"; > + sainsmart32_spi = <0>, "+25"; > + tinylcd35 = <0>, "+26"; > + tm022hdh26 = <0>, "+27"; > + tontec35_9481 = <0>, "+28"; > + tontec35_9486 = <0>, "+29"; > + waveshare32b = <0>, "+30"; > + waveshare22 = <0>, "+31"; > + > + /* Controllers */ > + bd663474 = <&display>, "compatible=hitachi,bd663474"; > + hx8340bn = <&display>, "compatible=himax,hx8340bn"; > + hx8347d = <&display>, "compatible=himax,hx8347d"; > + hx8353d = <&display>, "compatible=himax,hx8353d"; > + hx8357d = <&display>, "compatible=himax,hx8357d"; > + ili9163 = <&display>, "compatible=ilitek,ili9163"; > + ili9320 = <&display>, "compatible=ilitek,ili9320"; > + ili9325 = <&display>, "compatible=ilitek,ili9325"; > + ili9340 = <&display>, "compatible=ilitek,ili9340"; > + ili9341 = <&display>, "compatible=ilitek,ili9341"; > + ili9481 = <&display>, "compatible=ilitek,ili9481"; > + ili9486 = <&display>, "compatible=ilitek,ili9486"; > + pcd8544 = <&display>, "compatible=philips,pcd8544"; > + ra8875 = <&display>, "compatible=raio,ra8875"; > + s6d02a1 = <&display>, "compatible=samsung,s6d02a1"; > + s6d1121 = <&display>, "compatible=samsung,s6d1121"; > + seps525 = <&display>, "compatible=syncoam,seps525"; > + sh1106 = <&display>, "compatible=sinowealth,sh1106"; > + ssd1289 = <&display>, "compatible=solomon,ssd1289"; > + ssd1305 = <&display>, "compatible=solomon,ssd1305"; > + ssd1306 = <&display>, "compatible=solomon,ssd1306"; > + ssd1325 = <&display>, "compatible=solomon,ssd1325"; > + ssd1331 = <&display>, "compatible=solomon,ssd1331"; > + ssd1351 = <&display>, "compatible=solomon,ssd1351"; > + st7735r = <&display>, "compatible=sitronix,st7735r"; > + st7789v = <&display>, "compatible=sitronix,st7789v"; > + tls8204 = <&display>, "compatible=teralane,tls8204"; > + uc1611 = <&display>, "compatible=ultrachip,uc1611"; > + uc1701 = <&display>, "compatible=UltraChip,uc1701"; > + upd161704 = <&display>, "compatible=nec,upd161704"; > + > + width = <&display>, "width:0"; > + height = <&display>, "height:0"; > + regwidth = <&display>, "regwidth:0"; > + buswidth = <&display>, "buswidth:0"; > + debug = <&display>, "debug:0"; > + rotate = <&display>, "rotate:0"; > + bgr = <&display>, "bgr?"; > + fps = <&display>, "fps:0"; > + txbuflen = <&display>, "txbuflen:0"; > + startbyte = <&display>, "startbyte:0"; > + gamma = <&display>, "gamma"; > + > + reset_pin = <&display>, "reset-gpios:0=", <&gpio>, > + <&display>, "reset-gpios:4", > + <&display>, "reset-gpios:8=1"; /* GPIO_ACTIVE_LOW */ > + dc_pin = <&display>, "dc-gpios:0=", <&gpio>, > + <&display>, "dc-gpios:4", > + <&display>, "dc-gpios:8=0"; /* GPIO_ACTIVE_HIGH */ > + led_pin = <&display>, "led-gpios:0=", <&gpio>, > + <&display>, "led-gpios:4", > + <&display>, "led-gpios:8=0"; /* GPIO_ACTIVE_HIGH */ > + }; > +};
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile index b2c782407fe0..bfb27ab9e928 100644 --- a/arch/arm/boot/dts/overlays/Makefile +++ b/arch/arm/boot/dts/overlays/Makefile @@ -44,6 +44,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ enc28j60.dtbo \ enc28j60-spi2.dtbo \ exc3000.dtbo \ + fbtft.dtbo \ fe-pi-audio.dtbo \ fsm-demo.dtbo \ ghost-amp.dtbo \ diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README index 03fdbdbe4729..a88f0710466c 100644 --- a/arch/arm/boot/dts/overlays/README +++ b/arch/arm/boot/dts/overlays/README @@ -805,6 +805,130 @@ Params: interrupt GPIO used for interrupt (default 4) swapxy Touchscreen swapped x y axis +Name: fbtft +Info: Overlay for SPI-connected displays using the fbtft drivers. + + This overlay seeks to replace the functionality provided by fbtft_device + which is now gone from the kernel. + + Most displays from fbtft_device have been ported over. + Example: + dtoverlay=fbtft,spi0-0,rpi-display,reset_pin=23,dc_pin=24,led_pin=18,rotate=270 + + It is also possible to specify the controller (this will use the default + init sequence in the driver). + Example: + dtoverlay=fbtft,spi0-0,ili9341,bgr,reset_pin=23,dc_pin=24,led_pin=18,rotate=270 + + For devices on spi1 or spi2, the interfaces should be enabled + with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays. + + The following features of fbtft_device have not been ported over: + - parallel bus is not supported + - the init property which overrides the controller initialization + sequence is not supported as a parameter due to memory limitations in + the bootloader responsible for applying the overlay. + + See https://github.com/notro/fbtft/wiki/FBTFT-RPI-overlays for how to + create an overlay. + +Load: dtoverlay=fbtft,<param>=<val> +Params: + spi<n>-<m> Configure device at spi<n>, cs<m> + (boolean, required) + speed SPI bus speed in Hz (default 32000000) + cpha Shifted clock phase (CPHA) mode + cpol Inverse clock polarity (CPOL) mode + + adafruit18 Adafruit 1.8 + adafruit22 Adafruit 2.2 (old) + adafruit22a Adafruit 2.2 + adafruit28 Adafruit 2.8 + adafruit13m Adafruit 1.3 OLED + admatec_c-berry28 C-Berry28 + dogs102 EA DOGS102 + er_tftm050_2 ER-TFTM070-2 + er_tftm070_5 ER-TFTM070-5 + ew24ha0 EW24HA0 + ew24ha0_9bit EW24HA0 in 9-bit mode + freetronicsoled128 Freetronics OLED128 + hy28a HY28A + hy28b HY28B + itdb28_spi ITDB02-2.8 with SPI interface circuit + mi0283qt-2 Watterott MI0283QT-2 + mi0283qt-9a Watterott MI0283QT-9A + nokia3310 Nokia 3310 + nokia3310a Nokia 3310a + nokia5110 Nokia 5110 + piscreen PiScreen + pitft Adafruit PiTFT 2.8 + pioled ILSoft OLED + rpi-display Watterott rpi-display + sainsmart18 Sainsmart 1.8 + sainsmart32_spi Sainsmart 3.2 with SPI interfce circuit + tinylcd35 TinyLCD 3.5 + tm022hdh26 Tianma TM022HDH26 + tontec35_9481 Tontect 3.5 with ILI9481 controller + tontec35_9486 Tontect 3.5 with ILI9486 controller + waveshare32b Waveshare 3.2 + waveshare22 Waveshare 2.2 + + bd663474 BD663474 display controller + hx8340bn HX8340BN display controller + hx8347d HX8347D display controller + hx8353d HX8353D display controller + hx8357d HX8357D display controller + ili9163 ILI9163 display controller + ili9320 ILI9320 display controller + ili9325 ILI9325 display controller + ili9340 ILI9340 display controller + ili9341 ILI9341 display controller + ili9481 ILI9481 display controller + ili9486 ILI9486 display controller + pcd8544 PCD8544 display controller + ra8875 RA8875 display controller + s6d02a1 S6D02A1 display controller + s6d1121 S6D1121 display controller + seps525 SEPS525 display controller + sh1106 SH1106 display controller + ssd1289 SSD1289 display controller + ssd1305 SSD1305 display controller + ssd1306 SSD1306 display controller + ssd1325 SSD1325 display controller + ssd1331 SSD1331 display controller + ssd1351 SSD1351 display controller + st7735r ST7735R display controller + st7789v ST7789V display controller + tls8204 TLS8204 display controller + uc1611 UC1611 display controller + uc1701 UC1701 display controller + upd161704 UPD161704 display controller + + width Display width in pixels + height Display height in pixels + regwidth Display controller register width (default is + driver specific) + buswidth Display bus interface width (default 8) + debug Debug output level {0-7} + rotate Display rotation {0, 90, 180, 270} (counter + clockwise). Not supported by all drivers. + bgr Enable BGR mode (default off). Use if Red and + Blue are swapped. Not supported by all drivers. + fps Frames per second (default 30). In effect this + states how long the driver will wait after video + memory has been changed until display update + transfer is started. + txbuflen Length of the FBTFT transmit buffer + (default 4096) + startbyte Sets the Start byte used by fb_ili9320, + fb_ili9325 and fb_hx8347d. Common value is 0x70. + gamma String representation of Gamma Curve(s). Driver + specific. Not supported by all drivers. + reset_pin GPIO pin for RESET + dc_pin GPIO pin for D/C + led_pin GPIO pin for LED backlight + + Name: fe-pi-audio Info: Configures the Fe-Pi Audio Sound Card Load: dtoverlay=fe-pi-audio diff --git a/arch/arm/boot/dts/overlays/fbtft-overlay.dts b/arch/arm/boot/dts/overlays/fbtft-overlay.dts new file mode 100644 index 000000000000..db45f8c53bcc --- /dev/null +++ b/arch/arm/boot/dts/overlays/fbtft-overlay.dts @@ -0,0 +1,611 @@ +/* + * Device Tree overlay for fbtft drivers + */ + +/dts-v1/; +/plugin/; + +/ { + compatible = "brcm,bcm2835"; + + /* adafruit18 */ + fragment@0 { + target = <&display>; + __dormant__ { + compatible = "sitronix,st7735r"; + spi-max-frequency = <32000000>; + gamma = "02 1c 07 12 37 32 29 2d 29 25 2B 39 00 01 03 10\n03 1d 07 06 2E 2C 29 2D 2E 2E 37 3F 00 00 02 10"; + }; + }; + + /* adafruit22 */ + fragment@1 { + target = <&display>; + __dormant__ { + compatible = "himax,hx8340bn"; + spi-max-frequency = <32000000>; + buswidth = <9>; + bgr; + }; + }; + + /* adafruit22a */ + fragment@2 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9340"; + spi-max-frequency = <32000000>; + bgr; + }; + }; + + /* adafruit28 */ + fragment@3 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9341"; + spi-max-frequency = <32000000>; + bgr; + }; + }; + + /* adafruit13m */ + fragment@4 { + target = <&display>; + __dormant__ { + compatible = "solomon,ssd1306"; + spi-max-frequency = <16000000>; + }; + }; + + /* admatec_c-berry28 */ + fragment@5 { + target = <&display>; + __dormant__ { + compatible = "sitronix,st7789v"; + spi-max-frequency = <48000000>; + init = <0x01000011 + 0x02000078 + 0x0100003A 0x05 + 0x010000B2 0x0C 0x0C 0x00 0x33 0x33 + 0x010000B7 0x35 + 0x010000C2 0x01 0xFF + 0x010000C3 0x17 + 0x010000C4 0x20 + 0x010000BB 0x17 + 0x010000C5 0x20 + 0x010000D0 0xA4 0xA1 + 0x01000029>; + gamma = "D0 00 14 15 13 2C 42 43 4E 09 16 14 18 21\nD0 00 14 15 13 0B 43 55 53 0C 17 14 23 20"; + }; + }; + + /* dogs102 */ + fragment@6 { + target = <&display>; + __dormant__ { + compatible = "UltraChip,uc1701"; + spi-max-frequency = <8000000>; + bgr; + }; + }; + + /* er_tftm050_2 */ + fragment@7 { + target = <&display>; + __dormant__ { + compatible = "raio,ra8875"; + spi-max-frequency = <5000000>; + spi-cpha; + spi-cpol; + width = <480>; + height = <272>; + bgr; + }; + }; + + /* er_tftm070_5 */ + fragment@8 { + target = <&display>; + __dormant__ { + compatible = "raio,ra8875"; + spi-max-frequency = <5000000>; + spi-cpha; + spi-cpol; + width = <800>; + height = <480>; + bgr; + }; + }; + + /* ew24ha0 */ + fragment@9 { + target = <&display>; + __dormant__ { + compatible = "ultrachip,uc1611"; + spi-max-frequency = <32000000>; + spi-cpha; + spi-cpol; + }; + }; + + /* ew24ha0_9bit */ + fragment@10 { + target = <&display>; + __dormant__ { + compatible = "ultrachip,uc1611"; + spi-max-frequency = <32000000>; + spi-cpha; + spi-cpol; + buswidth = <9>; + }; + }; + + /* freetronicsoled128 */ + fragment@11 { + target = <&display>; + __dormant__ { + compatible = "solomon,ssd1351"; + spi-max-frequency = <20000000>; + backlight = <2>; /* FBTFT_ONBOARD_BACKLIGHT */ + bgr; + }; + }; + + /* hy28a */ + fragment@12 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9320"; + spi-max-frequency = <32000000>; + spi-cpha; + spi-cpol; + startbyte = <0x70>; + bgr; + }; + }; + + /* hy28b */ + fragment@13 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9325"; + spi-max-frequency = <48000000>; + spi-cpha; + spi-cpol; + init = <0x010000e7 0x0010 + 0x01000000 0x0001 + 0x01000001 0x0100 + 0x01000002 0x0700 + 0x01000003 0x1030 + 0x01000004 0x0000 + 0x01000008 0x0207 + 0x01000009 0x0000 + 0x0100000a 0x0000 + 0x0100000c 0x0001 + 0x0100000d 0x0000 + 0x0100000f 0x0000 + 0x01000010 0x0000 + 0x01000011 0x0007 + 0x01000012 0x0000 + 0x01000013 0x0000 + 0x02000032 + 0x01000010 0x1590 + 0x01000011 0x0227 + 0x02000032 + 0x01000012 0x009c + 0x02000032 + 0x01000013 0x1900 + 0x01000029 0x0023 + 0x0100002b 0x000e + 0x02000032 + 0x01000020 0x0000 + 0x01000021 0x0000 + 0x02000032 + 0x01000050 0x0000 + 0x01000051 0x00ef + 0x01000052 0x0000 + 0x01000053 0x013f + 0x01000060 0xa700 + 0x01000061 0x0001 + 0x0100006a 0x0000 + 0x01000080 0x0000 + 0x01000081 0x0000 + 0x01000082 0x0000 + 0x01000083 0x0000 + 0x01000084 0x0000 + 0x01000085 0x0000 + 0x01000090 0x0010 + 0x01000092 0x0000 + 0x01000093 0x0003 + 0x01000095 0x0110 + 0x01000097 0x0000 + 0x01000098 0x0000 + 0x01000007 0x0133 + 0x01000020 0x0000 + 0x01000021 0x0000 + 0x02000064>; + startbyte = <0x70>; + bgr; + fps = <50>; + gamma = "04 1F 4 7 7 0 7 7 6 0\n0F 00 1 7 4 0 0 0 6 7"; + }; + }; + + /* itdb28_spi */ + fragment@14 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9325"; + spi-max-frequency = <32000000>; + bgr; + }; + }; + + /* mi0283qt-2 */ + fragment@15 { + target = <&display>; + __dormant__ { + compatible = "himax,hx8347d"; + spi-max-frequency = <32000000>; + startbyte = <0x70>; + bgr; + }; + }; + + /* mi0283qt-9a */ + fragment@16 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9341"; + spi-max-frequency = <32000000>; + buswidth = <9>; + bgr; + }; + }; + + /* nokia3310 */ + fragment@17 { + target = <&display>; + __dormant__ { + compatible = "philips,pcd8544"; + spi-max-frequency = <400000>; + }; + }; + + /* nokia3310a */ + fragment@18 { + target = <&display>; + __dormant__ { + compatible = "teralane,tls8204"; + spi-max-frequency = <1000000>; + }; + }; + + /* nokia5110 */ + fragment@19 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9163"; + spi-max-frequency = <12000000>; + bgr; + }; + }; + + /* piscreen */ + fragment@20 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9486"; + spi-max-frequency = <32000000>; + regwidth = <16>; + bgr; + }; + }; + + /* pitft */ + fragment@21 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9340"; + spi-max-frequency = <32000000>; + init = <0x01000001 + 0x02000005 + 0x01000028 + 0x010000EF 0x03 0x80 0x02 + 0x010000CF 0x00 0xC1 0x30 + 0x010000ED 0x64 0x03 0x12 0x81 + 0x010000E8 0x85 0x00 0x78 + 0x010000CB 0x39 0x2C 0x00 0x34 0x02 + 0x010000F7 0x20 + 0x010000EA 0x00 0x00 + 0x010000C0 0x23 + 0x010000C1 0x10 + 0x010000C5 0x3E 0x28 + 0x010000C7 0x86 + 0x0100003A 0x55 + 0x010000B1 0x00 0x18 + 0x010000B6 0x08 0x82 0x27 + 0x010000F2 0x00 + 0x01000026 0x01 + 0x010000E0 0x0F 0x31 0x2B 0x0C 0x0E 0x08 0x4E 0xF1 0x37 0x07 0x10 0x03 0x0E 0x09 0x00 + 0x010000E1 0x00 0x0E 0x14 0x03 0x11 0x07 0x31 0xC1 0x48 0x08 0x0F 0x0C 0x31 0x36 0x0F + 0x01000011 + 0x02000064 + 0x01000029 + 0x02000014>; + bgr; + }; + }; + + /* pioled */ + fragment@22 { + target = <&display>; + __dormant__ { + compatible = "solomon,ssd1351"; + spi-max-frequency = <20000000>; + bgr; + gamma = "0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4"; + }; + }; + + /* rpi-display */ + fragment@23 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9341"; + spi-max-frequency = <32000000>; + bgr; + }; + }; + + /* sainsmart18 */ + fragment@24 { + target = <&display>; + __dormant__ { + compatible = "sitronix,st7735r"; + spi-max-frequency = <32000000>; + }; + }; + + /* sainsmart32_spi */ + fragment@25 { + target = <&display>; + __dormant__ { + compatible = "solomon,ssd1289"; + spi-max-frequency = <16000000>; + bgr; + }; + }; + + /* tinylcd35 */ + fragment@26 { + target = <&display>; + __dormant__ { + compatible = "neosec,tinylcd"; + spi-max-frequency = <32000000>; + bgr; + }; + }; + + /* tm022hdh26 */ + fragment@27 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9341"; + spi-max-frequency = <32000000>; + bgr; + }; + }; + + /* tontec35_9481 - boards before 02 July 2014 */ + fragment@28 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9481"; + spi-max-frequency = <128000000>; + spi-cpha; + spi-cpol; + bgr; + }; + }; + + /* tontec35_9486 - boards after 02 July 2014 */ + fragment@29 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9486"; + spi-max-frequency = <128000000>; + spi-cpha; + spi-cpol; + bgr; + }; + }; + + /* waveshare32b */ + fragment@30 { + target = <&display>; + __dormant__ { + compatible = "ilitek,ili9340"; + spi-max-frequency = <48000000>; + init = <0x010000CB 0x39 0x2C 0x00 0x34 0x02 + 0x010000CF 0x00 0xC1 0x30 + 0x010000E8 0x85 0x00 0x78 + 0x010000EA 0x00 0x00 + 0x010000ED 0x64 0x03 0x12 0x81 + 0x010000F7 0x20 + 0x010000C0 0x23 + 0x010000C1 0x10 + 0x010000C5 0x3E 0x28 + 0x010000C7 0x86 + 0x01000036 0x28 + 0x0100003A 0x55 + 0x010000B1 0x00 0x18 + 0x010000B6 0x08 0x82 0x27 + 0x010000F2 0x00 + 0x01000026 0x01 + 0x010000E0 0x0F 0x31 0x2B 0x0C 0x0E 0x08 0x4E 0xF1 0x37 0x07 0x10 0x03 0x0E 0x09 0x00 + 0x010000E1 0x00 0x0E 0x14 0x03 0x11 0x07 0x31 0xC1 0x48 0x08 0x0F 0x0C 0x31 0x36 0x0F + 0x01000011 + 0x02000078 + 0x01000029 + 0x0100002C>; + bgr; + }; + }; + + /* waveshare22 */ + fragment@31 { + target = <&display>; + __dormant__ { + compatible = "hitachi,bd663474"; + spi-max-frequency = <32000000>; + spi-cpha; + spi-cpol; + }; + }; + + spidev_fragment: fragment@100 { + target-path = "spi0/spidev@0"; + __overlay__ { + status = "disabled"; + }; + }; + + display_fragment: fragment@101 { + target = <&spi0>; + __overlay__ { + /* needed to avoid dtc warning */ + #address-cells = <1>; + #size-cells = <0>; + + status = "okay"; + + display: display@0{ + reg = <0>; + spi-max-frequency = <32000000>; + fps = <30>; + buswidth = <8>; + }; + }; + }; + + __overrides__ { + spi0-0 = <&display_fragment>, "target:0=",<&spi0>, + <&spidev_fragment>, "target-path=spi0/spidev@0", + <&display>, "reg:0=0"; + spi0-1 = <&display_fragment>, "target:0=",<&spi0>, + <&spidev_fragment>, "target-path=spi0/spidev@1", + <&display>, "reg:0=1"; + spi1-0 = <&display_fragment>, "target:0=",<&spi1>, + <&spidev_fragment>, "target-path=spi1/spidev@0", + <&display>, "reg:0=0"; + spi1-1 = <&display_fragment>, "target:0=",<&spi1>, + <&spidev_fragment>, "target-path=spi1/spidev@1", + <&display>, "reg:0=1"; + spi1-2 = <&display_fragment>, "target:0=",<&spi1>, + <&spidev_fragment>, "target-path=spi1/spidev@2", + <&display>, "reg:0=2"; + spi2-0 = <&display_fragment>, "target:0=",<&spi2>, + <&spidev_fragment>, "target-path=spi2/spidev@0", + <&display>, "reg:0=0"; + spi2-1 = <&display_fragment>, "target:0=",<&spi2>, + <&spidev_fragment>, "target-path=spi2/spidev@1", + <&display>, "reg:0=1"; + spi2-2 = <&display_fragment>, "target:0=",<&spi2>, + <&spidev_fragment>, "target-path=spi2/spidev@2", + <&display>, "reg:0=2"; + + speed = <&display>, "spi-max-frequency:0"; + cpha = <&display>, "spi-cpha?"; + cpol = <&display>, "spi-cpol?"; + + /* Displays */ + adafruit18 = <0>, "+0"; + adafruit22 = <0>, "+1"; + adafruit22a = <0>, "+2"; + adafruit28 = <0>, "+3"; + adafruit13m = <0>, "+4"; + admatec_c-berry28 = <0>, "+5"; + dogs102 = <0>, "+6"; + er_tftm050_2 = <0>, "+7"; + er_tftm070_5 = <0>, "+8"; + ew24ha0 = <0>, "+9"; + ew24ha0_9bit = <0>, "+10"; + freetronicsoled128 = <0>, "+11"; + hy28a = <0>, "+12"; + hy28b = <0>, "+13"; + itdb28_spi = <0>, "+14"; + mi0283qt-2 = <0>, "+15"; + mi0283qt-9a = <0>, "+16"; + nokia3310 = <0>, "+17"; + nokia3310a = <0>, "+18"; + nokia5110 = <0>, "+19"; + piscreen = <0>, "+20"; + pitft = <0>, "+21"; + pioled = <0>, "+22"; + rpi-display = <0>, "+23"; + sainsmart18 = <0>, "+24"; + sainsmart32_spi = <0>, "+25"; + tinylcd35 = <0>, "+26"; + tm022hdh26 = <0>, "+27"; + tontec35_9481 = <0>, "+28"; + tontec35_9486 = <0>, "+29"; + waveshare32b = <0>, "+30"; + waveshare22 = <0>, "+31"; + + /* Controllers */ + bd663474 = <&display>, "compatible=hitachi,bd663474"; + hx8340bn = <&display>, "compatible=himax,hx8340bn"; + hx8347d = <&display>, "compatible=himax,hx8347d"; + hx8353d = <&display>, "compatible=himax,hx8353d"; + hx8357d = <&display>, "compatible=himax,hx8357d"; + ili9163 = <&display>, "compatible=ilitek,ili9163"; + ili9320 = <&display>, "compatible=ilitek,ili9320"; + ili9325 = <&display>, "compatible=ilitek,ili9325"; + ili9340 = <&display>, "compatible=ilitek,ili9340"; + ili9341 = <&display>, "compatible=ilitek,ili9341"; + ili9481 = <&display>, "compatible=ilitek,ili9481"; + ili9486 = <&display>, "compatible=ilitek,ili9486"; + pcd8544 = <&display>, "compatible=philips,pcd8544"; + ra8875 = <&display>, "compatible=raio,ra8875"; + s6d02a1 = <&display>, "compatible=samsung,s6d02a1"; + s6d1121 = <&display>, "compatible=samsung,s6d1121"; + seps525 = <&display>, "compatible=syncoam,seps525"; + sh1106 = <&display>, "compatible=sinowealth,sh1106"; + ssd1289 = <&display>, "compatible=solomon,ssd1289"; + ssd1305 = <&display>, "compatible=solomon,ssd1305"; + ssd1306 = <&display>, "compatible=solomon,ssd1306"; + ssd1325 = <&display>, "compatible=solomon,ssd1325"; + ssd1331 = <&display>, "compatible=solomon,ssd1331"; + ssd1351 = <&display>, "compatible=solomon,ssd1351"; + st7735r = <&display>, "compatible=sitronix,st7735r"; + st7789v = <&display>, "compatible=sitronix,st7789v"; + tls8204 = <&display>, "compatible=teralane,tls8204"; + uc1611 = <&display>, "compatible=ultrachip,uc1611"; + uc1701 = <&display>, "compatible=UltraChip,uc1701"; + upd161704 = <&display>, "compatible=nec,upd161704"; + + width = <&display>, "width:0"; + height = <&display>, "height:0"; + regwidth = <&display>, "regwidth:0"; + buswidth = <&display>, "buswidth:0"; + debug = <&display>, "debug:0"; + rotate = <&display>, "rotate:0"; + bgr = <&display>, "bgr?"; + fps = <&display>, "fps:0"; + txbuflen = <&display>, "txbuflen:0"; + startbyte = <&display>, "startbyte:0"; + gamma = <&display>, "gamma"; + + reset_pin = <&display>, "reset-gpios:0=", <&gpio>, + <&display>, "reset-gpios:4", + <&display>, "reset-gpios:8=1"; /* GPIO_ACTIVE_LOW */ + dc_pin = <&display>, "dc-gpios:0=", <&gpio>, + <&display>, "dc-gpios:4", + <&display>, "dc-gpios:8=0"; /* GPIO_ACTIVE_HIGH */ + led_pin = <&display>, "led-gpios:0=", <&gpio>, + <&display>, "led-gpios:4", + <&display>, "led-gpios:8=0"; /* GPIO_ACTIVE_HIGH */ + }; +};