Verdin DSI to LVDS adapter Atium Designer PCB project

Hello,
I am working on the hardware implementation of a new LVDS display.
Using the available PCB design in Altium Designer, I noticed a parameter in the Layer Stack Manager. It concerns the internal dielectric layer between the internal copper layers. This parameter is the DK value, which refers to the dielectric constant of the insulator. In the design, its value is set to 0. Altium Designer detects this as an error because the value cannot be lower than 1. The DK parameter is related to the impedance matched for high-speed LVDS signals.

Was the DK value of 0 intentionally set in this design?

Best regards
Sylwester

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello Sylwester,

Thank you for reaching out with your question. The DK (dielectric constant) value is indeed a crucial parameter in PCB design, particularly for high-speed signals like LVDS, as it plays a significant role in impedance matching. A DK value of 0 is not physically meaningful and is likely an error in the design setup. Typically, the DK value should be greater than 1, which reflects the properties of the dielectric material used between the copper layers.

In your Altium Designer project, the DK value set to 0 should be corrected to ensure proper impedance matching and signal integrity for your LVDS display. I recommend checking the design documentation or consulting with the original designer to determine the appropriate DK value for the dielectric material specified in your project.

I hope this helps you move forward with your design. If you have any more questions, feel free to ask.

Best regards,
Toradex AI Assistant

Please, also check if these links can help you solve your problem:

https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/qoriq-grl/9543/2/High_speed_interfaces_layout__layout_design_guide.pdf.

Dear @silvo,

Thank you for bringing this to our attention. I have contacted our Hardware team and they are looking into it. We are unsure of how this has occurred and the public packages will be fixed. In the meantime I would urge you to please use 4.2.

Best regards,
Collin

Dear Collin
Tank you for the answer, Have you contected with your engineer team ?
what do you mean by 4.2, is it the hardware version. The existing version of the adapter is 1.1
Best regards
Sylwester

Dear @silvo,

I have indeed contacted our developer team, but they have not been able to alter the public package yet. With 4.2 we meant the value you should use as the DK parameter. This was told to me by our lead in R&D.
Hope this helped clear up the mystery around the 4.2 and apologies for the confusion. :slight_smile:

Best regards,
Collin

Dear Collin,

I designed the PCB according to the available design data, regardless of the DK parameter value. I hope that some engineer did this consciously and successfully launched this adapter.

Beat regards,
Sylwester

Dear Collin,

I finally got the LVDS display working but have a problem with capacitive touch panel my display is Powertip PH102600T013-ZFC04.
Driver IC’s for CTP is ST5021-G3-1, ST5651CB-G3-1 can toradex handle the drivers?

Best regards
Sylwester

Hi @silvo,

what you listed seems to be the DSI controller on the display instead of the touch controller. Looking at the datasheet, which can be found here, I believe the touch controller to be ICNT8952. A driver to that could not be found on our side. It originates from this manufacturer. Chiptone provides two drivers in the kernel. Them being:

  • drivers/input/touchscreen/chipone_icn8318.c
  • drivers/input/touchscreen/chipone_icn8505.c

Only the first one supports device tree though. You could see, if this driver might work for you with the device tree node looking something like this:

      touchscreen@48 {
            compatible = "chipone,icn8318";
            reg = <0x48>;
        };

The documentation can be found under documentation/devicetree/bindings/input/touchscreen/chipone,icn8318.yaml inside the kernel. Should this not work for you I would suggest contacting the display manufacturer. From time to time, it happens that they can provide the necessary driver.

Best regards,
Collin

Dear Collin,

I have forwarded the matter to my colleague, Daniel.L, a software engineer. Below, I am attaching his question, as he wanted to join this thread but was blocked:

How can we enable this module on Torizon OS 7.1.0? I guess we need to compile the kernel modules from source files, although this solution unfortunately didn’t work for me.

Could you guide us through this process, or does your team have the capabilities to check it for us?

