staging/fbtft: Backward Device Tree compatibility in a drm version

Noralf Trønnes noralf at tronnes.org
Wed Jan 4 17:14:57 UTC 2017


Hi,

I'm working on a drivers/gpu/drm version of drivers/staging/fbtft which
are drivers for tiny, usually SPI connected, displays. Now I'm wondering
if I can be backwards compatible and support Device Trees written for the
fbtft drivers. The main obstacle as I understand it, is the init property
which are values to be written to the controller registers to support a
different panel with the same controller. It even has encoded values for
delays... My understanding is that this is not accepted.
It's in fact a display panel description in the form of register values
and delays.

Here is what a binding doc would look like for one of the fbtft drivers:

* Samsung S6D02A1 Framebuffer Driver

Required properties:
   - compatible: Should be "samsung,s6d02a1".

The node for this driver must be a child node of a SPI controller, hence
all mandatory properties described in ../spi/spi-bus.txt must be specified.

Optional properties:
- dc-gpios:    D/C pin used with the 4-wire 8-bit data serial interface mode
- reset-gpios:    Reset pin
- led-gpios:    Backlight control
- width:    Panel width in pixels
- height:    Panel height in pixels
- rotate:    Panel rotation in degrees counter clockwise (0,90,180,270)
- bgr:        Panel is wired as BGR565 instead of RGB565
- buswidth:    Bit width of the bus, in the case of SPI: 8 (4-wire) or 9 
(3-wire) bits.
- txbuflen:    Size of transfer buffer. Used for little-big endian 
conversion.
- debug:    Control debug output to the kernel log
- init:        Panel initialization sequence overriding the driver default.
         Values OR'ed with:
         0x1000000 - Write the following values to this register.
         0x2000000 - Delay in milliseconds

Example:
mz61581: mz61581 at 0{
     compatible = "samsung,s6d02a1";
     reg = <0>;
     spi-max-frequency = <128000000>;
     spi-cpol;
     spi-cpha;

     width = <320>;
     height = <480>;
     rotate = <270>;
     bgr;
     buswidth = <8>;
     txbuflen = <32768>;

     reset-gpios = <&gpio 15 0>;
     dc-gpios = <&gpio 25 0>;
     led-gpios = <&gpio 18 0>;

     init = <0x10000b0 00
         0x1000011
         0x20000ff
         0x10000b3 0x02 0x00 0x00 0x00
         0x10000c0 0x13 0x3b 0x00 0x02 0x00 0x01 0x00 0x43
         0x10000c1 0x08 0x16 0x08 0x08
         0x10000c4 0x11 0x07 0x03 0x03
         0x10000c6 0x00
         0x10000c8 0x03 0x03 0x13 0x5c 0x03 0x07 0x14 0x08 0x00 0x21 
0x08 0x14 0x07 0x53 0x0c 0x13 0x03 0x03 0x21 0x00
         0x1000035 0x00
         0x1000036 0xa0
         0x100003a 0x55
         0x1000044 0x00 0x01
         0x10000d0 0x07 0x07 0x1d 0x03
         0x10000d1 0x03 0x30 0x10
         0x10000d2 0x03 0x14 0x04
         0x1000029
         0x100002c>;

     /* This is a workaround to make sure the init sequence slows down 
and doesn't fail */
     debug = <3>;
};


Noralf.



More information about the dri-devel mailing list