Jelajahi Sumber

ci20: fix DRM, from Nikolaus Schaller via linux-mips ml

Waldemar Brodkorb 3 minggu lalu
induk
melakukan
b01960ec39
1 mengubah file dengan 48 tambahan dan 0 penghapusan
  1. 48 0
      target/linux/patches/7.1.6/ci20-drm.patch

+ 48 - 0
target/linux/patches/7.1.6/ci20-drm.patch

@@ -0,0 +1,48 @@
+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");