Best regards,
Daniel

Dear @silvo,

Thank you for making us aware of the previous message. If you use the driver as an external module you can use the Torizon Core Builder, for which instructions can be found at our developer page. This should then fetch the correct Kernel version.

Alternatively you could also build everything with Yocto, for which instructions can be found under this developer page. In this case you can make changes as a “regular” kernel patch.

Best regards,
Collin

We tried compiling the kernel/modules and then deploying the modules to the board according to the Build Linux Kernel from Source Code documentation on your site. Unfortunately, the deployed modules returned errors with either the vermagic version failure or with “chipone_icn8318: .gnu.linkonce.this_module section size must match the kernel’s built struct module size at run time” (I compiled the modules with the same kernel version as the torizon OS kernel). I understand that there is also the possibility of building an TorizonOS image with Yocto but that is something that we don’t really have the experience to deal with and what we wanted to avoid from the start. Is there any other way you can support us through this?
Best ragards
Sylwester

Dear @silvo,

I am sorry to hear about the trouble you are facing. I think something might have been jumbled up during the inclusion of the module however. I presume that the following process might help to actually build it:

make mrproper
make <defconfig> 
make Image.gz
make modules
MODULES_INSTALL_PATH=modules make modules_install

The reason behind the steps I mentioned above is that I believe that the modules might have been installed into an incorrect kernel version, which would explain the errors you mentioned.

Best regards,
Collin

Dear Collin,

The issue persists unfortunately.

“uname -r” on the target board gives “6.6.84-rt52-7.2.0-devel-gb3ce92963d04” (I use the monthly TorizonOS version 7.2.0 but the same happened to me on the 7.1.0 stable version)

This is what I do on my Ubuntu 22.04 Host Virtual Machine

  1. I prepare the machine for Cross-Compilation 64 bit Arm (“Prepare the Host Machine for Cross-Compilation” in the docs)
  2. I install the required tools and dependencies.
  3. I pull the “linux-toradex” repo and switch to branch “toradex_ti-linux-6.6.y”
  4. I copy the config.gz file from the target board to Ubuntu and rename it to .config in the linux-toradex dir (the kernel version in the Makefile is 6.6.84).
  5. I do “make menuconfig” and enable the module for /input/touchscreen/chipone_icn8318
  6. I do “make -j$(nproc) modules”
  7. After that I do
    $ mkdir modules
    $ export INSTALL_MOD_PATH=modules
    $ make modules_install
    $ cd modules
    $ tar -czf …/modules.tar.gz .
  8. “scp …/modules.tar.gz torizon@:/home/torizon”
  9. On the target board I do “sudo su” → “cd ~/” → “mv /home/torizon/modules.tar.gz ~/” → “tar -xzf modules.tar.gz -C /”
  10. Now I have two versions in /lib/modules so I rename the new modules directory to match the “uname -r” and run “depmod”.
  11. When I try to “sudo modprobe chipone_icn8318” I get the following
    [ 193.379775] chipone_icn8318: disagrees about version of symbol module_layout
    [ 3129.733518] chipone_icn8318: disagrees about version of symbol module_layout

Best regards
Sylwester

Dear @silvo,

There might be a few issues here. Looking at your previous message we believe that steps 1 - 3 are fine. From then on I think you should probably proceed as follows:

  • git checkout b3ce92963d04
  • Copy config.gz and unzip it: zcat config.gz > .config
  • export ARCH=arm64
  • export CROSS_COMPILE=aarch64-linux-gnu-
  • export LOCALVERSION=“-rt52-7.2.0-devel-gb3ce92963d04”
  • export INSTALL_MOD_PATH=modules
  • make menuconfig
    • Enable chipone_icn8318 driver
    • Make sure LOCALVERSION_AUTO is not set
    • Make sure LOCALVERSION is set to empty ()
  • make -j$(nproc) modules && make modules_install
  • cd modules
  • Make sure that the directory in the modules directory is the same as what uname -r on the module gives. If it is different, make sure you checked out the correct version and that export LOCALVERSION=“…” used the correct string
  • fakeroot tar -czf …/modules.tar.gz
  • Untar the modules on the target
  • reboot

