]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Revert "drm: bridge: analogix/dp: add panel prepare/unprepare in suspend/resume time"
authorBrian Norris <briannorris@chromium.org>
Tue, 23 Aug 2022 01:08:04 +0000 (18:08 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Oct 2022 08:37:44 +0000 (10:37 +0200)
[ Upstream commit b50a73a8a370f476479d520127e3e26228f1c741 ]

This reverts commit bf7872f698fe7263f44232fd35c5b4c5151fc769.

For quite some time, core DRM helpers already ensure that any relevant
connectors/CRTCs/etc. are disabled, as well as their associated
components (e.g., bridges) when suspending the system. Thus,
analogix_dp_bridge_{enable,disable}() already get called, which in turn
call drm_panel_{prepare,unprepare}(). This makes these drm_panel_*()
calls redundant.

Besides redundancy, there are a few problems with this handling:

(1) drm_panel_{prepare,unprepare}() are *not* reference-counted APIs and
are not in general designed to be handled by multiple callers --
although some panel drivers have a coarse 'prepared' flag that mitigates
some damage, at least. So at a minimum this is redundant and confusing,
but in some cases, this could be actively harmful.

(2) The error-handling is a bit non-standard. We ignored errors in
suspend(), but handled errors in resume(). And recently, people noticed
that the clk handling is unbalanced in error paths, and getting *that*
right is not actually trivial, given the current way errors are mostly
ignored.

(3) In the particular way analogix_dp_{suspend,resume}() get used (e.g.,
in rockchip_dp_*(), as a late/early callback), we don't necessarily have
a proper PM relationship between the DP/bridge device and the panel
device. So while the DP bridge gets resumed, the panel's parent device
(e.g., platform_device) may still be suspended, and so any prepare()
calls may fail.

So remove the superfluous, possibly-harmful suspend()/resume() handling
of panel state.

Fixes: bf7872f698fe ("drm: bridge: analogix/dp: add panel prepare/unprepare in suspend/resume time")
Link: https://lore.kernel.org/all/Yv2CPBD3Picg%2FgVe@google.com/
Signed-off-by: Brian Norris <briannorris@chromium.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20220822180729.1.I8ac5abe3a4c1c6fd5c061686c6e883c22f69022c@changeid
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/bridge/analogix/analogix_dp_core.c

index c6a51d1c7ec9e6d0bc798f42c09dfcef0db1561d..df606a56756635ced8cedb39ef011dc5aea3b1bd 100644 (file)
@@ -1823,12 +1823,6 @@ EXPORT_SYMBOL_GPL(analogix_dp_remove);
 int analogix_dp_suspend(struct analogix_dp_device *dp)
 {
        clk_disable_unprepare(dp->clock);
-
-       if (dp->plat_data->panel) {
-               if (drm_panel_unprepare(dp->plat_data->panel))
-                       DRM_ERROR("failed to turnoff the panel\n");
-       }
-
        return 0;
 }
 EXPORT_SYMBOL_GPL(analogix_dp_suspend);
@@ -1843,13 +1837,6 @@ int analogix_dp_resume(struct analogix_dp_device *dp)
                return ret;
        }
 
-       if (dp->plat_data->panel) {
-               if (drm_panel_prepare(dp->plat_data->panel)) {
-                       DRM_ERROR("failed to setup the panel\n");
-                       return -EBUSY;
-               }
-       }
-
        return 0;
 }
 EXPORT_SYMBOL_GPL(analogix_dp_resume);