Hi Noralf,
On Tue, Nov 30, 2021 at 03:30:11PM +0100, Noralf Trønnes wrote:
Den 29.11.2021 10.39, skrev Maxime Ripard:
On Wed, Nov 24, 2021 at 04:03:07PM -0600, David Lechner wrote:
On 11/24/21 9:07 AM, Noralf Trønnes wrote:
I agree that it doesn't really fit in the DT either though. Noralf, what kind of data do we need to setup a display in fbtft? The init sequence, and maybe some enable/reset GPIO, plus some timing duration maybe?
There's one similar situation I can think of: wifi chips. Those also need a few infos from the DT (like what bus it's connected to, enable GPIO, etc) and a different sequence (firmware), sometimes different from one board to the other.
Could we have a binding that would be something like:
panel@42 { compatible = "panel-spi"; model = "panel-from-random-place-42"; enable-gpios = <&...>; }
And then, the driver would request the init sequence through the firmware mechanism using a name generated from the model property.
It allows to support multiple devices in a given system, since the firmware name wouldn't conflict, it makes a decent binding, and users can adjust the init sequence easily (maybe with a bit of tooling)
Would that work?
I really like this idea. An added benefit is that one driver can handle all MIPI DBI compatible controllers avoiding the need to do a patchset like this for all the various MIPI DBI controllers. The firmware will just contain numeric commands with parameters, so no need for different controller drivers to handle the controller specific command names.
The following is a list of the MIPI DBI compatible controllers currently in staging/fbtft: ili9341, hx8357d, st7735r, ili9163, ili9163, ili9163, ili9163, ili9486, ili9481, tinylcd, s6d02a1, s6d02a1, hx8340bn, ili9340.
The compatible needs to be a bit more specific though since there are 2 major SPI protocols for these display: MIPI DBI and the one used by ILI9325 and others.
The full binding would be something like this:
panel@42 { compatible = "panel-mipi-dbi-spi"; model = "panel-from-random-place-42";
/* The MIPI DBI spec lists these powers supply pins */ vdd-supply = <&...>; vddi-supply = <&...>;
/* Optional gpio to drive the RESX line */ reset-gpios = <&...>;
/* * D/CX: Data/Command, Command is active low * Abcense: Interface option 1 (D/C embedded in 9-bit word) * Precense: Interface option 3 */ dc-gpios = <&...>;
/* * If set the driver won't try to read from the controller to see * if it's already configured by the bootloader or previously by * the driver. A readable controller avoids flicker and/or delay * enabling the pipeline. * * This property might not be necessary if we are guaranteed to * always read back all 1's or 0's when MISO is not connected. * I don't know if all setups can guarantee that. */ write-only;
/* Optional ref to backlight node */ backlight = <&...>; }
It looks decent to me. We'll want Rob to give his opinion though, but it looks in a much better shape compared to what we usually have :)
Many of these controllers also have a RGB interface option for the pixels and only do configuration over SPI. Maybe the compatible should reflect these 2 options somehow?
I think we'll want a "real" panel for RGB, with its own compatible though. We have a few of these drivers in tree already, so it's better to remain consistent.
Maxime