]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/bridge: Pass full state to atomic_pre_enable
authorMaxime Ripard <mripard@kernel.org>
Thu, 13 Feb 2025 14:43:21 +0000 (15:43 +0100)
committerMaxime Ripard <mripard@kernel.org>
Wed, 19 Feb 2025 15:59:11 +0000 (16:59 +0100)
It's pretty inconvenient to access the full atomic state from
drm_bridges, so let's change the atomic_pre_enable hook prototype to
pass it directly.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Tested-by: Douglas Anderson <dianders@chromium.org>
Link: https://lore.kernel.org/r/20250213-bridge-connector-v3-2-e71598f49c8f@kernel.org
Signed-off-by: Maxime Ripard <mripard@kernel.org>
19 files changed:
drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
drivers/gpu/drm/bridge/chipone-icn6211.c
drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c
drivers/gpu/drm/bridge/ite-it6505.c
drivers/gpu/drm/bridge/lontium-lt9611.c
drivers/gpu/drm/bridge/panel.c
drivers/gpu/drm/bridge/parade-ps8640.c
drivers/gpu/drm/bridge/samsung-dsim.c
drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
drivers/gpu/drm/bridge/tc358762.c
drivers/gpu/drm/bridge/ti-dlpc3433.c
drivers/gpu/drm/bridge/ti-sn65dsi83.c
drivers/gpu/drm/bridge/ti-sn65dsi86.c
drivers/gpu/drm/drm_bridge.c
drivers/gpu/drm/mediatek/mtk_dsi.c
drivers/gpu/drm/mediatek/mtk_hdmi.c
drivers/gpu/drm/vc4/vc4_dsi.c
include/drm/drm_bridge.h

index f6e4bdc05ba00f6e79aa1c2cea602574f95372f2..e17dbcb0a49375e8212475c957c62f9e0beb2003 100644 (file)
@@ -1197,11 +1197,9 @@ struct drm_crtc *analogix_dp_get_new_crtc(struct analogix_dp_device *dp,
        return conn_state->crtc;
 }
 
