hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
....@@ -6,13 +6,17 @@
66 * Yannick Fertre <yannick.fertre@st.com>
77 */
88
9
-#include <drm/drmP.h>
10
-#include <drm/drm_mipi_dsi.h>
11
-#include <drm/drm_panel.h>
129 #include <linux/backlight.h>
10
+#include <linux/delay.h>
1311 #include <linux/gpio/consumer.h>
12
+#include <linux/module.h>
1413 #include <linux/regulator/consumer.h>
14
+
1515 #include <video/mipi_display.h>
16
+
17
+#include <drm/drm_mipi_dsi.h>
18
+#include <drm/drm_modes.h>
19
+#include <drm/drm_panel.h>
1620
1721 #define OTM8009A_BACKLIGHT_DEFAULT 240
1822 #define OTM8009A_BACKLIGHT_MAX 255
....@@ -67,16 +71,15 @@
6771 };
6872
6973 static const struct drm_display_mode default_mode = {
70
- .clock = 32729,
74
+ .clock = 29700,
7175 .hdisplay = 480,
72
- .hsync_start = 480 + 120,
73
- .hsync_end = 480 + 120 + 63,
74
- .htotal = 480 + 120 + 63 + 120,
76
+ .hsync_start = 480 + 98,
77
+ .hsync_end = 480 + 98 + 32,
78
+ .htotal = 480 + 98 + 32 + 98,
7579 .vdisplay = 800,
76
- .vsync_start = 800 + 12,
77
- .vsync_end = 800 + 12 + 12,
78
- .vtotal = 800 + 12 + 12 + 12,
79
- .vrefresh = 50,
80
+ .vsync_start = 800 + 15,
81
+ .vsync_end = 800 + 15 + 10,
82
+ .vtotal = 800 + 15 + 10 + 14,
8083 .flags = 0,
8184 .width_mm = 52,
8285 .height_mm = 86,
....@@ -93,7 +96,7 @@
9396 struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
9497
9598 if (mipi_dsi_dcs_write_buffer(dsi, data, len) < 0)
96
- DRM_WARN("mipi dsi dcs write buffer failed\n");
99
+ dev_warn(ctx->dev, "mipi dsi dcs write buffer failed\n");
97100 }
98101
99102 static void otm8009a_dcs_write_buf_hs(struct otm8009a *ctx, const void *data,
....@@ -309,7 +312,7 @@
309312
310313 ret = regulator_enable(ctx->supply);
311314 if (ret < 0) {
312
- DRM_ERROR("failed to enable supply: %d\n", ret);
315
+ dev_err(panel->dev, "failed to enable supply: %d\n", ret);
313316 return ret;
314317 }
315318
....@@ -344,25 +347,26 @@
344347 return 0;
345348 }
346349
347
-static int otm8009a_get_modes(struct drm_panel *panel)
350
+static int otm8009a_get_modes(struct drm_panel *panel,
351
+ struct drm_connector *connector)
348352 {
349353 struct drm_display_mode *mode;
350354
351
- mode = drm_mode_duplicate(panel->drm, &default_mode);
355
+ mode = drm_mode_duplicate(connector->dev, &default_mode);
352356 if (!mode) {
353
- DRM_ERROR("failed to add mode %ux%ux@%u\n",
354
- default_mode.hdisplay, default_mode.vdisplay,
355
- default_mode.vrefresh);
357
+ dev_err(panel->dev, "failed to add mode %ux%u@%u\n",
358
+ default_mode.hdisplay, default_mode.vdisplay,
359
+ drm_mode_vrefresh(&default_mode));
356360 return -ENOMEM;
357361 }
358362
359363 drm_mode_set_name(mode);
360364
361365 mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
362
- drm_mode_probed_add(panel->connector, mode);
366
+ drm_mode_probed_add(connector, mode);
363367
364
- panel->connector->display_info.width_mm = mode->width_mm;
365
- panel->connector->display_info.height_mm = mode->height_mm;
368
+ connector->display_info.width_mm = mode->width_mm;
369
+ connector->display_info.height_mm = mode->height_mm;
366370
367371 return 1;
368372 }
....@@ -385,7 +389,7 @@
385389 u8 data[2];
386390
387391 if (!ctx->prepared) {
388
- DRM_DEBUG("lcd not ready yet for setting its backlight!\n");
392
+ dev_dbg(&bd->dev, "lcd not ready yet for setting its backlight!\n");
389393 return -ENXIO;
390394 }
391395
....@@ -436,7 +440,8 @@
436440 ctx->supply = devm_regulator_get(dev, "power");
437441 if (IS_ERR(ctx->supply)) {
438442 ret = PTR_ERR(ctx->supply);
439
- dev_err(dev, "failed to request regulator: %d\n", ret);
443
+ if (ret != -EPROBE_DEFER)
444
+ dev_err(dev, "failed to request regulator: %d\n", ret);
440445 return ret;
441446 }
442447
....@@ -447,14 +452,13 @@
447452 dsi->lanes = 2;
448453 dsi->format = MIPI_DSI_FMT_RGB888;
449454 dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
450
- MIPI_DSI_MODE_LPM;
455
+ MIPI_DSI_MODE_LPM | MIPI_DSI_CLOCK_NON_CONTINUOUS;
451456
452
- drm_panel_init(&ctx->panel);
453
- ctx->panel.dev = dev;
454
- ctx->panel.funcs = &otm8009a_drm_funcs;
457
+ drm_panel_init(&ctx->panel, dev, &otm8009a_drm_funcs,
458
+ DRM_MODE_CONNECTOR_DSI);
455459
456460 ctx->bl_dev = devm_backlight_device_register(dev, dev_name(dev),
457
- dsi->host->dev, ctx,
461
+ dev, ctx,
458462 &otm8009a_backlight_ops,
459463 NULL);
460464 if (IS_ERR(ctx->bl_dev)) {
....@@ -474,7 +478,6 @@
474478 if (ret < 0) {
475479 dev_err(dev, "mipi_dsi_attach failed. Is host ready?\n");
476480 drm_panel_remove(&ctx->panel);
477
- backlight_device_unregister(ctx->bl_dev);
478481 return ret;
479482 }
480483