panel-edp.c (49442B)
1/* 2 * Copyright (C) 2013, NVIDIA Corporation. All rights reserved. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sub license, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the 12 * next paragraph) shall be included in all copies or substantial portions 13 * of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24#include <linux/debugfs.h> 25#include <linux/delay.h> 26#include <linux/gpio/consumer.h> 27#include <linux/iopoll.h> 28#include <linux/module.h> 29#include <linux/of_platform.h> 30#include <linux/platform_device.h> 31#include <linux/pm_runtime.h> 32#include <linux/regulator/consumer.h> 33 34#include <video/display_timing.h> 35#include <video/of_display_timing.h> 36#include <video/videomode.h> 37 38#include <drm/display/drm_dp_aux_bus.h> 39#include <drm/display/drm_dp_helper.h> 40#include <drm/drm_crtc.h> 41#include <drm/drm_device.h> 42#include <drm/drm_panel.h> 43 44/** 45 * struct panel_delay - Describes delays for a simple panel. 46 */ 47struct panel_delay { 48 /** 49 * @hpd_reliable: Time for HPD to be reliable 50 * 51 * The time (in milliseconds) that it takes after powering the panel 52 * before the HPD signal is reliable. Ideally this is 0 but some panels, 53 * board designs, or bad pulldown configs can cause a glitch here. 54 * 55 * NOTE: on some old panel data this number appers to be much too big. 56 * Presumably some old panels simply didn't have HPD hooked up and put 57 * the hpd_absent here because this field predates the 58 * hpd_absent. While that works, it's non-ideal. 59 */ 60 unsigned int hpd_reliable; 61 62 /** 63 * @hpd_absent: Time to wait if HPD isn't hooked up. 64 * 65 * Add this to the prepare delay if we know Hot Plug Detect isn't used. 66 * 67 * This is T3-max on eDP timing diagrams or the delay from power on 68 * until HPD is guaranteed to be asserted. 69 */ 70 unsigned int hpd_absent; 71 72 /** 73 * @prepare_to_enable: Time between prepare and enable. 74 * 75 * The minimum time, in milliseconds, that needs to have passed 76 * between when prepare finished and enable may begin. If at 77 * enable time less time has passed since prepare finished, 78 * the driver waits for the remaining time. 79 * 80 * If a fixed enable delay is also specified, we'll start 81 * counting before delaying for the fixed delay. 82 * 83 * If a fixed prepare delay is also specified, we won't start 84 * counting until after the fixed delay. We can't overlap this 85 * fixed delay with the min time because the fixed delay 86 * doesn't happen at the end of the function if a HPD GPIO was 87 * specified. 88 * 89 * In other words: 90 * prepare() 91 * ... 92 * // do fixed prepare delay 93 * // wait for HPD GPIO if applicable 94 * // start counting for prepare_to_enable 95 * 96 * enable() 97 * // do fixed enable delay 98 * // enforce prepare_to_enable min time 99 * 100 * This is not specified in a standard way on eDP timing diagrams. 101 * It is effectively the time from HPD going high till you can 102 * turn on the backlight. 103 */ 104 unsigned int prepare_to_enable; 105 106 /** 107 * @enable: Time for the panel to display a valid frame. 108 * 109 * The time (in milliseconds) that it takes for the panel to 110 * display the first valid frame after starting to receive 111 * video data. 112 * 113 * This is (T6-min + max(T7-max, T8-min)) on eDP timing diagrams or 114 * the delay after link training finishes until we can turn the 115 * backlight on and see valid data. 116 */ 117 unsigned int enable; 118 119 /** 120 * @disable: Time for the panel to turn the display off. 121 * 122 * The time (in milliseconds) that it takes for the panel to 123 * turn the display off (no content is visible). 124 * 125 * This is T9-min (delay from backlight off to end of valid video 126 * data) on eDP timing diagrams. It is not common to set. 127 */ 128 unsigned int disable; 129 130 /** 131 * @unprepare: Time to power down completely. 132 * 133 * The time (in milliseconds) that it takes for the panel 134 * to power itself down completely. 135 * 136 * This time is used to prevent a future "prepare" from 137 * starting until at least this many milliseconds has passed. 138 * If at prepare time less time has passed since unprepare 139 * finished, the driver waits for the remaining time. 140 * 141 * This is T12-min on eDP timing diagrams. 142 */ 143 unsigned int unprepare; 144}; 145 146/** 147 * struct panel_desc - Describes a simple panel. 148 */ 149struct panel_desc { 150 /** 151 * @modes: Pointer to array of fixed modes appropriate for this panel. 152 * 153 * If only one mode then this can just be the address of the mode. 154 * NOTE: cannot be used with "timings" and also if this is specified 155 * then you cannot override the mode in the device tree. 156 */ 157 const struct drm_display_mode *modes; 158 159 /** @num_modes: Number of elements in modes array. */ 160 unsigned int num_modes; 161 162 /** 163 * @timings: Pointer to array of display timings 164 * 165 * NOTE: cannot be used with "modes" and also these will be used to 166 * validate a device tree override if one is present. 167 */ 168 const struct display_timing *timings; 169 170 /** @num_timings: Number of elements in timings array. */ 171 unsigned int num_timings; 172 173 /** @bpc: Bits per color. */ 174 unsigned int bpc; 175 176 /** @size: Structure containing the physical size of this panel. */ 177 struct { 178 /** 179 * @size.width: Width (in mm) of the active display area. 180 */ 181 unsigned int width; 182 183 /** 184 * @size.height: Height (in mm) of the active display area. 185 */ 186 unsigned int height; 187 } size; 188 189 /** @delay: Structure containing various delay values for this panel. */ 190 struct panel_delay delay; 191}; 192 193/** 194 * struct edp_panel_entry - Maps panel ID to delay / panel name. 195 */ 196struct edp_panel_entry { 197 /** @panel_id: 32-bit ID for panel, encoded with drm_edid_encode_panel_id(). */ 198 u32 panel_id; 199 200 /** @delay: The power sequencing delays needed for this panel. */ 201 const struct panel_delay *delay; 202 203 /** @name: Name of this panel (for printing to logs). */ 204 const char *name; 205}; 206 207struct panel_edp { 208 struct drm_panel base; 209 bool enabled; 210 bool no_hpd; 211 212 bool prepared; 213 214 ktime_t prepared_time; 215 ktime_t unprepared_time; 216 217 const struct panel_desc *desc; 218 219 struct regulator *supply; 220 struct i2c_adapter *ddc; 221 struct drm_dp_aux *aux; 222 223 struct gpio_desc *enable_gpio; 224 struct gpio_desc *hpd_gpio; 225 226 const struct edp_panel_entry *detected_panel; 227 228 struct edid *edid; 229 230 struct drm_display_mode override_mode; 231 232 enum drm_panel_orientation orientation; 233}; 234 235static inline struct panel_edp *to_panel_edp(struct drm_panel *panel) 236{ 237 return container_of(panel, struct panel_edp, base); 238} 239 240static unsigned int panel_edp_get_timings_modes(struct panel_edp *panel, 241 struct drm_connector *connector) 242{ 243 struct drm_display_mode *mode; 244 unsigned int i, num = 0; 245 246 for (i = 0; i < panel->desc->num_timings; i++) { 247 const struct display_timing *dt = &panel->desc->timings[i]; 248 struct videomode vm; 249 250 videomode_from_timing(dt, &vm); 251 mode = drm_mode_create(connector->dev); 252 if (!mode) { 253 dev_err(panel->base.dev, "failed to add mode %ux%u\n", 254 dt->hactive.typ, dt->vactive.typ); 255 continue; 256 } 257 258 drm_display_mode_from_videomode(&vm, mode); 259 260 mode->type |= DRM_MODE_TYPE_DRIVER; 261 262 if (panel->desc->num_timings == 1) 263 mode->type |= DRM_MODE_TYPE_PREFERRED; 264 265 drm_mode_probed_add(connector, mode); 266 num++; 267 } 268 269 return num; 270} 271 272static unsigned int panel_edp_get_display_modes(struct panel_edp *panel, 273 struct drm_connector *connector) 274{ 275 struct drm_display_mode *mode; 276 unsigned int i, num = 0; 277 278 for (i = 0; i < panel->desc->num_modes; i++) { 279 const struct drm_display_mode *m = &panel->desc->modes[i]; 280 281 mode = drm_mode_duplicate(connector->dev, m); 282 if (!mode) { 283 dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n", 284 m->hdisplay, m->vdisplay, 285 drm_mode_vrefresh(m)); 286 continue; 287 } 288 289 mode->type |= DRM_MODE_TYPE_DRIVER; 290 291 if (panel->desc->num_modes == 1) 292 mode->type |= DRM_MODE_TYPE_PREFERRED; 293 294 drm_mode_set_name(mode); 295 296 drm_mode_probed_add(connector, mode); 297 num++; 298 } 299 300 return num; 301} 302 303static int panel_edp_get_non_edid_modes(struct panel_edp *panel, 304 struct drm_connector *connector) 305{ 306 struct drm_display_mode *mode; 307 bool has_override = panel->override_mode.type; 308 unsigned int num = 0; 309 310 if (!panel->desc) 311 return 0; 312 313 if (has_override) { 314 mode = drm_mode_duplicate(connector->dev, 315 &panel->override_mode); 316 if (mode) { 317 drm_mode_probed_add(connector, mode); 318 num = 1; 319 } else { 320 dev_err(panel->base.dev, "failed to add override mode\n"); 321 } 322 } 323 324 /* Only add timings if override was not there or failed to validate */ 325 if (num == 0 && panel->desc->num_timings) 326 num = panel_edp_get_timings_modes(panel, connector); 327 328 /* 329 * Only add fixed modes if timings/override added no mode. 330 * 331 * We should only ever have either the display timings specified 332 * or a fixed mode. Anything else is rather bogus. 333 */ 334 WARN_ON(panel->desc->num_timings && panel->desc->num_modes); 335 if (num == 0) 336 num = panel_edp_get_display_modes(panel, connector); 337 338 connector->display_info.bpc = panel->desc->bpc; 339 connector->display_info.width_mm = panel->desc->size.width; 340 connector->display_info.height_mm = panel->desc->size.height; 341 342 return num; 343} 344 345static void panel_edp_wait(ktime_t start_ktime, unsigned int min_ms) 346{ 347 ktime_t now_ktime, min_ktime; 348 349 if (!min_ms) 350 return; 351 352 min_ktime = ktime_add(start_ktime, ms_to_ktime(min_ms)); 353 now_ktime = ktime_get(); 354 355 if (ktime_before(now_ktime, min_ktime)) 356 msleep(ktime_to_ms(ktime_sub(min_ktime, now_ktime)) + 1); 357} 358 359static int panel_edp_disable(struct drm_panel *panel) 360{ 361 struct panel_edp *p = to_panel_edp(panel); 362 363 if (!p->enabled) 364 return 0; 365 366 if (p->desc->delay.disable) 367 msleep(p->desc->delay.disable); 368 369 p->enabled = false; 370 371 return 0; 372} 373 374static int panel_edp_suspend(struct device *dev) 375{ 376 struct panel_edp *p = dev_get_drvdata(dev); 377 378 gpiod_set_value_cansleep(p->enable_gpio, 0); 379 regulator_disable(p->supply); 380 p->unprepared_time = ktime_get(); 381 382 return 0; 383} 384 385static int panel_edp_unprepare(struct drm_panel *panel) 386{ 387 struct panel_edp *p = to_panel_edp(panel); 388 int ret; 389 390 /* Unpreparing when already unprepared is a no-op */ 391 if (!p->prepared) 392 return 0; 393 394 pm_runtime_mark_last_busy(panel->dev); 395 ret = pm_runtime_put_autosuspend(panel->dev); 396 if (ret < 0) 397 return ret; 398 p->prepared = false; 399 400 return 0; 401} 402 403static int panel_edp_get_hpd_gpio(struct device *dev, struct panel_edp *p) 404{ 405 int err; 406 407 p->hpd_gpio = devm_gpiod_get_optional(dev, "hpd", GPIOD_IN); 408 if (IS_ERR(p->hpd_gpio)) { 409 err = PTR_ERR(p->hpd_gpio); 410 411 if (err != -EPROBE_DEFER) 412 dev_err(dev, "failed to get 'hpd' GPIO: %d\n", err); 413 414 return err; 415 } 416 417 return 0; 418} 419 420static int panel_edp_prepare_once(struct panel_edp *p) 421{ 422 struct device *dev = p->base.dev; 423 unsigned int delay; 424 int err; 425 int hpd_asserted; 426 unsigned long hpd_wait_us; 427 428 panel_edp_wait(p->unprepared_time, p->desc->delay.unprepare); 429 430 err = regulator_enable(p->supply); 431 if (err < 0) { 432 dev_err(dev, "failed to enable supply: %d\n", err); 433 return err; 434 } 435 436 gpiod_set_value_cansleep(p->enable_gpio, 1); 437 438 delay = p->desc->delay.hpd_reliable; 439 if (p->no_hpd) 440 delay = max(delay, p->desc->delay.hpd_absent); 441 if (delay) 442 msleep(delay); 443 444 if (p->hpd_gpio) { 445 if (p->desc->delay.hpd_absent) 446 hpd_wait_us = p->desc->delay.hpd_absent * 1000UL; 447 else 448 hpd_wait_us = 2000000; 449 450 err = readx_poll_timeout(gpiod_get_value_cansleep, p->hpd_gpio, 451 hpd_asserted, hpd_asserted, 452 1000, hpd_wait_us); 453 if (hpd_asserted < 0) 454 err = hpd_asserted; 455 456 if (err) { 457 if (err != -ETIMEDOUT) 458 dev_err(dev, 459 "error waiting for hpd GPIO: %d\n", err); 460 goto error; 461 } 462 } 463 464 p->prepared_time = ktime_get(); 465 466 return 0; 467 468error: 469 gpiod_set_value_cansleep(p->enable_gpio, 0); 470 regulator_disable(p->supply); 471 p->unprepared_time = ktime_get(); 472 473 return err; 474} 475 476/* 477 * Some panels simply don't always come up and need to be power cycled to 478 * work properly. We'll allow for a handful of retries. 479 */ 480#define MAX_PANEL_PREPARE_TRIES 5 481 482static int panel_edp_resume(struct device *dev) 483{ 484 struct panel_edp *p = dev_get_drvdata(dev); 485 int ret; 486 int try; 487 488 for (try = 0; try < MAX_PANEL_PREPARE_TRIES; try++) { 489 ret = panel_edp_prepare_once(p); 490 if (ret != -ETIMEDOUT) 491 break; 492 } 493 494 if (ret == -ETIMEDOUT) 495 dev_err(dev, "Prepare timeout after %d tries\n", try); 496 else if (try) 497 dev_warn(dev, "Prepare needed %d retries\n", try); 498 499 return ret; 500} 501 502static int panel_edp_prepare(struct drm_panel *panel) 503{ 504 struct panel_edp *p = to_panel_edp(panel); 505 int ret; 506 507 /* Preparing when already prepared is a no-op */ 508 if (p->prepared) 509 return 0; 510 511 ret = pm_runtime_get_sync(panel->dev); 512 if (ret < 0) { 513 pm_runtime_put_autosuspend(panel->dev); 514 return ret; 515 } 516 517 p->prepared = true; 518 519 return 0; 520} 521 522static int panel_edp_enable(struct drm_panel *panel) 523{ 524 struct panel_edp *p = to_panel_edp(panel); 525 unsigned int delay; 526 527 if (p->enabled) 528 return 0; 529 530 delay = p->desc->delay.enable; 531 532 /* 533 * If there is a "prepare_to_enable" delay then that's supposed to be 534 * the delay from HPD going high until we can turn the backlight on. 535 * However, we can only count this if HPD is handled by the panel 536 * driver, not if it goes to a dedicated pin on the controller. 537 * If we aren't handling the HPD pin ourselves then the best we 538 * can do is assume that HPD went high immediately before we were 539 * called (and link training took zero time). 540 * 541 * NOTE: if we ever end up in this "if" statement then we're 542 * guaranteed that the panel_edp_wait() call below will do no delay. 543 * It already handles that case, though, so we don't need any special 544 * code for it. 545 */ 546 if (p->desc->delay.prepare_to_enable && !p->hpd_gpio && !p->no_hpd) 547 delay = max(delay, p->desc->delay.prepare_to_enable); 548 549 if (delay) 550 msleep(delay); 551 552 panel_edp_wait(p->prepared_time, p->desc->delay.prepare_to_enable); 553 554 p->enabled = true; 555 556 return 0; 557} 558 559static int panel_edp_get_modes(struct drm_panel *panel, 560 struct drm_connector *connector) 561{ 562 struct panel_edp *p = to_panel_edp(panel); 563 int num = 0; 564 565 /* probe EDID if a DDC bus is available */ 566 if (p->ddc) { 567 pm_runtime_get_sync(panel->dev); 568 569 if (!p->edid) 570 p->edid = drm_get_edid(connector, p->ddc); 571 572 if (p->edid) 573 num += drm_add_edid_modes(connector, p->edid); 574 575 pm_runtime_mark_last_busy(panel->dev); 576 pm_runtime_put_autosuspend(panel->dev); 577 } 578 579 /* 580 * Add hard-coded panel modes. Don't call this if there are no timings 581 * and no modes (the generic edp-panel case) because it will clobber 582 * the display_info that was already set by drm_add_edid_modes(). 583 */ 584 if (p->desc->num_timings || p->desc->num_modes) 585 num += panel_edp_get_non_edid_modes(p, connector); 586 else if (!num) 587 dev_warn(p->base.dev, "No display modes\n"); 588 589 /* set up connector's "panel orientation" property */ 590 drm_connector_set_panel_orientation(connector, p->orientation); 591 592 return num; 593} 594 595static int panel_edp_get_timings(struct drm_panel *panel, 596 unsigned int num_timings, 597 struct display_timing *timings) 598{ 599 struct panel_edp *p = to_panel_edp(panel); 600 unsigned int i; 601 602 if (p->desc->num_timings < num_timings) 603 num_timings = p->desc->num_timings; 604 605 if (timings) 606 for (i = 0; i < num_timings; i++) 607 timings[i] = p->desc->timings[i]; 608 609 return p->desc->num_timings; 610} 611 612static int detected_panel_show(struct seq_file *s, void *data) 613{ 614 struct drm_panel *panel = s->private; 615 struct panel_edp *p = to_panel_edp(panel); 616 617 if (IS_ERR(p->detected_panel)) 618 seq_puts(s, "UNKNOWN\n"); 619 else if (!p->detected_panel) 620 seq_puts(s, "HARDCODED\n"); 621 else 622 seq_printf(s, "%s\n", p->detected_panel->name); 623 624 return 0; 625} 626 627DEFINE_SHOW_ATTRIBUTE(detected_panel); 628 629static void panel_edp_debugfs_init(struct drm_panel *panel, struct dentry *root) 630{ 631 debugfs_create_file("detected_panel", 0600, root, panel, &detected_panel_fops); 632} 633 634static const struct drm_panel_funcs panel_edp_funcs = { 635 .disable = panel_edp_disable, 636 .unprepare = panel_edp_unprepare, 637 .prepare = panel_edp_prepare, 638 .enable = panel_edp_enable, 639 .get_modes = panel_edp_get_modes, 640 .get_timings = panel_edp_get_timings, 641 .debugfs_init = panel_edp_debugfs_init, 642}; 643 644#define PANEL_EDP_BOUNDS_CHECK(to_check, bounds, field) \ 645 (to_check->field.typ >= bounds->field.min && \ 646 to_check->field.typ <= bounds->field.max) 647static void panel_edp_parse_panel_timing_node(struct device *dev, 648 struct panel_edp *panel, 649 const struct display_timing *ot) 650{ 651 const struct panel_desc *desc = panel->desc; 652 struct videomode vm; 653 unsigned int i; 654 655 if (WARN_ON(desc->num_modes)) { 656 dev_err(dev, "Reject override mode: panel has a fixed mode\n"); 657 return; 658 } 659 if (WARN_ON(!desc->num_timings)) { 660 dev_err(dev, "Reject override mode: no timings specified\n"); 661 return; 662 } 663 664 for (i = 0; i < panel->desc->num_timings; i++) { 665 const struct display_timing *dt = &panel->desc->timings[i]; 666 667 if (!PANEL_EDP_BOUNDS_CHECK(ot, dt, hactive) || 668 !PANEL_EDP_BOUNDS_CHECK(ot, dt, hfront_porch) || 669 !PANEL_EDP_BOUNDS_CHECK(ot, dt, hback_porch) || 670 !PANEL_EDP_BOUNDS_CHECK(ot, dt, hsync_len) || 671 !PANEL_EDP_BOUNDS_CHECK(ot, dt, vactive) || 672 !PANEL_EDP_BOUNDS_CHECK(ot, dt, vfront_porch) || 673 !PANEL_EDP_BOUNDS_CHECK(ot, dt, vback_porch) || 674 !PANEL_EDP_BOUNDS_CHECK(ot, dt, vsync_len)) 675 continue; 676 677 if (ot->flags != dt->flags) 678 continue; 679 680 videomode_from_timing(ot, &vm); 681 drm_display_mode_from_videomode(&vm, &panel->override_mode); 682 panel->override_mode.type |= DRM_MODE_TYPE_DRIVER | 683 DRM_MODE_TYPE_PREFERRED; 684 break; 685 } 686 687 if (WARN_ON(!panel->override_mode.type)) 688 dev_err(dev, "Reject override mode: No display_timing found\n"); 689} 690 691static const struct edp_panel_entry *find_edp_panel(u32 panel_id); 692 693static int generic_edp_panel_probe(struct device *dev, struct panel_edp *panel) 694{ 695 struct panel_desc *desc; 696 u32 panel_id; 697 char vend[4]; 698 u16 product_id; 699 u32 reliable_ms = 0; 700 u32 absent_ms = 0; 701 int ret; 702 703 desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL); 704 if (!desc) 705 return -ENOMEM; 706 panel->desc = desc; 707 708 /* 709 * Read the dts properties for the initial probe. These are used by 710 * the runtime resume code which will get called by the 711 * pm_runtime_get_sync() call below. 712 */ 713 of_property_read_u32(dev->of_node, "hpd-reliable-delay-ms", &reliable_ms); 714 desc->delay.hpd_reliable = reliable_ms; 715 of_property_read_u32(dev->of_node, "hpd-absent-delay-ms", &absent_ms); 716 desc->delay.hpd_reliable = absent_ms; 717 718 /* Power the panel on so we can read the EDID */ 719 ret = pm_runtime_get_sync(dev); 720 if (ret < 0) { 721 dev_err(dev, "Couldn't power on panel to read EDID: %d\n", ret); 722 goto exit; 723 } 724 725 panel_id = drm_edid_get_panel_id(panel->ddc); 726 if (!panel_id) { 727 dev_err(dev, "Couldn't identify panel via EDID\n"); 728 ret = -EIO; 729 goto exit; 730 } 731 drm_edid_decode_panel_id(panel_id, vend, &product_id); 732 733 panel->detected_panel = find_edp_panel(panel_id); 734 735 /* 736 * We're using non-optimized timings and want it really obvious that 737 * someone needs to add an entry to the table, so we'll do a WARN_ON 738 * splat. 739 */ 740 if (WARN_ON(!panel->detected_panel)) { 741 dev_warn(dev, 742 "Unknown panel %s %#06x, using conservative timings\n", 743 vend, product_id); 744 745 /* 746 * It's highly likely that the panel will work if we use very 747 * conservative timings, so let's do that. We already know that 748 * the HPD-related delays must have worked since we got this 749 * far, so we really just need the "unprepare" / "enable" 750 * delays. We don't need "prepare_to_enable" since that 751 * overlaps the "enable" delay anyway. 752 * 753 * Nearly all panels have a "unprepare" delay of 500 ms though 754 * there are a few with 1000. Let's stick 2000 in just to be 755 * super conservative. 756 * 757 * An "enable" delay of 80 ms seems the most common, but we'll 758 * throw in 200 ms to be safe. 759 */ 760 desc->delay.unprepare = 2000; 761 desc->delay.enable = 200; 762 763 panel->detected_panel = ERR_PTR(-EINVAL); 764 } else { 765 dev_info(dev, "Detected %s %s (%#06x)\n", 766 vend, panel->detected_panel->name, product_id); 767 768 /* Update the delay; everything else comes from EDID */ 769 desc->delay = *panel->detected_panel->delay; 770 } 771 772 ret = 0; 773exit: 774 pm_runtime_mark_last_busy(dev); 775 pm_runtime_put_autosuspend(dev); 776 777 return ret; 778} 779 780static int panel_edp_probe(struct device *dev, const struct panel_desc *desc, 781 struct drm_dp_aux *aux) 782{ 783 struct panel_edp *panel; 784 struct display_timing dt; 785 struct device_node *ddc; 786 int err; 787 788 panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL); 789 if (!panel) 790 return -ENOMEM; 791 792 panel->enabled = false; 793 panel->prepared_time = 0; 794 panel->desc = desc; 795 panel->aux = aux; 796 797 panel->no_hpd = of_property_read_bool(dev->of_node, "no-hpd"); 798 if (!panel->no_hpd) { 799 err = panel_edp_get_hpd_gpio(dev, panel); 800 if (err) 801 return err; 802 } 803 804 panel->supply = devm_regulator_get(dev, "power"); 805 if (IS_ERR(panel->supply)) 806 return PTR_ERR(panel->supply); 807 808 panel->enable_gpio = devm_gpiod_get_optional(dev, "enable", 809 GPIOD_OUT_LOW); 810 if (IS_ERR(panel->enable_gpio)) { 811 err = PTR_ERR(panel->enable_gpio); 812 if (err != -EPROBE_DEFER) 813 dev_err(dev, "failed to request GPIO: %d\n", err); 814 return err; 815 } 816 817 err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation); 818 if (err) { 819 dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err); 820 return err; 821 } 822 823 ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0); 824 if (ddc) { 825 panel->ddc = of_find_i2c_adapter_by_node(ddc); 826 of_node_put(ddc); 827 828 if (!panel->ddc) 829 return -EPROBE_DEFER; 830 } else if (aux) { 831 panel->ddc = &aux->ddc; 832 } 833 834 if (!of_get_display_timing(dev->of_node, "panel-timing", &dt)) 835 panel_edp_parse_panel_timing_node(dev, panel, &dt); 836 837 dev_set_drvdata(dev, panel); 838 839 drm_panel_init(&panel->base, dev, &panel_edp_funcs, DRM_MODE_CONNECTOR_eDP); 840 841 err = drm_panel_of_backlight(&panel->base); 842 if (err) 843 goto err_finished_ddc_init; 844 845 /* 846 * We use runtime PM for prepare / unprepare since those power the panel 847 * on and off and those can be very slow operations. This is important 848 * to optimize powering the panel on briefly to read the EDID before 849 * fully enabling the panel. 850 */ 851 pm_runtime_enable(dev); 852 pm_runtime_set_autosuspend_delay(dev, 1000); 853 pm_runtime_use_autosuspend(dev); 854 855 if (of_device_is_compatible(dev->of_node, "edp-panel")) { 856 err = generic_edp_panel_probe(dev, panel); 857 if (err) { 858 dev_err_probe(dev, err, 859 "Couldn't detect panel nor find a fallback\n"); 860 goto err_finished_pm_runtime; 861 } 862 /* generic_edp_panel_probe() replaces desc in the panel */ 863 desc = panel->desc; 864 } else if (desc->bpc != 6 && desc->bpc != 8 && desc->bpc != 10) { 865 dev_warn(dev, "Expected bpc in {6,8,10} but got: %u\n", desc->bpc); 866 } 867 868 if (!panel->base.backlight && panel->aux) { 869 pm_runtime_get_sync(dev); 870 err = drm_panel_dp_aux_backlight(&panel->base, panel->aux); 871 pm_runtime_mark_last_busy(dev); 872 pm_runtime_put_autosuspend(dev); 873 if (err) 874 goto err_finished_pm_runtime; 875 } 876 877 drm_panel_add(&panel->base); 878 879 return 0; 880 881err_finished_pm_runtime: 882 pm_runtime_dont_use_autosuspend(dev); 883 pm_runtime_disable(dev); 884err_finished_ddc_init: 885 if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc)) 886 put_device(&panel->ddc->dev); 887 888 return err; 889} 890 891static int panel_edp_remove(struct device *dev) 892{ 893 struct panel_edp *panel = dev_get_drvdata(dev); 894 895 drm_panel_remove(&panel->base); 896 drm_panel_disable(&panel->base); 897 drm_panel_unprepare(&panel->base); 898 899 pm_runtime_dont_use_autosuspend(dev); 900 pm_runtime_disable(dev); 901 if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc)) 902 put_device(&panel->ddc->dev); 903 904 kfree(panel->edid); 905 panel->edid = NULL; 906 907 return 0; 908} 909 910static void panel_edp_shutdown(struct device *dev) 911{ 912 struct panel_edp *panel = dev_get_drvdata(dev); 913 914 drm_panel_disable(&panel->base); 915 drm_panel_unprepare(&panel->base); 916} 917 918static const struct display_timing auo_b101ean01_timing = { 919 .pixelclock = { 65300000, 72500000, 75000000 }, 920 .hactive = { 1280, 1280, 1280 }, 921 .hfront_porch = { 18, 119, 119 }, 922 .hback_porch = { 21, 21, 21 }, 923 .hsync_len = { 32, 32, 32 }, 924 .vactive = { 800, 800, 800 }, 925 .vfront_porch = { 4, 4, 4 }, 926 .vback_porch = { 8, 8, 8 }, 927 .vsync_len = { 18, 20, 20 }, 928}; 929 930static const struct panel_desc auo_b101ean01 = { 931 .timings = &auo_b101ean01_timing, 932 .num_timings = 1, 933 .bpc = 6, 934 .size = { 935 .width = 217, 936 .height = 136, 937 }, 938}; 939 940static const struct drm_display_mode auo_b116xak01_mode = { 941 .clock = 69300, 942 .hdisplay = 1366, 943 .hsync_start = 1366 + 48, 944 .hsync_end = 1366 + 48 + 32, 945 .htotal = 1366 + 48 + 32 + 10, 946 .vdisplay = 768, 947 .vsync_start = 768 + 4, 948 .vsync_end = 768 + 4 + 6, 949 .vtotal = 768 + 4 + 6 + 15, 950 .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, 951}; 952 953static const struct panel_desc auo_b116xak01 = { 954 .modes = &auo_b116xak01_mode, 955 .num_modes = 1, 956 .bpc = 6, 957 .size = { 958 .width = 256, 959 .height = 144, 960 }, 961 .delay = { 962 .hpd_absent = 200, 963 }, 964}; 965 966static const struct drm_display_mode auo_b116xw03_mode = { 967 .clock = 70589, 968 .hdisplay = 1366, 969 .hsync_start = 1366 + 40, 970 .hsync_end = 1366 + 40 + 40, 971 .htotal = 1366 + 40 + 40 + 32, 972 .vdisplay = 768, 973 .vsync_start = 768 + 10, 974 .vsync_end = 768 + 10 + 12, 975 .vtotal = 768 + 10 + 12 + 6, 976 .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, 977}; 978 979static const struct panel_desc auo_b116xw03 = { 980 .modes = &auo_b116xw03_mode, 981 .num_modes = 1, 982 .bpc = 6, 983 .size = { 984 .width = 256, 985 .height = 144, 986 }, 987 .delay = { 988 .enable = 400, 989 }, 990}; 991 992static const struct drm_display_mode auo_b133han05_mode = { 993 .clock = 142600, 994 .hdisplay = 1920, 995 .hsync_start = 1920 + 58, 996 .hsync_end = 1920 + 58 + 42, 997 .htotal = 1920 + 58 + 42 + 60, 998 .vdisplay = 1080, 999 .vsync_start = 1080 + 3, 1000 .vsync_end = 1080 + 3 + 5, 1001 .vtotal = 1080 + 3 + 5 + 54, 1002}; 1003 1004static const struct panel_desc auo_b133han05 = { 1005 .modes = &auo_b133han05_mode, 1006 .num_modes = 1, 1007 .bpc = 8, 1008 .size = { 1009 .width = 293, 1010 .height = 165, 1011 }, 1012 .delay = { 1013 .hpd_reliable = 100, 1014 .enable = 20, 1015 .unprepare = 50, 1016 }, 1017}; 1018 1019static const struct drm_display_mode auo_b133htn01_mode = { 1020 .clock = 150660, 1021 .hdisplay = 1920, 1022 .hsync_start = 1920 + 172, 1023 .hsync_end = 1920 + 172 + 80, 1024 .htotal = 1920 + 172 + 80 + 60, 1025 .vdisplay = 1080, 1026 .vsync_start = 1080 + 25, 1027 .vsync_end = 1080 + 25 + 10, 1028 .vtotal = 1080 + 25 + 10 + 10, 1029}; 1030 1031static const struct panel_desc auo_b133htn01 = { 1032 .modes = &auo_b133htn01_mode, 1033 .num_modes = 1, 1034 .bpc = 6, 1035 .size = { 1036 .width = 293, 1037 .height = 165, 1038 }, 1039 .delay = { 1040 .hpd_reliable = 105, 1041 .enable = 20, 1042 .unprepare = 50, 1043 }, 1044}; 1045 1046static const struct drm_display_mode auo_b133xtn01_mode = { 1047 .clock = 69500, 1048 .hdisplay = 1366, 1049 .hsync_start = 1366 + 48, 1050 .hsync_end = 1366 + 48 + 32, 1051 .htotal = 1366 + 48 + 32 + 20, 1052 .vdisplay = 768, 1053 .vsync_start = 768 + 3, 1054 .vsync_end = 768 + 3 + 6, 1055 .vtotal = 768 + 3 + 6 + 13, 1056}; 1057 1058static const struct panel_desc auo_b133xtn01 = { 1059 .modes = &auo_b133xtn01_mode, 1060 .num_modes = 1, 1061 .bpc = 6, 1062 .size = { 1063 .width = 293, 1064 .height = 165, 1065 }, 1066}; 1067 1068static const struct drm_display_mode auo_b140han06_mode = { 1069 .clock = 141000, 1070 .hdisplay = 1920, 1071 .hsync_start = 1920 + 16, 1072 .hsync_end = 1920 + 16 + 16, 1073 .htotal = 1920 + 16 + 16 + 152, 1074 .vdisplay = 1080, 1075 .vsync_start = 1080 + 3, 1076 .vsync_end = 1080 + 3 + 14, 1077 .vtotal = 1080 + 3 + 14 + 19, 1078}; 1079 1080static const struct panel_desc auo_b140han06 = { 1081 .modes = &auo_b140han06_mode, 1082 .num_modes = 1, 1083 .bpc = 8, 1084 .size = { 1085 .width = 309, 1086 .height = 174, 1087 }, 1088 .delay = { 1089 .hpd_reliable = 100, 1090 .enable = 20, 1091 .unprepare = 50, 1092 }, 1093}; 1094 1095static const struct drm_display_mode boe_nv101wxmn51_modes[] = { 1096 { 1097 .clock = 71900, 1098 .hdisplay = 1280, 1099 .hsync_start = 1280 + 48, 1100 .hsync_end = 1280 + 48 + 32, 1101 .htotal = 1280 + 48 + 32 + 80, 1102 .vdisplay = 800, 1103 .vsync_start = 800 + 3, 1104 .vsync_end = 800 + 3 + 5, 1105 .vtotal = 800 + 3 + 5 + 24, 1106 }, 1107 { 1108 .clock = 57500, 1109 .hdisplay = 1280, 1110 .hsync_start = 1280 + 48, 1111 .hsync_end = 1280 + 48 + 32, 1112 .htotal = 1280 + 48 + 32 + 80, 1113 .vdisplay = 800, 1114 .vsync_start = 800 + 3, 1115 .vsync_end = 800 + 3 + 5, 1116 .vtotal = 800 + 3 + 5 + 24, 1117 }, 1118}; 1119 1120static const struct panel_desc boe_nv101wxmn51 = { 1121 .modes = boe_nv101wxmn51_modes, 1122 .num_modes = ARRAY_SIZE(boe_nv101wxmn51_modes), 1123 .bpc = 8, 1124 .size = { 1125 .width = 217, 1126 .height = 136, 1127 }, 1128 .delay = { 1129 /* TODO: should be hpd-absent and no-hpd should be set? */ 1130 .hpd_reliable = 210, 1131 .enable = 50, 1132 .unprepare = 160, 1133 }, 1134}; 1135 1136static const struct drm_display_mode boe_nv110wtm_n61_modes[] = { 1137 { 1138 .clock = 207800, 1139 .hdisplay = 2160, 1140 .hsync_start = 2160 + 48, 1141 .hsync_end = 2160 + 48 + 32, 1142 .htotal = 2160 + 48 + 32 + 100, 1143 .vdisplay = 1440, 1144 .vsync_start = 1440 + 3, 1145 .vsync_end = 1440 + 3 + 6, 1146 .vtotal = 1440 + 3 + 6 + 31, 1147 .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, 1148 }, 1149 { 1150 .clock = 138500, 1151 .hdisplay = 2160, 1152 .hsync_start = 2160 + 48, 1153 .hsync_end = 2160 + 48 + 32, 1154 .htotal = 2160 + 48 + 32 + 100, 1155 .vdisplay = 1440, 1156 .vsync_start = 1440 + 3, 1157 .vsync_end = 1440 + 3 + 6, 1158 .vtotal = 1440 + 3 + 6 + 31, 1159 .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, 1160 }, 1161}; 1162 1163static const struct panel_desc boe_nv110wtm_n61 = { 1164 .modes = boe_nv110wtm_n61_modes, 1165 .num_modes = ARRAY_SIZE(boe_nv110wtm_n61_modes), 1166 .bpc = 8, 1167 .size = { 1168 .width = 233, 1169 .height = 155, 1170 }, 1171 .delay = { 1172 .hpd_absent = 200, 1173 .prepare_to_enable = 80, 1174 .enable = 50, 1175 .unprepare = 500, 1176 }, 1177}; 1178 1179/* Also used for boe_nv133fhm_n62 */ 1180static const struct drm_display_mode boe_nv133fhm_n61_modes = { 1181 .clock = 147840, 1182 .hdisplay = 1920, 1183 .hsync_start = 1920 + 48, 1184 .hsync_end = 1920 + 48 + 32, 1185 .htotal = 1920 + 48 + 32 + 200, 1186 .vdisplay = 1080, 1187 .vsync_start = 1080 + 3, 1188 .vsync_end = 1080 + 3 + 6, 1189 .vtotal = 1080 + 3 + 6 + 31, 1190 .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC, 1191}; 1192 1193/* Also used for boe_nv133fhm_n62 */ 1194static const struct panel_desc boe_nv133fhm_n61 = { 1195 .modes = &boe_nv133fhm_n61_modes, 1196 .num_modes = 1, 1197 .bpc = 6, 1198 .size = { 1199 .width = 294, 1200 .height = 165, 1201 }, 1202 .delay = { 1203 /* 1204 * When power is first given to the panel there's a short 1205 * spike on the HPD line. It was explained that this spike 1206 * was until the TCON data download was complete. On 1207 * one system this was measured at 8 ms. We'll put 15 ms 1208 * in the prepare delay just to be safe. That means: 1209 * - If HPD isn't hooked up you still have 200 ms delay. 1210 * - If HPD is hooked up we won't try to look at it for the 1211 * first 15 ms. 1212 */ 1213 .hpd_reliable = 15, 1214 .hpd_absent = 200, 1215 1216 .unprepare = 500, 1217 }, 1218}; 1219 1220static const struct drm_display_mode boe_nv140fhmn49_modes[] = { 1221 { 1222 .clock = 148500, 1223 .hdisplay = 1920, 1224 .hsync_start = 1920 + 48, 1225 .hsync_end = 1920 + 48 + 32, 1226 .htotal = 2200, 1227 .vdisplay = 1080, 1228 .vsync_start = 1080 + 3, 1229 .vsync_end = 1080 + 3 + 5, 1230 .vtotal = 1125, 1231 }, 1232}; 1233 1234static const struct panel_desc boe_nv140fhmn49 = { 1235 .modes = boe_nv140fhmn49_modes, 1236 .num_modes = ARRAY_SIZE(boe_nv140fhmn49_modes), 1237 .bpc = 6, 1238 .size = { 1239 .width = 309, 1240 .height = 174, 1241 }, 1242 .delay = { 1243 /* TODO: should be hpd-absent and no-hpd should be set? */ 1244 .hpd_reliable = 210, 1245 .enable = 50, 1246 .unprepare = 160, 1247 }, 1248}; 1249 1250static const struct drm_display_mode innolux_n116bca_ea1_mode = { 1251 .clock = 76420, 1252 .hdisplay = 1366, 1253 .hsync_start = 1366 + 136, 1254 .hsync_end = 1366 + 136 + 30, 1255 .htotal = 1366 + 136 + 30 + 60, 1256 .vdisplay = 768, 1257 .vsync_start = 768 + 8, 1258 .vsync_end = 768 + 8 + 12, 1259 .vtotal = 768 + 8 + 12 + 12, 1260 .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, 1261}; 1262 1263static const struct panel_desc innolux_n116bca_ea1 = { 1264 .modes = &innolux_n116bca_ea1_mode, 1265 .num_modes = 1, 1266 .bpc = 6, 1267 .size = { 1268 .width = 256, 1269 .height = 144, 1270 }, 1271 .delay = { 1272 .hpd_absent = 200, 1273 .prepare_to_enable = 80, 1274 .unprepare = 500, 1275 }, 1276}; 1277 1278/* 1279 * Datasheet specifies that at 60 Hz refresh rate: 1280 * - total horizontal time: { 1506, 1592, 1716 } 1281 * - total vertical time: { 788, 800, 868 } 1282 * 1283 * ...but doesn't go into exactly how that should be split into a front 1284 * porch, back porch, or sync length. For now we'll leave a single setting 1285 * here which allows a bit of tweaking of the pixel clock at the expense of 1286 * refresh rate. 1287 */ 1288static const struct display_timing innolux_n116bge_timing = { 1289 .pixelclock = { 72600000, 76420000, 80240000 }, 1290 .hactive = { 1366, 1366, 1366 }, 1291 .hfront_porch = { 136, 136, 136 }, 1292 .hback_porch = { 60, 60, 60 }, 1293 .hsync_len = { 30, 30, 30 }, 1294 .vactive = { 768, 768, 768 }, 1295 .vfront_porch = { 8, 8, 8 }, 1296 .vback_porch = { 12, 12, 12 }, 1297 .vsync_len = { 12, 12, 12 }, 1298 .flags = DISPLAY_FLAGS_VSYNC_LOW | DISPLAY_FLAGS_HSYNC_LOW, 1299}; 1300 1301static const struct panel_desc innolux_n116bge = { 1302 .timings = &innolux_n116bge_timing, 1303 .num_timings = 1, 1304 .bpc = 6, 1305 .size = { 1306 .width = 256, 1307 .height = 144, 1308 }, 1309}; 1310 1311static const struct drm_display_mode innolux_n125hce_gn1_mode = { 1312 .clock = 162000, 1313 .hdisplay = 1920, 1314 .hsync_start = 1920 + 40, 1315 .hsync_end = 1920 + 40 + 40, 1316 .htotal = 1920 + 40 + 40 + 80, 1317 .vdisplay = 1080, 1318 .vsync_start = 1080 + 4, 1319 .vsync_end = 1080 + 4 + 4, 1320 .vtotal = 1080 + 4 + 4 + 24, 1321}; 1322 1323static const struct panel_desc innolux_n125hce_gn1 = { 1324 .modes = &innolux_n125hce_gn1_mode, 1325 .num_modes = 1, 1326 .bpc = 8, 1327 .size = { 1328 .width = 276, 1329 .height = 155, 1330 }, 1331}; 1332 1333static const struct drm_display_mode innolux_p120zdg_bf1_mode = { 1334 .clock = 206016, 1335 .hdisplay = 2160, 1336 .hsync_start = 2160 + 48, 1337 .hsync_end = 2160 + 48 + 32, 1338 .htotal = 2160 + 48 + 32 + 80, 1339 .vdisplay = 1440, 1340 .vsync_start = 1440 + 3, 1341 .vsync_end = 1440 + 3 + 10, 1342 .vtotal = 1440 + 3 + 10 + 27, 1343 .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC, 1344}; 1345 1346static const struct panel_desc innolux_p120zdg_bf1 = { 1347 .modes = &innolux_p120zdg_bf1_mode, 1348 .num_modes = 1, 1349 .bpc = 8, 1350 .size = { 1351 .width = 254, 1352 .height = 169, 1353 }, 1354 .delay = { 1355 .hpd_absent = 200, 1356 .unprepare = 500, 1357 }, 1358}; 1359 1360static const struct drm_display_mode ivo_m133nwf4_r0_mode = { 1361 .clock = 138778, 1362 .hdisplay = 1920, 1363 .hsync_start = 1920 + 24, 1364 .hsync_end = 1920 + 24 + 48, 1365 .htotal = 1920 + 24 + 48 + 88, 1366 .vdisplay = 1080, 1367 .vsync_start = 1080 + 3, 1368 .vsync_end = 1080 + 3 + 12, 1369 .vtotal = 1080 + 3 + 12 + 17, 1370 .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC, 1371}; 1372 1373static const struct panel_desc ivo_m133nwf4_r0 = { 1374 .modes = &ivo_m133nwf4_r0_mode, 1375 .num_modes = 1, 1376 .bpc = 8, 1377 .size = { 1378 .width = 294, 1379 .height = 165, 1380 }, 1381 .delay = { 1382 .hpd_absent = 200, 1383 .unprepare = 500, 1384 }, 1385}; 1386 1387static const struct drm_display_mode kingdisplay_kd116n21_30nv_a010_mode = { 1388 .clock = 81000, 1389 .hdisplay = 1366, 1390 .hsync_start = 1366 + 40, 1391 .hsync_end = 1366 + 40 + 32, 1392 .htotal = 1366 + 40 + 32 + 62, 1393 .vdisplay = 768, 1394 .vsync_start = 768 + 5, 1395 .vsync_end = 768 + 5 + 5, 1396 .vtotal = 768 + 5 + 5 + 122, 1397 .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, 1398}; 1399 1400static const struct panel_desc kingdisplay_kd116n21_30nv_a010 = { 1401 .modes = &kingdisplay_kd116n21_30nv_a010_mode, 1402 .num_modes = 1, 1403 .bpc = 6, 1404 .size = { 1405 .width = 256, 1406 .height = 144, 1407 }, 1408 .delay = { 1409 .hpd_absent = 200, 1410 }, 1411}; 1412 1413static const struct drm_display_mode lg_lp079qx1_sp0v_mode = { 1414 .clock = 200000, 1415 .hdisplay = 1536, 1416 .hsync_start = 1536 + 12, 1417 .hsync_end = 1536 + 12 + 16, 1418 .htotal = 1536 + 12 + 16 + 48, 1419 .vdisplay = 2048, 1420 .vsync_start = 2048 + 8, 1421 .vsync_end = 2048 + 8 + 4, 1422 .vtotal = 2048 + 8 + 4 + 8, 1423 .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, 1424}; 1425 1426static const struct panel_desc lg_lp079qx1_sp0v = { 1427 .modes = &lg_lp079qx1_sp0v_mode, 1428 .num_modes = 1, 1429 .size = { 1430 .width = 129, 1431 .height = 171, 1432 }, 1433}; 1434 1435static const struct drm_display_mode lg_lp097qx1_spa1_mode = { 1436 .clock = 205210, 1437 .hdisplay = 2048, 1438 .hsync_start = 2048 + 150, 1439 .hsync_end = 2048 + 150 + 5, 1440 .htotal = 2048 + 150 + 5 + 5, 1441 .vdisplay = 1536, 1442 .vsync_start = 1536 + 3, 1443 .vsync_end = 1536 + 3 + 1, 1444 .vtotal = 1536 + 3 + 1 + 9, 1445}; 1446 1447static const struct panel_desc lg_lp097qx1_spa1 = { 1448 .modes = &lg_lp097qx1_spa1_mode, 1449 .num_modes = 1, 1450 .size = { 1451 .width = 208, 1452 .height = 147, 1453 }, 1454}; 1455 1456static const struct drm_display_mode lg_lp120up1_mode = { 1457 .clock = 162300, 1458 .hdisplay = 1920, 1459 .hsync_start = 1920 + 40, 1460 .hsync_end = 1920 + 40 + 40, 1461 .htotal = 1920 + 40 + 40 + 80, 1462 .vdisplay = 1280, 1463 .vsync_start = 1280 + 4, 1464 .vsync_end = 1280 + 4 + 4, 1465 .vtotal = 1280 + 4 + 4 + 12, 1466}; 1467 1468static const struct panel_desc lg_lp120up1 = { 1469 .modes = &lg_lp120up1_mode, 1470 .num_modes = 1, 1471 .bpc = 8, 1472 .size = { 1473 .width = 267, 1474 .height = 183, 1475 }, 1476}; 1477 1478static const struct drm_display_mode lg_lp129qe_mode = { 1479 .clock = 285250, 1480 .hdisplay = 2560, 1481 .hsync_start = 2560 + 48, 1482 .hsync_end = 2560 + 48 + 32, 1483 .htotal = 2560 + 48 + 32 + 80, 1484 .vdisplay = 1700, 1485 .vsync_start = 1700 + 3, 1486 .vsync_end = 1700 + 3 + 10, 1487 .vtotal = 1700 + 3 + 10 + 36, 1488}; 1489 1490static const struct panel_desc lg_lp129qe = { 1491 .modes = &lg_lp129qe_mode, 1492 .num_modes = 1, 1493 .bpc = 8, 1494 .size = { 1495 .width = 272, 1496 .height = 181, 1497 }, 1498}; 1499 1500static const struct drm_display_mode neweast_wjfh116008a_modes[] = { 1501 { 1502 .clock = 138500, 1503 .hdisplay = 1920, 1504 .hsync_start = 1920 + 48, 1505 .hsync_end = 1920 + 48 + 32, 1506 .htotal = 1920 + 48 + 32 + 80, 1507 .vdisplay = 1080, 1508 .vsync_start = 1080 + 3, 1509 .vsync_end = 1080 + 3 + 5, 1510 .vtotal = 1080 + 3 + 5 + 23, 1511 .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, 1512 }, { 1513 .clock = 110920, 1514 .hdisplay = 1920, 1515 .hsync_start = 1920 + 48, 1516 .hsync_end = 1920 + 48 + 32, 1517 .htotal = 1920 + 48 + 32 + 80, 1518 .vdisplay = 1080, 1519 .vsync_start = 1080 + 3, 1520 .vsync_end = 1080 + 3 + 5, 1521 .vtotal = 1080 + 3 + 5 + 23, 1522 .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, 1523 } 1524}; 1525 1526static const struct panel_desc neweast_wjfh116008a = { 1527 .modes = neweast_wjfh116008a_modes, 1528 .num_modes = 2, 1529 .bpc = 6, 1530 .size = { 1531 .width = 260, 1532 .height = 150, 1533 }, 1534 .delay = { 1535 .hpd_reliable = 110, 1536 .enable = 20, 1537 .unprepare = 500, 1538 }, 1539}; 1540 1541static const struct drm_display_mode samsung_lsn122dl01_c01_mode = { 1542 .clock = 271560, 1543 .hdisplay = 2560, 1544 .hsync_start = 2560 + 48, 1545 .hsync_end = 2560 + 48 + 32, 1546 .htotal = 2560 + 48 + 32 + 80, 1547 .vdisplay = 1600, 1548 .vsync_start = 1600 + 2, 1549 .vsync_end = 1600 + 2 + 5, 1550 .vtotal = 1600 + 2 + 5 + 57, 1551}; 1552 1553static const struct panel_desc samsung_lsn122dl01_c01 = { 1554 .modes = &samsung_lsn122dl01_c01_mode, 1555 .num_modes = 1, 1556 .size = { 1557 .width = 263, 1558 .height = 164, 1559 }, 1560}; 1561 1562static const struct drm_display_mode samsung_ltn140at29_301_mode = { 1563 .clock = 76300, 1564 .hdisplay = 1366, 1565 .hsync_start = 1366 + 64, 1566 .hsync_end = 1366 + 64 + 48, 1567 .htotal = 1366 + 64 + 48 + 128, 1568 .vdisplay = 768, 1569 .vsync_start = 768 + 2, 1570 .vsync_end = 768 + 2 + 5, 1571 .vtotal = 768 + 2 + 5 + 17, 1572}; 1573 1574static const struct panel_desc samsung_ltn140at29_301 = { 1575 .modes = &samsung_ltn140at29_301_mode, 1576 .num_modes = 1, 1577 .bpc = 6, 1578 .size = { 1579 .width = 320, 1580 .height = 187, 1581 }, 1582}; 1583 1584static const struct drm_display_mode sharp_ld_d5116z01b_mode = { 1585 .clock = 168480, 1586 .hdisplay = 1920, 1587 .hsync_start = 1920 + 48, 1588 .hsync_end = 1920 + 48 + 32, 1589 .htotal = 1920 + 48 + 32 + 80, 1590 .vdisplay = 1280, 1591 .vsync_start = 1280 + 3, 1592 .vsync_end = 1280 + 3 + 10, 1593 .vtotal = 1280 + 3 + 10 + 57, 1594 .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC, 1595}; 1596 1597static const struct panel_desc sharp_ld_d5116z01b = { 1598 .modes = &sharp_ld_d5116z01b_mode, 1599 .num_modes = 1, 1600 .bpc = 8, 1601 .size = { 1602 .width = 260, 1603 .height = 120, 1604 }, 1605}; 1606 1607static const struct display_timing sharp_lq123p1jx31_timing = { 1608 .pixelclock = { 252750000, 252750000, 266604720 }, 1609 .hactive = { 2400, 2400, 2400 }, 1610 .hfront_porch = { 48, 48, 48 }, 1611 .hback_porch = { 80, 80, 84 }, 1612 .hsync_len = { 32, 32, 32 }, 1613 .vactive = { 1600, 1600, 1600 }, 1614 .vfront_porch = { 3, 3, 3 }, 1615 .vback_porch = { 33, 33, 120 }, 1616 .vsync_len = { 10, 10, 10 }, 1617 .flags = DISPLAY_FLAGS_VSYNC_LOW | DISPLAY_FLAGS_HSYNC_LOW, 1618}; 1619 1620static const struct panel_desc sharp_lq123p1jx31 = { 1621 .timings = &sharp_lq123p1jx31_timing, 1622 .num_timings = 1, 1623 .bpc = 8, 1624 .size = { 1625 .width = 259, 1626 .height = 173, 1627 }, 1628 .delay = { 1629 .hpd_reliable = 110, 1630 .enable = 50, 1631 .unprepare = 550, 1632 }, 1633}; 1634 1635static const struct drm_display_mode sharp_lq140m1jw46_mode[] = { 1636 { 1637 .clock = 346500, 1638 .hdisplay = 1920, 1639 .hsync_start = 1920 + 48, 1640 .hsync_end = 1920 + 48 + 32, 1641 .htotal = 1920 + 48 + 32 + 80, 1642 .vdisplay = 1080, 1643 .vsync_start = 1080 + 3, 1644 .vsync_end = 1080 + 3 + 5, 1645 .vtotal = 1080 + 3 + 5 + 69, 1646 .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, 1647 }, { 1648 .clock = 144370, 1649 .hdisplay = 1920, 1650 .hsync_start = 1920 + 48, 1651 .hsync_end = 1920 + 48 + 32, 1652 .htotal = 1920 + 48 + 32 + 80, 1653 .vdisplay = 1080, 1654 .vsync_start = 1080 + 3, 1655 .vsync_end = 1080 + 3 + 5, 1656 .vtotal = 1080 + 3 + 5 + 69, 1657 .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, 1658 }, 1659}; 1660 1661static const struct panel_desc sharp_lq140m1jw46 = { 1662 .modes = sharp_lq140m1jw46_mode, 1663 .num_modes = ARRAY_SIZE(sharp_lq140m1jw46_mode), 1664 .bpc = 8, 1665 .size = { 1666 .width = 309, 1667 .height = 174, 1668 }, 1669 .delay = { 1670 .hpd_absent = 80, 1671 .enable = 50, 1672 .unprepare = 500, 1673 }, 1674}; 1675 1676static const struct drm_display_mode starry_kr122ea0sra_mode = { 1677 .clock = 147000, 1678 .hdisplay = 1920, 1679 .hsync_start = 1920 + 16, 1680 .hsync_end = 1920 + 16 + 16, 1681 .htotal = 1920 + 16 + 16 + 32, 1682 .vdisplay = 1200, 1683 .vsync_start = 1200 + 15, 1684 .vsync_end = 1200 + 15 + 2, 1685 .vtotal = 1200 + 15 + 2 + 18, 1686 .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC, 1687}; 1688 1689static const struct panel_desc starry_kr122ea0sra = { 1690 .modes = &starry_kr122ea0sra_mode, 1691 .num_modes = 1, 1692 .size = { 1693 .width = 263, 1694 .height = 164, 1695 }, 1696 .delay = { 1697 /* TODO: should be hpd-absent and no-hpd should be set? */ 1698 .hpd_reliable = 10 + 200, 1699 .enable = 50, 1700 .unprepare = 10 + 500, 1701 }, 1702}; 1703 1704static const struct of_device_id platform_of_match[] = { 1705 { 1706 /* Must be first */ 1707 .compatible = "edp-panel", 1708 }, { 1709 .compatible = "auo,b101ean01", 1710 .data = &auo_b101ean01, 1711 }, { 1712 .compatible = "auo,b116xa01", 1713 .data = &auo_b116xak01, 1714 }, { 1715 .compatible = "auo,b116xw03", 1716 .data = &auo_b116xw03, 1717 }, { 1718 .compatible = "auo,b133han05", 1719 .data = &auo_b133han05, 1720 }, { 1721 .compatible = "auo,b133htn01", 1722 .data = &auo_b133htn01, 1723 }, { 1724 .compatible = "auo,b133xtn01", 1725 .data = &auo_b133xtn01, 1726 }, { 1727 .compatible = "auo,b140han06", 1728 .data = &auo_b140han06, 1729 }, { 1730 .compatible = "boe,nv101wxmn51", 1731 .data = &boe_nv101wxmn51, 1732 }, { 1733 .compatible = "boe,nv110wtm-n61", 1734 .data = &boe_nv110wtm_n61, 1735 }, { 1736 .compatible = "boe,nv133fhm-n61", 1737 .data = &boe_nv133fhm_n61, 1738 }, { 1739 .compatible = "boe,nv133fhm-n62", 1740 .data = &boe_nv133fhm_n61, 1741 }, { 1742 .compatible = "boe,nv140fhmn49", 1743 .data = &boe_nv140fhmn49, 1744 }, { 1745 .compatible = "innolux,n116bca-ea1", 1746 .data = &innolux_n116bca_ea1, 1747 }, { 1748 .compatible = "innolux,n116bge", 1749 .data = &innolux_n116bge, 1750 }, { 1751 .compatible = "innolux,n125hce-gn1", 1752 .data = &innolux_n125hce_gn1, 1753 }, { 1754 .compatible = "innolux,p120zdg-bf1", 1755 .data = &innolux_p120zdg_bf1, 1756 }, { 1757 .compatible = "ivo,m133nwf4-r0", 1758 .data = &ivo_m133nwf4_r0, 1759 }, { 1760 .compatible = "kingdisplay,kd116n21-30nv-a010", 1761 .data = &kingdisplay_kd116n21_30nv_a010, 1762 }, { 1763 .compatible = "lg,lp079qx1-sp0v", 1764 .data = &lg_lp079qx1_sp0v, 1765 }, { 1766 .compatible = "lg,lp097qx1-spa1", 1767 .data = &lg_lp097qx1_spa1, 1768 }, { 1769 .compatible = "lg,lp120up1", 1770 .data = &lg_lp120up1, 1771 }, { 1772 .compatible = "lg,lp129qe", 1773 .data = &lg_lp129qe, 1774 }, { 1775 .compatible = "neweast,wjfh116008a", 1776 .data = &neweast_wjfh116008a, 1777 }, { 1778 .compatible = "samsung,lsn122dl01-c01", 1779 .data = &samsung_lsn122dl01_c01, 1780 }, { 1781 .compatible = "samsung,ltn140at29-301", 1782 .data = &samsung_ltn140at29_301, 1783 }, { 1784 .compatible = "sharp,ld-d5116z01b", 1785 .data = &sharp_ld_d5116z01b, 1786 }, { 1787 .compatible = "sharp,lq123p1jx31", 1788 .data = &sharp_lq123p1jx31, 1789 }, { 1790 .compatible = "sharp,lq140m1jw46", 1791 .data = &sharp_lq140m1jw46, 1792 }, { 1793 .compatible = "starry,kr122ea0sra", 1794 .data = &starry_kr122ea0sra, 1795 }, { 1796 /* sentinel */ 1797 } 1798}; 1799MODULE_DEVICE_TABLE(of, platform_of_match); 1800 1801static const struct panel_delay delay_200_500_p2e80 = { 1802 .hpd_absent = 200, 1803 .unprepare = 500, 1804 .prepare_to_enable = 80, 1805}; 1806 1807static const struct panel_delay delay_200_500_p2e100 = { 1808 .hpd_absent = 200, 1809 .unprepare = 500, 1810 .prepare_to_enable = 100, 1811}; 1812 1813static const struct panel_delay delay_200_500_e50 = { 1814 .hpd_absent = 200, 1815 .unprepare = 500, 1816 .enable = 50, 1817}; 1818 1819static const struct panel_delay delay_200_500_e80_d50 = { 1820 .hpd_absent = 200, 1821 .unprepare = 500, 1822 .enable = 80, 1823 .disable = 50, 1824}; 1825 1826static const struct panel_delay delay_100_500_e200 = { 1827 .hpd_absent = 100, 1828 .unprepare = 500, 1829 .enable = 200, 1830}; 1831 1832#define EDP_PANEL_ENTRY(vend_chr_0, vend_chr_1, vend_chr_2, product_id, _delay, _name) \ 1833{ \ 1834 .name = _name, \ 1835 .panel_id = drm_edid_encode_panel_id(vend_chr_0, vend_chr_1, vend_chr_2, \ 1836 product_id), \ 1837 .delay = _delay \ 1838} 1839 1840/* 1841 * This table is used to figure out power sequencing delays for panels that 1842 * are detected by EDID. Entries here may point to entries in the 1843 * platform_of_match table (if a panel is listed in both places). 1844 * 1845 * Sort first by vendor, then by product ID. 1846 */ 1847static const struct edp_panel_entry edp_panels[] = { 1848 EDP_PANEL_ENTRY('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAK01"), 1849 EDP_PANEL_ENTRY('A', 'U', 'O', 0x615c, &delay_200_500_e50, "B116XAN06.1"), 1850 EDP_PANEL_ENTRY('A', 'U', 'O', 0x8594, &delay_200_500_e50, "B133UAN01.0"), 1851 1852 EDP_PANEL_ENTRY('B', 'O', 'E', 0x0786, &delay_200_500_p2e80, "NV116WHM-T01"), 1853 EDP_PANEL_ENTRY('B', 'O', 'E', 0x07d1, &boe_nv133fhm_n61.delay, "NV133FHM-N61"), 1854 EDP_PANEL_ENTRY('B', 'O', 'E', 0x082d, &boe_nv133fhm_n61.delay, "NV133FHM-N62"), 1855 EDP_PANEL_ENTRY('B', 'O', 'E', 0x098d, &boe_nv110wtm_n61.delay, "NV110WTM-N61"), 1856 EDP_PANEL_ENTRY('B', 'O', 'E', 0x0a5d, &delay_200_500_e50, "NV116WHM-N45"), 1857 1858 EDP_PANEL_ENTRY('C', 'M', 'N', 0x114c, &innolux_n116bca_ea1.delay, "N116BCA-EA1"), 1859 1860 EDP_PANEL_ENTRY('K', 'D', 'B', 0x0624, &kingdisplay_kd116n21_30nv_a010.delay, "116N21-30NV-A010"), 1861 EDP_PANEL_ENTRY('K', 'D', 'B', 0x1120, &delay_200_500_e80_d50, "116N29-30NK-C007"), 1862 1863 EDP_PANEL_ENTRY('S', 'H', 'P', 0x1523, &sharp_lq140m1jw46.delay, "LQ140M1JW46"), 1864 EDP_PANEL_ENTRY('S', 'H', 'P', 0x154c, &delay_200_500_p2e100, "LQ116M1JW10"), 1865 1866 EDP_PANEL_ENTRY('S', 'T', 'A', 0x0100, &delay_100_500_e200, "2081116HHD028001-51D"), 1867 1868 { /* sentinal */ } 1869}; 1870 1871static const struct edp_panel_entry *find_edp_panel(u32 panel_id) 1872{ 1873 const struct edp_panel_entry *panel; 1874 1875 if (!panel_id) 1876 return NULL; 1877 1878 for (panel = edp_panels; panel->panel_id; panel++) 1879 if (panel->panel_id == panel_id) 1880 return panel; 1881 1882 return NULL; 1883} 1884 1885static int panel_edp_platform_probe(struct platform_device *pdev) 1886{ 1887 const struct of_device_id *id; 1888 1889 /* Skip one since "edp-panel" is only supported on DP AUX bus */ 1890 id = of_match_node(platform_of_match + 1, pdev->dev.of_node); 1891 if (!id) 1892 return -ENODEV; 1893 1894 return panel_edp_probe(&pdev->dev, id->data, NULL); 1895} 1896 1897static int panel_edp_platform_remove(struct platform_device *pdev) 1898{ 1899 return panel_edp_remove(&pdev->dev); 1900} 1901 1902static void panel_edp_platform_shutdown(struct platform_device *pdev) 1903{ 1904 panel_edp_shutdown(&pdev->dev); 1905} 1906 1907static const struct dev_pm_ops panel_edp_pm_ops = { 1908 SET_RUNTIME_PM_OPS(panel_edp_suspend, panel_edp_resume, NULL) 1909 SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, 1910 pm_runtime_force_resume) 1911}; 1912 1913static struct platform_driver panel_edp_platform_driver = { 1914 .driver = { 1915 .name = "panel-edp", 1916 .of_match_table = platform_of_match, 1917 .pm = &panel_edp_pm_ops, 1918 }, 1919 .probe = panel_edp_platform_probe, 1920 .remove = panel_edp_platform_remove, 1921 .shutdown = panel_edp_platform_shutdown, 1922}; 1923 1924static int panel_edp_dp_aux_ep_probe(struct dp_aux_ep_device *aux_ep) 1925{ 1926 const struct of_device_id *id; 1927 1928 id = of_match_node(platform_of_match, aux_ep->dev.of_node); 1929 if (!id) 1930 return -ENODEV; 1931 1932 return panel_edp_probe(&aux_ep->dev, id->data, aux_ep->aux); 1933} 1934 1935static void panel_edp_dp_aux_ep_remove(struct dp_aux_ep_device *aux_ep) 1936{ 1937 panel_edp_remove(&aux_ep->dev); 1938} 1939 1940static void panel_edp_dp_aux_ep_shutdown(struct dp_aux_ep_device *aux_ep) 1941{ 1942 panel_edp_shutdown(&aux_ep->dev); 1943} 1944 1945static struct dp_aux_ep_driver panel_edp_dp_aux_ep_driver = { 1946 .driver = { 1947 .name = "panel-simple-dp-aux", 1948 .of_match_table = platform_of_match, /* Same as platform one! */ 1949 .pm = &panel_edp_pm_ops, 1950 }, 1951 .probe = panel_edp_dp_aux_ep_probe, 1952 .remove = panel_edp_dp_aux_ep_remove, 1953 .shutdown = panel_edp_dp_aux_ep_shutdown, 1954}; 1955 1956static int __init panel_edp_init(void) 1957{ 1958 int err; 1959 1960 err = platform_driver_register(&panel_edp_platform_driver); 1961 if (err < 0) 1962 return err; 1963 1964 err = dp_aux_dp_driver_register(&panel_edp_dp_aux_ep_driver); 1965 if (err < 0) 1966 goto err_did_platform_register; 1967 1968 return 0; 1969 1970err_did_platform_register: 1971 platform_driver_unregister(&panel_edp_platform_driver); 1972 1973 return err; 1974} 1975module_init(panel_edp_init); 1976 1977static void __exit panel_edp_exit(void) 1978{ 1979 dp_aux_dp_driver_unregister(&panel_edp_dp_aux_ep_driver); 1980 platform_driver_unregister(&panel_edp_platform_driver); 1981} 1982module_exit(panel_edp_exit); 1983 1984MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>"); 1985MODULE_DESCRIPTION("DRM Driver for Simple eDP Panels"); 1986MODULE_LICENSE("GPL and additional rights");