| From 0a2a59e8f7bed2cc46241534034b10b8ba2adc1b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 24 May 2021 15:18:51 +0200 |
| Subject: drm/vc4: hdmi: Fix error path of hpd-gpios |
| |
| From: Maxime Ripard <maxime@cerno.tech> |
| |
| [ Upstream commit e075a7811977ff51c917a65ed1896e08231d2615 ] |
| |
| If the of_get_named_gpio_flags call fails in vc4_hdmi_bind, we jump to |
| the err_unprepare_hsm label. That label will then call |
| pm_runtime_disable and put_device on the DDC device. |
| |
| We just retrieved the DDC device, so the latter is definitely justified. |
| However at that point we still haven't called pm_runtime_enable, so the |
| call to pm_runtime_disable is not supposed to be there. |
| |
| Fixes: 10ee275cb12f ("drm/vc4: prepare for CEC support") |
| Signed-off-by: Maxime Ripard <maxime@cerno.tech> |
| Reviewed-by: Linus Walleij <linus.walleij@linaro.org> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20210524131852.263883-1-maxime@cerno.tech |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/vc4/vc4_hdmi.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c |
| index 88a8cb840cd5..25a09aaf5883 100644 |
| --- a/drivers/gpu/drm/vc4/vc4_hdmi.c |
| +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c |
| @@ -1795,7 +1795,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) |
| &hpd_gpio_flags); |
| if (vc4_hdmi->hpd_gpio < 0) { |
| ret = vc4_hdmi->hpd_gpio; |
| - goto err_unprepare_hsm; |
| + goto err_put_ddc; |
| } |
| |
| vc4_hdmi->hpd_active_low = hpd_gpio_flags & OF_GPIO_ACTIVE_LOW; |
| @@ -1836,8 +1836,8 @@ err_destroy_conn: |
| vc4_hdmi_connector_destroy(&vc4_hdmi->connector); |
| err_destroy_encoder: |
| drm_encoder_cleanup(encoder); |
| -err_unprepare_hsm: |
| pm_runtime_disable(dev); |
| +err_put_ddc: |
| put_device(&vc4_hdmi->ddc->dev); |
| |
| return ret; |
| -- |
| 2.30.2 |
| |