From nobody Sat Oct 4 15:59:02 2025 Received: from mail-m32106.qiye.163.com (mail-m32106.qiye.163.com [220.197.32.106]) (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 7C00328724D; Thu, 14 Aug 2025 10:48:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.32.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168492; cv=none; b=Mh5Awu2mYlBOylpJINemHYFtxjzSvawB/xRFJQm56XJNyyfa7+Qi8dQAwxFzpBmhvWmlJnXfzBE//Z4IEDLOwzOmHF0mZGeizrEfLNqlZvG8jGQYgK6FhCVKxuNIbjZF7ryZVwudZXPwM2QkYdLB0SVIQoiJ2hEcwE9SEe0zugY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168492; c=relaxed/simple; bh=HP9g5bPVTqd5Z2/EK+046wExGnLQZ3/+isZpXOi9GLw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=i/tTKRnuzu2ygQEJNtVUyjonr1EyOT0ymqSZNvxmE0PZYVXm+o232zKCC18KKvRtb+4nE+JRJIJPpbcc6hB0hel0k56lBY0kydN5r+HRzao60rVd0nJkak1oDsJp5jyJeyzDDAdBfXr9FCdAvXuMbZGwzzwiQwxfSkHW0ViSazA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=FSkrWzEs; arc=none smtp.client-ip=220.197.32.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="FSkrWzEs" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 1f6374289; Thu, 14 Aug 2025 18:47:58 +0800 (GMT+08:00) From: Damon Ding To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, jingoohan1@gmail.com, inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, krzk@kernel.org, alim.akhtar@samsung.com, hjc@rock-chips.com, heiko@sntech.de, andy.yan@rock-chips.com, dmitry.baryshkov@oss.qualcomm.com, l.stach@pengutronix.de, dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v4 01/13] drm/bridge: analogix_dp: Formalize the struct analogix_dp_device Date: Thu, 14 Aug 2025 18:47:41 +0800 Message-Id: <20250814104753.195255-2-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250814104753.195255-1-damon.ding@rock-chips.com> References: <20250814104753.195255-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0a98a83195e303a3kunm254826283f21ce X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZQ05KSFZJQ0JPSR8ZGRhLTExWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSU9PT0 hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=FSkrWzEs357Fg4P5weUhd8Wkv3VeNHSF6LgTb8pT2aJLiUrS+tfRmNLvB57QWCDeWpAC4XsZnguG3QFrdfIjsqGRSltnG4xWyx7AQWETbMhZL4hesugbj5RudgMsqCjyIhGMWzEYBwJVkrqm7KgbouHx1SMrlRgU6eewope86FQ=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=p8Q9no+T4MDXxyIkiNkZJti3sEtvUKV9beBUeeO4aS0=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Use the tap instead of the space for &analogix_dp_device.aux and &analogix_dp_device.force_hpd. Signed-off-by: Damon Ding Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/bridge/analogix/analogix_dp_core.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.h index b86e93f30ed6..91b215c6a0cf 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h @@ -156,7 +156,7 @@ struct analogix_dp_device { struct drm_device *drm_dev; struct drm_connector connector; struct drm_bridge bridge; - struct drm_dp_aux aux; + struct drm_dp_aux aux; struct clk *clock; unsigned int irq; void __iomem *reg_base; @@ -166,7 +166,7 @@ struct analogix_dp_device { struct phy *phy; int dpms_mode; struct gpio_desc *hpd_gpiod; - bool force_hpd; + bool force_hpd; bool fast_train_enable; bool psr_supported; =20 --=20 2.34.1 From nobody Sat Oct 4 15:59:02 2025 Received: from mail-m3270.qiye.163.com (mail-m3270.qiye.163.com [220.197.32.70]) (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 325682FA0EC; Thu, 14 Aug 2025 10:53:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.32.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168796; cv=none; b=laivXC50UZILrP6/261qAIN/HWAABdB9l6xeLDnYReXO8aUroUvbMiNY9b9HE4cGu7bXxSxq24lEezGl3ULEebEWWDXGUt+bT+O6R2pnGC7svHdbpo9v8UwUO5tbHM+4NMBuW3yYlUkeOX2A6RawOuZGdEfWSD0h++CIVV0e0Qo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168796; c=relaxed/simple; bh=3xQYD58mFmghAcfEZ+1U73cxFtAHLs1gyXKdCXJgmsQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=DG1i0U7EBhIw7+v2lnYCNQwOWoM36vd13pIvh7zIGG5A+iWbC9G3siFSp8zgp5G0VOYZIPFcu9W2VL/HqdM5dzHA1OkRM9VrOeWYY07JB0BPEziXazBx9vLMtOVbHxFit6jziwZs9raIzXCkv72hotDKm8IzW9SL+FlL8s8NlWM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=eNdJWZov; arc=none smtp.client-ip=220.197.32.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="eNdJWZov" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 1f6374290; Thu, 14 Aug 2025 18:48:00 +0800 (GMT+08:00) From: Damon Ding To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, jingoohan1@gmail.com, inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, krzk@kernel.org, alim.akhtar@samsung.com, hjc@rock-chips.com, heiko@sntech.de, andy.yan@rock-chips.com, dmitry.baryshkov@oss.qualcomm.com, l.stach@pengutronix.de, dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v4 02/13] drm/bridge: analogix_dp: Move &drm_bridge_funcs.mode_set to &drm_bridge_funcs.atomic_enable Date: Thu, 14 Aug 2025 18:47:42 +0800 Message-Id: <20250814104753.195255-3-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250814104753.195255-1-damon.ding@rock-chips.com> References: <20250814104753.195255-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0a98a8319ec603a3kunm254826283f21fb X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZGk5JSlZNHhlLS08eHkJLSExWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSU9PT0 hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=eNdJWZov/vY3RoacVknTgneXc9CuoLh3Udt4swSS3wlorVd/Rt04mxReVc0PBGohXGhW2fm5+bJ76hgSFiyb7ta0wBKa0GpjQZeD0W1xa9KAZ8jFqlnlIOAeJg4F0hM8jkwhfMLe3e0ugakJ3BxADBCAvqPB/ROtbqll2VV8WlM=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=iRIQPqf5FgKCUcwwQNJRIfqVXyG5a6BwS2hQtnRVAHU=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" According to the include/drm/drm_bridge.h, the callback &drm_bridge_funcs.mode_set is deprecated and it should be better to include the mode setting in the &drm_bridge_funcs.atomic_enable instead. Signed-off-by: Damon Ding Reviewed-by: Dmitry Baryshkov --- .../drm/bridge/analogix/analogix_dp_core.c | 161 +++++++++--------- 1 file changed, 82 insertions(+), 79 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index ed35e567d117..0106e7e0f093 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -1177,12 +1177,88 @@ static int analogix_dp_set_bridge(struct analogix_d= p_device *dp) return ret; } =20 +static void analogix_dp_bridge_mode_set(struct drm_bridge *bridge, + const struct drm_display_mode *mode) +{ + struct analogix_dp_device *dp =3D to_dp(bridge); + struct drm_display_info *display_info =3D &dp->connector.display_info; + struct video_info *video =3D &dp->video_info; + struct device_node *dp_node =3D dp->dev->of_node; + int vic; + + /* Input video interlaces & hsync pol & vsync pol */ + video->interlaced =3D !!(mode->flags & DRM_MODE_FLAG_INTERLACE); + video->v_sync_polarity =3D !!(mode->flags & DRM_MODE_FLAG_NVSYNC); + video->h_sync_polarity =3D !!(mode->flags & DRM_MODE_FLAG_NHSYNC); + + /* Input video dynamic_range & colorimetry */ + vic =3D drm_match_cea_mode(mode); + if ((vic =3D=3D 6) || (vic =3D=3D 7) || (vic =3D=3D 21) || (vic =3D=3D 22= ) || + (vic =3D=3D 2) || (vic =3D=3D 3) || (vic =3D=3D 17) || (vic =3D=3D 18= )) { + video->dynamic_range =3D CEA; + video->ycbcr_coeff =3D COLOR_YCBCR601; + } else if (vic) { + video->dynamic_range =3D CEA; + video->ycbcr_coeff =3D COLOR_YCBCR709; + } else { + video->dynamic_range =3D VESA; + video->ycbcr_coeff =3D COLOR_YCBCR709; + } + + /* Input vide bpc and color_formats */ + switch (display_info->bpc) { + case 12: + video->color_depth =3D COLOR_12; + break; + case 10: + video->color_depth =3D COLOR_10; + break; + case 8: + video->color_depth =3D COLOR_8; + break; + case 6: + video->color_depth =3D COLOR_6; + break; + default: + video->color_depth =3D COLOR_8; + break; + } + if (display_info->color_formats & DRM_COLOR_FORMAT_YCBCR444) + video->color_space =3D COLOR_YCBCR444; + else if (display_info->color_formats & DRM_COLOR_FORMAT_YCBCR422) + video->color_space =3D COLOR_YCBCR422; + else + video->color_space =3D COLOR_RGB; + + /* + * NOTE: those property parsing code is used for providing backward + * compatibility for samsung platform. + * Due to we used the "of_property_read_u32" interfaces, when this + * property isn't present, the "video_info" can keep the original + * values and wouldn't be modified. + */ + of_property_read_u32(dp_node, "samsung,color-space", + &video->color_space); + of_property_read_u32(dp_node, "samsung,dynamic-range", + &video->dynamic_range); + of_property_read_u32(dp_node, "samsung,ycbcr-coeff", + &video->ycbcr_coeff); + of_property_read_u32(dp_node, "samsung,color-depth", + &video->color_depth); + if (of_property_read_bool(dp_node, "hsync-active-high")) + video->h_sync_polarity =3D true; + if (of_property_read_bool(dp_node, "vsync-active-high")) + video->v_sync_polarity =3D true; + if (of_property_read_bool(dp_node, "interlaced")) + video->interlaced =3D true; +} + static void analogix_dp_bridge_atomic_enable(struct drm_bridge *bridge, struct drm_atomic_state *old_state) { struct analogix_dp_device *dp =3D to_dp(bridge); struct drm_crtc *crtc; - struct drm_crtc_state *old_crtc_state; + struct drm_crtc_state *old_crtc_state, *new_crtc_state; int timeout_loop =3D 0; int ret; =20 @@ -1190,6 +1266,11 @@ static void analogix_dp_bridge_atomic_enable(struct = drm_bridge *bridge, if (!crtc) return; =20 + new_crtc_state =3D drm_atomic_get_new_crtc_state(old_state, crtc); + if (!new_crtc_state) + return; + analogix_dp_bridge_mode_set(bridge, &new_crtc_state->adjusted_mode); + old_crtc_state =3D drm_atomic_get_old_crtc_state(old_state, crtc); /* Not a full enable, just disable PSR and continue */ if (old_crtc_state && old_crtc_state->self_refresh_active) { @@ -1296,83 +1377,6 @@ static void analogix_dp_bridge_atomic_post_disable(s= truct drm_bridge *bridge, DRM_ERROR("Failed to enable psr (%d)\n", ret); } =20 -static void analogix_dp_bridge_mode_set(struct drm_bridge *bridge, - const struct drm_display_mode *orig_mode, - const struct drm_display_mode *mode) -{ - struct analogix_dp_device *dp =3D to_dp(bridge); - struct drm_display_info *display_info =3D &dp->connector.display_info; - struct video_info *video =3D &dp->video_info; - struct device_node *dp_node =3D dp->dev->of_node; - int vic; - - /* Input video interlaces & hsync pol & vsync pol */ - video->interlaced =3D !!(mode->flags & DRM_MODE_FLAG_INTERLACE); - video->v_sync_polarity =3D !!(mode->flags & DRM_MODE_FLAG_NVSYNC); - video->h_sync_polarity =3D !!(mode->flags & DRM_MODE_FLAG_NHSYNC); - - /* Input video dynamic_range & colorimetry */ - vic =3D drm_match_cea_mode(mode); - if ((vic =3D=3D 6) || (vic =3D=3D 7) || (vic =3D=3D 21) || (vic =3D=3D 22= ) || - (vic =3D=3D 2) || (vic =3D=3D 3) || (vic =3D=3D 17) || (vic =3D=3D 18= )) { - video->dynamic_range =3D CEA; - video->ycbcr_coeff =3D COLOR_YCBCR601; - } else if (vic) { - video->dynamic_range =3D CEA; - video->ycbcr_coeff =3D COLOR_YCBCR709; - } else { - video->dynamic_range =3D VESA; - video->ycbcr_coeff =3D COLOR_YCBCR709; - } - - /* Input vide bpc and color_formats */ - switch (display_info->bpc) { - case 12: - video->color_depth =3D COLOR_12; - break; - case 10: - video->color_depth =3D COLOR_10; - break; - case 8: - video->color_depth =3D COLOR_8; - break; - case 6: - video->color_depth =3D COLOR_6; - break; - default: - video->color_depth =3D COLOR_8; - break; - } - if (display_info->color_formats & DRM_COLOR_FORMAT_YCBCR444) - video->color_space =3D COLOR_YCBCR444; - else if (display_info->color_formats & DRM_COLOR_FORMAT_YCBCR422) - video->color_space =3D COLOR_YCBCR422; - else - video->color_space =3D COLOR_RGB; - - /* - * NOTE: those property parsing code is used for providing backward - * compatibility for samsung platform. - * Due to we used the "of_property_read_u32" interfaces, when this - * property isn't present, the "video_info" can keep the original - * values and wouldn't be modified. - */ - of_property_read_u32(dp_node, "samsung,color-space", - &video->color_space); - of_property_read_u32(dp_node, "samsung,dynamic-range", - &video->dynamic_range); - of_property_read_u32(dp_node, "samsung,ycbcr-coeff", - &video->ycbcr_coeff); - of_property_read_u32(dp_node, "samsung,color-depth", - &video->color_depth); - if (of_property_read_bool(dp_node, "hsync-active-high")) - video->h_sync_polarity =3D true; - if (of_property_read_bool(dp_node, "vsync-active-high")) - video->v_sync_polarity =3D true; - if (of_property_read_bool(dp_node, "interlaced")) - video->interlaced =3D true; -} - static const struct drm_bridge_funcs analogix_dp_bridge_funcs =3D { .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, @@ -1381,7 +1385,6 @@ static const struct drm_bridge_funcs analogix_dp_brid= ge_funcs =3D { .atomic_enable =3D analogix_dp_bridge_atomic_enable, .atomic_disable =3D analogix_dp_bridge_atomic_disable, .atomic_post_disable =3D analogix_dp_bridge_atomic_post_disable, - .mode_set =3D analogix_dp_bridge_mode_set, .attach =3D analogix_dp_bridge_attach, }; =20 --=20 2.34.1 From nobody Sat Oct 4 15:59:02 2025 Received: from mail-m1973174.qiye.163.com (mail-m1973174.qiye.163.com [220.197.31.74]) (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 ECB4E2FA0EC; Thu, 14 Aug 2025 10:53:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168803; cv=none; b=QhPuI8RX3ydMj1HollwJPLgXaGBMqOOmZxoP/KOBWiEAlWxDCrbvR5ZvUZ93aKH8Yrt08wtoHMj4O/um6cfxLSOfYShCcrwuIeCANguLj6r/v3rc185uNPEGZEvbBdQoUCzzBv9dbih3TbBJ7wxMAn5wObIDW0nnAHmeF9fWyoI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168803; c=relaxed/simple; bh=GyeX+waaPZ1P25sVDlrh3uaOyS9aHHFsni3anHe0NAU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=chKk+slJdhQvJrTem0smT/VY6KCdJC7ZPgxjR569JVfUYtdoApHb4ZzhCL6kCte+RvKJTaFMthHKc5+gkwgQ770p5JKJ9+fU9b2XX43O5DOmzVr+R3LM3fKwPdUhoq/KVBK6gwdBJAzoRhqIKSgAMVj2hvJ5uQ+WyRtRmM5rAuc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=XYhnjX2S; arc=none smtp.client-ip=220.197.31.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="XYhnjX2S" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 1f6374299; Thu, 14 Aug 2025 18:48:03 +0800 (GMT+08:00) From: Damon Ding To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, jingoohan1@gmail.com, inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, krzk@kernel.org, alim.akhtar@samsung.com, hjc@rock-chips.com, heiko@sntech.de, andy.yan@rock-chips.com, dmitry.baryshkov@oss.qualcomm.com, l.stach@pengutronix.de, dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v4 03/13] drm/bridge: analogix_dp: Add &analogix_dp_plat_data.next_bridge Date: Thu, 14 Aug 2025 18:47:43 +0800 Message-Id: <20250814104753.195255-4-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250814104753.195255-1-damon.ding@rock-chips.com> References: <20250814104753.195255-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0a98a831a7c803a3kunm254826283f221e X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZQ0gaS1ZCT0IaTB5MGhpLGBlWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSEpKQk 1VSktLVUpCWQY+ DKIM-Signature: a=rsa-sha256; b=XYhnjX2Ski0cqV+ChKMLOs9TVOAy0Hv92mMBJ0R6z3LJ23purafUQnIcBP9rUjFAMZVzLHvgPk+XlFRDDb4mNuH59HX95q9cdATUxAV9+2JbPTcDzVmXN/4DS24Z52fMdOTMeuCP4f71m+0O55yAHaGh13EWSRQ0lEvsN6tzmbQ=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=fa6fATn7oRXC3Xr7p6HRlDJDyBhiCSTfJKlB/Jeo8uM=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" In order to move the panel/bridge parsing and attachmenet to the Analogix side, add component struct drm_bridge *next_bridge to platform data struct analogix_dp_plat_data. The movement makes sense because the panel/bridge should logically be positioned behind the Analogix bridge in the display pipeline. Signed-off-by: Damon Ding Reviewed-by: Dmitry Baryshkov --- Changes in v4: - Rename the &analogix_dp_plat_data.bridge to &analogix_dp_plat_data.next_bridge --- include/drm/bridge/analogix_dp.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/drm/bridge/analogix_dp.h b/include/drm/bridge/analogix= _dp.h index cf17646c1310..582357c20640 100644 --- a/include/drm/bridge/analogix_dp.h +++ b/include/drm/bridge/analogix_dp.h @@ -27,6 +27,7 @@ static inline bool is_rockchip(enum analogix_dp_devtype t= ype) struct analogix_dp_plat_data { enum analogix_dp_devtype dev_type; struct drm_panel *panel; + struct drm_bridge *next_bridge; struct drm_encoder *encoder; struct drm_connector *connector; bool skip_connector; --=20 2.34.1 From nobody Sat Oct 4 15:59:02 2025 Received: from mail-m49221.qiye.163.com (mail-m49221.qiye.163.com [45.254.49.221]) (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 27EB91A23A4; Thu, 14 Aug 2025 10:48:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.254.49.221 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168499; cv=none; b=nb4WuABWkFuPEg2GKeG0xpE6a7EwdsyK7KXPYR4F8WDaAGOMyLi6gE1DQU+Gjj8VbVVnYk1RnucRhpw4fv7oAATQg18fPXMcuLgFViPkXzjYMxFKsY9yuopmES/kLY/HT1pWA2jEG2wVLiMLtsLCtIzmgWwZcSTWmpXjB7JP2qQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168499; c=relaxed/simple; bh=8Ye0nK8j6NJ+Wh3RJYabw1yQB5jZibkoLcX7eWNYO78=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nzWQjjUd5g9Xf2gtsZODo1M1++vpGl6nISHtIj3SCCf+TPbEztJMTktxCoj0xMULOh6EMmu/McjxzEFQw4Dok+7M7YJgq7m2LH2sfTJkMYWZekMTQASLH+CpBACMDHhrrEXCmiGgcySaak2m4/vXUyXNkXEtMwLX8LUr5f8EcZI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=iQQ76WNA; arc=none smtp.client-ip=45.254.49.221 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="iQQ76WNA" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 1f637429d; Thu, 14 Aug 2025 18:48:05 +0800 (GMT+08:00) From: Damon Ding To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, jingoohan1@gmail.com, inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, krzk@kernel.org, alim.akhtar@samsung.com, hjc@rock-chips.com, heiko@sntech.de, andy.yan@rock-chips.com, dmitry.baryshkov@oss.qualcomm.com, l.stach@pengutronix.de, dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v4 04/13] drm/exynos: exynos_dp: Remove &exynos_dp_device.ptn_bridge Date: Thu, 14 Aug 2025 18:47:44 +0800 Message-Id: <20250814104753.195255-5-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250814104753.195255-1-damon.ding@rock-chips.com> References: <20250814104753.195255-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0a98a831b07103a3kunm254826283f222b X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZQhoaSlZJSkpPS0tIS0kaSxpWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSU9PT0 hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=iQQ76WNA7+Tyqxdp7IG85iOpC+RdziYUHKbHlDw2vIRPevA4IJXuZZsJxAps4urtHTykGYKUjVBOx9CDd02UJgxwwElinCBX3YGAi6VIC7fRZXPVHj5elTg50APoN+Lauxmgc6L8XCmhttVTZIQ+xbzNrZhKiD0A0EC4QcM8XDY=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=JeEm8m69W13KznEoDs77RvcikH57SqygZ8T41UBHVqw=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Use &analogix_dp_plat_data.bridge instead of &exynos_dp_device.ptn_bridge directly. Signed-off-by: Damon Ding Reviewed-by: Dmitry Baryshkov ------ Changes in v3: - Fix the typographical error for &dp->plat_data.bridge. Changes in v4: - Rename the &analogix_dp_plat_data.bridge to &analogix_dp_plat_data.next_bridge. --- drivers/gpu/drm/exynos/exynos_dp.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/ex= ynos_dp.c index 5bcf41e0bd04..f469ac5b3c2a 100644 --- a/drivers/gpu/drm/exynos/exynos_dp.c +++ b/drivers/gpu/drm/exynos/exynos_dp.c @@ -36,7 +36,6 @@ struct exynos_dp_device { struct drm_encoder encoder; struct drm_connector *connector; - struct drm_bridge *ptn_bridge; struct drm_device *drm_dev; struct device *dev; =20 @@ -106,8 +105,8 @@ static int exynos_dp_bridge_attach(struct analogix_dp_p= lat_data *plat_data, dp->connector =3D connector; =20 /* Pre-empt DP connector creation if there's a bridge */ - if (dp->ptn_bridge) { - ret =3D drm_bridge_attach(&dp->encoder, dp->ptn_bridge, bridge, + if (plat_data->next_bridge) { + ret =3D drm_bridge_attach(&dp->encoder, plat_data->next_bridge, bridge, 0); if (ret) return ret; @@ -155,7 +154,7 @@ static int exynos_dp_bind(struct device *dev, struct de= vice *master, void *data) =20 dp->drm_dev =3D drm_dev; =20 - if (!dp->plat_data.panel && !dp->ptn_bridge) { + if (!dp->plat_data.panel && !dp->plat_data.next_bridge) { ret =3D exynos_dp_dt_parse_panel(dp); if (ret) return ret; @@ -232,6 +231,7 @@ static int exynos_dp_probe(struct platform_device *pdev) =20 /* The remote port can be either a panel or a bridge */ dp->plat_data.panel =3D panel; + dp->plat_data.next_bridge =3D bridge; dp->plat_data.dev_type =3D EXYNOS_DP; dp->plat_data.power_on =3D exynos_dp_poweron; dp->plat_data.power_off =3D exynos_dp_poweroff; @@ -239,8 +239,6 @@ static int exynos_dp_probe(struct platform_device *pdev) dp->plat_data.get_modes =3D exynos_dp_get_modes; dp->plat_data.skip_connector =3D !!bridge; =20 - dp->ptn_bridge =3D bridge; - out: dp->adp =3D analogix_dp_probe(dev, &dp->plat_data); if (IS_ERR(dp->adp)) --=20 2.34.1 From nobody Sat Oct 4 15:59:02 2025 Received: from mail-m49228.qiye.163.com (mail-m49228.qiye.163.com [45.254.49.228]) (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 0F12F3009CD; Thu, 14 Aug 2025 13:10:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.254.49.228 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755177044; cv=none; b=AUB9QG3ZZg0DFab3QNbrgQH+FLsjagpyvT63qal874qWDYb8NHlb25k4Qq4shaGPd9ckx/fl9OpBvBa+cEKi9W2QKlGBAXACKudTdHjBYJHtc/PhNQN0UYmHKsEcILrNITQAT9xlbex6kOXemWKbXQvl7KR4BWJB12U32HwVeU0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755177044; c=relaxed/simple; bh=E5Ko/Ycwb9ywftBgCM6up2HvTyqHmGmvRCdDvPqt/sg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=E8sZqqw6kvdh/Q92F2hThEBay79iURfzWC/9Zzf1lacOtJIIvItFNItVhK7ofZyyBIdGzCG3qmAQx9ICJx+Mci6w72fOmk0VY5D6mF76nrr1HuaIhbCqguH0fL4zT2zmCkmvyTDRsJpqaX7+Rg060yqm6m+N79d5/HyirN3KQ40= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=UWzkhzG1; arc=none smtp.client-ip=45.254.49.228 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="UWzkhzG1" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 1f63742a2; Thu, 14 Aug 2025 18:48:07 +0800 (GMT+08:00) From: Damon Ding To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, jingoohan1@gmail.com, inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, krzk@kernel.org, alim.akhtar@samsung.com, hjc@rock-chips.com, heiko@sntech.de, andy.yan@rock-chips.com, dmitry.baryshkov@oss.qualcomm.com, l.stach@pengutronix.de, dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v4 05/13] drm/bridge: exynos_dp: Remove unused &exynos_dp_device.connector Date: Thu, 14 Aug 2025 18:47:45 +0800 Message-Id: <20250814104753.195255-6-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250814104753.195255-1-damon.ding@rock-chips.com> References: <20250814104753.195255-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0a98a831b8e303a3kunm254826283f2248 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZGh9CQlZMHU8eSR8dTUxOSR9WFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSU9PT0 hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=UWzkhzG1A/77ILxmK++V+efNrrG97qGEpK9lgNueTtNeCbV85nkJC6k6kNSMPf8KSyCO7qOJngeQLhQtGhSUlKNrR74SQRAQeMJMbH4Im4WJD4iSI/GOsGe/P+Cx9yEZEm4+omcoPyQw54dR/i0Vtpauwdui7yu519sMONkwd4w=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=WYQG3rMOARn6e8FXTNF061oPhhBOqd+NVL7TsVsGsic=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" The &exynos_dp_device.connector is assigned in exynos_dp_bridge_attach() but never used. It should make sense to remove it. Signed-off-by: Damon Ding Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/exynos/exynos_dp.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/ex= ynos_dp.c index f469ac5b3c2a..e20513164032 100644 --- a/drivers/gpu/drm/exynos/exynos_dp.c +++ b/drivers/gpu/drm/exynos/exynos_dp.c @@ -35,7 +35,6 @@ =20 struct exynos_dp_device { struct drm_encoder encoder; - struct drm_connector *connector; struct drm_device *drm_dev; struct device *dev; =20 @@ -102,8 +101,6 @@ static int exynos_dp_bridge_attach(struct analogix_dp_p= lat_data *plat_data, struct exynos_dp_device *dp =3D to_dp(plat_data); int ret; =20 - dp->connector =3D connector; - /* Pre-empt DP connector creation if there's a bridge */ if (plat_data->next_bridge) { ret =3D drm_bridge_attach(&dp->encoder, plat_data->next_bridge, bridge, --=20 2.34.1 From nobody Sat Oct 4 15:59:02 2025 Received: from mail-m1973180.qiye.163.com (mail-m1973180.qiye.163.com [220.197.31.80]) (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 C587B2F83C1; Thu, 14 Aug 2025 10:48:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.80 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168503; cv=none; b=Ls1oCMx/Z1+OhGhTdPEc6B8xkh9ttQmnfwVopiyxQgeu9O6w1JSS1zgBTwznExwcrvN4H95AW/IjfMH5xCLMKinR5h9VtOEZEwKjxS0bk0YuOmEvqDnVF7BPK8GVoc8GmDhuGNYkkxb3Ekm7STdz0lePjujwSvc0nJ3ILyfmUDo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168503; c=relaxed/simple; bh=eeJ5BBuHZR0FnWuTfSddTt3i/bGdsT8c6sH2NDGLPHY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XiuC56Scj1Y3UCGA5CGIk6zYHjm9dnagVqKDTXJU8IciX6qRFc4jV/nAY8w0PouERzMK81N4EYSqEmcLhniGZUTAzETSiauOc5D9b/bQ8RaYDW346aocZk0AdiSYMmLI/KS5C30IgDCjO4n9xe5dBW1jJHy3g+cRcCL6d8ql0kQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=DU6Fic49; arc=none smtp.client-ip=220.197.31.80 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="DU6Fic49" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 1f63742a9; Thu, 14 Aug 2025 18:48:09 +0800 (GMT+08:00) From: Damon Ding To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, jingoohan1@gmail.com, inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, krzk@kernel.org, alim.akhtar@samsung.com, hjc@rock-chips.com, heiko@sntech.de, andy.yan@rock-chips.com, dmitry.baryshkov@oss.qualcomm.com, l.stach@pengutronix.de, dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v4 06/13] drm/bridge: analogix_dp: Remove redundant &analogix_dp_plat_data.skip_connector Date: Thu, 14 Aug 2025 18:47:46 +0800 Message-Id: <20250814104753.195255-7-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250814104753.195255-1-damon.ding@rock-chips.com> References: <20250814104753.195255-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0a98a831c1c803a3kunm254826283f2261 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZGktMSFYZH0pPGUkdQhoeSE1WFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSU9PT0 hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=DU6Fic49RX2rHxU/RExxowDAWmGraHEp5sv/EtphjdSNKa3fMzkRm/gT69n9t+CXuPslQVKENeJOb7nr0Yqxk9W51a/0F6N7aHECBRbfHNW/fJDKSVGnbwP24J0ydu6AWN7kp/BlhMB8lZXH3wRq4nV4P+cmnGZvY92bmcGjN3k=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=0Sz719zWUmDOvnpzpXvej+PohzYcEMoPtBCAptCoxeA=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" The &analogix_dp_plat_data.skip_connector related check can be replaced by &analogix_dp_plat_data.bridge. Signed-off-by: Damon Ding Reviewed-by: Dmitry Baryshkov ------ Changes in v3: - Squash the Exynos side commit and the Analogix side commit together. Changes in v4: - Rename the &analogix_dp_plat_data.bridge to &analogix_dp_plat_data.next_bridge. --- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 2 +- drivers/gpu/drm/exynos/exynos_dp.c | 1 - include/drm/bridge/analogix_dp.h | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index 0106e7e0f093..7876b310aaed 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -1050,7 +1050,7 @@ static int analogix_dp_bridge_attach(struct drm_bridg= e *bridge, return -EINVAL; } =20 - if (!dp->plat_data->skip_connector) { + if (!dp->plat_data->next_bridge) { connector =3D &dp->connector; connector->polled =3D DRM_CONNECTOR_POLL_HPD; =20 diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/ex= ynos_dp.c index e20513164032..702128d76ae3 100644 --- a/drivers/gpu/drm/exynos/exynos_dp.c +++ b/drivers/gpu/drm/exynos/exynos_dp.c @@ -234,7 +234,6 @@ static int exynos_dp_probe(struct platform_device *pdev) dp->plat_data.power_off =3D exynos_dp_poweroff; dp->plat_data.attach =3D exynos_dp_bridge_attach; dp->plat_data.get_modes =3D exynos_dp_get_modes; - dp->plat_data.skip_connector =3D !!bridge; =20 out: dp->adp =3D analogix_dp_probe(dev, &dp->plat_data); diff --git a/include/drm/bridge/analogix_dp.h b/include/drm/bridge/analogix= _dp.h index 582357c20640..f06da105d8f2 100644 --- a/include/drm/bridge/analogix_dp.h +++ b/include/drm/bridge/analogix_dp.h @@ -30,7 +30,6 @@ struct analogix_dp_plat_data { struct drm_bridge *next_bridge; struct drm_encoder *encoder; struct drm_connector *connector; - bool skip_connector; =20 int (*power_on)(struct analogix_dp_plat_data *); int (*power_off)(struct analogix_dp_plat_data *); --=20 2.34.1 From nobody Sat Oct 4 15:59:02 2025 Received: from mail-m1973179.qiye.163.com (mail-m1973179.qiye.163.com [220.197.31.79]) (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 4D1E52FCBEC; Thu, 14 Aug 2025 10:48:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.79 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168506; cv=none; b=BQewTI8Wx7xZPNE1w4W4XP5mMlPPyKH/o00TBTuCSTy3G/zY5LqVQRrbeiT/b6N3Zl3LOYxWC5LMc/JmYfmZ0UmXeSU0seuD9lGPR0k1seE02uKqzmgzN3/RUyeA2UJKNbEl0EAfnGi/teh+wupqAUk8L+WzbsTxjBuFu6aahC4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168506; c=relaxed/simple; bh=dxj1h9Yzdw+RwEnb6s20WyMTicmkQqHhQ5uj/ViuNlg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CPonKplZfE6OfEqNDDEf7I+X02CeDr3d74cmFQycsFepXXBIyaNxt9aRxQh7XPQVeKpKvYgsiA5pzurM9DiBXDxwwqjlLAnYY20sKTRBElQxc1uG0AR+l2QvuoNudTzeOyf9WcVJY9N/EM9AwOE0aKO2o9Dq8Yr3d/0aFYV/4CQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=i3i7tXeZ; arc=none smtp.client-ip=220.197.31.79 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="i3i7tXeZ" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 1f63742b0; Thu, 14 Aug 2025 18:48:12 +0800 (GMT+08:00) From: Damon Ding To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, jingoohan1@gmail.com, inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, krzk@kernel.org, alim.akhtar@samsung.com, hjc@rock-chips.com, heiko@sntech.de, andy.yan@rock-chips.com, dmitry.baryshkov@oss.qualcomm.com, l.stach@pengutronix.de, dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v4 07/13] drm/bridge: analogix_dp: Apply drm_bridge_connector helper Date: Thu, 14 Aug 2025 18:47:47 +0800 Message-Id: <20250814104753.195255-8-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250814104753.195255-1-damon.ding@rock-chips.com> References: <20250814104753.195255-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0a98a831ca8203a3kunm254826283f227c X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZQxhPHlZKQ0tDHh9OSxoZHkpWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSEpKQk 1VSktLVUpCWQY+ DKIM-Signature: a=rsa-sha256; b=i3i7tXeZooGbNDI+RRATKbxNlQ/NYMN1hTfIueOnuGNjFA81ea4K+nYWKYW9/V5DHkQ4K1QtVjm93ISJ8sQTtuQ5VNejULw5FjYu4jUqY9PJyiIu0y08Qw5KpC9VRuTExyQTyplyk2K9CefrP0yhrQeEmhdbJSsBQN77OXD7t7Y=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=BUYeNszQxACKY/+G+aYjnid6+Gruu6ROo4KNsOLPALc=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Apply drm_bridge_connector helper for Analogix DP driver. The following changes have been made: - Apply drm_bridge_connector helper to get rid of &drm_connector_funcs and &drm_connector_helper_funcs. - Remove unnecessary parameter struct drm_connector* for callback &analogix_dp_plat_data.attach. - Remove &analogix_dp_device.connector. - Convert analogix_dp_atomic_check()/analogix_dp_detect() to &drm_bridge_funcs.atomic_check()/&drm_bridge_funcs.detect(). - Split analogix_dp_get_modes() into &drm_bridge_funcs.get_modes() and &drm_bridge_funcs.edid_read(). Signed-off-by: Damon Ding ------ Changes in v2: - For &drm_bridge.ops, remove DRM_BRIDGE_OP_HPD and add DRM_BRIDGE_OP_EDID. - Add analogix_dp_bridge_edid_read(). - Move &analogix_dp_plat_data.skip_connector deletion to the previous patches. Changes in v3: - Rebase with the new devm_drm_bridge_alloc() related commit 48f05c3b4b70 ("drm/bridge: analogix_dp: Use devm_drm_bridge_alloc() API"). - Expand the commit message. - Call drm_bridge_get_modes() in analogix_dp_bridge_get_modes() if the bridge is available. - Remove unnecessary parameter struct drm_connector* for callback &analogix_dp_plat_data.attach. - In order to decouple the connector driver and the bridge driver, move the bridge connector initilization to the Rockchip and Exynos sides. Changes in v4: - Expand analogix_dp_bridge_detect() parameters to &drm_bridge and &drm_connector. - Rename the &analogix_dp_plat_data.bridge to &analogix_dp_plat_data.next_bridge. --- .../drm/bridge/analogix/analogix_dp_core.c | 145 ++++++++---------- .../drm/bridge/analogix/analogix_dp_core.h | 1 - drivers/gpu/drm/exynos/exynos_dp.c | 18 ++- .../gpu/drm/rockchip/analogix_dp-rockchip.c | 11 +- include/drm/bridge/analogix_dp.h | 3 +- 5 files changed, 88 insertions(+), 90 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index 7876b310aaed..a8ed44ec8ef5 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -947,24 +947,16 @@ static int analogix_dp_disable_psr(struct analogix_dp= _device *dp) return analogix_dp_send_psr_spd(dp, &psr_vsc, true); } =20 -static int analogix_dp_get_modes(struct drm_connector *connector) +static int analogix_dp_bridge_get_modes(struct drm_bridge *bridge, struct = drm_connector *connector) { - struct analogix_dp_device *dp =3D to_dp(connector); - const struct drm_edid *drm_edid; + struct analogix_dp_device *dp =3D to_dp(bridge); int num_modes =3D 0; =20 - if (dp->plat_data->panel) { + if (dp->plat_data->panel) num_modes +=3D drm_panel_get_modes(dp->plat_data->panel, connector); - } else { - drm_edid =3D drm_edid_read_ddc(connector, &dp->aux.ddc); =20 - drm_edid_connector_update(&dp->connector, drm_edid); - - if (drm_edid) { - num_modes +=3D drm_edid_connector_add_modes(&dp->connector); - drm_edid_free(drm_edid); - } - } + if (dp->plat_data->next_bridge) + num_modes +=3D drm_bridge_get_modes(dp->plat_data->next_bridge, connecto= r); =20 if (dp->plat_data->get_modes) num_modes +=3D dp->plat_data->get_modes(dp->plat_data, connector); @@ -972,51 +964,39 @@ static int analogix_dp_get_modes(struct drm_connector= *connector) return num_modes; } =20 -static struct drm_encoder * -analogix_dp_best_encoder(struct drm_connector *connector) +static const struct drm_edid *analogix_dp_bridge_edid_read(struct drm_brid= ge *bridge, + struct drm_connector *connector) { - struct analogix_dp_device *dp =3D to_dp(connector); + struct analogix_dp_device *dp =3D to_dp(bridge); + const struct drm_edid *drm_edid =3D NULL; =20 - return dp->encoder; -} + drm_edid =3D drm_edid_read_ddc(connector, &dp->aux.ddc); =20 + if (dp->plat_data->get_modes) + dp->plat_data->get_modes(dp->plat_data, connector); =20 -static int analogix_dp_atomic_check(struct drm_connector *connector, - struct drm_atomic_state *state) -{ - struct analogix_dp_device *dp =3D to_dp(connector); - struct drm_connector_state *conn_state; - struct drm_crtc_state *crtc_state; + return drm_edid; +} =20 - conn_state =3D drm_atomic_get_new_connector_state(state, connector); - if (WARN_ON(!conn_state)) - return -ENODEV; +static int analogix_dp_bridge_atomic_check(struct drm_bridge *bridge, + struct drm_bridge_state *bridge_state, + struct drm_crtc_state *crtc_state, + struct drm_connector_state *conn_state) +{ + struct analogix_dp_device *dp =3D to_dp(bridge); =20 conn_state->self_refresh_aware =3D true; =20 - if (!conn_state->crtc) - return 0; - - crtc_state =3D drm_atomic_get_new_crtc_state(state, conn_state->crtc); - if (!crtc_state) - return 0; - if (crtc_state->self_refresh_active && !dp->psr_supported) return -EINVAL; =20 return 0; } =20 -static const struct drm_connector_helper_funcs analogix_dp_connector_helpe= r_funcs =3D { - .get_modes =3D analogix_dp_get_modes, - .best_encoder =3D analogix_dp_best_encoder, - .atomic_check =3D analogix_dp_atomic_check, -}; - static enum drm_connector_status -analogix_dp_detect(struct drm_connector *connector, bool force) +analogix_dp_bridge_detect(struct drm_bridge *bridge, struct drm_connector = *connector) { - struct analogix_dp_device *dp =3D to_dp(connector); + struct analogix_dp_device *dp =3D to_dp(bridge); enum drm_connector_status status =3D connector_status_disconnected; =20 if (dp->plat_data->panel) @@ -1028,21 +1008,11 @@ analogix_dp_detect(struct drm_connector *connector,= bool force) return status; } =20 -static const struct drm_connector_funcs analogix_dp_connector_funcs =3D { - .fill_modes =3D drm_helper_probe_single_connector_modes, - .detect =3D analogix_dp_detect, - .destroy =3D drm_connector_cleanup, - .reset =3D drm_atomic_helper_connector_reset, - .atomic_duplicate_state =3D drm_atomic_helper_connector_duplicate_state, - .atomic_destroy_state =3D drm_atomic_helper_connector_destroy_state, -}; - static int analogix_dp_bridge_attach(struct drm_bridge *bridge, struct drm_encoder *encoder, enum drm_bridge_attach_flags flags) { struct analogix_dp_device *dp =3D to_dp(bridge); - struct drm_connector *connector =3D NULL; int ret =3D 0; =20 if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) { @@ -1050,31 +1020,8 @@ static int analogix_dp_bridge_attach(struct drm_brid= ge *bridge, return -EINVAL; } =20 - if (!dp->plat_data->next_bridge) { - connector =3D &dp->connector; - connector->polled =3D DRM_CONNECTOR_POLL_HPD; - - ret =3D drm_connector_init(dp->drm_dev, connector, - &analogix_dp_connector_funcs, - DRM_MODE_CONNECTOR_eDP); - if (ret) { - DRM_ERROR("Failed to initialize connector with drm\n"); - return ret; - } - - drm_connector_helper_add(connector, - &analogix_dp_connector_helper_funcs); - drm_connector_attach_encoder(connector, encoder); - } - - /* - * NOTE: the connector registration is implemented in analogix - * platform driver, that to say connector would be exist after - * plat_data->attch return, that's why we record the connector - * point after plat attached. - */ if (dp->plat_data->attach) { - ret =3D dp->plat_data->attach(dp->plat_data, bridge, connector); + ret =3D dp->plat_data->attach(dp->plat_data, bridge); if (ret) { DRM_ERROR("Failed at platform attach func\n"); return ret; @@ -1178,14 +1125,21 @@ static int analogix_dp_set_bridge(struct analogix_d= p_device *dp) } =20 static void analogix_dp_bridge_mode_set(struct drm_bridge *bridge, + struct drm_atomic_state *state, const struct drm_display_mode *mode) { struct analogix_dp_device *dp =3D to_dp(bridge); - struct drm_display_info *display_info =3D &dp->connector.display_info; struct video_info *video =3D &dp->video_info; struct device_node *dp_node =3D dp->dev->of_node; + struct drm_connector *connector; + struct drm_display_info *display_info; int vic; =20 + connector =3D drm_atomic_get_new_connector_for_encoder(state, bridge->enc= oder); + if (!connector) + return; + display_info =3D &connector->display_info; + /* Input video interlaces & hsync pol & vsync pol */ video->interlaced =3D !!(mode->flags & DRM_MODE_FLAG_INTERLACE); video->v_sync_polarity =3D !!(mode->flags & DRM_MODE_FLAG_NVSYNC); @@ -1269,7 +1223,7 @@ static void analogix_dp_bridge_atomic_enable(struct d= rm_bridge *bridge, new_crtc_state =3D drm_atomic_get_new_crtc_state(old_state, crtc); if (!new_crtc_state) return; - analogix_dp_bridge_mode_set(bridge, &new_crtc_state->adjusted_mode); + analogix_dp_bridge_mode_set(bridge, old_state, &new_crtc_state->adjusted_= mode); =20 old_crtc_state =3D drm_atomic_get_old_crtc_state(old_state, crtc); /* Not a full enable, just disable PSR and continue */ @@ -1385,7 +1339,11 @@ static const struct drm_bridge_funcs analogix_dp_bri= dge_funcs =3D { .atomic_enable =3D analogix_dp_bridge_atomic_enable, .atomic_disable =3D analogix_dp_bridge_atomic_disable, .atomic_post_disable =3D analogix_dp_bridge_atomic_post_disable, + .atomic_check =3D analogix_dp_bridge_atomic_check, .attach =3D analogix_dp_bridge_attach, + .get_modes =3D analogix_dp_bridge_get_modes, + .edid_read =3D analogix_dp_bridge_edid_read, + .detect =3D analogix_dp_bridge_detect, }; =20 static int analogix_dp_dt_parse_pdata(struct analogix_dp_device *dp) @@ -1615,6 +1573,7 @@ EXPORT_SYMBOL_GPL(analogix_dp_resume); =20 int analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm= _dev) { + struct drm_bridge *bridge =3D &dp->bridge; int ret; =20 dp->drm_dev =3D drm_dev; @@ -1628,7 +1587,16 @@ int analogix_dp_bind(struct analogix_dp_device *dp, = struct drm_device *drm_dev) return ret; } =20 - ret =3D drm_bridge_attach(dp->encoder, &dp->bridge, NULL, 0); + bridge->ops =3D DRM_BRIDGE_OP_DETECT | + DRM_BRIDGE_OP_EDID | + DRM_BRIDGE_OP_MODES; + bridge->of_node =3D dp->dev->of_node; + bridge->type =3D DRM_MODE_CONNECTOR_eDP; + ret =3D devm_drm_bridge_add(dp->dev, &dp->bridge); + if (ret) + goto err_unregister_aux; + + ret =3D drm_bridge_attach(dp->encoder, bridge, NULL, 0); if (ret) { DRM_ERROR("failed to create bridge (%d)\n", ret); goto err_unregister_aux; @@ -1646,7 +1614,6 @@ EXPORT_SYMBOL_GPL(analogix_dp_bind); void analogix_dp_unbind(struct analogix_dp_device *dp) { analogix_dp_bridge_disable(&dp->bridge); - dp->connector.funcs->destroy(&dp->connector); =20 drm_panel_unprepare(dp->plat_data->panel); =20 @@ -1656,7 +1623,8 @@ EXPORT_SYMBOL_GPL(analogix_dp_unbind); =20 int analogix_dp_start_crc(struct drm_connector *connector) { - struct analogix_dp_device *dp =3D to_dp(connector); + struct analogix_dp_device *dp; + struct drm_bridge *bridge; =20 if (!connector->state->crtc) { DRM_ERROR("Connector %s doesn't currently have a CRTC.\n", @@ -1664,13 +1632,26 @@ int analogix_dp_start_crc(struct drm_connector *con= nector) return -EINVAL; } =20 + bridge =3D drm_bridge_chain_get_first_bridge(connector->encoder); + if (bridge->type !=3D DRM_MODE_CONNECTOR_eDP) + return -EINVAL; + + dp =3D to_dp(bridge); + return drm_dp_start_crc(&dp->aux, connector->state->crtc); } EXPORT_SYMBOL_GPL(analogix_dp_start_crc); =20 int analogix_dp_stop_crc(struct drm_connector *connector) { - struct analogix_dp_device *dp =3D to_dp(connector); + struct analogix_dp_device *dp; + struct drm_bridge *bridge; + + bridge =3D drm_bridge_chain_get_first_bridge(connector->encoder); + if (bridge->type !=3D DRM_MODE_CONNECTOR_eDP) + return -EINVAL; + + dp =3D to_dp(bridge); =20 return drm_dp_stop_crc(&dp->aux); } diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.h index 91b215c6a0cf..17347448c6b0 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h @@ -154,7 +154,6 @@ struct analogix_dp_device { struct drm_encoder *encoder; struct device *dev; struct drm_device *drm_dev; - struct drm_connector connector; struct drm_bridge bridge; struct drm_dp_aux aux; struct clk *clock; diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/ex= ynos_dp.c index 702128d76ae3..65579873ceea 100644 --- a/drivers/gpu/drm/exynos/exynos_dp.c +++ b/drivers/gpu/drm/exynos/exynos_dp.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -95,8 +96,7 @@ static int exynos_dp_get_modes(struct analogix_dp_plat_da= ta *plat_data, } =20 static int exynos_dp_bridge_attach(struct analogix_dp_plat_data *plat_data, - struct drm_bridge *bridge, - struct drm_connector *connector) + struct drm_bridge *bridge) { struct exynos_dp_device *dp =3D to_dp(plat_data); int ret; @@ -147,6 +147,7 @@ static int exynos_dp_bind(struct device *dev, struct de= vice *master, void *data) struct exynos_dp_device *dp =3D dev_get_drvdata(dev); struct drm_encoder *encoder =3D &dp->encoder; struct drm_device *drm_dev =3D data; + struct drm_connector *connector; int ret; =20 dp->drm_dev =3D drm_dev; @@ -168,10 +169,19 @@ static int exynos_dp_bind(struct device *dev, struct = device *master, void *data) dp->plat_data.encoder =3D encoder; =20 ret =3D analogix_dp_bind(dp->adp, dp->drm_dev); - if (ret) + if (ret) { dp->encoder.funcs->destroy(&dp->encoder); + return ret; + } + + connector =3D drm_bridge_connector_init(dp->drm_dev, dp->plat_data.encode= r); + if (IS_ERR(connector)) { + ret =3D PTR_ERR(connector); + dev_err(dp->dev, "Failed to initialize bridge_connector\n"); + return ret; + } =20 - return ret; + return drm_connector_attach_encoder(connector, dp->plat_data.encoder); } =20 static void exynos_dp_unbind(struct device *dev, struct device *master, diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/= drm/rockchip/analogix_dp-rockchip.c index d30f0983a53a..87dfb48206db 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -394,6 +395,7 @@ static int rockchip_dp_bind(struct device *dev, struct = device *master, { struct rockchip_dp_device *dp =3D dev_get_drvdata(dev); struct drm_device *drm_dev =3D data; + struct drm_connector *connector; int ret; =20 dp->drm_dev =3D drm_dev; @@ -413,7 +415,14 @@ static int rockchip_dp_bind(struct device *dev, struct= device *master, if (ret) goto err_cleanup_encoder; =20 - return 0; + connector =3D drm_bridge_connector_init(dp->drm_dev, dp->plat_data.encode= r); + if (IS_ERR(connector)) { + ret =3D PTR_ERR(connector); + dev_err(dp->dev, "Failed to initialize bridge_connector\n"); + goto err_cleanup_encoder; + } + + return drm_connector_attach_encoder(connector, dp->plat_data.encoder); err_cleanup_encoder: dp->encoder.encoder.funcs->destroy(&dp->encoder.encoder); return ret; diff --git a/include/drm/bridge/analogix_dp.h b/include/drm/bridge/analogix= _dp.h index f06da105d8f2..ffc05f3de232 100644 --- a/include/drm/bridge/analogix_dp.h +++ b/include/drm/bridge/analogix_dp.h @@ -33,8 +33,7 @@ struct analogix_dp_plat_data { =20 int (*power_on)(struct analogix_dp_plat_data *); int (*power_off)(struct analogix_dp_plat_data *); - int (*attach)(struct analogix_dp_plat_data *, struct drm_bridge *, - struct drm_connector *); + int (*attach)(struct analogix_dp_plat_data *, struct drm_bridge *); int (*get_modes)(struct analogix_dp_plat_data *, struct drm_connector *); }; --=20 2.34.1 From nobody Sat Oct 4 15:59:02 2025 Received: from mail-m3292.qiye.163.com (mail-m3292.qiye.163.com [220.197.32.92]) (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 191972F99BF; Thu, 14 Aug 2025 10:48:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.32.92 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168507; cv=none; b=myDmKpfwQTJFCBS1+iZkoOUNw58VRx6se0SGmaS9s1raMmGk3ido2sCI68zJK7LbYZk2kJACfAczGuqvViiZLnQUT2ph0TKuq8LbnhuUsKn593VF1m3HXcM36OtqopxxEdzHPfuCMRwN511WEanwpAZBs1FTcs6Pu/E+FieSgow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168507; c=relaxed/simple; bh=phUEGUQVYUoHTkHFHssUKD7CEMbnk+ABAOZqlB6pvRA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=X+7BwtjAHglju1uhn22KROeqX0Xfxqjo9oe92Uiz6boUiBHJS60dxQfXMnRLMtxiwioKzMO8kr1ykUgDE5d5dR4w3yBdHkcAIHnmV7vIIRJZrsCUUUvUhC0U06a2i+WqcNHP2CTDhv0Mz8lVaGh+k+huyX97fPKhizxPibtjXKg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=g8Ar/dWx; arc=none smtp.client-ip=220.197.32.92 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="g8Ar/dWx" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 1f63742b4; Thu, 14 Aug 2025 18:48:14 +0800 (GMT+08:00) From: Damon Ding To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, jingoohan1@gmail.com, inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, krzk@kernel.org, alim.akhtar@samsung.com, hjc@rock-chips.com, heiko@sntech.de, andy.yan@rock-chips.com, dmitry.baryshkov@oss.qualcomm.com, l.stach@pengutronix.de, dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v4 08/13] drm/bridge: analogix_dp: Add new API analogix_dp_finish_probe() Date: Thu, 14 Aug 2025 18:47:48 +0800 Message-Id: <20250814104753.195255-9-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250814104753.195255-1-damon.ding@rock-chips.com> References: <20250814104753.195255-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0a98a831d3c203a3kunm254826283f229d X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZGkMdHlZLTkhOT0gYTEkdSE1WFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSU9PT0 hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=g8Ar/dWx7wHLL1jLLx9f21FSqRYd0rSraT59myjB5mqrjAt5tbr/87P8p/kICNq8+rmqIBCdKBSvI2tY+LPx9Weo5Mly2R2pafdyT2dE57/rK5ebj2vqMB3rOzRAAm1qIkEQv150pkeKZyNpak9pf3/jgYj1b4Tdli4beT6vwiU=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=vOy1R8qH+/FjabdCr3JRnkdDLl9WXYsD6J7n6SFTrHI=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Since the panel/bridge should logically be positioned behind the Analogix bridge in the display pipeline, it makes sense to handle the panel/bridge parsing on the Analogix side. Therefore, we add a new API analogix_dp_finish_probe(), which combines the panel/bridge parsing with component addition, to do it. Signed-off-by: Damon Ding --- Changes in v4: - Rename the &analogix_dp_plat_data.bridge to &analogix_dp_plat_data.next_bridge. - Remame API analogix_dp_find_panel_or_bridge() to analogix_dp_finish_probe(). --- .../drm/bridge/analogix/analogix_dp_core.c | 48 +++++++++++++++++++ include/drm/bridge/analogix_dp.h | 2 + 2 files changed, 50 insertions(+) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index a8ed44ec8ef5..3e76a7b7d227 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -20,12 +20,14 @@ #include =20 #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -1671,6 +1673,52 @@ struct drm_dp_aux *analogix_dp_get_aux(struct analog= ix_dp_device *dp) } EXPORT_SYMBOL_GPL(analogix_dp_get_aux); =20 +static int analogix_dp_aux_done_probing(struct drm_dp_aux *aux) +{ + struct analogix_dp_device *dp =3D to_dp(aux); + struct analogix_dp_plat_data *plat_data =3D dp->plat_data; + int port =3D plat_data->dev_type =3D=3D EXYNOS_DP ? 0 : 1; + int ret; + + /* + * If drm_of_find_panel_or_bridge() returns -ENODEV, there may be no vali= d panel + * or bridge nodes. The driver should go on for the driver-free bridge or= the DP + * mode applications. + */ + ret =3D drm_of_find_panel_or_bridge(dp->dev->of_node, port, 0, + &plat_data->panel, &plat_data->next_bridge); + if (ret && ret !=3D -ENODEV) + return ret; + + return component_add(dp->dev, plat_data->ops); +} + +int analogix_dp_finish_probe(struct analogix_dp_device *dp) +{ + int ret; + + ret =3D devm_of_dp_aux_populate_bus(&dp->aux, analogix_dp_aux_done_probin= g); + if (ret) { + /* + * If devm_of_dp_aux_populate_bus() returns -ENODEV, the done_probing() = will + * not be called because there are no EP devices. Then the callback func= tion + * analogix_dp_aux_done_probing() will be called directly in order to su= pport + * the other valid DT configurations. + * + * NOTE: The devm_of_dp_aux_populate_bus() is allowed to return -EPROBE_= DEFER. + */ + if (ret !=3D -ENODEV) { + dev_err(dp->dev, "failed to populate aux bus\n"); + return ret; + } + + return analogix_dp_aux_done_probing(&dp->aux); + } + + return 0; +} +EXPORT_SYMBOL_GPL(analogix_dp_finish_probe); + MODULE_AUTHOR("Jingoo Han "); MODULE_DESCRIPTION("Analogix DP Core Driver"); MODULE_LICENSE("GPL v2"); diff --git a/include/drm/bridge/analogix_dp.h b/include/drm/bridge/analogix= _dp.h index ffc05f3de232..afd0cc33b54e 100644 --- a/include/drm/bridge/analogix_dp.h +++ b/include/drm/bridge/analogix_dp.h @@ -30,6 +30,7 @@ struct analogix_dp_plat_data { struct drm_bridge *next_bridge; struct drm_encoder *encoder; struct drm_connector *connector; + const struct component_ops *ops; =20 int (*power_on)(struct analogix_dp_plat_data *); int (*power_off)(struct analogix_dp_plat_data *); @@ -51,5 +52,6 @@ int analogix_dp_stop_crc(struct drm_connector *connector); =20 struct analogix_dp_plat_data *analogix_dp_aux_to_plat_data(struct drm_dp_a= ux *aux); struct drm_dp_aux *analogix_dp_get_aux(struct analogix_dp_device *dp); +int analogix_dp_finish_probe(struct analogix_dp_device *dp); =20 #endif /* _ANALOGIX_DP_H_ */ --=20 2.34.1 From nobody Sat Oct 4 15:59:02 2025 Received: from mail-m19731107.qiye.163.com (mail-m19731107.qiye.163.com [220.197.31.107]) (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 31A7A2FA0F7; Thu, 14 Aug 2025 10:48:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.107 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168509; cv=none; b=U1bgqBUuNKiuplMsQtaGCvb3kOYcwBqn/ijjUptiuMWKHMnVRNVgKnuWcCsyQN5L+eyMAAm2RY9kDhIGAY6lvkoocXZKIS4M6q+g/rA9rzaNVkm6jxppxEuP0rjJVq8dPnJlBV8sFuusl+sdAG+R4RGQA6fY5gQ+WFNh5qksq9g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755168509; c=relaxed/simple; bh=A0oNThF+bSJ29BKSxhRQs1DwzPM04ghMx/xb6yVNbGI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nIdZbl495obgfOAIRCMyybfncADzGBSgVU0l3IMKIu5DC2m7osiumOoGmhEmNFKHD23cC81KjBE1h1164+HNRvjydqmlDGSHvNRY6hzvdfXIobFq19zs+K4ntBp7n8IgRgde/2R56KwHrInVYPxPWS7G+LTi2syyMD3UgzABX70= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=TEnlViqP; arc=none smtp.client-ip=220.197.31.107 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="TEnlViqP" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 1f63742bd; Thu, 14 Aug 2025 18:48:16 +0800 (GMT+08:00) From: Damon Ding To: andrzej.hajda@intel.com, neil.armstrong@linaro.org, rfoss@kernel.org Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, jingoohan1@gmail.com, inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, krzk@kernel.org, alim.akhtar@samsung.com, hjc@rock-chips.com, heiko@sntech.de, andy.yan@rock-chips.com, dmitry.baryshkov@oss.qualcomm.com, l.stach@pengutronix.de, dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v4 09/13] drm/rockchip: analogix_dp: Apply analogix_dp_finish_probe() Date: Thu, 14 Aug 2025 18:47:49 +0800 Message-Id: <20250814104753.195255-10-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250814104753.195255-1-damon.ding@rock-chips.com> References: <20250814104753.195255-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0a98a831dc7a03a3kunm254826283f22cc X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZQk5CQ1YdHkxKGBlOTk4YSxpWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSEpKQk 1VSktLVUpCWQY+ DKIM-Signature: a=rsa-sha256; b=TEnlViqP6hGef6TrJ3n0BPR9vZ3yZdMwRXld4lGNZT8p8a/QUz+tpDZV3sQfWhnA5a5APY0dsvQ7RBysLpaCJyaPIuRmI7qTmIPjLr/4Qbc3UujX6B0/HNRgt68rWSj99XCFuTs7f0tlB83bMlU2wrdNH2BPAERR7WSe/CNopq0=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=Txc8tG9EPe2ZAsK/m3rqEXGv8/OEo3ZLoIRIp4apRlY=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Apply analogix_dp_finish_probe() in order to move the panel/bridge parsing from Rockchip side to the Analogix side. Signed-off-by: Damon Ding Reviewed-by: Dmitry Baryshkov --- Changes in v4: - Rename analogix_dp_find_panel_or_bridge() to analogix_dp_finish_probe(). --- .../gpu/drm/rockchip/analogix_dp-rockchip.c | 38 +------------------ 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/= drm/rockchip/analogix_dp-rockchip.c index 87dfb48206db..0862b09a8be2 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -21,14 +21,12 @@ #include