Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Frank Li <Frank.li@oss.nxp.com>
To: Leonardo Costa <leoreis.costa@gmail.com>
Cc: Frank.Li@nxp.com, s.hauer@pengutronix.de, kernel@pengutronix.de,
	festevam@gmail.com, robh@kernel.org, krzk+dt@kernel.org,
	conor+dt@kernel.org, imx@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Leonardo Costa <leonardo.costa@toradex.com>
Subject: Re: [PATCH 6/6] arm64: dts: freescale: imx8mp-verdin: Add Mezzanine with Toradex Display 10.1" LVDS V2
Date: Tue, 18 Aug 2026 13:53:27 -0500	[thread overview]
Message-ID: <aoSqJ7pHEgJ_RZmr@SMW015318> (raw)
In-Reply-To: <juuc4af7ndbajcl7gzf4tg5qz2q2j5tt3rvql4jbauradujrre@gc5nbdhhixaf>

On Tue, Aug 18, 2026 at 03:08:33PM -0300, Leonardo Costa wrote:
> On Thu, Aug 13, 2026 at 11:15:04AM -0500, Frank Li wrote:
> > On Thu, Aug 13, 2026 at 12:43:29PM -0300, Leonardo Costa wrote:
> > > On Thu, Aug 13, 2026 at 09:58:52AM -0500, Frank Li wrote:
> > > > On Thu, Aug 13, 2026 at 10:33:35AM -0300, Leonardo Costa wrote:
> > > > > From: Leonardo Costa <leonardo.costa@toradex.com>
> > > > >
> > > > > Add a device tree overlay enabling the Toradex Capacitive Touch Display
> > > > > 10.1" LVDS V2 on the Verdin Development Board with Verdin iMX8M Plus
> > > > > Mezzanine expansion board. The panel connects via the i.MX8M Plus LCDIF
> > > > > on the Mezzanine LVDS interface (J10). The panel is an Opto Logic
> > > > > SCX1001511GGC49 10.1" WXGA TFT LCD LVDS and the touch input is provided
> > > > > by an ILITEK ILI251x capacitive touch controller.
> > > > >
> > > > > Link: https://developer.toradex.com/hardware/accessories/displays/capacitive-touch-display-101inch-lvds
> > > > > Link: https://developer.toradex.com/hardware/verdin-som-family/add-ons/verdin-imx8m-plus-mezzanine
> > > > > Signed-off-by: Leonardo Costa <leonardo.costa@toradex.com>
> > > > > ---
> > > >
> > > > what's difference with Add Toradex Capacitive Touch Display 10.1" LVDS V2
> > > >
> > > > why not share one dtso?
> > > >
> > > > Frank
> > >
> > > Hi Frank,
> > >
> > > There are two main differences:
> > >
> > > 1. The mezzanine one uses different backlight controll pins, so here we
> > > use the 'backlight-mezzanine' node, instead of the 'backlight' one, used
> > > in the one without the mezzanine.
> > >
> > > 2. The touchscreen GPIO and interrupt pins are also different with the
> > > mezzanine board.
> >
> >
> > And there are for imx8mm
> > https://lore.kernel.org/imx/20260724-v1-verdin-imx8mm-dtbos-v2-3-9d7988bd76f6@toradex.com/
> >
> > https://lore.kernel.org/imx/sr26lfvwasgcosfzcf4ydtwxwjjutlio2yqpgxldatpzjo7e4y@77k7gefnjzvl/
> >
> > Any ways, it is too late for 7.3, we have enough time for 7.4 to discuss
> > work on optimization solution.
> >
> > If use nexus connectors, we can share one dtso now if there are not
> > clock settings.
>
> Hi Frank,
>
> I tried implementing the nexus connectors in imx8mp-verdin-wifi-dev.dts, and
> modify the Mezzanine overlay for the LVDS V2 display to do an initial test
> (diff with the changes at the end of the email). They worked partially, but it
> introduced an issue where the drivers come up much later.

Thank you for working on this.

