overlays: Add ssd1306 overlay for OLED display
authorPhil Elwell <phil@raspberrypi.org>
Mon, 21 Jan 2019 21:17:27 +0000 (21:17 +0000)
committerpopcornmix <popcornmix@gmail.com>
Mon, 13 May 2019 23:08:17 +0000 (00:08 +0100)
See: https://github.com/raspberrypi/firmware/issues/1098

Signed-off-by: mincepi <mincepi@gmail.com>
arch/arm/boot/dts/overlays/Makefile
arch/arm/boot/dts/overlays/README
arch/arm/boot/dts/overlays/ssd1306-overlay.dts [new file with mode: 0644]

index 38046ef..5c07ff0 100644 (file)
@@ -135,6 +135,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
        spi2-1cs.dtbo \
        spi2-2cs.dtbo \
        spi2-3cs.dtbo \
+       ssd1306.dtbo \
        superaudioboard.dtbo \
        sx150x.dtbo \
        tc358743.dtbo \
index ed582bc..707ea49 100644 (file)
@@ -1950,6 +1950,37 @@ Params: cs0_pin                 GPIO pin for CS0 (default 43 - BCM SPI2_CE0).
                                 is 'okay' or enabled).
 
 
+Name:   ssd1306
+Info:   Overlay for activation of SSD1306 over I2C OLED display framebuffer.
+Load:   dtoverlay=ssd1306,<param>=<val>
+Params: address                 Location in display memory of first character.
+                                (default=0)
+        width                   Width of display. (default=128)
+        height                  Height of display. (default=64)
+        offset                  virtual channel a. (default=0)
+        normal                  Has no effect on displays tested. (default=not
+                                set)
+        sequential              Set this if every other scan line is missing.
+                                (default=not set)
+        remapped                Set this if display is garbled. (default=not
+                                set)
+        inverted                Set this if display is inverted and mirrored.
+                                (default=not set)
+
+        Examples:
+        Typical usage for 128x64 display: dtoverlay=ssd1306,inverted
+
+        Typical usage for 128x32 display: dtoverlay=ssd1306,inverted,sequential
+
+        i2c_baudrate=400000 will speed up the display.
+
+        i2c_baudrate=1000000 seems to work even though it's not officially
+        supported by the hardware, and is faster still.
+
+        For more information refer to the device datasheet at:
+        https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
+
+
 Name:   superaudioboard
 Info:   Configures the SuperAudioBoard sound card
 Load:   dtoverlay=superaudioboard,<param>=<val>
diff --git a/arch/arm/boot/dts/overlays/ssd1306-overlay.dts b/arch/arm/boot/dts/overlays/ssd1306-overlay.dts
new file mode 100644 (file)
index 0000000..2cf677d
--- /dev/null
@@ -0,0 +1,36 @@
+// Overlay for SSD1306 128x64 and 128x32 OLED displays
+/dts-v1/;
+/plugin/;
+
+/ {
+    compatible = "brcm,bcm2718";
+
+    fragment@0 {
+       target = <&i2c1>;
+       __overlay__ {
+           status = "okay";
+
+           #address-cells = <1>;
+           #size-cells = <0>;
+
+           ssd1306: oled@3c{
+               compatible = "solomon,ssd1306fb-i2c";
+               reg = <0x3c>;
+               solomon,width = <128>;
+               solomon,height = <64>;
+               solomon,page-offset = <0>;
+           };
+       };
+    };
+
+    __overrides__ {
+       address = <&ssd1306>,"reg:0";
+       width = <&ssd1306>,"solomon,width:0";
+       height = <&ssd1306>,"solomon,height:0";
+       offset = <&ssd1306>,"solomon,page-offset:0";
+       normal = <&ssd1306>,"solomon,segment-no-remap?";
+       sequential = <&ssd1306>,"solomon,com-seq?";
+       remapped = <&ssd1306>,"solomon,com-lrremap?";
+       inverted = <&ssd1306>,"solomon,com-invdir?";
+    };
+};