public inbox for linux-rockchip@lists.infradead.org
 help / color / mirror / Atom feed
From: Damon Ding <damon.ding@rock-chips.com>
To: heiko@sntech.de
Cc: robh@kernel.org, conor+dt@kernel.org, algea.cao@rock-chips.com,
	rfoss@kernel.org, devicetree@vger.kernel.org,
	linux-phy@lists.infradead.org,
	linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org,
	sebastian.reichel@collabora.com, dri-devel@lists.freedesktop.org,
	hjc@rock-chips.com, kever.yang@rock-chips.com,
	dmitry.baryshkov@linaro.org, vkoul@kernel.org,
	Damon Ding <damon.ding@rock-chips.com>,
	andy.yan@rock-chips.com, krzk+dt@kernel.org,
	linux-arm-kernel@lists.infradead.org, l.stach@pengutronix.de
Subject: [PATCH v6 07/14] drm/bridge: analogix_dp: Add support to get panel from the DP AUX bus
Date: Thu, 23 Jan 2025 18:07:40 +0800	[thread overview]
Message-ID: <20250123100747.1841357-8-damon.ding@rock-chips.com> (raw)
In-Reply-To: <20250123100747.1841357-1-damon.ding@rock-chips.com>

The main modification is moving the DP AUX initialization from function
analogix_dp_bind() to analogix_dp_probe(). In order to get the EDID of
eDP panel during probing, it is also needed to advance PM operaions to
ensure that eDP controller and phy are prepared for AUX transmission.

In addtion, add a new function analogix_dp_remove() to ensure symmetry
for PM operations.

Signed-off-by: Damon Ding <damon.ding@rock-chips.com>

---

Changes in v4:
- Use done_probing() to call drm_of_find_panel_or_bridge() and
  component_add() when getting panel from the DP AUX bus

Changes in v5:
- Advance PM operations to make eDP AUX work well

Changes in v6:
- Use devm_pm_runtime_enable() instead of devm_add_action_or_reset()
- Add a new function analogix_dp_remove() to ensure symmetry for PM
  operations
---
 .../drm/bridge/analogix/analogix_dp_core.c    | 57 ++++++++++---------
 .../gpu/drm/rockchip/analogix_dp-rockchip.c   |  4 ++
 include/drm/bridge/analogix_dp.h              |  1 +
 3 files changed, 34 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
index 8251adfce2f9..30da8a14361e 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
@@ -1658,14 +1658,42 @@ analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data)
 	}
 	disable_irq(dp->irq);
 
+	dp->aux.name = "DP-AUX";
+	dp->aux.transfer = analogix_dpaux_transfer;
+	dp->aux.dev = dp->dev;
+	drm_dp_aux_init(&dp->aux);
+
+	if (IS_ENABLED(CONFIG_PM)) {
+		pm_runtime_use_autosuspend(dp->dev);
+		pm_runtime_set_autosuspend_delay(dp->dev, 100);
+		ret = devm_pm_runtime_enable(dp->dev);
+		if (ret)
+			goto err_disable_pm_runtime;
+	} else {
+		ret = analogix_dp_resume(dp);
+		if (ret)
+			goto err_disable_clk;
+	}
+
 	return dp;
 
+err_disable_pm_runtime:
+	pm_runtime_dont_use_autosuspend(dp->dev);
 err_disable_clk:
 	clk_disable_unprepare(dp->clock);
 	return ERR_PTR(ret);
 }
 EXPORT_SYMBOL_GPL(analogix_dp_probe);
 
+void analogix_dp_remove(struct analogix_dp_device *dp)
+{
+	if (IS_ENABLED(CONFIG_PM))
+		pm_runtime_dont_use_autosuspend(dp->dev);
+	else
+		analogix_dp_suspend(dp);
+}
+EXPORT_SYMBOL_GPL(analogix_dp_remove);
+
 int analogix_dp_suspend(struct analogix_dp_device *dp)
 {
 	phy_power_off(dp->phy);
@@ -1708,25 +1736,12 @@ int analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm_dev)
 	dp->drm_dev = drm_dev;
 	dp->encoder = dp->plat_data->encoder;
 
