The nxp-ptn3460 bridge still uses the deprecated non-atomic bridge
callbacks.

Switch to their atomic counterparts, adding the bridge state
handlers if not already present.

The edid_read callback also calls ptn3460_pre_enable() and
ptn3460_disable() directly to power the bridge on and off for EDID
reading. Pass NULL as the commit argument at those call sites.

Generated by the following Coccinelle script:

@ is_bridge @
identifier funcs;
@@

 struct drm_bridge_funcs funcs = {
        ...,
 };

@ has_create_state depends on is_bridge @
identifier funcs, f;
@@

struct drm_bridge_funcs funcs = {
  ...,
  .atomic_create_state = f,
  ...,
};

@ update_struct depends on (is_bridge && !has_create_state) @
identifier is_bridge.funcs;
identifier f;
@@

 struct drm_bridge_funcs funcs = {
+       .atomic_create_state = drm_atomic_helper_bridge_create_state,
+       .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
+       .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
        ...,
 };

@ update_pre_enable_struct depends on (is_bridge && !has_create_state) @
identifier is_bridge.funcs;
identifier f;
@@

 struct drm_bridge_funcs funcs = {
        ...,
-       .pre_enable = f,
+       .atomic_pre_enable = f,
        ...,
 };

@ update_pre_enable_impl depends on update_pre_enable_struct @
identifier update_pre_enable_struct.f;
identifier b;
@@

-void f(struct drm_bridge *b)
+void f(struct drm_bridge *b, struct drm_atomic_commit *commit)
 {
        ...
 }

@ update_enable_struct depends on (is_bridge && !has_create_state) @
identifier is_bridge.funcs;
identifier f;
@@

 struct drm_bridge_funcs funcs = {
        ...,
-       .enable = f,
+       .atomic_enable = f,
        ...,
 };

@ update_enable_impl depends on update_enable_struct @
identifier update_enable_struct.f;
identifier b;
@@

-void f(struct drm_bridge *b)
+void f(struct drm_bridge *b, struct drm_atomic_commit *commit)
 {
        ...
 }

@ update_disable_struct depends on (is_bridge && !has_create_state) @
identifier is_bridge.funcs;
identifier f;
@@

 struct drm_bridge_funcs funcs = {
        ...,
-       .disable = f,
+       .atomic_disable = f,
        ...,
 };

@ update_disable_impl depends on update_disable_struct @
identifier update_disable_struct.f;
identifier b;
@@

-void f(struct drm_bridge *b)
+void f(struct drm_bridge *b, struct drm_atomic_commit *commit)
 {
        ...
 }

@ update_post_disable_struct depends on (is_bridge && !has_create_state) @
identifier is_bridge.funcs;
identifier f;
@@

 struct drm_bridge_funcs funcs = {
        ...,
-       .post_disable = f,
+       .atomic_post_disable = f,
        ...,
 };

@ update_post_disable_impl depends on update_post_disable_struct @
identifier update_post_disable_struct.f;
identifier b;
@@

-void f(struct drm_bridge *b)
+void f(struct drm_bridge *b, struct drm_atomic_commit *commit)
 {
        ...
 }

Signed-off-by: Maxime Ripard <[email protected]>
---
 drivers/gpu/drm/bridge/nxp-ptn3460.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c 
b/drivers/gpu/drm/bridge/nxp-ptn3460.c
index 7acb11f16dc1..a9b4ac2defc9 100644
--- a/drivers/gpu/drm/bridge/nxp-ptn3460.c
+++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c
@@ -109,11 +109,12 @@ static int ptn3460_select_edid(struct ptn3460_bridge 
*ptn_bridge)
        }
 
        return 0;
 }
 
-static void ptn3460_pre_enable(struct drm_bridge *bridge)
+static void ptn3460_pre_enable(struct drm_bridge *bridge,
+                              struct drm_atomic_commit *commit)
 {
        struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge);
        int ret;
 
        if (ptn_bridge->enabled)
@@ -137,11 +138,12 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge)
                DRM_ERROR("Select EDID failed ret=%d\n", ret);
 
        ptn_bridge->enabled = true;
 }
 
-static void ptn3460_disable(struct drm_bridge *bridge)
+static void ptn3460_disable(struct drm_bridge *bridge,
+                           struct drm_atomic_commit *commit)
 {
        struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge);
 
        if (!ptn_bridge->enabled)
                return;
@@ -161,11 +163,11 @@ static const struct drm_edid *ptn3460_edid_read(struct 
drm_bridge *bridge,
        bool power_off;
        u8 *edid;
        int ret;
 
        power_off = !ptn_bridge->enabled;
-       ptn3460_pre_enable(&ptn_bridge->bridge);
+       ptn3460_pre_enable(&ptn_bridge->bridge, NULL);
 
        edid = kmalloc(EDID_LENGTH, GFP_KERNEL);
        if (!edid) {
                DRM_ERROR("Failed to allocate EDID\n");
                goto out;
@@ -180,11 +182,11 @@ static const struct drm_edid *ptn3460_edid_read(struct 
drm_bridge *bridge,
 
        drm_edid = drm_edid_alloc(edid, EDID_LENGTH);
 
 out:
        if (power_off)
-               ptn3460_disable(&ptn_bridge->bridge);
+               ptn3460_disable(&ptn_bridge->bridge, NULL);
 
        return drm_edid;
 }
 
 static int ptn3460_connector_get_modes(struct drm_connector *connector)
@@ -246,12 +248,15 @@ static int ptn3460_bridge_attach(struct drm_bridge 
*bridge,
 
        return ret;
 }
 
 static const struct drm_bridge_funcs ptn3460_bridge_funcs = {
-       .pre_enable = ptn3460_pre_enable,
-       .disable = ptn3460_disable,
+       .atomic_create_state = drm_atomic_helper_bridge_create_state,
+       .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
+       .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
+       .atomic_pre_enable = ptn3460_pre_enable,
+       .atomic_disable = ptn3460_disable,
        .attach = ptn3460_bridge_attach,
        .edid_read = ptn3460_edid_read,
 };
 
 static int ptn3460_probe(struct i2c_client *client)

-- 
2.54.0

Reply via email to