From mboxrd@z Thu Jan 1 00:00:00 1970 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 7CB6139183A for ; Thu, 23 Apr 2026 10:19:50 +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=1776939590; cv=none; b=N1dCqVWShT9LFTcBLRBhyIRVOFzFMHsBrzFQY66u7Gz62v5nvGrHCNRRTJQ25OyAL3l2IjXgQ8IaRnzwD1ZO+IhDkFFdqWVRk1qRSxggClL1qJjq52CnaxJPCkSPB4t6EVBi84r6XmV18axh1p8X13AeLuj46/cYPf5lUed8tGo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776939590; c=relaxed/simple; bh=wjaFi3kYWB/9v7drMul6iXlyxd1t2eV/EeubsSZA5I8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jamcIXgAkig3zBhopcDpZJX+zsJOILMuehNivjXDN6CIQDkWNODjTpcsgY/derLPUljqEpecM2/Gx5/HKZzeFHSAOGP404gdHfeJLF7zbJdpyWP6eYJf7WGFdroLgqTfjlIcpjLxnKxGzMIxAyRx9pc+Pbs3qhNUl23VaFDo7m4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SzLuCliv; 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="SzLuCliv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C0E17C2BCAF; Thu, 23 Apr 2026 10:19:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776939590; bh=wjaFi3kYWB/9v7drMul6iXlyxd1t2eV/EeubsSZA5I8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SzLuClivvORZe+vdxLe8I/0RWpcNqA7a+Fm4zkpPVbcetuDX2Wt6mIO3wwR4g7AVa Tzk/7FHYdzAeKJ8Gw88BN2BbcboZyXtCJOFZAPXE30UWJJsF7YbpijLMOOyGic6Wt6 ycTdoUBTCFIHL1Ck1DelMbvhwG+LZ3PzgroUuabxaZLV+MSAcXlJtwOweyAEbh4+Lp UnVtkcAius/0Fr+w3HocIXIt3jcMwO6D/au3DyAym1V8knL/dw/KEHARXEdOcuF0YA 0kHozwneYOUHXQQKcfa4CBi2K6iXA2IIqIM8nB2Fwo1JQWLxehVZx37zfNavefHKtq 42yvNAE//9WDg== From: Maxime Ripard Date: Thu, 23 Apr 2026 12:18:41 +0200 Subject: [PATCH v2 28/28] drm/bridge: sii902x: Implement hw state readout 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: 7bit Message-Id: <20260423-drm-state-readout-v2-28-8549f87cb978@kernel.org> References: <20260423-drm-state-readout-v2-0-8549f87cb978@kernel.org> In-Reply-To: <20260423-drm-state-readout-v2-0-8549f87cb978@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Jyri Sarha , Tomi Valkeinen Cc: Devarsh Thakkar , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3848; i=mripard@kernel.org; h=from:subject:message-id; bh=wjaFi3kYWB/9v7drMul6iXlyxd1t2eV/EeubsSZA5I8=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJkvP37RZM4/u/7MvyWdVo+9Tkh+adm0k+vAzl3BDMKtM 232XmP/0jGVhUGYk0FWTJHliUzY6eXti6sc7Ff+gJnDygQyhIGLUwAmsm8NY0Oz2UnOr/JFUSGp m5+rZs1ZLf9G0ipP8Pu5hTv+b5VcOP98PItIZFmuyVVW+TeclyImOjPWqazb938Rk3lNeGHT6qX rH4cf6vofuHhX+WZDEeunRoq3Ih3W7dqfl/Ik9H2A8YV1Sy/vBwA= X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Implement the hardware state readout for the sii902x bridge now that all the infrastructure is in place. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/bridge/sii902x.c | 56 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c index 12497f5ce4ff..4ad0fdfc1c38 100644 --- a/drivers/gpu/drm/bridge/sii902x.c +++ b/drivers/gpu/drm/bridge/sii902x.c @@ -20,10 +20,12 @@ #include #include #include #include +#include +#include #include #include #include #include #include @@ -535,17 +537,68 @@ sii902x_bridge_mode_valid(struct drm_bridge *bridge, return MODE_CLOCK_HIGH; return MODE_OK; } +static int +sii902x_bridge_connector_readout(struct drm_bridge *bridge, + struct drm_atomic_sro_state *state, + struct drm_connector_state *conn_state) +{ + struct sii902x *sii902x = bridge_to_sii902x(bridge); + struct drm_connector *connector = conn_state->connector; + struct drm_crtc_state *crtc_state; + struct drm_encoder *encoder; + struct drm_crtc *crtc; + + if (regmap_test_bits(sii902x->regmap, SII902X_SYS_CTRL_DATA, SII902X_SYS_CTRL_PWR_DWN)) + return 0; + + encoder = bridge->encoder; + crtc = encoder->funcs->atomic_sro_get_current_crtc(encoder); + if (!crtc) + return -ENODEV; + + crtc_state = drm_atomic_sro_get_crtc_state(state, crtc); + if (!crtc_state) + return -ENODEV; + + crtc_state->encoder_mask |= drm_encoder_mask(encoder); + crtc_state->connector_mask |= drm_connector_mask(connector); + + conn_state->crtc = crtc; + conn_state->best_encoder = encoder; + + return 0; +} + +static int sii902x_bridge_readout_state(struct drm_bridge *bridge, + struct drm_atomic_sro_state *state, + struct drm_bridge_state *bridge_state, + struct drm_crtc_state *crtc_state, + struct drm_connector_state *conn_state) +{ + struct sii902x *sii902x = bridge_to_sii902x(bridge); + + if (regmap_test_bits(sii902x->regmap, SII902X_SYS_CTRL_DATA, SII902X_SYS_CTRL_PWR_DWN)) + return 0; + + /* bridge_state is pretty trivial, we don't have anything to do here */ + + return 0; +} + static const struct drm_bridge_funcs sii902x_bridge_funcs = { .attach = sii902x_bridge_attach, .mode_set = sii902x_bridge_mode_set, .atomic_disable = sii902x_bridge_atomic_disable, .atomic_enable = sii902x_bridge_atomic_enable, .detect = sii902x_bridge_detect, .edid_read = sii902x_bridge_edid_read, + .atomic_sro_compare_state = drm_atomic_helper_bridge_compare_state, + .atomic_sro_readout_state = sii902x_bridge_readout_state, + .atomic_sro_connector_readout = sii902x_bridge_connector_readout, .atomic_reset = drm_atomic_helper_bridge_reset, .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, .atomic_get_input_bus_fmts = sii902x_bridge_atomic_get_input_bus_fmts, .atomic_check = sii902x_bridge_atomic_check, @@ -1131,11 +1184,12 @@ static int sii902x_init(struct sii902x *sii902x) if (ret) goto err_unreg_audio; sii902x->bridge.of_node = dev->of_node; sii902x->bridge.timings = &default_sii902x_timings; - sii902x->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; + sii902x->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID | + DRM_BRIDGE_OP_CONNECTOR_HW_READOUT; sii902x->bridge.type = DRM_MODE_CONNECTOR_HDMIA; if (sii902x->i2c->irq > 0) sii902x->bridge.ops |= DRM_BRIDGE_OP_HPD; -- 2.53.0