-	if (IS_ENABLED(CONFIG_PM)) {
-		pm_runtime_use_autosuspend(dp->dev);
-		pm_runtime_set_autosuspend_delay(dp->dev, 100);
-		pm_runtime_enable(dp->dev);
-	} else {
-		ret = analogix_dp_resume(dp);
-		if (ret)
-			return ret;
-	}
-
-	dp->aux.name = "DP-AUX";
-	dp->aux.transfer = analogix_dpaux_transfer;
-	dp->aux.dev = dp->dev;
 	dp->aux.drm_dev = drm_dev;
 
 	ret = drm_dp_aux_register(&dp->aux);
 	if (ret) {
 		DRM_ERROR("failed to register AUX (%d)\n", ret);
-		goto err_disable_pm_runtime;
+		return ret;
 	}
 
 	ret = analogix_dp_create_bridge(drm_dev, dp);
@@ -1739,13 +1754,6 @@ int analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm_dev)
 
 err_unregister_aux:
 	drm_dp_aux_unregister(&dp->aux);
-err_disable_pm_runtime:
-	if (IS_ENABLED(CONFIG_PM)) {
-		pm_runtime_dont_use_autosuspend(dp->dev);
-		pm_runtime_disable(dp->dev);
-	} else {
-		analogix_dp_suspend(dp);
-	}
 
 	return ret;
 }
@@ -1762,13 +1770,6 @@ void analogix_dp_unbind(struct analogix_dp_device *dp)
 	}
 
 	drm_dp_aux_unregister(&dp->aux);
-
-	if (IS_ENABLED(CONFIG_PM)) {
-		pm_runtime_dont_use_autosuspend(dp->dev);
-		pm_runtime_disable(dp->dev);
-	} else {
-		analogix_dp_suspend(dp);
-	}
 }
 EXPORT_SYMBOL_GPL(analogix_dp_unbind);
 
diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
index a63c2c867059..13f32aeea7ca 100644
--- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
@@ -459,6 +459,10 @@ static int rockchip_dp_probe(struct platform_device *pdev)
 
 static void rockchip_dp_remove(struct platform_device *pdev)
 {
+	struct rockchip_dp_device *dp = dev_get_drvdata(&pdev->dev);
+
+	analogix_dp_remove(dp->adp);
+
 	component_del(&pdev->dev, &rockchip_dp_component_ops);
 }
 
diff --git a/include/drm/bridge/analogix_dp.h b/include/drm/bridge/analogix_dp.h
index 1b119b547988..d9b721fd7201 100644
--- a/include/drm/bridge/analogix_dp.h
+++ b/include/drm/bridge/analogix_dp.h
@@ -43,6 +43,7 @@ int analogix_dp_suspend(struct analogix_dp_device *dp);
 
 struct analogix_dp_device *
 analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data);
+void analogix_dp_remove(struct analogix_dp_device *dp);
 int analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm_dev);
 void analogix_dp_unbind(struct analogix_dp_device *dp);
 
