forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/gpu/drm/panel/panel-raydium-rm68200.c
....@@ -6,14 +6,16 @@
66 * Yannick Fertre <yannick.fertre@st.com>
77 */
88
9
-#include <linux/backlight.h>
9
+#include <linux/delay.h>
1010 #include <linux/gpio/consumer.h>
11
+#include <linux/mod_devicetable.h>
12
+#include <linux/module.h>
1113 #include <linux/regulator/consumer.h>
1214
1315 #include <video/mipi_display.h>
1416
15
-#include <drm/drmP.h>
1617 #include <drm/drm_mipi_dsi.h>
18
+#include <drm/drm_modes.h>
1719 #include <drm/drm_panel.h>
1820
1921 /*** Manufacturer Command Set ***/
....@@ -75,7 +77,6 @@
7577 struct drm_panel panel;
7678 struct gpio_desc *reset_gpio;
7779 struct regulator *supply;
78
- struct backlight_device *backlight;
7980 bool prepared;
8081 bool enabled;
8182 };
....@@ -90,7 +91,6 @@
9091 .vsync_start = 1280 + 12,
9192 .vsync_end = 1280 + 12 + 4,
9293 .vtotal = 1280 + 12 + 4 + 12,
93
- .vrefresh = 50,
9494 .flags = 0,
9595 .width_mm = 68,
9696 .height_mm = 122,
....@@ -109,8 +109,7 @@
109109
110110 err = mipi_dsi_dcs_write_buffer(dsi, data, len);
111111 if (err < 0)
112
- DRM_ERROR_RATELIMITED("MIPI DSI DCS write buffer failed: %d\n",
113
- err);
112
+ dev_err_ratelimited(ctx->dev, "MIPI DSI DCS write buffer failed: %d\n", err);
114113 }
115114
116115 static void rm68200_dcs_write_cmd(struct rm68200 *ctx, u8 cmd, u8 value)
....@@ -120,7 +119,7 @@
120119
121120 err = mipi_dsi_dcs_write(dsi, cmd, &value, 1);
122121 if (err < 0)
123
- DRM_ERROR_RATELIMITED("MIPI DSI DCS write failed: %d\n", err);
122
+ dev_err_ratelimited(ctx->dev, "MIPI DSI DCS write failed: %d\n", err);
124123 }
125124
126125 #define dcs_write_seq(ctx, seq...) \
....@@ -239,8 +238,6 @@
239238 if (!ctx->enabled)
240239 return 0;
241240
242
- backlight_disable(ctx->backlight);
243
-
244241 ctx->enabled = false;
245242
246243 return 0;
....@@ -257,11 +254,11 @@
257254
258255 ret = mipi_dsi_dcs_set_display_off(dsi);
259256 if (ret)
260
- DRM_WARN("failed to set display off: %d\n", ret);
257
+ dev_warn(panel->dev, "failed to set display off: %d\n", ret);
261258
262259 ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
263260 if (ret)
264
- DRM_WARN("failed to enter sleep mode: %d\n", ret);
261
+ dev_warn(panel->dev, "failed to enter sleep mode: %d\n", ret);
265262
266263 msleep(120);
267264
....@@ -288,7 +285,7 @@
288285
289286 ret = regulator_enable(ctx->supply);
290287 if (ret < 0) {
291
- DRM_ERROR("failed to enable supply: %d\n", ret);
288
+ dev_err(ctx->dev, "failed to enable supply: %d\n", ret);
292289 return ret;
293290 }
294291
....@@ -325,32 +322,31 @@
325322 if (ctx->enabled)
326323 return 0;
327324
328
- backlight_enable(ctx->backlight);
329
-
330325 ctx->enabled = true;
331326
332327 return 0;
333328 }
334329
335
-static int rm68200_get_modes(struct drm_panel *panel)
330
+static int rm68200_get_modes(struct drm_panel *panel,
331
+ struct drm_connector *connector)
336332 {
337333 struct drm_display_mode *mode;
338334
339
- mode = drm_mode_duplicate(panel->drm, &default_mode);
335
+ mode = drm_mode_duplicate(connector->dev, &default_mode);
340336 if (!mode) {
341
- DRM_ERROR("failed to add mode %ux%ux@%u\n",
342
- default_mode.hdisplay, default_mode.vdisplay,
343
- default_mode.vrefresh);
337
+ dev_err(panel->dev, "failed to add mode %ux%u@%u\n",
338
+ default_mode.hdisplay, default_mode.vdisplay,
339
+ drm_mode_vrefresh(&default_mode));
344340 return -ENOMEM;
345341 }
346342
347343 drm_mode_set_name(mode);
348344
349345 mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
350
- drm_mode_probed_add(panel->connector, mode);
346
+ drm_mode_probed_add(connector, mode);
351347
352
- panel->connector->display_info.width_mm = mode->width_mm;
353
- panel->connector->display_info.height_mm = mode->height_mm;
348
+ connector->display_info.width_mm = mode->width_mm;
349
+ connector->display_info.height_mm = mode->height_mm;
354350
355351 return 1;
356352 }
....@@ -383,13 +379,10 @@
383379 ctx->supply = devm_regulator_get(dev, "power");
384380 if (IS_ERR(ctx->supply)) {
385381 ret = PTR_ERR(ctx->supply);
386
- dev_err(dev, "cannot get regulator: %d\n", ret);
382
+ if (ret != -EPROBE_DEFER)
383
+ dev_err(dev, "cannot get regulator: %d\n", ret);
387384 return ret;
388385 }
389
-
390
- ctx->backlight = devm_of_find_backlight(dev);
391
- if (IS_ERR(ctx->backlight))
392
- return PTR_ERR(ctx->backlight);
393386
394387 mipi_dsi_set_drvdata(dsi, ctx);
395388
....@@ -400,9 +393,12 @@
400393 dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
401394 MIPI_DSI_MODE_LPM;
402395
403
- drm_panel_init(&ctx->panel);
404
- ctx->panel.dev = dev;
405
- ctx->panel.funcs = &rm68200_drm_funcs;
396
+ drm_panel_init(&ctx->panel, dev, &rm68200_drm_funcs,
397
+ DRM_MODE_CONNECTOR_DSI);
398
+
399
+ ret = drm_panel_of_backlight(&ctx->panel);
400
+ if (ret)
401
+ return ret;
406402
407403 drm_panel_add(&ctx->panel);
408404