From nobody Tue Sep 29 09:09:42 2026 Received: from mail-106111.protonmail.ch (mail-106111.protonmail.ch [79.135.106.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BD443A0B3B; Mon, 10 Aug 2026 07:19:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.135.106.111 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786346390; cv=none; b=ParX/mFBAkFyfBz/L6qV76BuKfym5mMSm1ZvKHdoMOBXqj8ZB+/DHCikpmviEBqh2bYiZ/0Dd3f6rpindVVgg1o5TOYJ7ghpmecGJ2XMxxxiv8tWnlJ956LlETOQ8r0DxzfY/os1ozwMugzElXQ9BsZ7Cv3HHK58zsRM3DZOQss= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786346390; c=relaxed/simple; bh=fMP2hOoQfOnTvMLbjGHxqKSru2U0lvUotPn+hSMBBk0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ayOpCCnl1cGxsUMnXdztTx2ulzS91qvrTZi2zHmzi/cg8scBt8TzboZ5mTinBPu1z5hHlK2ZxzwrpCKNPo656xlgPqomF75oCxOpAYaL9ROoQ0Sr6DLuVB/86fmKXj72J2K6laPYK97nbp8n/zKkn3FP0f5N0z/cSDJKSBl/fw4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=3FhkKFNY; arc=none smtp.client-ip=79.135.106.111 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="3FhkKFNY" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1786346387; x=1786605587; bh=CVuR4JN4qvYTWrwAiybLluZngZdrcxB+j6GjB1GhM18=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=3FhkKFNY66b3AD3bEaQ6EOUmy2RE9gEoaRKPWg64k20azjbf3Os/7+/47Bvx5pzUI O4FHJppaXwY+1UVQDl6/868TLIVDHef7ibClKzbnqNhkSYU77fVKCoiz+3WdtrVzhf UIPQZFjzFc3qwQMdipvAZz83LpbxSI0uB9mUdwyhXXMrEGdP24fR06Y8tIgOLgaNGy PaCw+clFj8wtR2wD99n447u77mGd+CUCsbyzkOb3Wrfm7U11jIbJf1qTeglTRSM2GJ uIQ437w9TaVZJ+FKaNFNjJ2czAbFUuLbDapCqrjQqDe5E52KZFNuCzSI5+f00rnvEL 4YS5Qs1HY2/sQ== X-Pm-Submission-Id: 4hJR351Qdbz1DFFF From: Esben Haabendal Date: Mon, 10 Aug 2026 09:19:40 +0200 Subject: [PATCH v4 1/3] drm/bridge: ti-sn65dsi83: Fix error handling in sn65dsi83_reset_work() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-ti-sn65dsi83-fixes-v4-1-ae9c95c8d162@geanix.com> References: <20260810-ti-sn65dsi83-fixes-v4-0-ae9c95c8d162@geanix.com> In-Reply-To: <20260810-ti-sn65dsi83-fixes-v4-0-ae9c95c8d162@geanix.com> To: Luca Ceresoli , Herve Codina , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Linus Walleij , Frieder Schrempf , Marek Vasut Cc: Esben Haabendal , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786346382; l=1222; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=fMP2hOoQfOnTvMLbjGHxqKSru2U0lvUotPn+hSMBBk0=; b=nRoQC5DfBHj6lQFvnFD8ahuFzZnMz9W1pXbjcH9tHHqDRG+fTyAPB0ogNE6BdYUuXeRzf7VUj QPuWtldw21WCDPyYD5c753AWuE7YM9luxoiyBuPcR9fOAR1ZWoOao/1 X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= The error handling of sn65dsi83_reset_pipe() failure in sn65dsi83_reset_work() has been a bit strange all the time, missing both enable_irq() and drm_bridge_exit() in case of failure. But since sn65dsi83_reset_pipe() have never been failing (always returning 0), it has not caused any problems. As we are going to change sn65dsi83_reset_pipe() to return error values in case of failure, we need to fix this. Fixes: ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error recovery mechani= sm") Cc: stable@vger.kernel.org Signed-off-by: Esben Haabendal --- drivers/gpu/drm/bridge/ti-sn65dsi83.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge= /ti-sn65dsi83.c index 42b451432bbb..0ccfff401b2a 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c @@ -417,10 +417,9 @@ static void sn65dsi83_reset_work(struct work_struct *w= s) =20 /* Reset the pipe */ ret =3D sn65dsi83_reset_pipe(ctx); - if (ret) { + if (ret) dev_err(ctx->dev, "reset pipe failed %pe\n", ERR_PTR(ret)); - return; - } + if (ctx->irq) enable_irq(ctx->irq); =20 --=20 2.55.0 From nobody Tue Sep 29 09:09:42 2026 Received: from mail-244108.protonmail.ch (mail-244108.protonmail.ch [109.224.244.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBFB337A840; Mon, 10 Aug 2026 07:19:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=109.224.244.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786346393; cv=none; b=FvRSggRSlJyUOwY/dgRYuuw2g64KI+kTe+yRrmV88rImEtmsUnNbYXPO2cLugoAKmwrNBN3lLhDTnSu+TB5Fq+TybBg+awsPE5ZHxcfiZnjM3LkklDD8mhvwEZOz/CGzjkDUozwj+EjHn/VDid7piJPoxv757LWniNm30nfyfaY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786346393; c=relaxed/simple; bh=ADbcip/7+ws/P910Sgn2HvCEM8tB4gXcTCDY2lBAYnQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jtjgnP+ET6SdwxxqfoxFxxKt16FSA+/dmpDRmuRFzNTSke+U+aBv69EryjKRSY1UTxtkEK2s5x6ie+CC2EhSkZbMQ104RY/LJEewffgWVi7UrZZNBoj0z5p3kbe7A8jvcp4z1n+KCNZSO25YAaQUil6kp9pblyx9nG5bz4hcx5Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=U3N7n9l5; arc=none smtp.client-ip=109.224.244.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="U3N7n9l5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1786346389; x=1786605589; bh=ZJSCfXp3hcwIl+jbWgDlNmbsCfx+Kvs7P3NKbUEI0gg=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=U3N7n9l591S9trMRfqQ8/wyBQ+NDJpCKZFLrUn/+dBiRFlhpia5LeC3YhlE6N7skq A1zyhG+GnxLFTaZBpdtAftAblnLFEwQY8RzcN6RiNVsh11HOlqkywj47e+MPqZt3Ck HyhAmN+iTOQREYdQ1sKAcqnCOQVQM5fIG1zvL+RRsXRV3bxXLhOhwjAgsWZ4o05apk TDwFAvLD9K4S3QRiyp0dBkVw9LgOqwVyQdLTotjcCkMfU+MD2sjdAbxD8YyVOsxgGA iaiDETAvAuO7jgFRWYCHi5141zEXmCp2z8vLGazoYWSK1DUP5U+dPIjaoL+WvDIAje 7ZBC9na40S54Q== X-Pm-Submission-Id: 4hJR365Wxrz2ScNb From: Esben Haabendal Date: Mon, 10 Aug 2026 09:19:41 +0200 Subject: [PATCH v4 2/3] drm/bridge: ti-sn65dsi83: Propagate error in sn65dsi83_reset_pipe() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-ti-sn65dsi83-fixes-v4-2-ae9c95c8d162@geanix.com> References: <20260810-ti-sn65dsi83-fixes-v4-0-ae9c95c8d162@geanix.com> In-Reply-To: <20260810-ti-sn65dsi83-fixes-v4-0-ae9c95c8d162@geanix.com> To: Luca Ceresoli , Herve Codina , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Linus Walleij , Frieder Schrempf , Marek Vasut Cc: Esben Haabendal , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786346382; l=975; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=ADbcip/7+ws/P910Sgn2HvCEM8tB4gXcTCDY2lBAYnQ=; b=t9VdwYSBeo0Zyjs1jvJ28ES768Rf5d4vyTyfpV1720IcKxNymqvXUUNzCBBTCwPVDaufHUtUI dIR1PsMOxDHDmeZAWkjlb7wmhPhD/jDb+UQVWN8PPiol0CBaryS//AX X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= Propagate the error code from drm_bridge_helper_reset_crtc(), so that callers has a chance to handle the failure. Fixes: ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error recovery mechani= sm") Cc: stable@vger.kernel.org Reviewed-by: Luca Ceresoli Tested-by: Luca Ceresoli Signed-off-by: Esben Haabendal Reviewed-by: Herve Codina --- drivers/gpu/drm/bridge/ti-sn65dsi83.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge= /ti-sn65dsi83.c index 0ccfff401b2a..475224c5a5d8 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c @@ -403,7 +403,7 @@ static int sn65dsi83_reset_pipe(struct sn65dsi83 *sn65d= si83) drm_modeset_drop_locks(&ctx); drm_modeset_acquire_fini(&ctx); =20 - return 0; + return err; } =20 static void sn65dsi83_reset_work(struct work_struct *ws) --=20 2.55.0 From nobody Tue Sep 29 09:09:42 2026 Received: from mail-106112.protonmail.ch (mail-106112.protonmail.ch [79.135.106.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D77F33A383A for ; Mon, 10 Aug 2026 07:19:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.135.106.112 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786346395; cv=none; b=kprjMr8DBU8Hyqxi5cem2fos9OXUHxZM8Hxg0OwYjmj7bhkMuCUHAlFYwG6epkoRRgka310PRMJzMJtuvuAGZ5uNooqnQ3So85OQI/iw1yMfwRVGAPsL4lP8F31DHlNF19iaHvWpa1wabo2HIBfaG1Wf8enjHZ47iIxBZQtEZfU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786346395; c=relaxed/simple; bh=SpZZuVoXiTaCsq2+YVMcfkEE8t2/jo9dDeR8gOCvVpY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Tdn3dNVL/atqd3+Fbjo+r2WkrgkZVa9miJKbHspY0IEWQcPnHLo5Tin+IzvBMYGlTgxv4hpcnyXo0IJ0SMQFIPZPhdm+bKrxjAJZzjZnwHXLbfgO3eDKwO2DrrXI4dm/FH1s+rocp4j8sK6ihdJT3sZvC3kYeBRFt9KLM8RRC0I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=VXQ7VmxE; arc=none smtp.client-ip=79.135.106.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="VXQ7VmxE" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1786346390; x=1786605590; bh=1A+pOn9i2WkUHpqCar3xlo38MSi1Pqw7KaRaULlNeIY=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=VXQ7VmxEjPxMgPk8OcMqONu7eMS6+32Yco08qFyV0ToH4deEZ8ZX5BlU/7DjuiPNu JEY7Nfqiypq6lpULWjSbAlIMECtcXVVRgLxMCszBV2lzU1rnIXQ29s5ChZa546dq7T q1yC/Spz3nUa7P61RBakngL8lRjFYAD1PbAYFMJ0CwowXRweUNYEJn5T5ZYPUWmNS1 JageouNxQSIbZlB6pveqrKuHAIiTG3bOhdpz2jUIuq2jy4WA8zZzsiXS2tSoVi7z4S fuL6DvW8JoGDHmNjpkWY7stYOlRO4x8wig3h0xLQaqdoXtJM3SvOYYRk0WdSoxcg15 qLtyU7q0INWzw== X-Pm-Submission-Id: 4hJR392Ckdz1DDs5 From: Esben Haabendal Date: Mon, 10 Aug 2026 09:19:42 +0200 Subject: [PATCH v4 3/3] drm/bridge: ti-sn65dsi83: Support LVDS Channel B on SN65DSI84 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260810-ti-sn65dsi83-fixes-v4-3-ae9c95c8d162@geanix.com> References: <20260810-ti-sn65dsi83-fixes-v4-0-ae9c95c8d162@geanix.com> In-Reply-To: <20260810-ti-sn65dsi83-fixes-v4-0-ae9c95c8d162@geanix.com> To: Luca Ceresoli , Herve Codina , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Linus Walleij , Frieder Schrempf , Marek Vasut Cc: Esben Haabendal , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786346382; l=3913; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=SpZZuVoXiTaCsq2+YVMcfkEE8t2/jo9dDeR8gOCvVpY=; b=ZP+jNfOYa3n427a+BYeQGn9OOJkIZvIXsfSuI1uJmcdlTvi62BULwz0RRDn6bbk1tRjriOKjo Bqm1JbLtm3kDAdwu7iysWn2zsggEbTxT22JgVl46zne8bccBXdbambo X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= This adds support for using SN65DSI84 in single-link mode with output to LVDS Channel B. Reviewed-by: Luca Ceresoli Tested-by: Luca Ceresoli Signed-off-by: Esben Haabendal --- drivers/gpu/drm/bridge/ti-sn65dsi83.c | 34 +++++++++++++++++++++++--------= --- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge= /ti-sn65dsi83.c index 475224c5a5d8..33cf33d127c6 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c @@ -11,6 +11,8 @@ * =3D 1x Single-link DSI ~ 2x Single-link or 1x Dual-link LVDS * - Supported * - Dual-link LVDS mode tested + * - Single-link to LVDS Channel A tested + * - Single-link to LVDS Channel B tested * - 2x Single-link LVDS mode unsupported * (should be easy to add by someone who has the HW) * - SN65DSI85 @@ -162,7 +164,7 @@ struct sn65dsi83 { struct gpio_desc *enable_gpio; struct regulator *vcc; bool lvds_dual_link; - bool lvds_dual_link_even_odd_swap; + bool lvds_channel_swap; int lvds_vod_swing_conf[2]; int lvds_term_conf[2]; int irq; @@ -641,7 +643,7 @@ static void sn65dsi83_atomic_pre_enable(struct drm_brid= ge *bridge, REG_LVDS_VCOM_CHA_LVDS_VOD_SWING(ctx->lvds_vod_swing_conf[CHANNEL_A]) | REG_LVDS_VCOM_CHB_LVDS_VOD_SWING(ctx->lvds_vod_swing_conf[CHANNEL_B])); regmap_write(ctx->regmap, REG_LVDS_LANE, - (ctx->lvds_dual_link_even_odd_swap ? + (ctx->lvds_channel_swap ? REG_LVDS_LANE_EVEN_ODD_SWAP : 0) | (ctx->lvds_term_conf[CHANNEL_A] ? REG_LVDS_LANE_CHA_LVDS_TERM : 0) | @@ -892,6 +894,7 @@ static int sn65dsi83_parse_dt(struct sn65dsi83 *ctx, en= um sn65dsi83_model model) { struct drm_bridge *panel_bridge; struct device *dev =3D ctx->dev; + u32 output_port =3D 2; int ret; =20 ret =3D sn65dsi83_parse_lvds_endpoint(ctx, CHANNEL_A); @@ -903,29 +906,38 @@ static int sn65dsi83_parse_dt(struct sn65dsi83 *ctx, = enum sn65dsi83_model model) return ret; =20 ctx->lvds_dual_link =3D false; - ctx->lvds_dual_link_even_odd_swap =3D false; + ctx->lvds_channel_swap =3D false; if (model !=3D MODEL_SN65DSI83) { - struct device_node *port2, *port3; + struct device_node *port0, *port1, *port2, *port3; int dual_link; =20 + port0 =3D of_graph_get_port_by_id(dev->of_node, 0); + port1 =3D of_graph_get_port_by_id(dev->of_node, 1); port2 =3D of_graph_get_port_by_id(dev->of_node, 2); port3 =3D of_graph_get_port_by_id(dev->of_node, 3); dual_link =3D drm_of_lvds_get_dual_link_pixel_order(port2, port3); - of_node_put(port2); - of_node_put(port3); =20 if (dual_link =3D=3D DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS) { - ctx->lvds_dual_link =3D true; /* Odd pixels to LVDS Channel A, even pixels to B */ - ctx->lvds_dual_link_even_odd_swap =3D false; - } else if (dual_link =3D=3D DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS) { ctx->lvds_dual_link =3D true; + } else if (dual_link =3D=3D DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS) { /* Even pixels to LVDS Channel A, odd pixels to B */ - ctx->lvds_dual_link_even_odd_swap =3D true; + ctx->lvds_dual_link =3D true; + ctx->lvds_channel_swap =3D true; + } else if (port0 && !port1 && port2 && !port3) { + /* DSI Channel A to LVDS Channel A */ + } else if (port0 && !port1 && !port2 && port3) { + /* DSI Channel A to LVDS Channel B */ + ctx->lvds_channel_swap =3D true; + output_port =3D 3; } + of_node_put(port0); + of_node_put(port1); + of_node_put(port2); + of_node_put(port3); } =20 - panel_bridge =3D devm_drm_of_get_bridge(dev, dev->of_node, 2, 0); + panel_bridge =3D devm_drm_of_get_bridge(dev, dev->of_node, output_port, 0= ); if (IS_ERR(panel_bridge)) return dev_err_probe(dev, PTR_ERR(panel_bridge), "Failed to get panel br= idge\n"); =20 --=20 2.55.0