diff options
author | Douglas Anderson <dianders@chromium.org> | 2016-03-07 17:00:51 -0500 |
---|---|---|
committer | Philipp Zabel <p.zabel@pengutronix.de> | 2016-03-31 05:24:26 -0400 |
commit | 788c8ddb4f67e7eb6dec9fa1d9189ff5e736a01b (patch) | |
tree | 7d3efc887259d09462187d643b95b0a79e7ef20d | |
parent | 6ac217eef5d46fe9e3d6f85ea2e303422615a18c (diff) |
drm/imx: dw_hdmi: Call drm_encoder_cleanup() in error path
The drm_encoder_cleanup() was missing both from the error path of
dw_hdmi_imx_bind(). This caused a crash when slub_debug was
enabled and we ended up deferring probe of HDMI at boot.
This call isn't needed from unbind() because if dw_hdmi_bind() returns
no error then it takes over the job of freeing the encoder (in
dw_hdmi_unbind).
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
-rw-r--r-- | drivers/gpu/drm/imx/dw_hdmi-imx.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c b/drivers/gpu/drm/imx/dw_hdmi-imx.c index 2a95d10e9d92..c69c3142819c 100644 --- a/drivers/gpu/drm/imx/dw_hdmi-imx.c +++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c | |||
@@ -245,7 +245,16 @@ static int dw_hdmi_imx_bind(struct device *dev, struct device *master, | |||
245 | drm_encoder_init(drm, encoder, &dw_hdmi_imx_encoder_funcs, | 245 | drm_encoder_init(drm, encoder, &dw_hdmi_imx_encoder_funcs, |
246 | DRM_MODE_ENCODER_TMDS, NULL); | 246 | DRM_MODE_ENCODER_TMDS, NULL); |
247 | 247 | ||
248 | return dw_hdmi_bind(dev, master, data, encoder, iores, irq, plat_data); | 248 | ret = dw_hdmi_bind(dev, master, data, encoder, iores, irq, plat_data); |
249 | |||
250 | /* | ||
251 | * If dw_hdmi_bind() fails we'll never call dw_hdmi_unbind(), | ||
252 | * which would have called the encoder cleanup. Do it manually. | ||
253 | */ | ||
254 | if (ret) | ||
255 | drm_encoder_cleanup(encoder); | ||
256 | |||
257 | return ret; | ||
249 | } | 258 | } |
250 | 259 | ||
251 | static void dw_hdmi_imx_unbind(struct device *dev, struct device *master, | 260 | static void dw_hdmi_imx_unbind(struct device *dev, struct device *master, |