mi0283qt driver issues

Noralf Trønnes noralf at tronnes.org
Wed Apr 18 10:22:06 UTC 2018


Den 16.04.2018 18.44, skrev Tom Callaway:
> Noralf,
>
> Thanks for the guidance on how to use the mi0283qt driver to run the
> panel included in the Adafruit 2.8" capacitive PiTFT Plus (running on
> top of a Raspberry Pi 3).
>
> I am working with 4.16.0 (Fedora 28). I can get the driver to load, and
> have console output appearing on it, but I have run into some issues
> that I am unclear how to resolve.
>
> Specifically:
>
> 1) If I change the rotation value to anything other than 90 (0x5a), the
> screen output from the console is corrupt.

It turns out that the reason for this is that the pitft has a hw reset
circuit that resets only on power-on and not on each reboot through a
gpio like rpi-display does.

When the driver is enabling the display pipeline it checks if the
controller is already initialized, and skips setup if it is. This means
that the rotation value is only applied after power-on on the pitft and
not on each reboot.

Turning off the "display" before rebooting should also work:

$ # change rotation value
$ echo "28" | sudo tee /sys/kernel/debug/dri/0/command
$ sudo reboot

Rotation/mirror/flip/bgr is controlled by commmand 0x36. The current
value is returned by command 0x0b:

$ sudo cat /sys/kernel/debug/dri/0/command | grep "0b:"
0b: f8

So to fix this in the driver the rotation value has to always be applied
regardless of display "on" state. This can be done by moving the rotation
code in mi0283qt_enable() down after the out: label.

> 2) The resolution is set to 240x320, not the 320x240 that I expected.

mi0283qt doesn't match fb_ili9340 when it comes to rotation.
rotation=90 on mi0283qt is 240x320
rotate=90 on fb_ili9340 is 320x240

> 3) pygame cannot run a display.set_mode call, always returning:
>
> No video mode large enough for 240x320
>
> When I run this python code:
>
>     import os
>     import pygame
>     os.putenv('SDL_VIDEODRIVER', 'fbcon')
>     os.putenv('SDL_FBDEV'      , '/dev/fb1')
>     pygame.init()
>     list = pygame.display.list_modes()
>     print "List of modes: %s" % (list)
>
> It shows an empty set ("List of modes: []").

I couldn't find any source code for the sdl fbcon driver, so I don't know
how it queries for modes.

Noralf.

>
> Do you have any advice on how to resolve these issues?
>
> Thanks in advance,
>
> ~tom
>
> For debugging purposes:
>
> I have the following device tree entry for the device (taken from dtc
> -Ifs /proc/device-tree):
>
> pitft at 0 {
>          compatible = "multi-inno,mi0283qt";
>          buswidth = <0x8>;
>          rotation = <0x5a>;
>          bgr;
>          fps = <0x1e>;
>          reg = <0x0>;
>          pinctrl-0 = <0x10>;
>          debug = <0x0>;
>          dc-gpios = <0xf 0x19 0x0>;
>          spi-max-frequency = <0x3d09000>;
>          pinctrl-names = "default";
> };
>
> *** modetest output ***
>
> [root at localhost ~]# modetest -M "mi0283qt" -c
> Connectors:
> id	encoder	status		name		size (mm)	modes	encoders
> 28	31	connected	Virtual-1      	43x58		1	31
>    modes:
> 	name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
>    240x320 0 240 240 240 240 320 320 320 320 1 flags: ; type: preferred,
> driver
>    props:
> 	2 DPMS:
> 		flags: enum
> 		enums: On=0 Standby=1 Suspend=2 Off=3
> 		value: 0
> 	5 link-status:
> 		flags: enum
> 		enums: Good=0 Bad=1
> 		value: 0
> 	6 non-desktop:
> 		flags: immutable range
> 		values: 0 1
> 		value: 0



More information about the dri-devel mailing list