drm/bridge: it6505: Add pre_enable/post_disable callback
authorPin-yen Lin <treapking@chromium.org>
Tue, 4 Oct 2022 04:49:43 +0000 (12:49 +0800)
committerRobert Foss <robert.foss@linaro.org>
Tue, 4 Oct 2022 08:54:09 +0000 (10:54 +0200)
Add atomic_pre_enable and atomic_post_disable callback to make sure the
bridge is not powered off until atomic_post_disable is called. This
prevents a power leakage when it6505 is powered off, but the upstream
DRM bridge is still sending display signals.

Fixes: b5c84a9edcd4 ("drm/bridge: add it6505 driver")
Signed-off-by: Pin-yen Lin <treapking@chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Robert Foss <robert.foss@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20221004044943.2407781-3-treapking@chromium.org
drivers/gpu/drm/bridge/ite-it6505.c

index ae11053..a430249 100644 (file)
@@ -2991,6 +2991,28 @@ static void it6505_bridge_atomic_disable(struct drm_bridge *bridge,
        }
 }
 
+static void it6505_bridge_atomic_pre_enable(struct drm_bridge *bridge,
+                                           struct drm_bridge_state *old_state)
+{
+       struct it6505 *it6505 = bridge_to_it6505(bridge);
+       struct device *dev = &it6505->client->dev;
+
+       DRM_DEV_DEBUG_DRIVER(dev, "start");
+
+       pm_runtime_get_sync(dev);
+}
+
+static void it6505_bridge_atomic_post_disable(struct drm_bridge *bridge,
+                                             struct drm_bridge_state *old_state)
+{
+       struct it6505 *it6505 = bridge_to_it6505(bridge);
+       struct device *dev = &it6505->client->dev;
+
+       DRM_DEV_DEBUG_DRIVER(dev, "start");
+
+       pm_runtime_put_sync(dev);
+}
+
 static enum drm_connector_status
 it6505_bridge_detect(struct drm_bridge *bridge)
 {
@@ -3025,6 +3047,8 @@ static const struct drm_bridge_funcs it6505_bridge_funcs = {
        .mode_valid = it6505_bridge_mode_valid,
        .atomic_enable = it6505_bridge_atomic_enable,
        .atomic_disable = it6505_bridge_atomic_disable,
+       .atomic_pre_enable = it6505_bridge_atomic_pre_enable,
+       .atomic_post_disable = it6505_bridge_atomic_post_disable,
        .detect = it6505_bridge_detect,
        .get_edid = it6505_bridge_get_edid,
 };