Message ID | 20181110111654.4387-3-laurent.pinchart@ideasonboard.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | omapdrm: Fix runtime PM issues at module load and unload time | expand |
Hi, On Sat, Nov 10, 2018 at 01:16:52PM +0200, Laurent Pinchart wrote: > The bind function performs hardware access (in hdmi4_cec_init()) and > thus requires the device to be active. Ensure this by surrounding the > bind function by hdmi_runtime_get() and hdmi_runtime_put() calls. > > Fixes: 27d624527d99 ("drm/omap: dss: Acquire next dssdev at probe time") > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com> -- Sebastian > Changes since v2: > > - Call hdmi_runtime_put() instead of hdmi_runtime_get() in error path > --- > drivers/gpu/drm/omapdrm/dss/hdmi4.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c > index cf6230eac31a..073fa462930a 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c > @@ -635,10 +635,14 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data) > > hdmi->dss = dss; > > - r = hdmi_pll_init(dss, hdmi->pdev, &hdmi->pll, &hdmi->wp); > + r = hdmi_runtime_get(hdmi); > if (r) > return r; > > + r = hdmi_pll_init(dss, hdmi->pdev, &hdmi->pll, &hdmi->wp); > + if (r) > + goto err_runtime_put; > + > r = hdmi4_cec_init(hdmi->pdev, &hdmi->core, &hdmi->wp); > if (r) > goto err_pll_uninit; > @@ -652,12 +656,16 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data) > hdmi->debugfs = dss_debugfs_create_file(dss, "hdmi", hdmi_dump_regs, > hdmi); > > + hdmi_runtime_put(hdmi); > + > return 0; > > err_cec_uninit: > hdmi4_cec_uninit(&hdmi->core); > err_pll_uninit: > hdmi_pll_uninit(&hdmi->pll); > +err_runtime_put: > + hdmi_runtime_put(hdmi); > return r; > } > > -- > Regards, > > Laurent Pinchart >
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c index cf6230eac31a..073fa462930a 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c @@ -635,10 +635,14 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data) hdmi->dss = dss; - r = hdmi_pll_init(dss, hdmi->pdev, &hdmi->pll, &hdmi->wp); + r = hdmi_runtime_get(hdmi); if (r) return r; + r = hdmi_pll_init(dss, hdmi->pdev, &hdmi->pll, &hdmi->wp); + if (r) + goto err_runtime_put; + r = hdmi4_cec_init(hdmi->pdev, &hdmi->core, &hdmi->wp); if (r) goto err_pll_uninit; @@ -652,12 +656,16 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data) hdmi->debugfs = dss_debugfs_create_file(dss, "hdmi", hdmi_dump_regs, hdmi); + hdmi_runtime_put(hdmi); + return 0; err_cec_uninit: hdmi4_cec_uninit(&hdmi->core); err_pll_uninit: hdmi_pll_uninit(&hdmi->pll); +err_runtime_put: + hdmi_runtime_put(hdmi); return r; }
The bind function performs hardware access (in hdmi4_cec_init()) and thus requires the device to be active. Ensure this by surrounding the bind function by hdmi_runtime_get() and hdmi_runtime_put() calls. Fixes: 27d624527d99 ("drm/omap: dss: Acquire next dssdev at probe time") Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- Changes since v2: - Call hdmi_runtime_put() instead of hdmi_runtime_get() in error path --- drivers/gpu/drm/omapdrm/dss/hdmi4.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)