diff -Nur linux-7.1.6.orig/drivers/gpu/drm/ingenic/ingenic-drm-drv.c linux-7.1.6/drivers/gpu/drm/ingenic/ingenic-drm-drv.c --- linux-7.1.6.orig/drivers/gpu/drm/ingenic/ingenic-drm-drv.c 2026-08-03 11:26:04.000000000 +0200 +++ linux-7.1.6/drivers/gpu/drm/ingenic/ingenic-drm-drv.c 2026-08-08 18:30:45.954826030 +0200 @@ -122,7 +122,7 @@ struct ingenic_drm_bridge { struct drm_encoder encoder; - struct drm_bridge bridge, *next_bridge; + struct drm_bridge *bridge, *next_bridge; struct drm_bus_cfg bus_cfg; }; @@ -802,7 +802,7 @@ struct ingenic_drm_bridge *ib = to_ingenic_drm_bridge(encoder); return drm_bridge_attach(encoder, ib->next_bridge, - &ib->bridge, flags); + bridge, flags); } static int ingenic_drm_bridge_atomic_check(struct drm_bridge *bridge, @@ -1314,10 +1314,24 @@ drm_encoder_helper_add(encoder, &ingenic_drm_encoder_helper_funcs); - ib->bridge.funcs = &ingenic_drm_bridge_funcs; + ib->bridge = devm_drm_bridge_alloc(priv->dev, struct drm_bridge, + base, &ingenic_drm_bridge_funcs); + if (IS_ERR(ib->bridge)) { + ret = PTR_ERR(ib->bridge); + goto err_drvdata; + } + ib->bridge->of_node = priv->dev->of_node; + ib->next_bridge = bridge; - ret = drm_bridge_attach(encoder, &ib->bridge, NULL, + ib->bridge->ops = DRM_BRIDGE_OP_EDID | DRM_BRIDGE_OP_DETECT; + ib->bridge->interlace_allowed = true; + ret = devm_drm_bridge_add(priv->dev, ib->bridge); + if (ret) { + dev_err(dev, "Failed to register DRM bridge: %d\n", ret); + goto err_drvdata; + } + ret = drm_bridge_attach(encoder, ib->bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret) { dev_err(dev, "Unable to attach bridge\n");