Re: [PATCH v2 08/14] drm/msm/hdmi: add runtime PM calls to DDC transfer function

2024-06-18 Thread Jessica Zhang




On 5/22/2024 3:51 AM, Dmitry Baryshkov wrote:

We must be sure that the HDMI controller is powered on, while performing
the DDC transfer. Add corresponding runtime PM calls to
msm_hdmi_i2c_xfer().

Signed-off-by: Dmitry Baryshkov 


Reviewed-by: Jessica Zhang 


---
  drivers/gpu/drm/msm/hdmi/hdmi_i2c.c | 14 --
  1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c 
b/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c
index 7aa500d24240..ebefea4fb408 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c
@@ -107,11 +107,15 @@ static int msm_hdmi_i2c_xfer(struct i2c_adapter *i2c,
if (num == 0)
return num;
  
+	ret = pm_runtime_resume_and_get(&hdmi->pdev->dev);

+   if (ret)
+   return ret;
+
init_ddc(hdmi_i2c);
  
  	ret = ddc_clear_irq(hdmi_i2c);

if (ret)
-   return ret;
+   goto fail;
  
  	for (i = 0; i < num; i++) {

struct i2c_msg *p = &msgs[i];
@@ -169,7 +173,7 @@ static int msm_hdmi_i2c_xfer(struct i2c_adapter *i2c,
hdmi_read(hdmi, REG_HDMI_DDC_SW_STATUS),
hdmi_read(hdmi, REG_HDMI_DDC_HW_STATUS),
hdmi_read(hdmi, REG_HDMI_DDC_INT_CTRL));
-   return ret;
+   goto fail;
}
  
  	ddc_status = hdmi_read(hdmi, REG_HDMI_DDC_SW_STATUS);

@@ -202,7 +206,13 @@ static int msm_hdmi_i2c_xfer(struct i2c_adapter *i2c,
}
}
  
+	pm_runtime_put(&hdmi->pdev->dev);

+
return i;
+
+fail:
+   pm_runtime_put(&hdmi->pdev->dev);
+   return ret;
  }
  
  static u32 msm_hdmi_i2c_func(struct i2c_adapter *adapter)


--
2.39.2



[PATCH v2 08/14] drm/msm/hdmi: add runtime PM calls to DDC transfer function

2024-05-22 Thread Dmitry Baryshkov
We must be sure that the HDMI controller is powered on, while performing
the DDC transfer. Add corresponding runtime PM calls to
msm_hdmi_i2c_xfer().

Signed-off-by: Dmitry Baryshkov 
---
 drivers/gpu/drm/msm/hdmi/hdmi_i2c.c | 14 --
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c 
b/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c
index 7aa500d24240..ebefea4fb408 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_i2c.c
@@ -107,11 +107,15 @@ static int msm_hdmi_i2c_xfer(struct i2c_adapter *i2c,
if (num == 0)
return num;
 
+   ret = pm_runtime_resume_and_get(&hdmi->pdev->dev);
+   if (ret)
+   return ret;
+
init_ddc(hdmi_i2c);
 
ret = ddc_clear_irq(hdmi_i2c);
if (ret)
-   return ret;
+   goto fail;
 
for (i = 0; i < num; i++) {
struct i2c_msg *p = &msgs[i];
@@ -169,7 +173,7 @@ static int msm_hdmi_i2c_xfer(struct i2c_adapter *i2c,
hdmi_read(hdmi, REG_HDMI_DDC_SW_STATUS),
hdmi_read(hdmi, REG_HDMI_DDC_HW_STATUS),
hdmi_read(hdmi, REG_HDMI_DDC_INT_CTRL));
-   return ret;
+   goto fail;
}
 
ddc_status = hdmi_read(hdmi, REG_HDMI_DDC_SW_STATUS);
@@ -202,7 +206,13 @@ static int msm_hdmi_i2c_xfer(struct i2c_adapter *i2c,
}
}
 
+   pm_runtime_put(&hdmi->pdev->dev);
+
return i;
+
+fail:
+   pm_runtime_put(&hdmi->pdev->dev);
+   return ret;
 }
 
 static u32 msm_hdmi_i2c_func(struct i2c_adapter *adapter)

-- 
2.39.2