> Before, the drivers
> relevant for the display (in this case, LCDIF and the touch controller
> specifically) came up at around ~8s. After introducing the nexus connector they
> come up at around ~20s, after the board has already booted (complete logs at
> https://paste.debian.net/hidden/81acfa7d):
>
>     [   21.008400] input: ILI210x Touchscreen as /devices/platform/soc@0/30800000.bus/30a30000.i2c/i2c-1/1-0041/input/input3
>     [   21.014785] [drm] Initialized imx-lcdif 1.0.0 for 32e90000.display-controller on minor 2
>     [   21.029634] Console: switching to colour frame buffer device 160x50
>     [   21.029823] imx-lcdif 32e90000.display-controller: [drm] fb0: imx-lcdifdrmfb frame buffer device
>     [   21.031376] imx8m-blk-ctrl 32ec0000.blk-ctrl: sync_state() pending due to 32e30000.dwe
>
> Was this behavior observed before? It may have not been noticed, since the
> drivers do come up at some point, and it may not be an issue for other
> interfaces, or they may actually come up earlier in other cases. In our case
> this is important though, since visual feedback from the display is expected
> early.

Understand, we have not notified this problem before.

>
> It seems that the drivers are being deferred at boot start by the
> device_links_check_suppliers() function. It runs through the drivers before
> they're initialized and defers them if their suppliers are not available. The
> GPIO and PWM drivers are able to follow the gpio-map and pwm-map properties
> (through the of_parse_phandle_with_args_map() function), but from what I see,
> device_links_check_suppliers() has no such mechanism. It follows the phandle to
> the nexus connector node only, and since there's no compatible driver for it,
> the function defers the consumer drivers used in the overlay.
>
> I think this is what is happening mainly because setting the
> fw_devlink=permissive kernel parameter (which sets the DL_FLAG_SYNC_STATE_ONLY
> flag) solved the issue, though I could be misunderstanding something.
>
> 	int device_links_check_suppliers(struct device *dev)
> 	{
> 		...
> 		list_for_each_entry(link, &dev->links.suppliers, c_node) {
> 			...
>
> 			if (link->status != DL_STATE_AVAILABLE &&
> 			    !device_link_test(link, DL_FLAG_SYNC_STATE_ONLY)) {
>
> 				...
> 				device_links_missing_supplier(dev);
> 				ret = dev_err_probe(dev, -EPROBE_DEFER,
> 						    "supplier %s not ready\n", dev_name(link->supplier));
> 				break;
> 			}
> 			WRITE_ONCE(link->status, DL_STATE_CONSUMER_PROBE);
> 		}
> 		...
> 	}
>
> Has this behavior been observed before? Do you know of any work being done that
> addresses this?

Does a dummy container driver (for debug) to proof your analyer?  Let
me to find time to debug it.

Frank

>
> See below the changes that I made for this test, relative to my last patch
> (only a draft):
>
> diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev-mezzanine-panel-cap-touch-10inch-lvds-v2.dtso b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev-mezzanine-panel-cap-touch-10inch-lvds-v2.dtso
> index b78322907192..4aa1c407af3f 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev-mezzanine-panel-cap-touch-10inch-lvds-v2.dtso
> +++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev-mezzanine-panel-cap-touch-10inch-lvds-v2.dtso
> @@ -21,9 +21,19 @@
>  #include "imx8mp-pinfunc.h"
>
>  &{/} {
> +	backlight_lvds: backlight-lvds {
> +		compatible = "pwm-backlight";
> +		brightness-levels = <0 45 63 88 119 158 203 255>;
> +		default-brightness-level = <4>;
> +		/* Verdin GPIO 4 (SODIMM 212) */
> +		enable-gpios = <&lvds_native_connector 1 GPIO_ACTIVE_HIGH>;
> +		/* Verdin PWM_2 (SODIMM 16) */
> +		pwms = <&lvds_native_connector 0 6666667 0>;
> +	};
> +
>  	panel-lvds-native {
>  		compatible = "optologic,scx1001511ggc49", "panel-lvds";
> -		backlight = <&backlight_mezzanine>;
> +		backlight = <&backlight_lvds>;
>  		data-mapping = "vesa-24";
>  		power-supply = <&reg_3p3v>;
>  		height-mm = <136>;
> @@ -53,13 +63,6 @@ panel_lvds_native_in: endpoint {
>  	};
>  };
>
> -&backlight_mezzanine {
> -	/* Verdin PWM_2 (SODIMM 16) */
> -	pwms = <&pwm2 0 6666667 0>;
> -
> -	status = "okay";
> -};
> -
>  /* Verdin I2C_2_DSI */
>  &i2c2 {
>  	#address-cells = <1>;
> @@ -69,10 +72,10 @@ touchscreen@41 {
>  		compatible = "ilitek,ili251x";
>  		reg = <0x41>;
>  		/* Verdin GPIO_3 (SODIMM 210) */
> -		interrupt-parent = <&gpio1>;
> -		interrupts = <5 IRQ_TYPE_EDGE_RISING>;
> +		interrupt-parent = <&lvds_native_connector>;
> +		interrupts = <1>;
>  		/* Verdin GPIO_2 (SODIMM 208) */
> -		reset-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;
> +		reset-gpios = <&lvds_native_connector 0 GPIO_ACTIVE_LOW>;
>  	};
>  };
>
> diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
> index 72a4f846d694..1103da3d34ba 100644
> --- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
> @@ -4,6 +4,28 @@
>   */
>
>  / {
> +	lvds_native_connector: lvds-mezzanine-connector {
> +		// NOTE: Placeholder name, no binding for this yet
> +		compatible = "tdx,verdin-lvds-connector";
> +
> +		#gpio-cells = <2>;
> +		gpio-map = <0 0 &gpio1 1 0>, /* Touchscreen reset GPIO */
> +			   <1 0 &gpio1 6 0>; /* Backlight Enable GPIO */
> +		gpio-map-mask = <0xffffffff 0x0>;
> +		gpio-map-pass-thru = <0x0 0xffffffff>;
> +
> +		#pwm-cells = <3>;
> +		pwm-map = <0 0 0 &pwm2 0 0 0>; /* Backlight PWM */
> +		pwm-map-mask = <0x0 0x0 0x0>;
> +		pwm-map-pass-thru = <0x0 0xffffffff 0xffffffff>;
> +
> +		#address-cells = <0>;
> +		#interrupt-cells = <1>;
> +		interrupt-map = <0 &gpio1 5 IRQ_TYPE_EDGE_FALLING>, /* Touchscreen interrupt */
> +				<1 &gpio1 5 IRQ_TYPE_EDGE_RISING>;
> +		interrupt-map-mask = <0xffffffff>;
> +	};
> +
>  	native-hdmi-connector {
>  		compatible = "hdmi-connector";
>  		label = "X37";
>
> Leonardo


      reply	other threads:[~2026-08-18 18:53 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-13 13:33 [PATCH 0/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex Capacitive Touch Display 10.1" LVDS V1 and V2 Leonardo Costa
2026-08-13 13:33 ` [PATCH 1/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex Capacitive Touch Display 10.1" LVDS Leonardo Costa
2026-08-13 13:33 ` [PATCH 2/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex DSI to LVDS adapter with 10.1" display Leonardo Costa
2026-08-13 13:33 ` [PATCH 3/6] arm64: dts: freescale: imx8mp-verdin: Add Mezzanine with Toradex Display 10.1" LVDS Leonardo Costa
2026-08-13 13:33 ` [PATCH 4/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex Capacitive Touch Display 10.1" LVDS V2 Leonardo Costa
2026-08-13 13:33 ` [PATCH 5/6] arm64: dts: freescale: imx8mp-verdin: Add Toradex DSI to LVDS adapter with the 10.1" V2 display Leonardo Costa
2026-08-13 13:33 ` [PATCH 6/6] arm64: dts: freescale: imx8mp-verdin: Add Mezzanine with Toradex Display 10.1" LVDS V2 Leonardo Costa
2026-08-13 14:58   ` Frank Li
2026-08-13 15:43     ` Leonardo Costa
2026-08-13 16:15       ` Frank Li
2026-08-18 18:08         ` Leonardo Costa
2026-08-18 18:53           ` Frank Li [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aoSqJ7pHEgJ_RZmr@SMW015318 \
    --to=frank.li@oss.nxp.com \
    --cc=Frank.Li@nxp.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=festevam@gmail.com \
    --cc=imx@lists.linux.dev \
    --cc=kernel@pengutronix.de \
    --cc=krzk+dt@kernel.org \
    --cc=leonardo.costa@toradex.com \
    --cc=leoreis.costa@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robh@kernel.org \
    --cc=s.hauer@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox