Message ID | 1512943833-31352-2-git-send-email-david@lechnology.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sun, Dec 10, 2017 at 11:10 PM, David Lechner <david@lechnology.com> wrote: > This adds a new device tree binding for Sitronix ST7735R display panels, > such as the Adafruit 1.8" TFT. > > Signed-off-by: David Lechner <david@lechnology.com> > Acked-by: Rob Herring <robh@kernel.org> (...) > Limor brought up an interesting point in an off-list discussion. The > same controller can be wired to the same LCD in different ways. This is > evident in the fbftf drivers in staging. There is an "adafruit18" and an > "adafruit18_green" in fbftf_devices.c where apparently, two otherwise > identical displays were wired slightly differently at the factory so that > on one, the on-board GRAM word 0 does not correspond to pixel 0,0 on the > LCD. It requires a special offset to the GRAM starting address in order to > have the image displayed correctly. > > Additionally, fbtft supports a SainSmart 1.8" TFT [3] that uses the same > controller, but it appears that these have different gamma curves (perhaps > they use different LCDs?). The available pins are exactly the same as the > Adafruit display though. This discussion came up in relation to the Ilitek ILI9322 bindings, here are some links: https://marc.info/?l=dri-devel&m=150300267811979&w=2 https://marc.info/?l=devicetree&m=150438702909506&w=2 https://marc.info/?l=dri-devel&m=150628542603682&w=2 The last mail from Rob clearly indicates that he doesn't like this kind of open-ended configuration data stashed up in the DTS. > There was a binding acked recently for the LCD on a D-Link DIR-685 Wireless > N Storage Router [8]. This uses the compound compatible string of "dlink, > dir-685-panel", "ilitek,ili9322". If we want to try to keep things > consistent, perhaps I should be adopting this pattern as well? I think so. > And perhaps > it would be better to use the better known vendor name instead of the > obscure vendors from the datasheets that I have found? For example, > "adafruit,618" "sitronix,st7735r" instead of "jianda,jd-t18003-t01"? I don't know this, just that it should be: "vendor,specific-system-config", "vendor,ip-part"; Yours, Linus Walleij
Den 10.12.2017 23.10, skrev David Lechner: > This adds a new device tree binding for Sitronix ST7735R display panels, > such as the Adafruit 1.8" TFT. > > Signed-off-by: David Lechner <david@lechnology.com> > Acked-by: Rob Herring <robh@kernel.org> > --- > > v2: changes: > * None, but... > > I'm wondering about my choice of compatible here. I chose the name > "sitronix,st7735r-jd-t18003-t01" to mean a Sitronix ST7735R controller > connected to a JD-T18003-T01 LCD screen. > > What I am actually using, though, is an Adafruit 1.8" TFT breakout [1]. It > has some additional electronics which just pass through signals to the > controller. The bare display is also available from Adafruit [2]. > > Limor brought up an interesting point in an off-list discussion. The > same controller can be wired to the same LCD in different ways. This is > evident in the fbftf drivers in staging. There is an "adafruit18" and an > "adafruit18_green" in fbftf_devices.c where apparently, two otherwise > identical displays were wired slightly differently at the factory so that > on one, the on-board GRAM word 0 does not correspond to pixel 0,0 on the > LCD. It requires a special offset to the GRAM starting address in order to > have the image displayed correctly. > > Additionally, fbtft supports a SainSmart 1.8" TFT [3] that uses the same > controller, but it appears that these have different gamma curves (perhaps > they use different LCDs?). The available pins are exactly the same as the > Adafruit display though. > > As I am writing this, I am looking at the JD-1800 datasheet [4] again for > the Adafruit display and I see that in addition to specifying the size of > the display it says "IC: ST7735B". So, I am starting to think that "jianda, > jd-t18003-t01" would be a better compatible string since it tells you > everything you need to know about this display. Just using the controller > name by itself ("sitronix,st7735r") is not enough because it does not tell > you things like the number of pixels or the physical size of the LCD. > > What I am not sure about, though, is how to represent the Adafruit display > that requires the offset in the device tree. Would it be a different > compatible string or should we add an extra property to indicate this > quirk? > > On a related note, I recently submitted device tree bindings for a similar > SPI display breakout board [5][6]. After more digging though, I found a > datasheet for that display [7], so I'm thinking a compatible string of > "vot,v220hf01a-t" would be better by the same reasoning above. > > And, I know this is getting long, but one more thing... > > There was a binding acked recently for the LCD on a D-Link DIR-685 Wireless > N Storage Router [8]. This uses the compound compatible string of "dlink, > dir-685-panel", "ilitek,ili9322". If we want to try to keep things > consistent, perhaps I should be adopting this pattern as well? And perhaps > it would be better to use the better known vendor name instead of the > obscure vendors from the datasheets that I have found? For example, > "adafruit,618" "sitronix,st7735r" instead of "jianda,jd-t18003-t01"? I vote for this: "jianda,jd-t18003-t01" The display controller is part of the panel so you can't have this panel with another controller. If the Adafruit #358 panel with breakout board did something that made it incompatible with a bare jianda panel, then it would make sense to call it "adafruit,something". I don't know the full story about the green tab version of the display with the offset problem, but it's a long time ago and I don't think it's worth it to support it. It would require a custom dirtyfb callback. There's also a black tab version of this Adafruit display with the colors reversed BGR/RGB, but that also is some time back now. I guess they all had different panels with their own names which would result in different compatible strings. This means that the end user would have to know excatly which version of the Adafruit display they're using to know which compatible string to use. If the SPI MISO signal had been routed out from the panel, it would have been possible to make a driver just with a "adafruit,tft18" comaptible and let the driver ask the controller which version it is. Assuming that info is available in the controller. Not all panel vendors bother to do that. The "mi,mi0283qt" panel for instance is used on the Adafruit PiTFT 28 and the Watterott rpi-display, making it possible to use the same compatible for both displays and also for anyone buying that panel from some other source. One last thing, if the panel is made specifically for Adafruit and not available from any other source, then it makes sense to call it something "adafruit". Noralf. > [1]: https://www.adafruit.com/product/358 > [2]: https://www.adafruit.com/product/618 > [3]: https://www.sainsmart.com/products/1-8-tft-spi-lcd-screen-with-microsd-socket > [4]: http://www.adafruit.com/datasheets/JD-T1800.pdf > [5]: https://patchwork.freedesktop.org/patch/187038/ > [6]: https://patchwork.freedesktop.org/patch/189233/ > [7]: http://www.hotmcu.com/22-176x220-tft-lcd-with-spi-interface-p-316.html > [8]: https://patchwork.freedesktop.org/patch/191462/ > > .../bindings/display/sitronix,st7735r.txt | 35 ++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > create mode 100644 Documentation/devicetree/bindings/display/sitronix,st7735r.txt > > diff --git a/Documentation/devicetree/bindings/display/sitronix,st7735r.txt b/Documentation/devicetree/bindings/display/sitronix,st7735r.txt > new file mode 100644 > index 0000000..bbb8ba6 > --- /dev/null > +++ b/Documentation/devicetree/bindings/display/sitronix,st7735r.txt > @@ -0,0 +1,35 @@ > +Sitronix ST7735R display panels > + > +This binding is for display panels using a Sitronix ST7735R controller in SPI > +mode. > + > +Required properties: > +- compatible: "sitronix,st7735r-jd-t18003-t01" > +- dc-gpios: Display data/command selection (D/CX) > +- reset-gpios: Reset signal (RSTX) > + > +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: > +- rotation: panel rotation in degrees counter clockwise (0,90,180,270) > +- backlight: phandle of the backlight device attached to the panel > + > +Example: > + > + backlight: backlight { > + compatible = "gpio-backlight"; > + gpios = <&gpio 44 GPIO_ACTIVE_HIGH>; > + } > + > + ... > + > + display@0{ > + compatible = "sitronix,st7735r-jd-t18003-t01"; > + reg = <0>; > + spi-max-frequency = <32000000>; > + dc-gpios = <&gpio 43 GPIO_ACTIVE_HIGH>; > + reset-gpios = <&gpio 80 GPIO_ACTIVE_HIGH>; > + rotation = <270>; > + backlight = &backlight; > + };
diff --git a/Documentation/devicetree/bindings/display/sitronix,st7735r.txt b/Documentation/devicetree/bindings/display/sitronix,st7735r.txt new file mode 100644 index 0000000..bbb8ba6 --- /dev/null +++ b/Documentation/devicetree/bindings/display/sitronix,st7735r.txt @@ -0,0 +1,35 @@ +Sitronix ST7735R display panels + +This binding is for display panels using a Sitronix ST7735R controller in SPI +mode. + +Required properties: +- compatible: "sitronix,st7735r-jd-t18003-t01" +- dc-gpios: Display data/command selection (D/CX) +- reset-gpios: Reset signal (RSTX) + +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: +- rotation: panel rotation in degrees counter clockwise (0,90,180,270) +- backlight: phandle of the backlight device attached to the panel + +Example: + + backlight: backlight { + compatible = "gpio-backlight"; + gpios = <&gpio 44 GPIO_ACTIVE_HIGH>; + } + + ... + + display@0{ + compatible = "sitronix,st7735r-jd-t18003-t01"; + reg = <0>; + spi-max-frequency = <32000000>; + dc-gpios = <&gpio 43 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio 80 GPIO_ACTIVE_HIGH>; + rotation = <270>; + backlight = &backlight; + };