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