Please let me know how you fare with this process.
Best regards,
Collin

Dear @collin.tx ,

Your instructions did work as intended, we’ve managed to enable the chipone_icn8318 module on the system. We also added an entry to the device tree as you’ve suggested earlier with the i2c part looking like this

/* Verdin I2C_1 */
&main_i2c1 {
	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";
 
	lvds_ti_sn65dsi84: bridge@2c {
		compatible = "ti,sn65dsi84";
		reg = <0x2c>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_dsi1_bkl_en>;
		/* Verdin Verdin DSI_1_INT# (SN65DSI84 IRQ, SODIMM 17, unused) */
		/* Verdin DSI_1_BKL_EN (SODIMM 21) */
		enable-gpios = <&main_gpio0 30 GPIO_ACTIVE_HIGH>;
 
		ports {
			#address-cells = <1>;
			#size-cells = <0>;
 
			port@0 {
				reg = <0>;
 
				dsi84_in: endpoint {
					data-lanes = <1 2 3 4>;
					remote-endpoint = <&mipi_dsi_bridge1_out>;
				};
			};
 
			port@2 {
				reg = <2>;
 
				lvds_out_panel: endpoint {
					remote-endpoint = <&panel_in_lvds>;
				};
			};
		};
	};
 
	chipone_icn8318: touchscreen@48 {
		compatible = "chipone,icn8318";
		reg = <0x48>;
		/*
		 * Verdin DSI_1_INT#
		 * (TOUCH_INT#, SODIMM 17, also routed to SN65DSI84 IRQ albeit currently unused)
		 */
		interrupt-parent = <&main_gpio1>;
		interrupts = <49 IRQ_TYPE_EDGE_FALLING>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_dsi1_int>, <&pinctrl_i2s_2_bclk_gpio>;
		/* Verdin I2S_2_BCLK (TOUCH_RESET#, SODIMM 42) */
		reset-gpios = <&main_gpio0 35 GPIO_ACTIVE_LOW>;
		wake-gpios = <&main_gpio0 36 GPIO_ACTIVE_HIGH>;
		touchscreen-size-x = <1024>;
		touchscreen-size-y = <600>;
	};
};

Unfortunately, the touch still doesn’t work. We’ve also tried a similar case with a different panel that uses the ILI2132 driver and it worked correctly when we followed a different thread from here Riverdi ILI2132A Touch Screen Driver on Colibri-IMX8QXP & Iris 2.0 - Technical Support - Toradex Community.

The dmesg returned a line
input: icn8318 as /devices/platform/bus@f0000/20010000.i2c/i2c-1/1-0048/input/input1

And when I used evtest on /dev/input/event1 it gave me details on the chipone driver

Input driver version is 1.0.1
Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
Input device name: "icn8318"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 330 (BTN_TOUCH)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value      0
      Min        0
      Max     1023
    Event code 1 (ABS_Y)
      Value      0
      Min        0
      Max      599
    Event code 47 (ABS_MT_SLOT)
      Value      0
      Min        0
      Max        4
    Event code 53 (ABS_MT_POSITION_X)
      Value      0
      Min        0
      Max     1023
    Event code 54 (ABS_MT_POSITION_Y)
      Value      0
      Min        0
      Max      599
    Event code 57 (ABS_MT_TRACKING_ID)
      Value      0
      Min        0
      Max    65535
Properties:
  Property type 1 (INPUT_PROP_DIRECT)
Testing ... (interrupt to exit)

The i2cdetect -y -r 1 register 48 changed to UU after applying the correct devicetree

Maybe there is something I’ve missed in the i2c section of the devicetree?