forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/gpu/drm/rockchip/rk628/rk628_rgb.c
....@@ -14,10 +14,9 @@
1414 #include <linux/phy/phy.h>
1515 #include <linux/reset.h>
1616
17
-#include <drm/drmP.h>
1817 #include <drm/drm_of.h>
1918 #include <drm/drm_atomic.h>
20
-#include <drm/drm_crtc_helper.h>
19
+#include <drm/drm_probe_helper.h>
2120 #include <drm/drm_atomic_helper.h>
2221 #include <drm/drm_panel.h>
2322
....@@ -85,7 +84,7 @@
8584 {
8685 struct rk628_rgb *rgb = connector_to_rgb(connector);
8786
88
- return drm_panel_get_modes(rgb->panel);
87
+ return drm_panel_get_modes(rgb->panel, connector);
8988 }
9089
9190 static const struct drm_connector_helper_funcs
....@@ -96,9 +95,6 @@
9695
9796 static void rk628_rgb_connector_destroy(struct drm_connector *connector)
9897 {
99
- struct rk628_rgb *rgb = connector_to_rgb(connector);
100
-
101
- drm_panel_detach(rgb->panel);
10298 drm_connector_cleanup(connector);
10399 }
104100
....@@ -229,7 +225,8 @@
229225 reset_control_assert(rgb->rstc);
230226 }
231227
232
-static int rk628_rgb_bridge_attach(struct drm_bridge *bridge)
228
+static int rk628_rgb_bridge_attach(struct drm_bridge *bridge,
229
+ enum drm_bridge_attach_flags flags)
233230 {
234231 struct rk628_rgb *rgb = bridge_to_rgb(bridge);
235232 struct drm_connector *connector = &rgb->connector;
....@@ -248,25 +245,24 @@
248245 return -EPROBE_DEFER;
249246 }
250247
251
- rgb->bridge->encoder = bridge->encoder;
252
- ret = drm_bridge_attach(bridge->encoder, rgb->bridge, bridge);
248
+ ret = drm_bridge_attach(bridge->encoder, rgb->bridge, bridge,
249
+ flags);
253250 if (ret) {
254251 dev_err(dev, "failed to attach bridge\n");
255252 return ret;
256253 }
257
-
258
- bridge->next = rgb->bridge;
259254 } else {
260255 if (rgb->bridge) {
261
- rgb->bridge->encoder = bridge->encoder;
262
- ret = drm_bridge_attach(bridge->encoder, rgb->bridge, bridge);
256
+ ret = drm_bridge_attach(bridge->encoder, rgb->bridge,
257
+ bridge, flags);
263258 if (ret) {
264259 dev_err(dev, "failed to attach bridge\n");
265260 return ret;
266261 }
267
-
268
- bridge->next = rgb->bridge;
269262 }
263
+
264
+ if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
265
+ return 0;
270266
271267 if (rgb->panel) {
272268 ret = drm_connector_init(drm, connector,
....@@ -282,11 +278,6 @@
282278 &rk628_rgb_connector_helper_funcs);
283279 drm_connector_attach_encoder(connector,
284280 bridge->encoder);
285
- ret = drm_panel_attach(rgb->panel, connector);
286
- if (ret) {
287
- dev_err(dev, "Failed to attach panel\n");
288
- return ret;
289
- }
290281 }
291282 }
292283
....@@ -294,8 +285,8 @@
294285 }
295286
296287 static void rk628_rgb_bridge_mode_set(struct drm_bridge *bridge,
297
- struct drm_display_mode *mode,
298
- struct drm_display_mode *adj)
288
+ const struct drm_display_mode *mode,
289
+ const struct drm_display_mode *adj)
299290 {
300291 struct rk628_rgb *rgb = bridge_to_rgb(bridge);
301292