-static void
-analogix_dp_bridge_atomic_pre_enable(struct drm_bridge *bridge,
-                                    struct drm_bridge_state *old_bridge_state)
+static void analogix_dp_bridge_atomic_pre_enable(struct drm_bridge *bridge,
+                                                struct drm_atomic_state *old_state)
 {
-       struct drm_atomic_state *old_state = old_bridge_state->base.state;
        struct analogix_dp_device *dp = bridge->driver_private;
        struct drm_crtc *crtc;
        struct drm_crtc_state *old_crtc_state;
index d47703559b0dec13fa4478d90ca29be2e899637a..7a009ab57f9ec8e944d1410373ac9e06db12a815 100644 (file)
@@ -445,7 +445,7 @@ static void chipone_atomic_enable(struct drm_bridge *bridge,
 }
 
 static void chipone_atomic_pre_enable(struct drm_bridge *bridge,
-                                     struct drm_bridge_state *old_bridge_state)
+                                     struct drm_atomic_state *state)
 {
        struct chipone *icn = bridge_to_chipone(bridge);
        int ret;
index 7bce2305d676714cdec7ce085cb53b25ce42f8e7..009c7fcb3d595d7bfabde298511fde89a85dc890 100644 (file)
@@ -203,9 +203,8 @@ imx8qxp_ldb_bridge_mode_set(struct drm_bridge *bridge,
                companion->funcs->mode_set(companion, mode, adjusted_mode);
 }
 
-static void
-imx8qxp_ldb_bridge_atomic_pre_enable(struct drm_bridge *bridge,
-                                    struct drm_bridge_state *old_bridge_state)
+static void imx8qxp_ldb_bridge_atomic_pre_enable(struct drm_bridge *bridge,
+                                                struct drm_atomic_state *state)
 {
        struct ldb_channel *ldb_ch = bridge->driver_private;
        struct ldb *ldb = ldb_ch->ldb;
@@ -217,7 +216,7 @@ imx8qxp_ldb_bridge_atomic_pre_enable(struct drm_bridge *bridge,
        clk_prepare_enable(imx8qxp_ldb->clk_bypass);
 
        if (is_split && companion)
-               companion->funcs->atomic_pre_enable(companion, old_bridge_state);
+               companion->funcs->atomic_pre_enable(companion, state);
 }
 
 static void
index 76dabca04d0d191b3bdee23c6a3e55f4b6d3bad4..647579342a0a82ce4f4f4f04ea5d0633e4d03af8 100644 (file)
@@ -3254,7 +3254,7 @@ 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 drm_atomic_state *state)
 {
        struct it6505 *it6505 = bridge_to_it6505(bridge);
        struct device *dev = it6505->dev;
index e650cd83fc8d880012edb8a85c69b2f1d378f64c..5d3bbfeaf2299e2425e0079cff0805b37180351b 100644 (file)
@@ -767,7 +767,7 @@ static enum drm_mode_status lt9611_bridge_mode_valid(struct drm_bridge *bridge,
 }
 
 static void lt9611_bridge_atomic_pre_enable(struct drm_bridge *bridge,
-                                           struct drm_bridge_state *old_bridge_state)
+                                           struct drm_atomic_state *state)
 {
        struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
        static const struct reg_sequence reg_cfg[] = {
index c57036b06493a6922e2cae38bcd1733930ff0073..5653885412cb7469b9760ffd082747c25c7ea8e6 100644 (file)
@@ -109,10 +109,9 @@ static void panel_bridge_detach(struct drm_bridge *bridge)
 }
 
 static void panel_bridge_atomic_pre_enable(struct drm_bridge *bridge,
-                               struct drm_bridge_state *old_bridge_state)
+                                          struct drm_atomic_state *atomic_state)
 {
        struct panel_bridge *panel_bridge = drm_bridge_to_panel_bridge(bridge);
-       struct drm_atomic_state *atomic_state = old_bridge_state->base.state;
        struct drm_encoder *encoder = bridge->encoder;
        struct drm_crtc *crtc;
        struct drm_crtc_state *old_crtc_state;
index b0e38177c1ecb803e5e61b223b2bd7568c36de25..7ec674bffa81327ebeacecce091364e0f3e9a4f9 100644 (file)
@@ -437,7 +437,7 @@ static const struct dev_pm_ops ps8640_pm_ops = {
 };
 
 static void ps8640_atomic_pre_enable(struct drm_bridge *bridge,
-                                    struct drm_bridge_state *old_bridge_state)
+                                    struct drm_atomic_state *state)
 {
        struct ps8640 *ps_bridge = bridge_to_ps8640(bridge);
        struct regmap *map = ps_bridge->regmap[PAGE2_TOP_CNTL];
index f8b4fb8357659018ec0db65374ee5d05330639ae..415ce14e747dfca0c5395e18f1195733e17616da 100644 (file)
@@ -1457,7 +1457,7 @@ static int samsung_dsim_init(struct samsung_dsim *dsi)
 }
 
 static void samsung_dsim_atomic_pre_enable(struct drm_bridge *bridge,
-                                          struct drm_bridge_state *old_bridge_state)
+                                          struct drm_atomic_state *state)
 {
        struct samsung_dsim *dsi = bridge_to_dsi(bridge);
        int ret;
index 0fb02e4e7f4e5fcf1ad0b606b1485ab05ceb53f8..9731a6b45a52b54fdf910a3cc84d8f97b0c37c91 100644 (file)
@@ -1022,7 +1022,7 @@ static void dw_mipi_dsi_mode_set(struct dw_mipi_dsi *dsi,
 }
 
 static void dw_mipi_dsi_bridge_atomic_pre_enable(struct drm_bridge *bridge,
-                                                struct drm_bridge_state *old_bridge_state)
+                                                struct drm_atomic_state *state)
 {
        struct dw_mipi_dsi *dsi = bridge_to_dsi(bridge);
 
index d7569bf2d9c3ef1f22ac07c95d112d1c62dd67a1..194ac6e192f4c2a89048e241da7b7d0e2db75149 100644 (file)
@@ -821,7 +821,7 @@ static void dw_mipi_dsi2_mode_set(struct dw_mipi_dsi2 *dsi2,
 }
 
 static void dw_mipi_dsi2_bridge_atomic_pre_enable(struct drm_bridge *bridge,
-                                                 struct drm_bridge_state *old_bridge_state)
+                                                 struct drm_atomic_state *state)
 {
        struct dw_mipi_dsi2 *dsi2 = bridge_to_dsi2(bridge);
 
index f92aff3d515a3354f7e447495adb3e18514b029a..15daf6d97365e6127273079a6e3b48597398fd37 100644 (file)
@@ -171,7 +171,8 @@ static void tc358762_post_disable(struct drm_bridge *bridge, struct drm_bridge_s
                dev_err(ctx->dev, "error disabling regulators (%d)\n", ret);
 }
 
-static void tc358762_pre_enable(struct drm_bridge *bridge, struct drm_bridge_state *state)
+static void tc358762_pre_enable(struct drm_bridge *bridge,
+                               struct drm_atomic_state *state)
 {
        struct tc358762 *ctx = bridge_to_tc358762(bridge);
        int ret;
index eaec70fa42b6213df75b9a9ee581a61c116acb3c..c513cd1902048d52088b946691db8a1aa24a5a32 100644 (file)
@@ -170,7 +170,7 @@ static void dlpc_atomic_enable(struct drm_bridge *bridge,
 }
 
 static void dlpc_atomic_pre_enable(struct drm_bridge *bridge,
-                                  struct drm_bridge_state *old_bridge_state)
+                                  struct drm_atomic_state *state)
 {
        struct dlpc *dlpc = bridge_to_dlpc(bridge);
        int ret;
index a2c723f435ec850ac7ffa15cb9bf2e37bb9defc3..d0a4fc7ca11b9186eb21b166429d92b458c4e8c1 100644 (file)
@@ -469,10 +469,9 @@ static void sn65dsi83_monitor_stop(struct sn65dsi83 *ctx)
 }
 
 static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge,
-                                       struct drm_bridge_state *old_bridge_state)
+                                       struct drm_atomic_state *state)
 {
        struct sn65dsi83 *ctx = bridge_to_sn65dsi83(bridge);
-       struct drm_atomic_state *state = old_bridge_state->base.state;
        const struct drm_bridge_state *bridge_state;
        const struct drm_crtc_state *crtc_state;
        const struct drm_display_mode *mode;
index 205bd0fde4f8b3400caa8507092308e50eb172b7..86bbfdc37d97f0ee33a7b116f89f885b527dc3d8 100644 (file)
@@ -1164,7 +1164,7 @@ static void ti_sn_bridge_atomic_enable(struct drm_bridge *bridge,
 }
 
 static void ti_sn_bridge_atomic_pre_enable(struct drm_bridge *bridge,
-                                          struct drm_bridge_state *old_bridge_state)
+                                          struct drm_atomic_state *state)
 {
        struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
 
index 241a384ebce39b4a3db58c208af27960904fc662..e6bf964ddd82e4e2eea5c8e83201d08bb50a3137 100644 (file)
@@ -698,19 +698,10 @@ EXPORT_SYMBOL(drm_atomic_bridge_chain_post_disable);
 static void drm_atomic_bridge_call_pre_enable(struct drm_bridge *bridge,
                                              struct drm_atomic_state *old_state)
 {
-       if (old_state && bridge->funcs->atomic_pre_enable) {
-               struct drm_bridge_state *old_bridge_state;
-
-               old_bridge_state =
-                       drm_atomic_get_old_bridge_state(old_state,
-                                                       bridge);
-               if (WARN_ON(!old_bridge_state))
-                       return;
-
-               bridge->funcs->atomic_pre_enable(bridge, old_bridge_state);
-       } else if (bridge->funcs->pre_enable) {
+       if (old_state && bridge->funcs->atomic_pre_enable)
+               bridge->funcs->atomic_pre_enable(bridge, old_state);
+       else if (bridge->funcs->pre_enable)
                bridge->funcs->pre_enable(bridge);
-       }
 }
 
 /**
index 40752f2320548fbf6c7de96b18e8a636ac9c31be..aed9d03bcf012fc555277da8fe6adfbd6b839070 100644 (file)
@@ -845,7 +845,7 @@ static void mtk_dsi_bridge_atomic_enable(struct drm_bridge *bridge,
 }
 
 static void mtk_dsi_bridge_atomic_pre_enable(struct drm_bridge *bridge,
-                                            struct drm_bridge_state *old_bridge_state)
+                                            struct drm_atomic_state *state)
 {
        struct mtk_dsi *dsi = bridge_to_dsi(bridge);
        int ret;
index ca82bc829cb96446d4d34eeef45848df03bd716b..928909b4403a4c7ee6b919056f9cfd0c01d13cbd 100644 (file)
@@ -1362,7 +1362,7 @@ static void mtk_hdmi_bridge_mode_set(struct drm_bridge *bridge,
 }
 
 static void mtk_hdmi_bridge_atomic_pre_enable(struct drm_bridge *bridge,
-                                             struct drm_bridge_state *old_state)
+                                             struct drm_atomic_state *state)
 {
        struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
 
index 5eb293bdb363d81341b20c11b8041bdb34663a1b..eb747ea3325c1d487ac879a91d2b5436f5cd10c7 100644 (file)
@@ -873,9 +873,8 @@ static bool vc4_dsi_bridge_mode_fixup(struct drm_bridge *bridge,
 }
 
 static void vc4_dsi_bridge_pre_enable(struct drm_bridge *bridge,
-                                     struct drm_bridge_state *old_state)
+                                     struct drm_atomic_state *state)
 {
-       struct drm_atomic_state *state = old_state->base.state;
        struct vc4_dsi *dsi = bridge_to_vc4_dsi(bridge);
        const struct drm_crtc_state *crtc_state;
        struct device *dev = &dsi->pdev->dev;
index 496dbbd2ad7edff7f091adfbe62de1e33ef0cf07..eef4487f45af50dccbee5144378dbb3b5972a210 100644 (file)
@@ -305,7 +305,7 @@ struct drm_bridge_funcs {
         * The @atomic_pre_enable callback is optional.
         */
        void (*atomic_pre_enable)(struct drm_bridge *bridge,
-                                 struct drm_bridge_state *old_bridge_state);
+                                 struct drm_atomic_state *state);
 
        /**
         * @atomic_enable: