[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <0d240c5d-665e-40d8-91fb-9b9aad3b172a@quicinc.com>
Date: Wed, 19 Jun 2024 15:14:01 -0700
From: Jessica Zhang <quic_jesszhan@...cinc.com>
To: Dmitry Baryshkov <dmitry.baryshkov@...aro.org>,
Rob Clark
<robdclark@...il.com>,
Abhinav Kumar <quic_abhinavk@...cinc.com>,
Sean Paul
<sean@...rly.run>,
Marijn Suijten <marijn.suijten@...ainline.org>,
"David
Airlie" <airlied@...il.com>, Daniel Vetter <daniel@...ll.ch>
CC: <linux-arm-msm@...r.kernel.org>, <dri-devel@...ts.freedesktop.org>,
<freedreno@...ts.freedesktop.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v2 14/14] drm/msm/hdmi: wire in hpd_enable/hpd_disable
bridge ops
On 5/22/2024 3:51 AM, Dmitry Baryshkov wrote:
> The HDMI driver already has msm_hdmi_hpd_enable() and
> msm_hdmi_hpd_disable() functions. Wire them into the
> msm_hdmi_bridge_funcs, so that HPD can be enabled and disabled
> dynamically rather than always having HPD events generation enabled.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@...aro.org>
Reviewed-by: Jessica Zhang <quic_jesszhan@...cinc.com>
> ---
> drivers/gpu/drm/msm/hdmi/hdmi.c | 9 ---------
> drivers/gpu/drm/msm/hdmi/hdmi.h | 4 ++--
> drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 3 +++
> drivers/gpu/drm/msm/hdmi/hdmi_hpd.c | 12 ++++++------
> 4 files changed, 11 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdmi.c
> index 2890196857f8..06adcf4a6544 100644
> --- a/drivers/gpu/drm/msm/hdmi/hdmi.c
> +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c
> @@ -202,12 +202,6 @@ int msm_hdmi_modeset_init(struct hdmi *hdmi,
> goto fail;
> }
>
> - ret = msm_hdmi_hpd_enable(hdmi->bridge);
> - if (ret < 0) {
> - DRM_DEV_ERROR(&hdmi->pdev->dev, "failed to enable HPD: %d\n", ret);
> - goto fail;
> - }
> -
> return 0;
>
> fail:
> @@ -377,9 +371,6 @@ static void msm_hdmi_unbind(struct device *dev, struct device *master,
> if (priv->hdmi->audio_pdev)
> platform_device_unregister(priv->hdmi->audio_pdev);
>
> - if (priv->hdmi->bridge)
> - msm_hdmi_hpd_disable(priv->hdmi);
> -
> msm_hdmi_destroy(priv->hdmi);
> priv->hdmi = NULL;
> }
> diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.h b/drivers/gpu/drm/msm/hdmi/hdmi.h
> index 7f0ca5252018..c6519e6f7f2c 100644
> --- a/drivers/gpu/drm/msm/hdmi/hdmi.h
> +++ b/drivers/gpu/drm/msm/hdmi/hdmi.h
> @@ -219,8 +219,8 @@ int msm_hdmi_bridge_init(struct hdmi *hdmi);
> void msm_hdmi_hpd_irq(struct drm_bridge *bridge);
> enum drm_connector_status msm_hdmi_bridge_detect(
> struct drm_bridge *bridge);
> -int msm_hdmi_hpd_enable(struct drm_bridge *bridge);
> -void msm_hdmi_hpd_disable(struct hdmi *hdmi);
> +void msm_hdmi_hpd_enable(struct drm_bridge *bridge);
> +void msm_hdmi_hpd_disable(struct drm_bridge *bridge);
>
> /*
> * i2c adapter for ddc:
> diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
> index 104107ed47d0..41722b2e6b44 100644
> --- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
> +++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
> @@ -300,6 +300,9 @@ static const struct drm_bridge_funcs msm_hdmi_bridge_funcs = {
> .mode_valid = msm_hdmi_bridge_mode_valid,
> .edid_read = msm_hdmi_bridge_edid_read,
> .detect = msm_hdmi_bridge_detect,
> +
> + .hpd_enable = msm_hdmi_hpd_enable,
> + .hpd_disable = msm_hdmi_hpd_disable,
> };
>
> static void
> diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_hpd.c b/drivers/gpu/drm/msm/hdmi/hdmi_hpd.c
> index cb89e9e2c6ea..04d00b6f36fd 100644
> --- a/drivers/gpu/drm/msm/hdmi/hdmi_hpd.c
> +++ b/drivers/gpu/drm/msm/hdmi/hdmi_hpd.c
> @@ -60,7 +60,7 @@ static void msm_hdmi_phy_reset(struct hdmi *hdmi)
> }
> }
>
> -int msm_hdmi_hpd_enable(struct drm_bridge *bridge)
> +void msm_hdmi_hpd_enable(struct drm_bridge *bridge)
> {
> struct hdmi_bridge *hdmi_bridge = to_hdmi_bridge(bridge);
> struct hdmi *hdmi = hdmi_bridge->hdmi;
> @@ -70,8 +70,8 @@ int msm_hdmi_hpd_enable(struct drm_bridge *bridge)
> unsigned long flags;
>
> ret = pm_runtime_resume_and_get(dev);
> - if (ret)
> - return ret;
> + if (WARN_ON(ret))
> + return;
>
> mutex_lock(&hdmi->state_mutex);
> msm_hdmi_set_mode(hdmi, false);
> @@ -99,12 +99,12 @@ int msm_hdmi_hpd_enable(struct drm_bridge *bridge)
> hdmi_write(hdmi, REG_HDMI_HPD_CTRL,
> HDMI_HPD_CTRL_ENABLE | hpd_ctrl);
> spin_unlock_irqrestore(&hdmi->reg_lock, flags);
> -
> - return 0;
> }
>
> -void msm_hdmi_hpd_disable(struct hdmi *hdmi)
> +void msm_hdmi_hpd_disable(struct drm_bridge *bridge)
> {
> + struct hdmi_bridge *hdmi_bridge = to_hdmi_bridge(bridge);
> + struct hdmi *hdmi = hdmi_bridge->hdmi;
> struct device *dev = &hdmi->pdev->dev;
>
> /* Disable HPD interrupt */
>
> --
> 2.39.2
>
Powered by blists - more mailing lists