From nobody Sun Feb 8 23:03:51 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 3D7C4204691 for ; Tue, 4 Mar 2025 11:11:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741086704; cv=none; b=RgGUEHihTUaAKAZ7NcUtG2oGb4hIfVJ7FLmJZuITzqSVxkBbhkUmrYgLW0lAiGRReSOpKU/0m68xqAnLnihtvvKZSB3gLgXwHbfqwJE4iIq6Wkeb6OMB4GkbmZI6QLbOyVtU+lrOWKpZbKCnk0IqM8COmvl94cBOQcJXm89YOwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741086704; c=relaxed/simple; bh=pLWjIY6WqePBrvjqbQ1+ak02eZ5uPMBYm5c60VLzABc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=leuLRLgkzsyznaQp26PLyfKl0aTby3/Buz5ypG58oG8nV+/6yG4RSEbwtC+mjIvJSiNcglrGTuXrNt9qhcoRzJ3DjJtBPluAAXlqd04pi/5Ngzg94xrUM7sVrDfALgJCUG601xBH1v/98TB516oUCFuneHnWZSPoaoSnDkbAaIY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ntirweqz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ntirweqz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 61F9FC4CEE9; Tue, 4 Mar 2025 11:11:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741086703; bh=pLWjIY6WqePBrvjqbQ1+ak02eZ5uPMBYm5c60VLzABc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ntirweqzET8pYqb5kQjqv9oFq2JKu+wWdQJeJWNNHpgfJ2ujllgWfPY7D72o/BaYE ajTaRVMo/AVnuGuma9+1H95TMyfzusYm1LAIbvjOAZun8JtquQxMik+ZkucM5mgSn9 OPhG+LMUsSArCNhHsSjDbuobHxsPmPHWRa1H3FEVBGbVXTr3ESdeX+F/qgHJ5pOj/+ asO/hNpj606XID2fgr9Qwhqfl0sl0FJbB67w5GDgya54TCgF3QCYmBYi8iUUmTfP82 LubupC/FZ5SfI8uKVhBkgs2J/6phwsOEHR4rdI+i6VQorV9rUxzn+iVXy3N7JWIMmj 9EHGGGeH7++bg== From: Maxime Ripard Date: Tue, 04 Mar 2025 12:10:58 +0100 Subject: [PATCH v5 15/16] drm/bridge: tc358768: Convert to atomic helpers 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: <20250304-bridge-connector-v5-15-aacf461d2157@kernel.org> References: <20250304-bridge-connector-v5-0-aacf461d2157@kernel.org> In-Reply-To: <20250304-bridge-connector-v5-0-aacf461d2157@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Douglas Anderson Cc: Herve Codina , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4765; i=mripard@kernel.org; h=from:subject:message-id; bh=pLWjIY6WqePBrvjqbQ1+ak02eZ5uPMBYm5c60VLzABc=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDOnH7h82sTr81vVrh8Ps2M0zZk4OKX0YG2X9/ZD1XDWZq 1817LLmdExlYRDmZJAVU2R5IhN2enn74ioH+5U/YOawMoEMYeDiFICJTLjD2LDVqMM/7EhF271P K/pmc2RZl8vbiC87b1SnNdmuc+mrhYlaTWqpNy+u5Si3Yvmzan5BEmPDLYvOlJ9+HfOtVbM4vut 8j1QSStg8szztx52O0xkM5jnLGSZ29dZdLD+X8tqZj6MqUBMA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The tc358768 driver follows the drm_encoder->crtc pointer that is deprecated and shouldn't be used by atomic drivers. Fortunately, the atomic hooks provide the drm_atomic_state and we can access our current CRTC from that, going from the bridge to its encoder, to its connector, and to its CRTC. Let's convert this bridge driver to atomic so we can get rid of the drm_encoder->crtc dereference. Reviewed-by: Dmitry Baryshkov Signed-off-by: Maxime Ripard --- drivers/gpu/drm/bridge/tc358768.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc3= 58768.c index 6b65ba8aed86012bc0f464bd5ee44325dae677c6..063f217a17b6cf32e9793b8a96a= 5ac6128584098 100644 --- a/drivers/gpu/drm/bridge/tc358768.c +++ b/drivers/gpu/drm/bridge/tc358768.c @@ -579,11 +579,12 @@ tc358768_bridge_mode_valid(struct drm_bridge *bridge, return MODE_CLOCK_RANGE; =20 return MODE_OK; } =20 -static void tc358768_bridge_disable(struct drm_bridge *bridge) +static void tc358768_bridge_atomic_disable(struct drm_bridge *bridge, + struct drm_atomic_state *state) { struct tc358768_priv *priv =3D bridge_to_tc358768(bridge); int ret; =20 /* set FrmStop */ @@ -601,11 +602,12 @@ static void tc358768_bridge_disable(struct drm_bridge= *bridge) ret =3D tc358768_clear_error(priv); if (ret) dev_warn(priv->dev, "Software disable failed: %d\n", ret); } =20 -static void tc358768_bridge_post_disable(struct drm_bridge *bridge) +static void tc358768_bridge_atomic_post_disable(struct drm_bridge *bridge, + struct drm_atomic_state *state) { struct tc358768_priv *priv =3D bridge_to_tc358768(bridge); =20 tc358768_hw_disable(priv); } @@ -681,17 +683,21 @@ static u32 tc358768_dsi_bytes_to_ns(struct tc358768_p= riv *priv, u32 val) u64 n =3D priv->dsiclk / 4 * priv->dsi_lanes; =20 return (u32)div_u64(m, n); } =20 -static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) +static void tc358768_bridge_atomic_pre_enable(struct drm_bridge *bridge, + struct drm_atomic_state *state) { struct tc358768_priv *priv =3D bridge_to_tc358768(bridge); struct mipi_dsi_device *dsi_dev =3D priv->output.dev; unsigned long mode_flags =3D dsi_dev->mode_flags; u32 val, val2, lptxcnt, hact, data_type; s32 raw_val; + struct drm_crtc_state *crtc_state; + struct drm_connector_state *conn_state; + struct drm_connector *connector; const struct drm_display_mode *mode; u32 hsbyteclk_ps, dsiclk_ps, ui_ps; u32 dsiclk, hsbyteclk; int ret, i; struct videomode vm; @@ -718,11 +724,14 @@ static void tc358768_bridge_pre_enable(struct drm_bri= dge *bridge) dev_err(dev, "Software reset failed: %d\n", ret); tc358768_hw_disable(priv); return; } =20 - mode =3D &bridge->encoder->crtc->state->adjusted_mode; + connector =3D drm_atomic_get_new_connector_for_encoder(state, bridge->enc= oder); + conn_state =3D drm_atomic_get_new_connector_state(state, connector); + crtc_state =3D drm_atomic_get_new_crtc_state(state, conn_state->crtc); + mode =3D &crtc_state->adjusted_mode; ret =3D tc358768_setup_pll(priv, mode); if (ret) { dev_err(dev, "PLL setup failed: %d\n", ret); tc358768_hw_disable(priv); return; @@ -1079,11 +1088,12 @@ static void tc358768_bridge_pre_enable(struct drm_b= ridge *bridge) ret =3D tc358768_clear_error(priv); if (ret) dev_err(dev, "Bridge pre_enable failed: %d\n", ret); } =20 -static void tc358768_bridge_enable(struct drm_bridge *bridge) +static void tc358768_bridge_atomic_enable(struct drm_bridge *bridge, + struct drm_atomic_state *state) { struct tc358768_priv *priv =3D bridge_to_tc358768(bridge); int ret; =20 if (!priv->enabled) { @@ -1159,14 +1169,14 @@ static bool tc358768_mode_fixup(struct drm_bridge *= bridge, =20 static const struct drm_bridge_funcs tc358768_bridge_funcs =3D { .attach =3D tc358768_bridge_attach, .mode_valid =3D tc358768_bridge_mode_valid, .mode_fixup =3D tc358768_mode_fixup, - .pre_enable =3D tc358768_bridge_pre_enable, - .enable =3D tc358768_bridge_enable, - .disable =3D tc358768_bridge_disable, - .post_disable =3D tc358768_bridge_post_disable, + .atomic_pre_enable =3D tc358768_bridge_atomic_pre_enable, + .atomic_enable =3D tc358768_bridge_atomic_enable, + .atomic_disable =3D tc358768_bridge_atomic_disable, + .atomic_post_disable =3D tc358768_bridge_atomic_post_disable, =20 .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, .atomic_reset =3D drm_atomic_helper_bridge_reset, .atomic_get_input_bus_fmts =3D tc358768_atomic_get_input_bus_fmts, --=20 2.48.1