Search by Tags

First Steps with Capacitive Touch Display 7 Inch Parallel

Applicable for

Compare with Revision

Subscribe for this article updates


This article provides information on how to start working with the Capacitive Touch Display 7 Inch Parallel, which includes how to set up the hardware (wiring) and install the necessary drivers for a touch demo.

Getting Started

Connections on Ixora, Aster

This topic provides pin connection details in regards to connecting the Capacitive Touch Display 7 Inch Parallel to any of our carrier boards. Please refer to the below images for connecting the display to our Ixora Carrier Board(V1.1 and above, for V1.0 the Capacitive Touch Adapter is needed) & Aster Carrier Board. At present these carrier boards support a Capacitive Touch Interface Connector with our Capacitive Touch Display 7 Inch Parallel.

Connections on Iris, Viola, Colibri Evautation Board, Apalis Evaluation board

For other carrier boards or evaluation boards like Iris, Viola, Colibri Evaluation Board, Apalis Evaluation board, one can use the Capacitive Touch Adapter as capacitive touch connector not yet available. All connection details are available in the Capacitive Touch Adapter datasheet.


Multi-Touch Driver Installation

Modules (Colibri / Apalis) T20 VF50 VF61 T30 iMX6 iMX7 PXA
Windows Embedded CE 6.0 (CE6) [1] ok ok ok -- -- -- [3]
Windows Embedded Compact 7 (CE7) [2] ok ok ok ok ok ok --
Windows Embedded Compact 2013 (CE8) [2] -- ok ok ok ok ok --

Download touch demo application for the respective OS below:

TouchDemo -- here here

Note :
[1] Supports single-touch and gestures.
[2] Supports multi-touch, single-touch, and gestures.
[3] The installer can be installed on WinCE6 PXA modules. The Hwadapt application doesn't support PXAs. It would need porting to the legacy library to make it work for PXA. Please refer to the Capacitive Multi-Touch Solution Source Code for more information about the Hwadapt application.

Registry Settings

Registry Settings: After installing the multi-touch driver, current settings in the registry can be viewed, exported, and edited with the help of registry editor on the module:


Display Settings: Click here.

Display Rotation: Click here.

Multi-Touch Hardware Adaption: The current hardware adaption (connection to the carrier board) is stored at:


Information about the registry settings of the hardware adaption can be found on Capacitive Multi-Touch Solution.

Troubleshooting Touch Panel

After the hardware setup, driver installation, and registry settings are completed, the following steps and tools will help to bring up the device:

  • The display should show the Windows CE desktop without any border, flicker, etc. Click here for more details including, checking the documents for general functionality, multi-touch hardware adaption application.
  • In rare cases, if you experience I2C failures of Vybrid Modules with connected touch, reducing pull-up resistor value may be of valuable help. 1.8K pull-up can give the better result.

Colibri iMX7

Reset and Interrupt lines:

  • In case of any issue with reset or interrupt lines, use GPIO Config Tool to monitor and control reset & interrupt pins (SODIMM or MXM3 pin).

I2C Bus (SDA, SCL signals):

  • In case of any issue, run the I2C demo tool to scan the I2C addresses which is part of the package in the Toradex CE libraries and code samples. The tool shows the I2C addresses of all devices on the I2C bus. One of these addresses should be the address of the touch controller. (Please note that the shown addresses are the addresses of the devices on the I2C bus and not the address set in the registry.)
  • Please check if the Reset pin is in its inactive state (level is 1) so that the touch controller of the display can run.

Embedded Linux

Starting with our Embedded Linux BSPs 2.7b4 the Capacitive Touch Display 7 Inch Parallel without Capacitive Touch Adapter is supported in single-touch mode. However, while the lower stack (driver and X-Server) supports multi-touch, the desktop environment doesn't make use of it. Also, there is no gesture engine inside the driver or X server itself.

To configure the correct display resolution refer to the Display Output, Resolution and Timings (Linux) article.

Connection with Capacitive Touch Interface Connector

Exact procedure depends on a module in use.

Apalis\Colibri T30, Colibri T20

Starting with release 2.7b4 touch controller will be automatically detected and the kernel module loaded, no changes are necessary.

Apalis TK1

This module does not provide RGB interface required for the screen to work, therefore touch support was not enabled.

Apalis\Colibri IMX6, Colibri IMX7 and Colibri VF

Starting with release 2.7b4 the touch controller driver is compiled as a module, and device-tree includes a device node for the touch controller. By default the atmel_mxt_ts@4a node is in a disabled state, to enable it change the status property from

status = "disabled";


status = "okay";

See also Device Tree Customization.

To load the driver module use:

modprobe atmel_mxt_ts

To load the driver module automatically at boot time, creating a file atmel_mxt_ts.conf in the modules-load.d directory is required:

echo atmel_mxt_ts > /etc/modules-load.d/atmel_mxt_ts.conf

Connection with Capacitive Touch Adapter

Due to different wiring this needs further customisations of the device tree. For compatibility across carrier board/s PWM_B/PWM_C pins are used as pen down and reset interrupt, so the PWM functionality on these pins has to be disabled and the relevant GPIO functionality enabled and assigned to the touch driver.

Colibri iMX6

On i.MX6 based devices the two PWM instances need to be disabled:

diff --git a/arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts b/arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts
index 934d5927fbee..1e093f66305d 100644
--- a/arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts
+++ b/arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts
@@ -145,17 +145,11 @@
    atmel_mxt_ts: atmel_mxt_ts@4a {
        compatible = "atmel,maxtouch";
        pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_mxt_ts>;
+       pinctrl-0 = <&pinctrl_pcap_1>;
        reg = <0x4a>;
-       interrupt-parent = <&gpio2>;
-       interrupts = <24 IRQ_TYPE_EDGE_FALLING>;
-       /*
-        * Note: When the status is set to okay, to avoid pinmux
-        * conflict, one should remove the pinctrl_weim_cs1 and
-        * pinctrl_weim_cs2 pingroup from the weim pinctrl-0
-        * property or disable weim node.
-        */
-       status = "disabled";
+       interrupt-parent = <&gpio1>;
+       interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
+       status = "okay";

 #ifdef PCAP /* not standard pinout, disable PWM<B>, PWM<C> */
@@ -234,7 +228,7 @@

 #ifndef PCAP
 &pwm1 {
-   status = "okay";
+   status = "disabled";

@@ -248,7 +242,7 @@

 #ifndef PCAP
 &pwm4 {
-   status = "okay";
+   status = "disabled";

Colibri iMX7

On i.MX7 based devices the two PWM instances, PWM_B/PWM_C need to be disabled:

diff --git a/arch/arm/boot/dts/imx7-colibri-eval-v3.dtsi b/arch/arm/boot/dts/imx7-colibri-eval-v3.dtsi
index 217ddf0bcf75..b1805140642d 100644
--- a/arch/arm/boot/dts/imx7-colibri-eval-v3.dtsi
+++ b/arch/arm/boot/dts/imx7-colibri-eval-v3.dtsi
@@ -123,10 +123,11 @@
    /* Atmel maxtouch controller */
    atmel_mxt_ts: atmel_mxt_ts@4a {
        compatible = "atmel,maxtouch";
+       pinctrl-0 = <&pinctrl_gpiotouch>;
        reg = <0x4a>;
-       interrupt-parent = <&gpio2>;
-       interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
-       status = "disabled";
+       interrupt-parent = <&gpio1>;
+       interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
+       status = "okay";

    touch: touchrevf0710a@10 {
@@ -272,11 +273,11 @@

 &pwm2 {
-   status = "okay";
+   status = "disabled";

 &pwm3 {
-   status = "okay";
+   status = "disabled";

 &pwm4 {
@@ -334,7 +335,7 @@
        pinctrl_gpiotouch: touchgpios {
            fsl,pins = <
                MX7D_PAD_GPIO1_IO09__GPIO1_IO9      0x74
-               MX7D_PAD_GPIO1_IO10__GPIO1_IO10     0x14
+               MX7D_PAD_GPIO1_IO10__GPIO1_IO10     0x74

Colibri VF

On Vybrid based devices the two PWM instances, PWM_B/PWM_C need to be disabled:

diff --git a/arch/arm/boot/dts/vf-colibri-eval-v3.dtsi b/arch/arm/boot/dts/vf-colibri-eval-v3.dtsi
index dc703043d3ac..0ae6dc25b6ac 100644
--- a/arch/arm/boot/dts/vf-colibri-eval-v3.dtsi
+++ b/arch/arm/boot/dts/vf-colibri-eval-v3.dtsi
@@ -139,9 +139,9 @@
    atmel_mxt_ts: atmel_mxt_ts@4a {
        compatible = "atmel,maxtouch";
        reg = <0x4a>;
-       interrupt-parent = <&gpio2>;
-       interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
-       status = "disabled";
+       interrupt-parent = <&gpio0>;
+       interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
+       status = "okay";

    /* TouchRevolution Fusion 7 and 10 multi-touch controller */
@@ -165,10 +165,12 @@

 &pwm0 {
    status = "okay";
+   pinctrl-0 = <&pinctrl_pwm0_a>;

 &pwm1 {
    status = "okay";
+   pinctrl-0 = <&pinctrl_pwm1_d>;

 &reg_module_3v3 {

Colibri T30, Colibri T20

The preprocessor macro USE_CAPACITIVE_TOUCH_ADAPTER has to be defined in the board file.

E.g. for Colibri T30:

diff --git a/arch/arm/mach-tegra/board-colibri_t30.h b/arch/arm/mach-tegra/board-colibri_t30.h
index 94179b4..afb96a6 100644
--- a/arch/arm/mach-tegra/board-colibri_t30.h
+++ b/arch/arm/mach-tegra/board-colibri_t30.h
@@ -102,6 +102,10 @@
 #define TPS6591X_IRQ_BASE  STMPE811_IRQ_END
 #define TPS6591X_IRQ_END   (TPS6591X_IRQ_BASE + 18)

+/* Enable support for
+ * Capacitive Touch Adapter */
 int colibri_t30_regulator_init(void);

Backlight brightness

Apalis\Colibri T30, Colibri T20

By default display backligt brightness will be low. To get it to max. brightness run:

echo 1 > /sys/class/backlight/pwm-backlight/brightness

Brightness value can be any integer in <1,255>, where 1 => brightest, 255=> darkest