Capacitive Touch Display 7 Inch Parallel with panel-simple driver

I’m trying to use the Capacitive Touch Display 7 Inch Parallel with a Colibri iMX6 DualLite and a mainline kernel.

First I installed the Linux LXDE Image 2.8 and followed the [instructions to set up the display] (First Steps with Capacitive Touch Display 7" Parallel). Everything works as expected, therefore I assume the hardware is fine.

My ultimate goal is to run this SOM with a custom BSP and in particular with a kernel that is as close to
mainline as possible. I’m currently using mainline kernel 4.14 and added the display timings to the panel-simple driver as in [this commit] (linux-toradex.git - Linux kernel for Apalis and Colibri modules)

I also enabled the panel-simple driver in my kernel config (full config attached), replaced the panel node in imxdl-colibri-eval-v3.dts with

panel_rgb: panel {
	compatible = "logictechno,lt161010-2nhc";
	backlight = <&backlight>;
    power-supply = <&reg_3p3v>;
    
	port {
		lcd_panel_in: endpoint {
			remote-endpoint = <&lcd_display_out>;
		};
	};
};

and added the Atmel maXTouch controller to the device tree as described [here] (First Steps with Capacitive Touch Display 7" Parallel)

The touch controller works as expected. The display also works but it shows some strange artefacts similar to those reported [here] (color artifacts appearing on LCD - colibri iMX6 linux eglfs - Toradex Community):

[upload|EpTJjH14xQraBoCxmeX57UKVnrU=]

[upload|2V9eo9Ic1dWLrTjy625Bmr1vChw=]

I checked the timings in [panel-simple.c] (panel-simple.c « panel « drm « gpu « drivers - linux-toradex.git - Linux kernel for Apalis and Colibri modules) and they seem to match the [datasheet of the display] (https://docs.toradex.com/104497-7-inch-parallel-capacitive-touch-display-800x480-datasheet.pdf). I also tried many combinations of alternative .flags and .bus_flags without any effect.

Kernel output:

dmesg | grep display
[    1.384201] imx-drm display-subsystem: bound imx-ipuv3-crtc.2 (ops 0xc0845804)
[    1.391766] imx-drm display-subsystem: bound imx-ipuv3-crtc.3 (ops 0xc0845804)
[    1.399181] imx-drm display-subsystem: bound display@di0 (ops 0xc08459e0)
[    1.423735] imx-drm display-subsystem: bound 120000.hdmi (ops 0xc0846170)
[    1.512304] imx-drm display-subsystem: fb0:  frame buffer device
[    1.520760] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 1

Kernel version:

4.14.146-rt67

Has anyone ever used the Capacitive Touch Display 7 Inch Parallel with the panel-simple driver (instead of the MXC LCD driver with mode FusionF07A)? Do you have any idea what I need to change in order to get rid of this rendering artefacts?

Thanks,
Tobias

Hi @tobias and Welcome to the Toradex Community!

Could you provide your kernel version ( uname -a ) and your kernel config?

Has anyone ever used the Capacitive Touch Display 7 Inch Parallel with the panel-simple driver (instead of the MXC LCD driver with mode FusionF07A)? Do you have any idea what I need to change in order to get rid of this rendering artefacts?

Why do you want to do this?
What is your application?

Best regards,
Jaski

Hi @jaski.tx

I modified the original post and attached the full kernel config there. The kernel version is 4.14.146-rt67.

Why do you want to do this?
What is your application?

I want to use a mainline kernel (well, as close to mainline as possible) for various reasons and the mxc lcd driver is not part of Linux mainline. Since you [submitted the mentioned patch to upstream] (https://lore.kernel.org/patchwork/patch/1129985/) and [apparently use it for your Vybrid modules] (https://developer.toradex.com/knowledge-base/display-output-resolution-and-timings-linux#DRM_driver), I tought I could also use it for a Colibri iMX6DL.

Best regards,
Tobias

I don’t know about 4.14 but in our mainline 5.4 based kernel that works just fine and is e.g. used in the Toradex Easy Installer 2.0b4.

http://git.toradex.com/cgit/meta-toradex-bsp-common.git/tree/recipes-kernel/linux/linux-toradex-mainline_5.4.bb?h=thud

It was indeed a problem with the pixelclock polarity. The information about the pixelclock polarity (or more generic: the bus flags) is not passed from the panel-simple driver to the imx parallel-display driver. I didn’t test it with a recent 5.x kernel, but it seems that this is not yet fixed in mainline master branch.

To fix it, I changed the imx parallel-display driver so that it reads out the bus_flags from the panel-simple driver in imx_pd_bind(), inspired by [this patch series from @stefan.tx] (https://lkml.org/lkml/2018/9/12/910).

I close this question as it is an issue in upstream.

Perfect that you found a solution. Thanks for your feedback.