mchp_lvds_enable() resumes the device with pm_runtime_get_sync() and returns early when the resume fails. pm_runtime_get_sync() increments the runtime PM usage count even when it fails, so returning without dropping the reference leaks it and prevents the device from ever suspending again once the error has been hit. Drop the runtime PM reference with pm_runtime_put_noidle() on the resume failure path before returning. Fixes: 179b0769fc5f ("drm/bridge: add lvds controller support for sam9x7") Cc: stable@vger.kernel.org Signed-off-by: Wentao Liang --- drivers/gpu/drm/bridge/microchip-lvds.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/bridge/microchip-lvds.c b/drivers/gpu/drm/bridge/microchip-lvds.c index 9f4ff82bc6b4..b77ec6ae0a97 100644 --- a/drivers/gpu/drm/bridge/microchip-lvds.c +++ b/drivers/gpu/drm/bridge/microchip-lvds.c @@ -127,6 +127,7 @@ static void mchp_lvds_enable(struct drm_bridge *bridge) ret = pm_runtime_get_sync(lvds->dev); if (ret < 0) { dev_err(lvds->dev, "failed to get pm runtime: %d\n", ret); + pm_runtime_put_noidle(lvds->dev); return; } -- 2.34.1