.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) 2014 NVIDIA Corporation |
---|
3 | | - * |
---|
4 | | - * This program is free software; you can redistribute it and/or modify |
---|
5 | | - * it under the terms of the GNU General Public License version 2 as |
---|
6 | | - * published by the Free Software Foundation. |
---|
7 | 4 | */ |
---|
8 | 5 | |
---|
9 | | -#include <linux/backlight.h> |
---|
| 6 | +#include <linux/delay.h> |
---|
10 | 7 | #include <linux/gpio/consumer.h> |
---|
11 | 8 | #include <linux/module.h> |
---|
12 | 9 | #include <linux/of.h> |
---|
13 | 10 | #include <linux/regulator/consumer.h> |
---|
14 | 11 | |
---|
15 | | -#include <drm/drmP.h> |
---|
| 12 | +#include <video/mipi_display.h> |
---|
| 13 | + |
---|
16 | 14 | #include <drm/drm_crtc.h> |
---|
| 15 | +#include <drm/drm_device.h> |
---|
17 | 16 | #include <drm/drm_mipi_dsi.h> |
---|
18 | 17 | #include <drm/drm_panel.h> |
---|
19 | | - |
---|
20 | | -#include <video/mipi_display.h> |
---|
21 | 18 | |
---|
22 | 19 | struct sharp_panel { |
---|
23 | 20 | struct drm_panel base; |
---|
.. | .. |
---|
25 | 22 | struct mipi_dsi_device *link1; |
---|
26 | 23 | struct mipi_dsi_device *link2; |
---|
27 | 24 | |
---|
28 | | - struct backlight_device *backlight; |
---|
29 | 25 | struct regulator *supply; |
---|
30 | 26 | |
---|
31 | 27 | bool prepared; |
---|
.. | .. |
---|
95 | 91 | |
---|
96 | 92 | if (!sharp->enabled) |
---|
97 | 93 | return 0; |
---|
98 | | - |
---|
99 | | - backlight_disable(sharp->backlight); |
---|
100 | 94 | |
---|
101 | 95 | sharp->enabled = false; |
---|
102 | 96 | |
---|
.. | .. |
---|
260 | 254 | if (sharp->enabled) |
---|
261 | 255 | return 0; |
---|
262 | 256 | |
---|
263 | | - backlight_enable(sharp->backlight); |
---|
264 | | - |
---|
265 | 257 | sharp->enabled = true; |
---|
266 | 258 | |
---|
267 | 259 | return 0; |
---|
.. | .. |
---|
277 | 269 | .vsync_start = 1600 + 4, |
---|
278 | 270 | .vsync_end = 1600 + 4 + 8, |
---|
279 | 271 | .vtotal = 1600 + 4 + 8 + 32, |
---|
280 | | - .vrefresh = 60, |
---|
281 | 272 | }; |
---|
282 | 273 | |
---|
283 | | -static int sharp_panel_get_modes(struct drm_panel *panel) |
---|
| 274 | +static int sharp_panel_get_modes(struct drm_panel *panel, |
---|
| 275 | + struct drm_connector *connector) |
---|
284 | 276 | { |
---|
285 | 277 | struct drm_display_mode *mode; |
---|
286 | 278 | |
---|
287 | | - mode = drm_mode_duplicate(panel->drm, &default_mode); |
---|
| 279 | + mode = drm_mode_duplicate(connector->dev, &default_mode); |
---|
288 | 280 | if (!mode) { |
---|
289 | | - dev_err(panel->drm->dev, "failed to add mode %ux%ux@%u\n", |
---|
| 281 | + dev_err(panel->dev, "failed to add mode %ux%ux@%u\n", |
---|
290 | 282 | default_mode.hdisplay, default_mode.vdisplay, |
---|
291 | | - default_mode.vrefresh); |
---|
| 283 | + drm_mode_vrefresh(&default_mode)); |
---|
292 | 284 | return -ENOMEM; |
---|
293 | 285 | } |
---|
294 | 286 | |
---|
295 | 287 | drm_mode_set_name(mode); |
---|
296 | 288 | |
---|
297 | | - drm_mode_probed_add(panel->connector, mode); |
---|
| 289 | + drm_mode_probed_add(connector, mode); |
---|
298 | 290 | |
---|
299 | | - panel->connector->display_info.width_mm = 217; |
---|
300 | | - panel->connector->display_info.height_mm = 136; |
---|
| 291 | + connector->display_info.width_mm = 217; |
---|
| 292 | + connector->display_info.height_mm = 136; |
---|
301 | 293 | |
---|
302 | 294 | return 1; |
---|
303 | 295 | } |
---|
.. | .. |
---|
318 | 310 | |
---|
319 | 311 | static int sharp_panel_add(struct sharp_panel *sharp) |
---|
320 | 312 | { |
---|
321 | | - struct device *dev = &sharp->link1->dev; |
---|
| 313 | + int ret; |
---|
322 | 314 | |
---|
323 | 315 | sharp->mode = &default_mode; |
---|
324 | 316 | |
---|
.. | .. |
---|
326 | 318 | if (IS_ERR(sharp->supply)) |
---|
327 | 319 | return PTR_ERR(sharp->supply); |
---|
328 | 320 | |
---|
329 | | - sharp->backlight = devm_of_find_backlight(dev); |
---|
| 321 | + drm_panel_init(&sharp->base, &sharp->link1->dev, &sharp_panel_funcs, |
---|
| 322 | + DRM_MODE_CONNECTOR_DSI); |
---|
330 | 323 | |
---|
331 | | - if (IS_ERR(sharp->backlight)) |
---|
332 | | - return PTR_ERR(sharp->backlight); |
---|
| 324 | + ret = drm_panel_of_backlight(&sharp->base); |
---|
| 325 | + if (ret) |
---|
| 326 | + return ret; |
---|
333 | 327 | |
---|
334 | | - drm_panel_init(&sharp->base); |
---|
335 | | - sharp->base.funcs = &sharp_panel_funcs; |
---|
336 | | - sharp->base.dev = &sharp->link1->dev; |
---|
| 328 | + drm_panel_add(&sharp->base); |
---|
337 | 329 | |
---|
338 | | - return drm_panel_add(&sharp->base); |
---|
| 330 | + return 0; |
---|
339 | 331 | } |
---|
340 | 332 | |
---|
341 | 333 | static void sharp_panel_del(struct sharp_panel *sharp) |
---|
.. | .. |
---|
410 | 402 | return 0; |
---|
411 | 403 | } |
---|
412 | 404 | |
---|
413 | | - err = sharp_panel_disable(&sharp->base); |
---|
| 405 | + err = drm_panel_disable(&sharp->base); |
---|
414 | 406 | if (err < 0) |
---|
415 | 407 | dev_err(&dsi->dev, "failed to disable panel: %d\n", err); |
---|
416 | 408 | |
---|
.. | .. |
---|
431 | 423 | if (!sharp) |
---|
432 | 424 | return; |
---|
433 | 425 | |
---|
434 | | - sharp_panel_disable(&sharp->base); |
---|
| 426 | + drm_panel_disable(&sharp->base); |
---|
435 | 427 | } |
---|
436 | 428 | |
---|
437 | 429 | static struct mipi_dsi_driver sharp_panel_driver = { |
---|