Commit 81aa8341 authored by Dmitry Baryshkov's avatar Dmitry Baryshkov Committed by Dmitry Baryshkov
Browse files

drm/msm/hdmi: switch to pm_runtime_resume_and_get()



The pm_runtime_get_sync() function is a bad choise for runtime power
management. Switch HDMI driver to pm_runtime_resume_and_get() and add
proper error handling, while we are at it.

Reviewed-by: default avatarJessica Zhang <quic_jesszhan@quicinc.com>
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/651713/
Link: https://lore.kernel.org/r/20250505-fd-hdmi-hpd-v5-7-48541f76318c@oss.qualcomm.com


Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
parent 15a5223d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ static void msm_hdmi_power_on(struct drm_bridge *bridge)
	const struct hdmi_platform_config *config = hdmi->config;
	int ret;

	pm_runtime_get_sync(&hdmi->pdev->dev);
	pm_runtime_resume_and_get(&hdmi->pdev->dev);

	ret = regulator_bulk_enable(config->pwr_reg_cnt, hdmi->pwr_regs);
	if (ret)
+10 −2
Original line number Diff line number Diff line
@@ -85,7 +85,12 @@ int msm_hdmi_hpd_enable(struct drm_bridge *bridge)
	if (hdmi->hpd_gpiod)
		gpiod_set_value_cansleep(hdmi->hpd_gpiod, 1);

	pm_runtime_get_sync(dev);
	ret = pm_runtime_resume_and_get(dev);
	if (ret) {
		DRM_DEV_ERROR(dev, "runtime resume failed: %d\n", ret);
		goto fail;
	}

	ret = clk_bulk_prepare_enable(config->hpd_clk_cnt, hdmi->hpd_clks);
	if (ret)
		goto fail;
@@ -178,7 +183,10 @@ static enum drm_connector_status detect_reg(struct hdmi *hdmi)
	u32 hpd_int_status = 0;
	int ret;

	pm_runtime_get_sync(&hdmi->pdev->dev);
	ret = pm_runtime_resume_and_get(&hdmi->pdev->dev);
	if (ret)
		goto out;

	ret = clk_bulk_prepare_enable(config->hpd_clk_cnt, hdmi->hpd_clks);
	if (ret)
		goto out;
+5 −1
Original line number Diff line number Diff line
@@ -58,7 +58,11 @@ int msm_hdmi_phy_resource_enable(struct hdmi_phy *phy)
	struct device *dev = &phy->pdev->dev;
	int i, ret = 0;

	pm_runtime_get_sync(dev);
	ret = pm_runtime_resume_and_get(dev);
	if (ret) {
		DRM_DEV_ERROR(dev, "runtime resume failed: %d\n", ret);
		return ret;
	}

	ret = regulator_bulk_enable(cfg->num_regs, phy->regs);
	if (ret) {