forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/gpu/drm/sti/sti_dvo.c
....@@ -11,10 +11,12 @@
1111 #include <linux/of_gpio.h>
1212 #include <linux/platform_device.h>
1313
14
-#include <drm/drmP.h>
1514 #include <drm/drm_atomic_helper.h>
16
-#include <drm/drm_crtc_helper.h>
15
+#include <drm/drm_bridge.h>
16
+#include <drm/drm_device.h>
1717 #include <drm/drm_panel.h>
18
+#include <drm/drm_print.h>
19
+#include <drm/drm_probe_helper.h>
1820
1921 #include "sti_awg_utils.h"
2022 #include "sti_drv.h"
....@@ -64,7 +66,7 @@
6466 .awg_fwgen_fct = sti_awg_generate_code_data_enable_mode,
6567 };
6668
67
-/**
69
+/*
6870 * STI digital video output structure
6971 *
7072 * @dev: driver device
....@@ -194,16 +196,16 @@
194196 { "dvo", dvo_dbg_show, 0, NULL },
195197 };
196198
197
-static int dvo_debugfs_init(struct sti_dvo *dvo, struct drm_minor *minor)
199
+static void dvo_debugfs_init(struct sti_dvo *dvo, struct drm_minor *minor)
198200 {
199201 unsigned int i;
200202
201203 for (i = 0; i < ARRAY_SIZE(dvo_debugfs_files); i++)
202204 dvo_debugfs_files[i].data = dvo;
203205
204
- return drm_debugfs_create_files(dvo_debugfs_files,
205
- ARRAY_SIZE(dvo_debugfs_files),
206
- minor->debugfs_root, minor);
206
+ drm_debugfs_create_files(dvo_debugfs_files,
207
+ ARRAY_SIZE(dvo_debugfs_files),
208
+ minor->debugfs_root, minor);
207209 }
208210
209211 static void sti_dvo_disable(struct drm_bridge *bridge)
....@@ -220,8 +222,7 @@
220222
221223 writel(0x00000000, dvo->regs + DVO_DOF_CFG);
222224
223
- if (dvo->panel)
224
- dvo->panel->funcs->disable(dvo->panel);
225
+ drm_panel_disable(dvo->panel);
225226
226227 /* Disable/unprepare dvo clock */
227228 clk_disable_unprepare(dvo->clk_pix);
....@@ -261,8 +262,7 @@
261262 if (clk_prepare_enable(dvo->clk))
262263 DRM_ERROR("Failed to prepare/enable dvo clk\n");
263264
264
- if (dvo->panel)
265
- dvo->panel->funcs->enable(dvo->panel);
265
+ drm_panel_enable(dvo->panel);
266266
267267 /* Set LUT */
268268 writel(config->lowbyte, dvo->regs + DVO_LUT_PROG_LOW);
....@@ -277,8 +277,8 @@
277277 }
278278
279279 static void sti_dvo_set_mode(struct drm_bridge *bridge,
280
- struct drm_display_mode *mode,
281
- struct drm_display_mode *adjusted_mode)
280
+ const struct drm_display_mode *mode,
281
+ const struct drm_display_mode *adjusted_mode)
282282 {
283283 struct sti_dvo *dvo = bridge->driver_private;
284284 struct sti_mixer *mixer = to_sti_mixer(dvo->encoder->crtc);
....@@ -288,7 +288,7 @@
288288
289289 DRM_DEBUG_DRIVER("\n");
290290
291
- memcpy(&dvo->mode, mode, sizeof(struct drm_display_mode));
291
+ drm_mode_copy(&dvo->mode, mode);
292292
293293 /* According to the path used (main or aux), the dvo clocks should
294294 * have a different parent clock. */
....@@ -339,15 +339,16 @@
339339 struct sti_dvo *dvo = dvo_connector->dvo;
340340
341341 if (dvo->panel)
342
- return dvo->panel->funcs->get_modes(dvo->panel);
342
+ return drm_panel_get_modes(dvo->panel, connector);
343343
344344 return 0;
345345 }
346346
347347 #define CLK_TOLERANCE_HZ 50
348348
349
-static int sti_dvo_connector_mode_valid(struct drm_connector *connector,
350
- struct drm_display_mode *mode)
349
+static enum drm_mode_status
350
+sti_dvo_connector_mode_valid(struct drm_connector *connector,
351
+ struct drm_display_mode *mode)
351352 {
352353 int target = mode->clock * 1000;
353354 int target_min = target - CLK_TOLERANCE_HZ;
....@@ -389,8 +390,6 @@
389390 dvo->panel = of_drm_find_panel(dvo->panel_node);
390391 if (IS_ERR(dvo->panel))
391392 dvo->panel = NULL;
392
- else
393
- drm_panel_attach(dvo->panel, connector);
394393 }
395394
396395 if (dvo->panel)
....@@ -405,10 +404,7 @@
405404 = to_sti_dvo_connector(connector);
406405 struct sti_dvo *dvo = dvo_connector->dvo;
407406
408
- if (dvo_debugfs_init(dvo, dvo->drm_dev->primary)) {
409
- DRM_ERROR("DVO debugfs setup failed\n");
410
- return -EINVAL;
411
- }
407
+ dvo_debugfs_init(dvo, dvo->drm_dev->primary);
412408
413409 return 0;
414410 }
....@@ -467,7 +463,7 @@
467463 bridge->of_node = dvo->dev.of_node;
468464 drm_bridge_add(bridge);
469465
470
- err = drm_bridge_attach(encoder, bridge, NULL);
466
+ err = drm_bridge_attach(encoder, bridge, NULL, 0);
471467 if (err) {
472468 DRM_ERROR("Failed to attach bridge\n");
473469 return err;
....@@ -534,7 +530,7 @@
534530 DRM_ERROR("Invalid dvo resource\n");
535531 return -ENOMEM;
536532 }
537
- dvo->regs = devm_ioremap_nocache(dev, res->start,
533
+ dvo->regs = devm_ioremap(dev, res->start,
538534 resource_size(res));
539535 if (!dvo->regs)
540536 return -ENOMEM;