From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mout-p-202.mailbox.org (mout-p-202.mailbox.org [80.241.56.172]) (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 4BDC826FA6F for ; Sun, 4 Jan 2026 21:37:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=80.241.56.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767562648; cv=none; b=kmvRqqlljgwaW1k5EPsjTW3T9HOhLEESbuylmnsBz5wY3oF+YgGnWiP6pXKW2kFgEfAljiKJKK+JxzpB1lvetKd8aDQfK1zFcqfQdTBn4s5V0l8hnV0nVKK7ihGbm6IdrTS9BAM1SeSlabIeYCC5ODCpdguTXP4d6p87254bUPk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767562648; c=relaxed/simple; bh=P/92fCV5fbiobw7u0GExJMaWSIVVbUKUbfbkxcN0gZQ=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=uZV+i8P1nripWE0E6MvFNcFi+TFogGBQ/lG4SMPzYYIla28KrlRxQPRxgFBppQauH9pTcBR/j3c6xfLaBvNiCuClwcAumkFPWIAhP6jz1TzcjSkkszpKFSEtA1DnTFf/a6ffOyPvd0vKQlrpY9JtqCKjbT4EWgdbTGTdWITQTOM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=mailbox.org; spf=pass smtp.mailfrom=mailbox.org; dkim=pass (2048-bit key) header.d=mailbox.org header.i=@mailbox.org header.b=eDMNEcb3; dkim=pass (2048-bit key) header.d=mailbox.org header.i=@mailbox.org header.b=cwq0F/N4; arc=none smtp.client-ip=80.241.56.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=mailbox.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mailbox.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mailbox.org header.i=@mailbox.org header.b="eDMNEcb3"; dkim=pass (2048-bit key) header.d=mailbox.org header.i=@mailbox.org header.b="cwq0F/N4" Received: from smtp2.mailbox.org (smtp2.mailbox.org [10.196.197.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-202.mailbox.org (Postfix) with ESMTPS id 4dkrPJ3MR3z9t6y; Sun, 4 Jan 2026 22:37:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1767562644; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=F2V5ptOG/OSrQxpQxBR9vp2eUi6mQ1sEOZ5f+v4+ETo=; b=eDMNEcb3IB8WSnKLI4oDXY36itZPosnOUPuuEjLSAjYPckXTAV6x1paAfLi9m4WA6MHhWv qIzkXvQMlRHf3sHa+lSgVPHMj/72UClLmN9JOT5MMi0/H1qgv57cPUp9it/idmQHzeJNMp Qvre3qG+27LATqVjiRf7oy3ddC11EK8n58M/ARJbA1jEbZ1IEhAjP9mHfr2E5jGzBDWyoU ROX0ELAg0i3tAKAjAnUXa0mSdx8AbFpPWjUx7jNOgTLzfKH4JbB5xqddxAGZFGEIEAt1p4 Ym+ORFezYOnz4IvzSwr0xpoDMwoYf3cYC4M954PC/ef5lD9125vR4Ilnb1K2QA== From: Marek Vasut DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1767562641; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=F2V5ptOG/OSrQxpQxBR9vp2eUi6mQ1sEOZ5f+v4+ETo=; b=cwq0F/N4btyasfbpeGahGUTV8M2V6HQlEL4Iv41s/13SF58JHHhveRPe7DA+WMiIRFaZBE fZE2C01qSPa0W1+uuJaXG8T5BQV5S8BCoQ3rPD/NjxAFnKv1hHyoop9rFxgOfSBMeFMJPT y0mW7LbF5b1TrQsAaL2f6by06nEmmotwsAJ/r1I0gEoGe8zTdY+QLpbIuK8iesBcJxypF6 Nya6mthA+oBGgt6LuHIDdLigkj6Xk4XC3MjKrOoMVT4ReW5vCyMW8FJPXtp6AnqbE6YHLc hXKG72Jx9YNqnRobPDxReAEzny/5nzt0ruL61JByF/YWerkXfwNB/dGYydMKmw== To: dri-devel@lists.freedesktop.org Cc: Marek Vasut , Abel Vesa , Conor Dooley , Fabio Estevam , Krzysztof Kozlowski , Laurent Pinchart , Liu Ying , Luca Ceresoli , Lucas Stach , Peng Fan , Pengutronix Kernel Team , Rob Herring , Shawn Guo , Thomas Zimmermann , devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org Subject: [PATCH v3] drm/bridge: fsl-ldb: Parse register offsets from DT Date: Sun, 4 Jan 2026 22:36:55 +0100 Message-ID: <20260104213712.128982-1-marek.vasut@mailbox.org> Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-MBO-RS-ID: 45dc74af1c849cb0d34 X-MBO-RS-META: qoxrmye94k13yy8yo3ohm8y8f6dfdsmn The DT bindings for this bridge describe register offsets for the LDB, parse the register offsets from DT instead of hard-coding them in the driver. No functional change. The LDB was always meant to parse the 'reg' offsets out of the DT, it only went somewhat wrong in the process and we ended up with hard-coded reg<->compatible mapping. It was never intended to be that way, so fix it. Signed-off-by: Marek Vasut --- Cc: Abel Vesa Cc: Conor Dooley Cc: Fabio Estevam Cc: Krzysztof Kozlowski Cc: Laurent Pinchart Cc: Liu Ying Cc: Luca Ceresoli Cc: Lucas Stach Cc: Peng Fan Cc: Pengutronix Kernel Team Cc: Rob Herring Cc: Shawn Guo Cc: Thomas Zimmermann Cc: devicetree@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: imx@lists.linux.dev Cc: linux-arm-kernel@lists.infradead.org Cc: linux-clk@vger.kernel.org --- V2: - Switch to of_property_read_reg() - Parse single-register LDB variants from DT too V3: - Update commit message - Drop "likely" from the comment --- drivers/gpu/drm/bridge/fsl-ldb.c | 58 ++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/bridge/fsl-ldb.c b/drivers/gpu/drm/bridge/fsl-ldb.c index 5c3cf37200bce..aa352c70b9ab2 100644 --- a/drivers/gpu/drm/bridge/fsl-ldb.c +++ b/drivers/gpu/drm/bridge/fsl-ldb.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -61,24 +62,13 @@ enum fsl_ldb_devtype { }; struct fsl_ldb_devdata { - u32 ldb_ctrl; - u32 lvds_ctrl; bool lvds_en_bit; - bool single_ctrl_reg; }; static const struct fsl_ldb_devdata fsl_ldb_devdata[] = { - [IMX6SX_LDB] = { - .ldb_ctrl = 0x18, - .single_ctrl_reg = true, - }, - [IMX8MP_LDB] = { - .ldb_ctrl = 0x5c, - .lvds_ctrl = 0x128, - }, + [IMX6SX_LDB] = { }, + [IMX8MP_LDB] = { }, [IMX93_LDB] = { - .ldb_ctrl = 0x20, - .lvds_ctrl = 0x24, .lvds_en_bit = true, }, }; @@ -90,8 +80,11 @@ struct fsl_ldb { struct clk *clk; struct regmap *regmap; const struct fsl_ldb_devdata *devdata; + u64 ldb_ctrl; + u64 lvds_ctrl; bool ch0_enabled; bool ch1_enabled; + bool single_ctrl_reg; }; static bool fsl_ldb_is_dual(const struct fsl_ldb *fsl_ldb) @@ -204,15 +197,15 @@ static void fsl_ldb_atomic_enable(struct drm_bridge *bridge, reg |= (fsl_ldb->ch0_enabled ? LDB_CTRL_DI0_VSYNC_POLARITY : 0) | (fsl_ldb->ch1_enabled ? LDB_CTRL_DI1_VSYNC_POLARITY : 0); - regmap_write(fsl_ldb->regmap, fsl_ldb->devdata->ldb_ctrl, reg); + regmap_write(fsl_ldb->regmap, fsl_ldb->ldb_ctrl, reg); - if (fsl_ldb->devdata->single_ctrl_reg) + if (fsl_ldb->single_ctrl_reg) return; /* Program LVDS_CTRL */ reg = LVDS_CTRL_CC_ADJ(2) | LVDS_CTRL_PRE_EMPH_EN | LVDS_CTRL_PRE_EMPH_ADJ(3) | LVDS_CTRL_VBG_EN; - regmap_write(fsl_ldb->regmap, fsl_ldb->devdata->lvds_ctrl, reg); + regmap_write(fsl_ldb->regmap, fsl_ldb->lvds_ctrl, reg); /* Wait for VBG to stabilize. */ usleep_range(15, 20); @@ -220,7 +213,7 @@ static void fsl_ldb_atomic_enable(struct drm_bridge *bridge, reg |= (fsl_ldb->ch0_enabled ? LVDS_CTRL_CH0_EN : 0) | (fsl_ldb->ch1_enabled ? LVDS_CTRL_CH1_EN : 0); - regmap_write(fsl_ldb->regmap, fsl_ldb->devdata->lvds_ctrl, reg); + regmap_write(fsl_ldb->regmap, fsl_ldb->lvds_ctrl, reg); } static void fsl_ldb_atomic_disable(struct drm_bridge *bridge, @@ -231,12 +224,12 @@ static void fsl_ldb_atomic_disable(struct drm_bridge *bridge, /* Stop channel(s). */ if (fsl_ldb->devdata->lvds_en_bit) /* Set LVDS_CTRL_LVDS_EN bit to disable. */ - regmap_write(fsl_ldb->regmap, fsl_ldb->devdata->lvds_ctrl, + regmap_write(fsl_ldb->regmap, fsl_ldb->lvds_ctrl, LVDS_CTRL_LVDS_EN); else - if (!fsl_ldb->devdata->single_ctrl_reg) - regmap_write(fsl_ldb->regmap, fsl_ldb->devdata->lvds_ctrl, 0); - regmap_write(fsl_ldb->regmap, fsl_ldb->devdata->ldb_ctrl, 0); + if (!fsl_ldb->single_ctrl_reg) + regmap_write(fsl_ldb->regmap, fsl_ldb->lvds_ctrl, 0); + regmap_write(fsl_ldb->regmap, fsl_ldb->ldb_ctrl, 0); clk_disable_unprepare(fsl_ldb->clk); } @@ -296,7 +289,7 @@ static int fsl_ldb_probe(struct platform_device *pdev) struct device_node *remote1, *remote2; struct drm_panel *panel; struct fsl_ldb *fsl_ldb; - int dual_link; + int dual_link, idx, ret; fsl_ldb = devm_drm_bridge_alloc(dev, struct fsl_ldb, bridge, &funcs); if (IS_ERR(fsl_ldb)) @@ -309,6 +302,27 @@ static int fsl_ldb_probe(struct platform_device *pdev) fsl_ldb->dev = &pdev->dev; fsl_ldb->bridge.of_node = dev->of_node; + /* No "reg-names" property means single-register LDB */ + idx = of_property_match_string(dev->of_node, "reg-names", "ldb"); + if (idx < 0) { + fsl_ldb->single_ctrl_reg = true; + idx = 0; + } + + ret = of_property_read_reg(dev->of_node, idx, &fsl_ldb->ldb_ctrl, NULL); + if (ret) + return ret; + + if (!fsl_ldb->single_ctrl_reg) { + idx = of_property_match_string(dev->of_node, "reg-names", "lvds"); + if (idx < 0) + return idx; + + ret = of_property_read_reg(dev->of_node, idx, &fsl_ldb->lvds_ctrl, NULL); + if (ret) + return ret; + } + fsl_ldb->clk = devm_clk_get(dev, "ldb"); if (IS_ERR(fsl_ldb->clk)) return PTR_ERR(fsl_ldb->clk); -- 2.51.0