-- 
2.34.1


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

  parent reply	other threads:[~2025-01-23 10:18 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-23 10:07 [PATCH v6 00/14] Add eDP support for RK3588 Damon Ding
2025-01-23 10:07 ` [PATCH v6 01/14] drm/rockchip: analogix_dp: Replace DRM_...() functions with drm_...() Damon Ding
2025-01-23 12:25   ` Jani Nikula
2025-01-23 15:12     ` Jani Nikula
2025-01-23 10:07 ` [PATCH v6 02/14] drm/rockchip: analogix_dp: Use formalized struct definition for grf field Damon Ding
2025-01-23 10:07 ` [PATCH v6 03/14] drm/rockchip: analogix_dp: Expand device data to support multiple edp display Damon Ding
2025-01-23 10:07 ` [PATCH v6 04/14] drm/bridge: analogix_dp: Add support for phy configuration Damon Ding
2025-01-23 10:07 ` [PATCH v6 05/14] dt-bindings: display: rockchip: analogix-dp: Add support to get panel from the DP AUX bus Damon Ding
2025-01-23 10:07 ` [PATCH v6 06/14] drm/bridge: analogix_dp: support to get &analogix_dp_device.plat_data and &analogix_dp_device.aux Damon Ding
2025-01-23 11:19   ` Dmitry Baryshkov
2025-01-24  8:26     ` Damon Ding
2025-01-23 10:07 ` Damon Ding [this message]
2025-01-23 11:25   ` [PATCH v6 07/14] drm/bridge: analogix_dp: Add support to get panel from the DP AUX bus Dmitry Baryshkov
2025-01-24  3:13     ` Doug Anderson
2025-02-16  9:06       ` Damon Ding
2025-01-23 10:07 ` [PATCH v6 08/14] drm/rockchip: " Damon Ding
2025-01-23 11:26   ` Dmitry Baryshkov
2025-01-30 20:33   ` Heiko Stübner
2025-02-22 11:25     ` Damon Ding
2025-02-22 11:42       ` Damon Ding
2025-02-07 19:42   ` Lucas Stach
2025-02-22 11:57     ` Damon Ding
2025-01-23 10:07 ` [PATCH v6 09/14] dt-bindings: display: rockchip: analogix-dp: Add support for RK3588 Damon Ding
2025-01-23 11:22   ` Rob Herring (Arm)
2025-01-24 10:20     ` Damon Ding
2025-01-23 10:07 ` [PATCH v6 10/14] drm/bridge: analogix_dp: " Damon Ding
2025-01-23 10:07 ` [PATCH v6 11/14] drm/rockchip: " Damon Ding
2025-01-23 11:29   ` Dmitry Baryshkov
2025-01-23 10:07 ` [PATCH v6 12/14] drm/edp-panel: Add LG Display panel model LP079QX1-SP0V Damon Ding
2025-01-23 11:31   ` Dmitry Baryshkov
2025-01-24  0:30     ` Doug Anderson
2025-01-25  4:18       ` Damon Ding
2025-01-26  0:44         ` Doug Anderson
2025-01-25  2:59     ` Damon Ding
2025-01-23 10:07 ` [PATCH v6 13/14] arm64: dts: rockchip: Add eDP0 node for RK3588 Damon Ding
2025-01-23 10:07 ` [PATCH v6 14/14] arm64: dts: rockchip: Enable eDP0 display on RK3588S EVB1 board Damon Ding
2025-01-23 11:32   ` Dmitry Baryshkov
2025-01-25  3:25     ` Damon Ding
2025-02-13 14:54 ` [PATCH v6 00/14] Add eDP support for RK3588 Piotr Oniszczuk
2025-02-13 16:56   ` Diederik de Haas
2025-02-13 17:20     ` Piotr Oniszczuk
2025-02-13 17:33     ` Sebastian Reichel
2025-02-13 18:20       ` Diederik de Haas
2025-02-13 17:26   ` Sebastian Reichel
2025-02-14 12:00     ` Piotr Oniszczuk
2025-02-24  3:21       ` Damon Ding

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250123100747.1841357-8-damon.ding@rock-chips.com \
    --to=damon.ding@rock-chips.com \
    --cc=algea.cao@rock-chips.com \
    --cc=andy.yan@rock-chips.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=heiko@sntech.de \
    --cc=hjc@rock-chips.com \
    --cc=kever.yang@rock-chips.com \
    --cc=krzk+dt@kernel.org \
    --cc=l.stach@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=rfoss@kernel.org \
    --cc=robh@kernel.org \
    --cc=sebastian.reichel@collabora.com \
    --cc=vkoul@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox