2 * Copyright (C) 2013, NVIDIA Corporation. All rights reserved.
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:
11 * The above copyright notice and this permission notice (including the
12 * next paragraph) shall be included in all copies or substantial portions
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.
24 #include <linux/delay.h>
25 #include <linux/gpio/consumer.h>
26 #include <linux/i2c.h>
27 #include <linux/media-bus-format.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>
34 #include <video/display_timing.h>
35 #include <video/of_display_timing.h>
36 #include <video/videomode.h>
38 #include <drm/drm_crtc.h>
39 #include <drm/drm_device.h>
40 #include <drm/drm_edid.h>
41 #include <drm/drm_mipi_dsi.h>
42 #include <drm/drm_panel.h>
43 #include <drm/drm_of.h>
46 * struct panel_desc - Describes a simple panel.
50 * @modes: Pointer to array of fixed modes appropriate for this panel.
52 * If only one mode then this can just be the address of the mode.
53 * NOTE: cannot be used with "timings" and also if this is specified
54 * then you cannot override the mode in the device tree.
56 const struct drm_display_mode
*modes
;
58 /** @num_modes: Number of elements in modes array. */
59 unsigned int num_modes
;
62 * @timings: Pointer to array of display timings
64 * NOTE: cannot be used with "modes" and also these will be used to
65 * validate a device tree override if one is present.
67 const struct display_timing
*timings
;
69 /** @num_timings: Number of elements in timings array. */
70 unsigned int num_timings
;
72 /** @bpc: Bits per color. */
75 /** @size: Structure containing the physical size of this panel. */
78 * @size.width: Width (in mm) of the active display area.
83 * @size.height: Height (in mm) of the active display area.
88 /** @delay: Structure containing various delay values for this panel. */
91 * @delay.prepare: Time for the panel to become ready.
93 * The time (in milliseconds) that it takes for the panel to
94 * become ready and start receiving video data
99 * @delay.enable: Time for the panel to display a valid frame.
101 * The time (in milliseconds) that it takes for the panel to
102 * display the first valid frame after starting to receive
108 * @delay.disable: Time for the panel to turn the display off.
110 * The time (in milliseconds) that it takes for the panel to
111 * turn the display off (no content is visible).
113 unsigned int disable
;
116 * @delay.unprepare: Time to power down completely.
118 * The time (in milliseconds) that it takes for the panel
119 * to power itself down completely.
121 * This time is used to prevent a future "prepare" from
122 * starting until at least this many milliseconds has passed.
123 * If at prepare time less time has passed since unprepare
124 * finished, the driver waits for the remaining time.
126 unsigned int unprepare
;
129 /** @bus_format: See MEDIA_BUS_FMT_... defines. */
132 /** @bus_flags: See DRM_BUS_FLAG_... defines. */
135 /** @connector_type: LVDS, eDP, DSI, DPI, etc. */
139 struct panel_simple
{
140 struct drm_panel base
;
142 ktime_t unprepared_time
;
144 const struct panel_desc
*desc
;
146 struct regulator
*supply
;
147 struct i2c_adapter
*ddc
;
149 struct gpio_desc
*enable_gpio
;
151 const struct drm_edid
*drm_edid
;
153 struct drm_display_mode override_mode
;
155 enum drm_panel_orientation orientation
;
158 static inline struct panel_simple
*to_panel_simple(struct drm_panel
*panel
)
160 return container_of(panel
, struct panel_simple
, base
);
163 static unsigned int panel_simple_get_timings_modes(struct panel_simple
*panel
,
164 struct drm_connector
*connector
)
166 struct drm_display_mode
*mode
;
167 unsigned int i
, num
= 0;
169 for (i
= 0; i
< panel
->desc
->num_timings
; i
++) {
170 const struct display_timing
*dt
= &panel
->desc
->timings
[i
];
173 videomode_from_timing(dt
, &vm
);
174 mode
= drm_mode_create(connector
->dev
);
176 dev_err(panel
->base
.dev
, "failed to add mode %ux%u\n",
177 dt
->hactive
.typ
, dt
->vactive
.typ
);
181 drm_display_mode_from_videomode(&vm
, mode
);
183 mode
->type
|= DRM_MODE_TYPE_DRIVER
;
185 if (panel
->desc
->num_timings
== 1)
186 mode
->type
|= DRM_MODE_TYPE_PREFERRED
;
188 drm_mode_probed_add(connector
, mode
);
195 static unsigned int panel_simple_get_display_modes(struct panel_simple
*panel
,
196 struct drm_connector
*connector
)
198 struct drm_display_mode
*mode
;
199 unsigned int i
, num
= 0;
201 for (i
= 0; i
< panel
->desc
->num_modes
; i
++) {
202 const struct drm_display_mode
*m
= &panel
->desc
->modes
[i
];
204 mode
= drm_mode_duplicate(connector
->dev
, m
);
206 dev_err(panel
->base
.dev
, "failed to add mode %ux%u@%u\n",
207 m
->hdisplay
, m
->vdisplay
,
208 drm_mode_vrefresh(m
));
212 mode
->type
|= DRM_MODE_TYPE_DRIVER
;
214 if (panel
->desc
->num_modes
== 1)
215 mode
->type
|= DRM_MODE_TYPE_PREFERRED
;
217 drm_mode_set_name(mode
);
219 drm_mode_probed_add(connector
, mode
);
226 static int panel_simple_get_non_edid_modes(struct panel_simple
*panel
,
227 struct drm_connector
*connector
)
229 struct drm_display_mode
*mode
;
230 bool has_override
= panel
->override_mode
.type
;
231 unsigned int num
= 0;
237 mode
= drm_mode_duplicate(connector
->dev
,
238 &panel
->override_mode
);
240 drm_mode_probed_add(connector
, mode
);
243 dev_err(panel
->base
.dev
, "failed to add override mode\n");
247 /* Only add timings if override was not there or failed to validate */
248 if (num
== 0 && panel
->desc
->num_timings
)
249 num
= panel_simple_get_timings_modes(panel
, connector
);
252 * Only add fixed modes if timings/override added no mode.
254 * We should only ever have either the display timings specified
255 * or a fixed mode. Anything else is rather bogus.
257 WARN_ON(panel
->desc
->num_timings
&& panel
->desc
->num_modes
);
259 num
= panel_simple_get_display_modes(panel
, connector
);
261 connector
->display_info
.bpc
= panel
->desc
->bpc
;
262 connector
->display_info
.width_mm
= panel
->desc
->size
.width
;
263 connector
->display_info
.height_mm
= panel
->desc
->size
.height
;
264 if (panel
->desc
->bus_format
)
265 drm_display_info_set_bus_formats(&connector
->display_info
,
266 &panel
->desc
->bus_format
, 1);
267 connector
->display_info
.bus_flags
= panel
->desc
->bus_flags
;
272 static void panel_simple_wait(ktime_t start_ktime
, unsigned int min_ms
)
274 ktime_t now_ktime
, min_ktime
;
279 min_ktime
= ktime_add(start_ktime
, ms_to_ktime(min_ms
));
280 now_ktime
= ktime_get_boottime();
282 if (ktime_before(now_ktime
, min_ktime
))
283 msleep(ktime_to_ms(ktime_sub(min_ktime
, now_ktime
)) + 1);
286 static int panel_simple_disable(struct drm_panel
*panel
)
288 struct panel_simple
*p
= to_panel_simple(panel
);
290 if (p
->desc
->delay
.disable
)
291 msleep(p
->desc
->delay
.disable
);
296 static int panel_simple_suspend(struct device
*dev
)
298 struct panel_simple
*p
= dev_get_drvdata(dev
);
300 gpiod_set_value_cansleep(p
->enable_gpio
, 0);
301 regulator_disable(p
->supply
);
302 p
->unprepared_time
= ktime_get_boottime();
304 drm_edid_free(p
->drm_edid
);
310 static int panel_simple_unprepare(struct drm_panel
*panel
)
314 pm_runtime_mark_last_busy(panel
->dev
);
315 ret
= pm_runtime_put_autosuspend(panel
->dev
);
322 static int panel_simple_resume(struct device
*dev
)
324 struct panel_simple
*p
= dev_get_drvdata(dev
);
327 panel_simple_wait(p
->unprepared_time
, p
->desc
->delay
.unprepare
);
329 err
= regulator_enable(p
->supply
);
331 dev_err(dev
, "failed to enable supply: %d\n", err
);
335 gpiod_set_value_cansleep(p
->enable_gpio
, 1);
337 if (p
->desc
->delay
.prepare
)
338 msleep(p
->desc
->delay
.prepare
);
343 static int panel_simple_prepare(struct drm_panel
*panel
)
347 ret
= pm_runtime_get_sync(panel
->dev
);
349 pm_runtime_put_autosuspend(panel
->dev
);
356 static int panel_simple_enable(struct drm_panel
*panel
)
358 struct panel_simple
*p
= to_panel_simple(panel
);
360 if (p
->desc
->delay
.enable
)
361 msleep(p
->desc
->delay
.enable
);
366 static int panel_simple_get_modes(struct drm_panel
*panel
,
367 struct drm_connector
*connector
)
369 struct panel_simple
*p
= to_panel_simple(panel
);
372 /* probe EDID if a DDC bus is available */
374 pm_runtime_get_sync(panel
->dev
);
377 p
->drm_edid
= drm_edid_read_ddc(connector
, p
->ddc
);
379 drm_edid_connector_update(connector
, p
->drm_edid
);
381 num
+= drm_edid_connector_add_modes(connector
);
383 pm_runtime_mark_last_busy(panel
->dev
);
384 pm_runtime_put_autosuspend(panel
->dev
);
387 /* add hard-coded panel modes */
388 num
+= panel_simple_get_non_edid_modes(p
, connector
);
391 * TODO: Remove once all drm drivers call
392 * drm_connector_set_orientation_from_panel()
394 drm_connector_set_panel_orientation(connector
, p
->orientation
);
399 static int panel_simple_get_timings(struct drm_panel
*panel
,
400 unsigned int num_timings
,
401 struct display_timing
*timings
)
403 struct panel_simple
*p
= to_panel_simple(panel
);
406 if (p
->desc
->num_timings
< num_timings
)
407 num_timings
= p
->desc
->num_timings
;
410 for (i
= 0; i
< num_timings
; i
++)
411 timings
[i
] = p
->desc
->timings
[i
];
413 return p
->desc
->num_timings
;
416 static enum drm_panel_orientation
panel_simple_get_orientation(struct drm_panel
*panel
)
418 struct panel_simple
*p
= to_panel_simple(panel
);
420 return p
->orientation
;
423 static const struct drm_panel_funcs panel_simple_funcs
= {
424 .disable
= panel_simple_disable
,
425 .unprepare
= panel_simple_unprepare
,
426 .prepare
= panel_simple_prepare
,
427 .enable
= panel_simple_enable
,
428 .get_modes
= panel_simple_get_modes
,
429 .get_orientation
= panel_simple_get_orientation
,
430 .get_timings
= panel_simple_get_timings
,
433 static struct panel_desc panel_dpi
;
435 static int panel_dpi_probe(struct device
*dev
,
436 struct panel_simple
*panel
)
438 struct display_timing
*timing
;
439 const struct device_node
*np
;
440 struct panel_desc
*desc
;
441 unsigned int bus_flags
;
446 desc
= devm_kzalloc(dev
, sizeof(*desc
), GFP_KERNEL
);
450 timing
= devm_kzalloc(dev
, sizeof(*timing
), GFP_KERNEL
);
454 ret
= of_get_display_timing(np
, "panel-timing", timing
);
456 dev_err(dev
, "%pOF: no panel-timing node found for \"panel-dpi\" binding\n",
461 desc
->timings
= timing
;
462 desc
->num_timings
= 1;
464 of_property_read_u32(np
, "width-mm", &desc
->size
.width
);
465 of_property_read_u32(np
, "height-mm", &desc
->size
.height
);
467 /* Extract bus_flags from display_timing */
469 vm
.flags
= timing
->flags
;
470 drm_bus_flags_from_videomode(&vm
, &bus_flags
);
471 desc
->bus_flags
= bus_flags
;
473 /* We do not know the connector for the DT node, so guess it */
474 desc
->connector_type
= DRM_MODE_CONNECTOR_DPI
;
481 #define PANEL_SIMPLE_BOUNDS_CHECK(to_check, bounds, field) \
482 (to_check->field.typ >= bounds->field.min && \
483 to_check->field.typ <= bounds->field.max)
484 static void panel_simple_parse_panel_timing_node(struct device
*dev
,
485 struct panel_simple
*panel
,
486 const struct display_timing
*ot
)
488 const struct panel_desc
*desc
= panel
->desc
;
492 if (WARN_ON(desc
->num_modes
)) {
493 dev_err(dev
, "Reject override mode: panel has a fixed mode\n");
496 if (WARN_ON(!desc
->num_timings
)) {
497 dev_err(dev
, "Reject override mode: no timings specified\n");
501 for (i
= 0; i
< panel
->desc
->num_timings
; i
++) {
502 const struct display_timing
*dt
= &panel
->desc
->timings
[i
];
504 if (!PANEL_SIMPLE_BOUNDS_CHECK(ot
, dt
, hactive
) ||
505 !PANEL_SIMPLE_BOUNDS_CHECK(ot
, dt
, hfront_porch
) ||
506 !PANEL_SIMPLE_BOUNDS_CHECK(ot
, dt
, hback_porch
) ||
507 !PANEL_SIMPLE_BOUNDS_CHECK(ot
, dt
, hsync_len
) ||
508 !PANEL_SIMPLE_BOUNDS_CHECK(ot
, dt
, vactive
) ||
509 !PANEL_SIMPLE_BOUNDS_CHECK(ot
, dt
, vfront_porch
) ||
510 !PANEL_SIMPLE_BOUNDS_CHECK(ot
, dt
, vback_porch
) ||
511 !PANEL_SIMPLE_BOUNDS_CHECK(ot
, dt
, vsync_len
))
514 if (ot
->flags
!= dt
->flags
)
517 videomode_from_timing(ot
, &vm
);
518 drm_display_mode_from_videomode(&vm
, &panel
->override_mode
);
519 panel
->override_mode
.type
|= DRM_MODE_TYPE_DRIVER
|
520 DRM_MODE_TYPE_PREFERRED
;
524 if (WARN_ON(!panel
->override_mode
.type
))
525 dev_err(dev
, "Reject override mode: No display_timing found\n");
528 static int panel_simple_override_nondefault_lvds_datamapping(struct device
*dev
,
529 struct panel_simple
*panel
)
533 ret
= drm_of_lvds_get_data_mapping(dev
->of_node
);
536 dev_warn(dev
, "Ignore invalid data-mapping property\n");
539 * Ignore non-existing or malformatted property, fallback to
540 * default data-mapping, and return 0.
549 case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
:
551 case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA
:
554 case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
:
558 if (panel
->desc
->bpc
!= bpc
|| panel
->desc
->bus_format
!= ret
) {
559 struct panel_desc
*override_desc
;
561 override_desc
= devm_kmemdup(dev
, panel
->desc
, sizeof(*panel
->desc
), GFP_KERNEL
);
565 override_desc
->bus_format
= ret
;
566 override_desc
->bpc
= bpc
;
567 panel
->desc
= override_desc
;
573 static int panel_simple_probe(struct device
*dev
, const struct panel_desc
*desc
)
575 struct panel_simple
*panel
;
576 struct display_timing dt
;
577 struct device_node
*ddc
;
582 panel
= devm_kzalloc(dev
, sizeof(*panel
), GFP_KERNEL
);
588 panel
->supply
= devm_regulator_get(dev
, "power");
589 if (IS_ERR(panel
->supply
))
590 return PTR_ERR(panel
->supply
);
592 panel
->enable_gpio
= devm_gpiod_get_optional(dev
, "enable",
594 if (IS_ERR(panel
->enable_gpio
))
595 return dev_err_probe(dev
, PTR_ERR(panel
->enable_gpio
),
596 "failed to request GPIO\n");
598 err
= of_drm_get_panel_orientation(dev
->of_node
, &panel
->orientation
);
600 dev_err(dev
, "%pOF: failed to get orientation %d\n", dev
->of_node
, err
);
604 ddc
= of_parse_phandle(dev
->of_node
, "ddc-i2c-bus", 0);
606 panel
->ddc
= of_find_i2c_adapter_by_node(ddc
);
610 return -EPROBE_DEFER
;
613 if (desc
== &panel_dpi
) {
614 /* Handle the generic panel-dpi binding */
615 err
= panel_dpi_probe(dev
, panel
);
620 if (!of_get_display_timing(dev
->of_node
, "panel-timing", &dt
))
621 panel_simple_parse_panel_timing_node(dev
, panel
, &dt
);
624 if (desc
->connector_type
== DRM_MODE_CONNECTOR_LVDS
) {
625 /* Optional data-mapping property for overriding bus format */
626 err
= panel_simple_override_nondefault_lvds_datamapping(dev
, panel
);
631 connector_type
= desc
->connector_type
;
632 /* Catch common mistakes for panels. */
633 switch (connector_type
) {
635 dev_warn(dev
, "Specify missing connector_type\n");
636 connector_type
= DRM_MODE_CONNECTOR_DPI
;
638 case DRM_MODE_CONNECTOR_LVDS
:
639 WARN_ON(desc
->bus_flags
&
640 ~(DRM_BUS_FLAG_DE_LOW
|
641 DRM_BUS_FLAG_DE_HIGH
|
642 DRM_BUS_FLAG_DATA_MSB_TO_LSB
|
643 DRM_BUS_FLAG_DATA_LSB_TO_MSB
));
644 WARN_ON(desc
->bus_format
!= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
&&
645 desc
->bus_format
!= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
&&
646 desc
->bus_format
!= MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA
);
647 WARN_ON(desc
->bus_format
== MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
&&
649 WARN_ON((desc
->bus_format
== MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
||
650 desc
->bus_format
== MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA
) &&
653 case DRM_MODE_CONNECTOR_eDP
:
654 dev_warn(dev
, "eDP panels moved to panel-edp\n");
657 case DRM_MODE_CONNECTOR_DSI
:
658 if (desc
->bpc
!= 6 && desc
->bpc
!= 8)
659 dev_warn(dev
, "Expected bpc in {6,8} but got: %u\n", desc
->bpc
);
661 case DRM_MODE_CONNECTOR_DPI
:
662 bus_flags
= DRM_BUS_FLAG_DE_LOW
|
663 DRM_BUS_FLAG_DE_HIGH
|
664 DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
|
665 DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
666 DRM_BUS_FLAG_DATA_MSB_TO_LSB
|
667 DRM_BUS_FLAG_DATA_LSB_TO_MSB
|
668 DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE
|
669 DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE
;
670 if (desc
->bus_flags
& ~bus_flags
)
671 dev_warn(dev
, "Unexpected bus_flags(%d)\n", desc
->bus_flags
& ~bus_flags
);
672 if (!(desc
->bus_flags
& bus_flags
))
673 dev_warn(dev
, "Specify missing bus_flags\n");
674 if (desc
->bus_format
== 0)
675 dev_warn(dev
, "Specify missing bus_format\n");
676 if (desc
->bpc
!= 6 && desc
->bpc
!= 8)
677 dev_warn(dev
, "Expected bpc in {6,8} but got: %u\n", desc
->bpc
);
680 dev_warn(dev
, "Specify a valid connector_type: %d\n", desc
->connector_type
);
681 connector_type
= DRM_MODE_CONNECTOR_DPI
;
685 dev_set_drvdata(dev
, panel
);
688 * We use runtime PM for prepare / unprepare since those power the panel
689 * on and off and those can be very slow operations. This is important
690 * to optimize powering the panel on briefly to read the EDID before
691 * fully enabling the panel.
693 pm_runtime_enable(dev
);
694 pm_runtime_set_autosuspend_delay(dev
, 1000);
695 pm_runtime_use_autosuspend(dev
);
697 drm_panel_init(&panel
->base
, dev
, &panel_simple_funcs
, connector_type
);
699 err
= drm_panel_of_backlight(&panel
->base
);
701 dev_err_probe(dev
, err
, "Could not find backlight\n");
702 goto disable_pm_runtime
;
705 drm_panel_add(&panel
->base
);
710 pm_runtime_dont_use_autosuspend(dev
);
711 pm_runtime_disable(dev
);
714 put_device(&panel
->ddc
->dev
);
719 static void panel_simple_shutdown(struct device
*dev
)
721 struct panel_simple
*panel
= dev_get_drvdata(dev
);
724 * NOTE: the following two calls don't really belong here. It is the
725 * responsibility of a correctly written DRM modeset driver to call
726 * drm_atomic_helper_shutdown() at shutdown time and that should
727 * cause the panel to be disabled / unprepared if needed. For now,
728 * however, we'll keep these calls due to the sheer number of
729 * different DRM modeset drivers used with panel-simple. Once we've
730 * confirmed that all DRM modeset drivers using this panel properly
731 * call drm_atomic_helper_shutdown() we can simply delete the two
734 * TO BE EXPLICIT: THE CALLS BELOW SHOULDN'T BE COPIED TO ANY NEW
737 * FIXME: If we're still haven't figured out if all DRM modeset
738 * drivers properly call drm_atomic_helper_shutdown() but we _have_
739 * managed to make sure that DRM modeset drivers get their shutdown()
740 * callback before the panel's shutdown() callback (perhaps using
741 * device link), we could add a WARN_ON here to help move forward.
743 if (panel
->base
.enabled
)
744 drm_panel_disable(&panel
->base
);
745 if (panel
->base
.prepared
)
746 drm_panel_unprepare(&panel
->base
);
749 static void panel_simple_remove(struct device
*dev
)
751 struct panel_simple
*panel
= dev_get_drvdata(dev
);
753 drm_panel_remove(&panel
->base
);
754 panel_simple_shutdown(dev
);
756 pm_runtime_dont_use_autosuspend(dev
);
757 pm_runtime_disable(dev
);
759 put_device(&panel
->ddc
->dev
);
762 static const struct drm_display_mode ampire_am_1280800n3tzqw_t00h_mode
= {
765 .hsync_start
= 1280 + 40,
766 .hsync_end
= 1280 + 40 + 80,
767 .htotal
= 1280 + 40 + 80 + 40,
769 .vsync_start
= 800 + 3,
770 .vsync_end
= 800 + 3 + 10,
771 .vtotal
= 800 + 3 + 10 + 10,
772 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_PVSYNC
,
775 static const struct panel_desc ampire_am_1280800n3tzqw_t00h
= {
776 .modes
= &ire_am_1280800n3tzqw_t00h_mode
,
783 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
784 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
785 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
788 static const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode
= {
791 .hsync_start
= 480 + 2,
792 .hsync_end
= 480 + 2 + 41,
793 .htotal
= 480 + 2 + 41 + 2,
795 .vsync_start
= 272 + 2,
796 .vsync_end
= 272 + 2 + 10,
797 .vtotal
= 272 + 2 + 10 + 2,
798 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_PVSYNC
,
801 static const struct panel_desc ampire_am_480272h3tmqw_t01h
= {
802 .modes
= &ire_am_480272h3tmqw_t01h_mode
,
809 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
812 static const struct drm_display_mode ampire_am800480r3tmqwa1h_mode
= {
815 .hsync_start
= 800 + 0,
816 .hsync_end
= 800 + 0 + 255,
817 .htotal
= 800 + 0 + 255 + 0,
819 .vsync_start
= 480 + 2,
820 .vsync_end
= 480 + 2 + 45,
821 .vtotal
= 480 + 2 + 45 + 0,
822 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_PVSYNC
,
825 static const struct display_timing ampire_am_800480l1tmqw_t00h_timing
= {
826 .pixelclock
= { 29930000, 33260000, 36590000 },
827 .hactive
= { 800, 800, 800 },
828 .hfront_porch
= { 1, 40, 168 },
829 .hback_porch
= { 88, 88, 88 },
830 .hsync_len
= { 1, 128, 128 },
831 .vactive
= { 480, 480, 480 },
832 .vfront_porch
= { 1, 35, 37 },
833 .vback_porch
= { 8, 8, 8 },
834 .vsync_len
= { 1, 2, 2 },
835 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
836 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
837 DISPLAY_FLAGS_SYNC_POSEDGE
,
840 static const struct panel_desc ampire_am_800480l1tmqw_t00h
= {
841 .timings
= &ire_am_800480l1tmqw_t00h_timing
,
848 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
849 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
|
850 DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
851 DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE
,
852 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
855 static const struct panel_desc ampire_am800480r3tmqwa1h
= {
856 .modes
= &ire_am800480r3tmqwa1h_mode
,
863 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
866 static const struct display_timing ampire_am800600p5tmqw_tb8h_timing
= {
867 .pixelclock
= { 34500000, 39600000, 50400000 },
868 .hactive
= { 800, 800, 800 },
869 .hfront_porch
= { 12, 112, 312 },
870 .hback_porch
= { 87, 87, 48 },
871 .hsync_len
= { 1, 1, 40 },
872 .vactive
= { 600, 600, 600 },
873 .vfront_porch
= { 1, 21, 61 },
874 .vback_porch
= { 38, 38, 19 },
875 .vsync_len
= { 1, 1, 20 },
876 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
877 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
878 DISPLAY_FLAGS_SYNC_POSEDGE
,
881 static const struct panel_desc ampire_am800600p5tmqwtb8h
= {
882 .timings
= &ire_am800600p5tmqw_tb8h_timing
,
889 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
890 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
|
891 DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
892 DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE
,
893 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
896 static const struct display_timing santek_st0700i5y_rbslw_f_timing
= {
897 .pixelclock
= { 26400000, 33300000, 46800000 },
898 .hactive
= { 800, 800, 800 },
899 .hfront_porch
= { 16, 210, 354 },
900 .hback_porch
= { 45, 36, 6 },
901 .hsync_len
= { 1, 10, 40 },
902 .vactive
= { 480, 480, 480 },
903 .vfront_porch
= { 7, 22, 147 },
904 .vback_porch
= { 22, 13, 3 },
905 .vsync_len
= { 1, 10, 20 },
906 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
907 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
910 static const struct panel_desc armadeus_st0700_adapt
= {
911 .timings
= &santek_st0700i5y_rbslw_f_timing
,
918 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
919 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
922 static const struct drm_display_mode auo_b101aw03_mode
= {
925 .hsync_start
= 1024 + 156,
926 .hsync_end
= 1024 + 156 + 8,
927 .htotal
= 1024 + 156 + 8 + 156,
929 .vsync_start
= 600 + 16,
930 .vsync_end
= 600 + 16 + 6,
931 .vtotal
= 600 + 16 + 6 + 16,
934 static const struct panel_desc auo_b101aw03
= {
935 .modes
= &auo_b101aw03_mode
,
942 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
943 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
944 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
947 static const struct drm_display_mode auo_b101xtn01_mode
= {
950 .hsync_start
= 1366 + 20,
951 .hsync_end
= 1366 + 20 + 70,
952 .htotal
= 1366 + 20 + 70,
954 .vsync_start
= 768 + 14,
955 .vsync_end
= 768 + 14 + 42,
956 .vtotal
= 768 + 14 + 42,
957 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
960 static const struct panel_desc auo_b101xtn01
= {
961 .modes
= &auo_b101xtn01_mode
,
970 static const struct drm_display_mode auo_b116xw03_mode
= {
973 .hsync_start
= 1366 + 40,
974 .hsync_end
= 1366 + 40 + 40,
975 .htotal
= 1366 + 40 + 40 + 32,
977 .vsync_start
= 768 + 10,
978 .vsync_end
= 768 + 10 + 12,
979 .vtotal
= 768 + 10 + 12 + 6,
980 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
983 static const struct panel_desc auo_b116xw03
= {
984 .modes
= &auo_b116xw03_mode
,
997 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
998 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
999 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1002 static const struct display_timing auo_g070vvn01_timings
= {
1003 .pixelclock
= { 33300000, 34209000, 45000000 },
1004 .hactive
= { 800, 800, 800 },
1005 .hfront_porch
= { 20, 40, 200 },
1006 .hback_porch
= { 87, 40, 1 },
1007 .hsync_len
= { 1, 48, 87 },
1008 .vactive
= { 480, 480, 480 },
1009 .vfront_porch
= { 5, 13, 200 },
1010 .vback_porch
= { 31, 31, 29 },
1011 .vsync_len
= { 1, 1, 3 },
1014 static const struct panel_desc auo_g070vvn01
= {
1015 .timings
= &auo_g070vvn01_timings
,
1030 static const struct drm_display_mode auo_g101evn010_mode
= {
1033 .hsync_start
= 1280 + 82,
1034 .hsync_end
= 1280 + 82 + 2,
1035 .htotal
= 1280 + 82 + 2 + 84,
1037 .vsync_start
= 800 + 8,
1038 .vsync_end
= 800 + 8 + 2,
1039 .vtotal
= 800 + 8 + 2 + 6,
1042 static const struct panel_desc auo_g101evn010
= {
1043 .modes
= &auo_g101evn010_mode
,
1050 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
1051 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1054 static const struct drm_display_mode auo_g104sn02_mode
= {
1057 .hsync_start
= 800 + 40,
1058 .hsync_end
= 800 + 40 + 216,
1059 .htotal
= 800 + 40 + 216 + 128,
1061 .vsync_start
= 600 + 10,
1062 .vsync_end
= 600 + 10 + 35,
1063 .vtotal
= 600 + 10 + 35 + 2,
1066 static const struct panel_desc auo_g104sn02
= {
1067 .modes
= &auo_g104sn02_mode
,
1074 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1075 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1078 static const struct drm_display_mode auo_g104stn01_mode
= {
1081 .hsync_start
= 800 + 40,
1082 .hsync_end
= 800 + 40 + 88,
1083 .htotal
= 800 + 40 + 88 + 128,
1085 .vsync_start
= 600 + 1,
1086 .vsync_end
= 600 + 1 + 23,
1087 .vtotal
= 600 + 1 + 23 + 4,
1090 static const struct panel_desc auo_g104stn01
= {
1091 .modes
= &auo_g104stn01_mode
,
1098 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1099 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1102 static const struct display_timing auo_g121ean01_timing
= {
1103 .pixelclock
= { 60000000, 74400000, 90000000 },
1104 .hactive
= { 1280, 1280, 1280 },
1105 .hfront_porch
= { 20, 50, 100 },
1106 .hback_porch
= { 20, 50, 100 },
1107 .hsync_len
= { 30, 100, 200 },
1108 .vactive
= { 800, 800, 800 },
1109 .vfront_porch
= { 2, 10, 25 },
1110 .vback_porch
= { 2, 10, 25 },
1111 .vsync_len
= { 4, 18, 50 },
1114 static const struct panel_desc auo_g121ean01
= {
1115 .timings
= &auo_g121ean01_timing
,
1122 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1123 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1126 static const struct display_timing auo_g133han01_timings
= {
1127 .pixelclock
= { 134000000, 141200000, 149000000 },
1128 .hactive
= { 1920, 1920, 1920 },
1129 .hfront_porch
= { 39, 58, 77 },
1130 .hback_porch
= { 59, 88, 117 },
1131 .hsync_len
= { 28, 42, 56 },
1132 .vactive
= { 1080, 1080, 1080 },
1133 .vfront_porch
= { 3, 8, 11 },
1134 .vback_porch
= { 5, 14, 19 },
1135 .vsync_len
= { 4, 14, 19 },
1138 static const struct panel_desc auo_g133han01
= {
1139 .timings
= &auo_g133han01_timings
,
1152 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA
,
1153 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1156 static const struct display_timing auo_g156han04_timings
= {
1157 .pixelclock
= { 137000000, 141000000, 146000000 },
1158 .hactive
= { 1920, 1920, 1920 },
1159 .hfront_porch
= { 60, 60, 60 },
1160 .hback_porch
= { 90, 92, 111 },
1161 .hsync_len
= { 32, 32, 32 },
1162 .vactive
= { 1080, 1080, 1080 },
1163 .vfront_porch
= { 12, 12, 12 },
1164 .vback_porch
= { 24, 36, 56 },
1165 .vsync_len
= { 8, 8, 8 },
1168 static const struct panel_desc auo_g156han04
= {
1169 .timings
= &auo_g156han04_timings
,
1177 .prepare
= 50, /* T2 */
1178 .enable
= 200, /* T3 */
1179 .disable
= 110, /* T10 */
1180 .unprepare
= 1000, /* T13 */
1182 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1183 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
1184 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1187 static const struct drm_display_mode auo_g156xtn01_mode
= {
1190 .hsync_start
= 1366 + 33,
1191 .hsync_end
= 1366 + 33 + 67,
1194 .vsync_start
= 768 + 4,
1195 .vsync_end
= 768 + 4 + 4,
1199 static const struct panel_desc auo_g156xtn01
= {
1200 .modes
= &auo_g156xtn01_mode
,
1207 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1208 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1211 static const struct display_timing auo_g185han01_timings
= {
1212 .pixelclock
= { 120000000, 144000000, 175000000 },
1213 .hactive
= { 1920, 1920, 1920 },
1214 .hfront_porch
= { 36, 120, 148 },
1215 .hback_porch
= { 24, 88, 108 },
1216 .hsync_len
= { 20, 48, 64 },
1217 .vactive
= { 1080, 1080, 1080 },
1218 .vfront_porch
= { 6, 10, 40 },
1219 .vback_porch
= { 2, 5, 20 },
1220 .vsync_len
= { 2, 5, 20 },
1223 static const struct panel_desc auo_g185han01
= {
1224 .timings
= &auo_g185han01_timings
,
1237 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1238 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1241 static const struct display_timing auo_g190ean01_timings
= {
1242 .pixelclock
= { 90000000, 108000000, 135000000 },
1243 .hactive
= { 1280, 1280, 1280 },
1244 .hfront_porch
= { 126, 184, 1266 },
1245 .hback_porch
= { 84, 122, 844 },
1246 .hsync_len
= { 70, 102, 704 },
1247 .vactive
= { 1024, 1024, 1024 },
1248 .vfront_porch
= { 4, 26, 76 },
1249 .vback_porch
= { 2, 8, 25 },
1250 .vsync_len
= { 2, 8, 25 },
1253 static const struct panel_desc auo_g190ean01
= {
1254 .timings
= &auo_g190ean01_timings
,
1267 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1268 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1271 static const struct display_timing auo_p320hvn03_timings
= {
1272 .pixelclock
= { 106000000, 148500000, 164000000 },
1273 .hactive
= { 1920, 1920, 1920 },
1274 .hfront_porch
= { 25, 50, 130 },
1275 .hback_porch
= { 25, 50, 130 },
1276 .hsync_len
= { 20, 40, 105 },
1277 .vactive
= { 1080, 1080, 1080 },
1278 .vfront_porch
= { 8, 17, 150 },
1279 .vback_porch
= { 8, 17, 150 },
1280 .vsync_len
= { 4, 11, 100 },
1283 static const struct panel_desc auo_p320hvn03
= {
1284 .timings
= &auo_p320hvn03_timings
,
1296 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1297 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1300 static const struct drm_display_mode auo_t215hvn01_mode
= {
1303 .hsync_start
= 1920 + 88,
1304 .hsync_end
= 1920 + 88 + 44,
1305 .htotal
= 1920 + 88 + 44 + 148,
1307 .vsync_start
= 1080 + 4,
1308 .vsync_end
= 1080 + 4 + 5,
1309 .vtotal
= 1080 + 4 + 5 + 36,
1312 static const struct panel_desc auo_t215hvn01
= {
1313 .modes
= &auo_t215hvn01_mode
,
1324 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1325 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1328 static const struct drm_display_mode avic_tm070ddh03_mode
= {
1331 .hsync_start
= 1024 + 160,
1332 .hsync_end
= 1024 + 160 + 4,
1333 .htotal
= 1024 + 160 + 4 + 156,
1335 .vsync_start
= 600 + 17,
1336 .vsync_end
= 600 + 17 + 1,
1337 .vtotal
= 600 + 17 + 1 + 17,
1340 static const struct panel_desc avic_tm070ddh03
= {
1341 .modes
= &avic_tm070ddh03_mode
,
1355 static const struct drm_display_mode bananapi_s070wv20_ct16_mode
= {
1358 .hsync_start
= 800 + 40,
1359 .hsync_end
= 800 + 40 + 48,
1360 .htotal
= 800 + 40 + 48 + 40,
1362 .vsync_start
= 480 + 13,
1363 .vsync_end
= 480 + 13 + 3,
1364 .vtotal
= 480 + 13 + 3 + 29,
1367 static const struct panel_desc bananapi_s070wv20_ct16
= {
1368 .modes
= &bananapi_s070wv20_ct16_mode
,
1377 static const struct drm_display_mode boe_bp101wx1_100_mode
= {
1380 .hsync_start
= 1280 + 0,
1381 .hsync_end
= 1280 + 0 + 2,
1382 .htotal
= 1280 + 62 + 0 + 2,
1384 .vsync_start
= 800 + 8,
1385 .vsync_end
= 800 + 8 + 2,
1386 .vtotal
= 800 + 6 + 8 + 2,
1389 static const struct panel_desc boe_bp082wx1_100
= {
1390 .modes
= &boe_bp101wx1_100_mode
,
1401 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA
,
1402 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
1403 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1406 static const struct panel_desc boe_bp101wx1_100
= {
1407 .modes
= &boe_bp101wx1_100_mode
,
1418 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA
,
1419 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
1420 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1423 static const struct display_timing boe_ev121wxm_n10_1850_timing
= {
1424 .pixelclock
= { 69922000, 71000000, 72293000 },
1425 .hactive
= { 1280, 1280, 1280 },
1426 .hfront_porch
= { 48, 48, 48 },
1427 .hback_porch
= { 80, 80, 80 },
1428 .hsync_len
= { 32, 32, 32 },
1429 .vactive
= { 800, 800, 800 },
1430 .vfront_porch
= { 3, 3, 3 },
1431 .vback_porch
= { 14, 14, 14 },
1432 .vsync_len
= { 6, 6, 6 },
1435 static const struct panel_desc boe_ev121wxm_n10_1850
= {
1436 .timings
= &boe_ev121wxm_n10_1850_timing
,
1449 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1450 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
1451 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1454 static const struct drm_display_mode boe_hv070wsa_mode
= {
1457 .hsync_start
= 1024 + 30,
1458 .hsync_end
= 1024 + 30 + 30,
1459 .htotal
= 1024 + 30 + 30 + 30,
1461 .vsync_start
= 600 + 10,
1462 .vsync_end
= 600 + 10 + 10,
1463 .vtotal
= 600 + 10 + 10 + 10,
1466 static const struct panel_desc boe_hv070wsa
= {
1467 .modes
= &boe_hv070wsa_mode
,
1474 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1475 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
1476 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1479 static const struct display_timing cct_cmt430b19n00_timing
= {
1480 .pixelclock
= { 8000000, 9000000, 12000000 },
1481 .hactive
= { 480, 480, 480 },
1482 .hfront_porch
= { 2, 8, 75 },
1483 .hback_porch
= { 3, 43, 43 },
1484 .hsync_len
= { 2, 4, 75 },
1485 .vactive
= { 272, 272, 272 },
1486 .vfront_porch
= { 2, 8, 37 },
1487 .vback_porch
= { 2, 12, 12 },
1488 .vsync_len
= { 2, 4, 37 },
1489 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
1492 static const struct panel_desc cct_cmt430b19n00
= {
1493 .timings
= &cct_cmt430b19n00_timing
,
1500 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
1501 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE
,
1502 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
1505 static const struct drm_display_mode cdtech_s043wq26h_ct7_mode
= {
1508 .hsync_start
= 480 + 5,
1509 .hsync_end
= 480 + 5 + 5,
1510 .htotal
= 480 + 5 + 5 + 40,
1512 .vsync_start
= 272 + 8,
1513 .vsync_end
= 272 + 8 + 8,
1514 .vtotal
= 272 + 8 + 8 + 8,
1515 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
1518 static const struct panel_desc cdtech_s043wq26h_ct7
= {
1519 .modes
= &cdtech_s043wq26h_ct7_mode
,
1526 .bus_flags
= DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
1529 /* S070PWS19HP-FC21 2017/04/22 */
1530 static const struct drm_display_mode cdtech_s070pws19hp_fc21_mode
= {
1533 .hsync_start
= 1024 + 160,
1534 .hsync_end
= 1024 + 160 + 20,
1535 .htotal
= 1024 + 160 + 20 + 140,
1537 .vsync_start
= 600 + 12,
1538 .vsync_end
= 600 + 12 + 3,
1539 .vtotal
= 600 + 12 + 3 + 20,
1540 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
1543 static const struct panel_desc cdtech_s070pws19hp_fc21
= {
1544 .modes
= &cdtech_s070pws19hp_fc21_mode
,
1551 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
1552 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
1553 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
1556 /* S070SWV29HG-DC44 2017/09/21 */
1557 static const struct drm_display_mode cdtech_s070swv29hg_dc44_mode
= {
1560 .hsync_start
= 800 + 210,
1561 .hsync_end
= 800 + 210 + 2,
1562 .htotal
= 800 + 210 + 2 + 44,
1564 .vsync_start
= 480 + 22,
1565 .vsync_end
= 480 + 22 + 2,
1566 .vtotal
= 480 + 22 + 2 + 21,
1567 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
1570 static const struct panel_desc cdtech_s070swv29hg_dc44
= {
1571 .modes
= &cdtech_s070swv29hg_dc44_mode
,
1578 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
1579 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
1580 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
1583 static const struct drm_display_mode cdtech_s070wv95_ct16_mode
= {
1586 .hsync_start
= 800 + 40,
1587 .hsync_end
= 800 + 40 + 40,
1588 .htotal
= 800 + 40 + 40 + 48,
1590 .vsync_start
= 480 + 29,
1591 .vsync_end
= 480 + 29 + 13,
1592 .vtotal
= 480 + 29 + 13 + 3,
1593 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
1596 static const struct panel_desc cdtech_s070wv95_ct16
= {
1597 .modes
= &cdtech_s070wv95_ct16_mode
,
1606 static const struct display_timing chefree_ch101olhlwh_002_timing
= {
1607 .pixelclock
= { 68900000, 71100000, 73400000 },
1608 .hactive
= { 1280, 1280, 1280 },
1609 .hfront_porch
= { 65, 80, 95 },
1610 .hback_porch
= { 64, 79, 94 },
1611 .hsync_len
= { 1, 1, 1 },
1612 .vactive
= { 800, 800, 800 },
1613 .vfront_porch
= { 7, 11, 14 },
1614 .vback_porch
= { 7, 11, 14 },
1615 .vsync_len
= { 1, 1, 1 },
1616 .flags
= DISPLAY_FLAGS_DE_HIGH
,
1619 static const struct panel_desc chefree_ch101olhlwh_002
= {
1620 .timings
= &chefree_ch101olhlwh_002_timing
,
1631 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
1632 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1633 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1636 static const struct drm_display_mode chunghwa_claa070wp03xg_mode
= {
1639 .hsync_start
= 800 + 49,
1640 .hsync_end
= 800 + 49 + 33,
1641 .htotal
= 800 + 49 + 33 + 17,
1643 .vsync_start
= 1280 + 1,
1644 .vsync_end
= 1280 + 1 + 7,
1645 .vtotal
= 1280 + 1 + 7 + 15,
1646 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
1649 static const struct panel_desc chunghwa_claa070wp03xg
= {
1650 .modes
= &chunghwa_claa070wp03xg_mode
,
1657 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
1658 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
1659 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1662 static const struct drm_display_mode chunghwa_claa101wa01a_mode
= {
1665 .hsync_start
= 1366 + 58,
1666 .hsync_end
= 1366 + 58 + 58,
1667 .htotal
= 1366 + 58 + 58 + 58,
1669 .vsync_start
= 768 + 4,
1670 .vsync_end
= 768 + 4 + 4,
1671 .vtotal
= 768 + 4 + 4 + 4,
1674 static const struct panel_desc chunghwa_claa101wa01a
= {
1675 .modes
= &chunghwa_claa101wa01a_mode
,
1682 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
1683 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
1684 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1687 static const struct drm_display_mode chunghwa_claa101wb01_mode
= {
1690 .hsync_start
= 1366 + 48,
1691 .hsync_end
= 1366 + 48 + 32,
1692 .htotal
= 1366 + 48 + 32 + 20,
1694 .vsync_start
= 768 + 16,
1695 .vsync_end
= 768 + 16 + 8,
1696 .vtotal
= 768 + 16 + 8 + 16,
1699 static const struct panel_desc chunghwa_claa101wb01
= {
1700 .modes
= &chunghwa_claa101wb01_mode
,
1707 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
1708 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
1709 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1712 static const struct display_timing dataimage_fg040346dsswbg04_timing
= {
1713 .pixelclock
= { 5000000, 9000000, 12000000 },
1714 .hactive
= { 480, 480, 480 },
1715 .hfront_porch
= { 12, 12, 12 },
1716 .hback_porch
= { 12, 12, 12 },
1717 .hsync_len
= { 21, 21, 21 },
1718 .vactive
= { 272, 272, 272 },
1719 .vfront_porch
= { 4, 4, 4 },
1720 .vback_porch
= { 4, 4, 4 },
1721 .vsync_len
= { 8, 8, 8 },
1724 static const struct panel_desc dataimage_fg040346dsswbg04
= {
1725 .timings
= &dataimage_fg040346dsswbg04_timing
,
1732 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
1733 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
1734 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
1737 static const struct display_timing dataimage_fg1001l0dsswmg01_timing
= {
1738 .pixelclock
= { 68900000, 71110000, 73400000 },
1739 .hactive
= { 1280, 1280, 1280 },
1740 .vactive
= { 800, 800, 800 },
1741 .hback_porch
= { 100, 100, 100 },
1742 .hfront_porch
= { 100, 100, 100 },
1743 .vback_porch
= { 5, 5, 5 },
1744 .vfront_porch
= { 5, 5, 5 },
1745 .hsync_len
= { 24, 24, 24 },
1746 .vsync_len
= { 3, 3, 3 },
1747 .flags
= DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
1748 DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
,
1751 static const struct panel_desc dataimage_fg1001l0dsswmg01
= {
1752 .timings
= &dataimage_fg1001l0dsswmg01_timing
,
1761 static const struct drm_display_mode dataimage_scf0700c48ggu18_mode
= {
1764 .hsync_start
= 800 + 40,
1765 .hsync_end
= 800 + 40 + 128,
1766 .htotal
= 800 + 40 + 128 + 88,
1768 .vsync_start
= 480 + 10,
1769 .vsync_end
= 480 + 10 + 2,
1770 .vtotal
= 480 + 10 + 2 + 33,
1771 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
1774 static const struct panel_desc dataimage_scf0700c48ggu18
= {
1775 .modes
= &dataimage_scf0700c48ggu18_mode
,
1782 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
1783 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
1786 static const struct display_timing dlc_dlc0700yzg_1_timing
= {
1787 .pixelclock
= { 45000000, 51200000, 57000000 },
1788 .hactive
= { 1024, 1024, 1024 },
1789 .hfront_porch
= { 100, 106, 113 },
1790 .hback_porch
= { 100, 106, 113 },
1791 .hsync_len
= { 100, 108, 114 },
1792 .vactive
= { 600, 600, 600 },
1793 .vfront_porch
= { 8, 11, 15 },
1794 .vback_porch
= { 8, 11, 15 },
1795 .vsync_len
= { 9, 13, 15 },
1796 .flags
= DISPLAY_FLAGS_DE_HIGH
,
1799 static const struct panel_desc dlc_dlc0700yzg_1
= {
1800 .timings
= &dlc_dlc0700yzg_1_timing
,
1812 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
1813 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1816 static const struct display_timing dlc_dlc1010gig_timing
= {
1817 .pixelclock
= { 68900000, 71100000, 73400000 },
1818 .hactive
= { 1280, 1280, 1280 },
1819 .hfront_porch
= { 43, 53, 63 },
1820 .hback_porch
= { 43, 53, 63 },
1821 .hsync_len
= { 44, 54, 64 },
1822 .vactive
= { 800, 800, 800 },
1823 .vfront_porch
= { 5, 8, 11 },
1824 .vback_porch
= { 5, 8, 11 },
1825 .vsync_len
= { 5, 7, 11 },
1826 .flags
= DISPLAY_FLAGS_DE_HIGH
,
1829 static const struct panel_desc dlc_dlc1010gig
= {
1830 .timings
= &dlc_dlc1010gig_timing
,
1843 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
1844 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
1847 static const struct drm_display_mode edt_et035012dm6_mode
= {
1850 .hsync_start
= 320 + 20,
1851 .hsync_end
= 320 + 20 + 30,
1852 .htotal
= 320 + 20 + 68,
1854 .vsync_start
= 240 + 4,
1855 .vsync_end
= 240 + 4 + 4,
1856 .vtotal
= 240 + 4 + 4 + 14,
1857 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
1860 static const struct panel_desc edt_et035012dm6
= {
1861 .modes
= &edt_et035012dm6_mode
,
1868 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
1869 .bus_flags
= DRM_BUS_FLAG_DE_LOW
| DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
,
1872 static const struct drm_display_mode edt_etm0350g0dh6_mode
= {
1875 .hsync_start
= 320 + 20,
1876 .hsync_end
= 320 + 20 + 68,
1877 .htotal
= 320 + 20 + 68,
1879 .vsync_start
= 240 + 4,
1880 .vsync_end
= 240 + 4 + 18,
1881 .vtotal
= 240 + 4 + 18,
1882 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
1885 static const struct panel_desc edt_etm0350g0dh6
= {
1886 .modes
= &edt_etm0350g0dh6_mode
,
1893 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
1894 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE
,
1895 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
1898 static const struct drm_display_mode edt_etm043080dh6gp_mode
= {
1901 .hsync_start
= 480 + 8,
1902 .hsync_end
= 480 + 8 + 4,
1903 .htotal
= 480 + 8 + 4 + 41,
1906 * IWG22M: Y resolution changed for "dc_linuxfb" module crashing while
1911 .vsync_start
= 288 + 2,
1912 .vsync_end
= 288 + 2 + 4,
1913 .vtotal
= 288 + 2 + 4 + 10,
1916 static const struct panel_desc edt_etm043080dh6gp
= {
1917 .modes
= &edt_etm043080dh6gp_mode
,
1924 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
1925 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
1928 static const struct drm_display_mode edt_etm0430g0dh6_mode
= {
1931 .hsync_start
= 480 + 2,
1932 .hsync_end
= 480 + 2 + 41,
1933 .htotal
= 480 + 2 + 41 + 2,
1935 .vsync_start
= 272 + 2,
1936 .vsync_end
= 272 + 2 + 10,
1937 .vtotal
= 272 + 2 + 10 + 2,
1938 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
1941 static const struct panel_desc edt_etm0430g0dh6
= {
1942 .modes
= &edt_etm0430g0dh6_mode
,
1949 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
1950 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
,
1951 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
1954 static const struct drm_display_mode edt_et057090dhu_mode
= {
1957 .hsync_start
= 640 + 16,
1958 .hsync_end
= 640 + 16 + 30,
1959 .htotal
= 640 + 16 + 30 + 114,
1961 .vsync_start
= 480 + 10,
1962 .vsync_end
= 480 + 10 + 3,
1963 .vtotal
= 480 + 10 + 3 + 32,
1964 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
1967 static const struct panel_desc edt_et057090dhu
= {
1968 .modes
= &edt_et057090dhu_mode
,
1975 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
1976 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE
,
1977 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
1980 static const struct drm_display_mode edt_etm0700g0dh6_mode
= {
1983 .hsync_start
= 800 + 40,
1984 .hsync_end
= 800 + 40 + 128,
1985 .htotal
= 800 + 40 + 128 + 88,
1987 .vsync_start
= 480 + 10,
1988 .vsync_end
= 480 + 10 + 2,
1989 .vtotal
= 480 + 10 + 2 + 33,
1990 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
1993 static const struct panel_desc edt_etm0700g0dh6
= {
1994 .modes
= &edt_etm0700g0dh6_mode
,
2001 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
2002 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE
,
2003 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
2006 static const struct panel_desc edt_etm0700g0bdh6
= {
2007 .modes
= &edt_etm0700g0dh6_mode
,
2014 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
2015 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
2016 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
2019 static const struct display_timing edt_etml0700y5dha_timing
= {
2020 .pixelclock
= { 40800000, 51200000, 67200000 },
2021 .hactive
= { 1024, 1024, 1024 },
2022 .hfront_porch
= { 30, 106, 125 },
2023 .hback_porch
= { 30, 106, 125 },
2024 .hsync_len
= { 30, 108, 126 },
2025 .vactive
= { 600, 600, 600 },
2026 .vfront_porch
= { 3, 12, 67},
2027 .vback_porch
= { 3, 12, 67 },
2028 .vsync_len
= { 4, 11, 66 },
2029 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
2030 DISPLAY_FLAGS_DE_HIGH
,
2033 static const struct panel_desc edt_etml0700y5dha
= {
2034 .timings
= &edt_etml0700y5dha_timing
,
2041 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2042 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2045 static const struct display_timing edt_etml1010g3dra_timing
= {
2046 .pixelclock
= { 66300000, 72400000, 78900000 },
2047 .hactive
= { 1280, 1280, 1280 },
2048 .hfront_porch
= { 12, 72, 132 },
2049 .hback_porch
= { 86, 86, 86 },
2050 .hsync_len
= { 2, 2, 2 },
2051 .vactive
= { 800, 800, 800 },
2052 .vfront_porch
= { 1, 15, 49 },
2053 .vback_porch
= { 21, 21, 21 },
2054 .vsync_len
= { 2, 2, 2 },
2055 .flags
= DISPLAY_FLAGS_VSYNC_LOW
| DISPLAY_FLAGS_HSYNC_LOW
|
2056 DISPLAY_FLAGS_DE_HIGH
,
2059 static const struct panel_desc edt_etml1010g3dra
= {
2060 .timings
= &edt_etml1010g3dra_timing
,
2067 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2068 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2069 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2072 static const struct drm_display_mode edt_etmv570g2dhu_mode
= {
2076 .hsync_end
= 640 + 16,
2077 .htotal
= 640 + 16 + 30 + 114,
2079 .vsync_start
= 480 + 10,
2080 .vsync_end
= 480 + 10 + 3,
2081 .vtotal
= 480 + 10 + 3 + 35,
2082 .flags
= DRM_MODE_FLAG_PVSYNC
| DRM_MODE_FLAG_PHSYNC
,
2085 static const struct panel_desc edt_etmv570g2dhu
= {
2086 .modes
= &edt_etmv570g2dhu_mode
,
2093 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2094 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE
,
2095 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
2098 static const struct display_timing eink_vb3300_kca_timing
= {
2099 .pixelclock
= { 40000000, 40000000, 40000000 },
2100 .hactive
= { 334, 334, 334 },
2101 .hfront_porch
= { 1, 1, 1 },
2102 .hback_porch
= { 1, 1, 1 },
2103 .hsync_len
= { 1, 1, 1 },
2104 .vactive
= { 1405, 1405, 1405 },
2105 .vfront_porch
= { 1, 1, 1 },
2106 .vback_porch
= { 1, 1, 1 },
2107 .vsync_len
= { 1, 1, 1 },
2108 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
2109 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
,
2112 static const struct panel_desc eink_vb3300_kca
= {
2113 .timings
= &eink_vb3300_kca_timing
,
2120 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2121 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
2122 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
2125 static const struct display_timing evervision_vgg644804_timing
= {
2126 .pixelclock
= { 25175000, 25175000, 25175000 },
2127 .hactive
= { 640, 640, 640 },
2128 .hfront_porch
= { 16, 16, 16 },
2129 .hback_porch
= { 82, 114, 170 },
2130 .hsync_len
= { 5, 30, 30 },
2131 .vactive
= { 480, 480, 480 },
2132 .vfront_porch
= { 10, 10, 10 },
2133 .vback_porch
= { 30, 32, 34 },
2134 .vsync_len
= { 1, 3, 5 },
2135 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
2136 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
2137 DISPLAY_FLAGS_SYNC_POSEDGE
,
2140 static const struct panel_desc evervision_vgg644804
= {
2141 .timings
= &evervision_vgg644804_timing
,
2148 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
2149 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
2152 static const struct display_timing evervision_vgg804821_timing
= {
2153 .pixelclock
= { 27600000, 33300000, 50000000 },
2154 .hactive
= { 800, 800, 800 },
2155 .hfront_porch
= { 40, 66, 70 },
2156 .hback_porch
= { 40, 67, 70 },
2157 .hsync_len
= { 40, 67, 70 },
2158 .vactive
= { 480, 480, 480 },
2159 .vfront_porch
= { 6, 10, 10 },
2160 .vback_porch
= { 7, 11, 11 },
2161 .vsync_len
= { 7, 11, 11 },
2162 .flags
= DISPLAY_FLAGS_HSYNC_HIGH
| DISPLAY_FLAGS_VSYNC_HIGH
|
2163 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_NEGEDGE
|
2164 DISPLAY_FLAGS_SYNC_NEGEDGE
,
2167 static const struct panel_desc evervision_vgg804821
= {
2168 .timings
= &evervision_vgg804821_timing
,
2175 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2176 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
,
2179 static const struct drm_display_mode foxlink_fl500wvr00_a0t_mode
= {
2182 .hsync_start
= 800 + 168,
2183 .hsync_end
= 800 + 168 + 64,
2184 .htotal
= 800 + 168 + 64 + 88,
2186 .vsync_start
= 480 + 37,
2187 .vsync_end
= 480 + 37 + 2,
2188 .vtotal
= 480 + 37 + 2 + 8,
2191 static const struct panel_desc foxlink_fl500wvr00_a0t
= {
2192 .modes
= &foxlink_fl500wvr00_a0t_mode
,
2199 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2202 static const struct drm_display_mode frida_frd350h54004_modes
[] = {
2206 .hsync_start
= 320 + 44,
2207 .hsync_end
= 320 + 44 + 16,
2208 .htotal
= 320 + 44 + 16 + 20,
2210 .vsync_start
= 240 + 2,
2211 .vsync_end
= 240 + 2 + 6,
2212 .vtotal
= 240 + 2 + 6 + 2,
2213 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
2218 .hsync_start
= 320 + 56,
2219 .hsync_end
= 320 + 56 + 16,
2220 .htotal
= 320 + 56 + 16 + 40,
2222 .vsync_start
= 240 + 2,
2223 .vsync_end
= 240 + 2 + 6,
2224 .vtotal
= 240 + 2 + 6 + 2,
2225 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
2229 static const struct panel_desc frida_frd350h54004
= {
2230 .modes
= frida_frd350h54004_modes
,
2231 .num_modes
= ARRAY_SIZE(frida_frd350h54004_modes
),
2237 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2238 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
2239 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
2242 static const struct drm_display_mode friendlyarm_hd702e_mode
= {
2245 .hsync_start
= 800 + 20,
2246 .hsync_end
= 800 + 20 + 24,
2247 .htotal
= 800 + 20 + 24 + 20,
2249 .vsync_start
= 1280 + 4,
2250 .vsync_end
= 1280 + 4 + 8,
2251 .vtotal
= 1280 + 4 + 8 + 4,
2252 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
2255 static const struct panel_desc friendlyarm_hd702e
= {
2256 .modes
= &friendlyarm_hd702e_mode
,
2264 static const struct drm_display_mode giantplus_gpg482739qs5_mode
= {
2267 .hsync_start
= 480 + 5,
2268 .hsync_end
= 480 + 5 + 1,
2269 .htotal
= 480 + 5 + 1 + 40,
2271 .vsync_start
= 272 + 8,
2272 .vsync_end
= 272 + 8 + 1,
2273 .vtotal
= 272 + 8 + 1 + 8,
2276 static const struct panel_desc giantplus_gpg482739qs5
= {
2277 .modes
= &giantplus_gpg482739qs5_mode
,
2284 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2287 static const struct display_timing giantplus_gpm940b0_timing
= {
2288 .pixelclock
= { 13500000, 27000000, 27500000 },
2289 .hactive
= { 320, 320, 320 },
2290 .hfront_porch
= { 14, 686, 718 },
2291 .hback_porch
= { 50, 70, 255 },
2292 .hsync_len
= { 1, 1, 1 },
2293 .vactive
= { 240, 240, 240 },
2294 .vfront_porch
= { 1, 1, 179 },
2295 .vback_porch
= { 1, 21, 31 },
2296 .vsync_len
= { 1, 1, 6 },
2297 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
,
2300 static const struct panel_desc giantplus_gpm940b0
= {
2301 .timings
= &giantplus_gpm940b0_timing
,
2308 .bus_format
= MEDIA_BUS_FMT_RGB888_3X8
,
2309 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
,
2312 static const struct display_timing hannstar_hsd070pww1_timing
= {
2313 .pixelclock
= { 64300000, 71100000, 82000000 },
2314 .hactive
= { 1280, 1280, 1280 },
2315 .hfront_porch
= { 1, 1, 10 },
2316 .hback_porch
= { 1, 1, 10 },
2318 * According to the data sheet, the minimum horizontal blanking interval
2319 * is 54 clocks (1 + 52 + 1), but tests with a Nitrogen6X have shown the
2320 * minimum working horizontal blanking interval to be 60 clocks.
2322 .hsync_len
= { 58, 158, 661 },
2323 .vactive
= { 800, 800, 800 },
2324 .vfront_porch
= { 1, 1, 10 },
2325 .vback_porch
= { 1, 1, 10 },
2326 .vsync_len
= { 1, 21, 203 },
2327 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2330 static const struct panel_desc hannstar_hsd070pww1
= {
2331 .timings
= &hannstar_hsd070pww1_timing
,
2338 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
2339 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2342 static const struct display_timing hannstar_hsd100pxn1_timing
= {
2343 .pixelclock
= { 55000000, 65000000, 75000000 },
2344 .hactive
= { 1024, 1024, 1024 },
2345 .hfront_porch
= { 40, 40, 40 },
2346 .hback_porch
= { 220, 220, 220 },
2347 .hsync_len
= { 20, 60, 100 },
2348 .vactive
= { 768, 768, 768 },
2349 .vfront_porch
= { 7, 7, 7 },
2350 .vback_porch
= { 21, 21, 21 },
2351 .vsync_len
= { 10, 10, 10 },
2352 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2355 static const struct panel_desc hannstar_hsd100pxn1
= {
2356 .timings
= &hannstar_hsd100pxn1_timing
,
2363 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
2364 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2367 static const struct display_timing hannstar_hsd101pww2_timing
= {
2368 .pixelclock
= { 64300000, 71100000, 82000000 },
2369 .hactive
= { 1280, 1280, 1280 },
2370 .hfront_porch
= { 1, 1, 10 },
2371 .hback_porch
= { 1, 1, 10 },
2372 .hsync_len
= { 58, 158, 661 },
2373 .vactive
= { 800, 800, 800 },
2374 .vfront_porch
= { 1, 1, 10 },
2375 .vback_porch
= { 1, 1, 10 },
2376 .vsync_len
= { 1, 21, 203 },
2377 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2380 static const struct panel_desc hannstar_hsd101pww2
= {
2381 .timings
= &hannstar_hsd101pww2_timing
,
2388 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2389 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2392 static const struct drm_display_mode hitachi_tx23d38vm0caa_mode
= {
2395 .hsync_start
= 800 + 85,
2396 .hsync_end
= 800 + 85 + 86,
2397 .htotal
= 800 + 85 + 86 + 85,
2399 .vsync_start
= 480 + 16,
2400 .vsync_end
= 480 + 16 + 13,
2401 .vtotal
= 480 + 16 + 13 + 16,
2404 static const struct panel_desc hitachi_tx23d38vm0caa
= {
2405 .modes
= &hitachi_tx23d38vm0caa_mode
,
2418 static const struct drm_display_mode innolux_at043tn24_mode
= {
2421 .hsync_start
= 480 + 2,
2422 .hsync_end
= 480 + 2 + 41,
2423 .htotal
= 480 + 2 + 41 + 2,
2425 .vsync_start
= 272 + 2,
2426 .vsync_end
= 272 + 2 + 10,
2427 .vtotal
= 272 + 2 + 10 + 2,
2428 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
2431 static const struct panel_desc innolux_at043tn24
= {
2432 .modes
= &innolux_at043tn24_mode
,
2439 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2440 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
2441 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
2444 static const struct drm_display_mode innolux_at070tn92_mode
= {
2447 .hsync_start
= 800 + 210,
2448 .hsync_end
= 800 + 210 + 20,
2449 .htotal
= 800 + 210 + 20 + 46,
2451 .vsync_start
= 480 + 22,
2452 .vsync_end
= 480 + 22 + 10,
2453 .vtotal
= 480 + 22 + 23 + 10,
2456 static const struct panel_desc innolux_at070tn92
= {
2457 .modes
= &innolux_at070tn92_mode
,
2463 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2466 static const struct display_timing innolux_g070ace_l01_timing
= {
2467 .pixelclock
= { 25200000, 35000000, 35700000 },
2468 .hactive
= { 800, 800, 800 },
2469 .hfront_porch
= { 30, 32, 87 },
2470 .hback_porch
= { 30, 32, 87 },
2471 .hsync_len
= { 1, 1, 1 },
2472 .vactive
= { 480, 480, 480 },
2473 .vfront_porch
= { 3, 3, 3 },
2474 .vback_porch
= { 13, 13, 13 },
2475 .vsync_len
= { 1, 1, 4 },
2476 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2479 static const struct panel_desc innolux_g070ace_l01
= {
2480 .timings
= &innolux_g070ace_l01_timing
,
2493 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2494 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2495 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2498 static const struct display_timing innolux_g070y2_l01_timing
= {
2499 .pixelclock
= { 28000000, 29500000, 32000000 },
2500 .hactive
= { 800, 800, 800 },
2501 .hfront_porch
= { 61, 91, 141 },
2502 .hback_porch
= { 60, 90, 140 },
2503 .hsync_len
= { 12, 12, 12 },
2504 .vactive
= { 480, 480, 480 },
2505 .vfront_porch
= { 4, 9, 30 },
2506 .vback_porch
= { 4, 8, 28 },
2507 .vsync_len
= { 2, 2, 2 },
2508 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2511 static const struct panel_desc innolux_g070y2_l01
= {
2512 .timings
= &innolux_g070y2_l01_timing
,
2525 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2526 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2527 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2530 static const struct display_timing innolux_g070ace_lh3_timing
= {
2531 .pixelclock
= { 25200000, 25400000, 35700000 },
2532 .hactive
= { 800, 800, 800 },
2533 .hfront_porch
= { 30, 32, 87 },
2534 .hback_porch
= { 29, 31, 86 },
2535 .hsync_len
= { 1, 1, 1 },
2536 .vactive
= { 480, 480, 480 },
2537 .vfront_porch
= { 4, 5, 65 },
2538 .vback_porch
= { 3, 4, 65 },
2539 .vsync_len
= { 1, 1, 1 },
2540 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2543 static const struct panel_desc innolux_g070ace_lh3
= {
2544 .timings
= &innolux_g070ace_lh3_timing
,
2557 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2558 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2559 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2562 static const struct drm_display_mode innolux_g070y2_t02_mode
= {
2565 .hsync_start
= 800 + 210,
2566 .hsync_end
= 800 + 210 + 20,
2567 .htotal
= 800 + 210 + 20 + 46,
2569 .vsync_start
= 480 + 22,
2570 .vsync_end
= 480 + 22 + 10,
2571 .vtotal
= 480 + 22 + 23 + 10,
2574 static const struct panel_desc innolux_g070y2_t02
= {
2575 .modes
= &innolux_g070y2_t02_mode
,
2582 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2583 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
2584 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
2587 static const struct display_timing innolux_g101ice_l01_timing
= {
2588 .pixelclock
= { 60400000, 71100000, 74700000 },
2589 .hactive
= { 1280, 1280, 1280 },
2590 .hfront_porch
= { 30, 60, 70 },
2591 .hback_porch
= { 30, 60, 70 },
2592 .hsync_len
= { 22, 40, 60 },
2593 .vactive
= { 800, 800, 800 },
2594 .vfront_porch
= { 3, 8, 14 },
2595 .vback_porch
= { 3, 8, 14 },
2596 .vsync_len
= { 4, 7, 12 },
2597 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2600 static const struct panel_desc innolux_g101ice_l01
= {
2601 .timings
= &innolux_g101ice_l01_timing
,
2612 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2613 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2614 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2617 static const struct display_timing innolux_g121i1_l01_timing
= {
2618 .pixelclock
= { 67450000, 71000000, 74550000 },
2619 .hactive
= { 1280, 1280, 1280 },
2620 .hfront_porch
= { 40, 80, 160 },
2621 .hback_porch
= { 39, 79, 159 },
2622 .hsync_len
= { 1, 1, 1 },
2623 .vactive
= { 800, 800, 800 },
2624 .vfront_porch
= { 5, 11, 100 },
2625 .vback_porch
= { 4, 11, 99 },
2626 .vsync_len
= { 1, 1, 1 },
2629 static const struct panel_desc innolux_g121i1_l01
= {
2630 .timings
= &innolux_g121i1_l01_timing
,
2641 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
2642 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2645 static const struct display_timing innolux_g121x1_l03_timings
= {
2646 .pixelclock
= { 57500000, 64900000, 74400000 },
2647 .hactive
= { 1024, 1024, 1024 },
2648 .hfront_porch
= { 90, 140, 190 },
2649 .hback_porch
= { 90, 140, 190 },
2650 .hsync_len
= { 36, 40, 60 },
2651 .vactive
= { 768, 768, 768 },
2652 .vfront_porch
= { 2, 15, 30 },
2653 .vback_porch
= { 2, 15, 30 },
2654 .vsync_len
= { 2, 8, 20 },
2655 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
,
2658 static const struct panel_desc innolux_g121x1_l03
= {
2659 .timings
= &innolux_g121x1_l03_timings
,
2671 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
2672 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2673 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2676 static const struct panel_desc innolux_g121xce_l01
= {
2677 .timings
= &innolux_g121x1_l03_timings
,
2689 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2690 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2691 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2694 static const struct display_timing innolux_g156hce_l01_timings
= {
2695 .pixelclock
= { 120000000, 141860000, 150000000 },
2696 .hactive
= { 1920, 1920, 1920 },
2697 .hfront_porch
= { 80, 90, 100 },
2698 .hback_porch
= { 80, 90, 100 },
2699 .hsync_len
= { 20, 30, 30 },
2700 .vactive
= { 1080, 1080, 1080 },
2701 .vfront_porch
= { 3, 10, 20 },
2702 .vback_porch
= { 3, 10, 20 },
2703 .vsync_len
= { 4, 10, 10 },
2706 static const struct panel_desc innolux_g156hce_l01
= {
2707 .timings
= &innolux_g156hce_l01_timings
,
2715 .prepare
= 1, /* T1+T2 */
2716 .enable
= 450, /* T5 */
2717 .disable
= 200, /* T6 */
2718 .unprepare
= 10, /* T3+T7 */
2720 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2721 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2722 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2725 static const struct drm_display_mode innolux_n156bge_l21_mode
= {
2728 .hsync_start
= 1366 + 16,
2729 .hsync_end
= 1366 + 16 + 34,
2730 .htotal
= 1366 + 16 + 34 + 50,
2732 .vsync_start
= 768 + 2,
2733 .vsync_end
= 768 + 2 + 6,
2734 .vtotal
= 768 + 2 + 6 + 12,
2737 static const struct panel_desc innolux_n156bge_l21
= {
2738 .modes
= &innolux_n156bge_l21_mode
,
2745 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
2746 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2747 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2750 static const struct drm_display_mode innolux_zj070na_01p_mode
= {
2753 .hsync_start
= 1024 + 128,
2754 .hsync_end
= 1024 + 128 + 64,
2755 .htotal
= 1024 + 128 + 64 + 128,
2757 .vsync_start
= 600 + 16,
2758 .vsync_end
= 600 + 16 + 4,
2759 .vtotal
= 600 + 16 + 4 + 16,
2762 static const struct panel_desc innolux_zj070na_01p
= {
2763 .modes
= &innolux_zj070na_01p_mode
,
2772 static const struct display_timing koe_tx14d24vm1bpa_timing
= {
2773 .pixelclock
= { 5580000, 5850000, 6200000 },
2774 .hactive
= { 320, 320, 320 },
2775 .hfront_porch
= { 30, 30, 30 },
2776 .hback_porch
= { 30, 30, 30 },
2777 .hsync_len
= { 1, 5, 17 },
2778 .vactive
= { 240, 240, 240 },
2779 .vfront_porch
= { 6, 6, 6 },
2780 .vback_porch
= { 5, 5, 5 },
2781 .vsync_len
= { 1, 2, 11 },
2782 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2785 static const struct panel_desc koe_tx14d24vm1bpa
= {
2786 .timings
= &koe_tx14d24vm1bpa_timing
,
2795 static const struct display_timing koe_tx26d202vm0bwa_timing
= {
2796 .pixelclock
= { 151820000, 156720000, 159780000 },
2797 .hactive
= { 1920, 1920, 1920 },
2798 .hfront_porch
= { 105, 130, 142 },
2799 .hback_porch
= { 45, 70, 82 },
2800 .hsync_len
= { 30, 30, 30 },
2801 .vactive
= { 1200, 1200, 1200},
2802 .vfront_porch
= { 3, 5, 10 },
2803 .vback_porch
= { 2, 5, 10 },
2804 .vsync_len
= { 5, 5, 5 },
2805 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2808 static const struct panel_desc koe_tx26d202vm0bwa
= {
2809 .timings
= &koe_tx26d202vm0bwa_timing
,
2822 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2823 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2824 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2827 static const struct display_timing koe_tx31d200vm0baa_timing
= {
2828 .pixelclock
= { 39600000, 43200000, 48000000 },
2829 .hactive
= { 1280, 1280, 1280 },
2830 .hfront_porch
= { 16, 36, 56 },
2831 .hback_porch
= { 16, 36, 56 },
2832 .hsync_len
= { 8, 8, 8 },
2833 .vactive
= { 480, 480, 480 },
2834 .vfront_porch
= { 6, 21, 33 },
2835 .vback_porch
= { 6, 21, 33 },
2836 .vsync_len
= { 8, 8, 8 },
2837 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2840 static const struct panel_desc koe_tx31d200vm0baa
= {
2841 .timings
= &koe_tx31d200vm0baa_timing
,
2848 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
2849 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2852 static const struct display_timing kyo_tcg121xglp_timing
= {
2853 .pixelclock
= { 52000000, 65000000, 71000000 },
2854 .hactive
= { 1024, 1024, 1024 },
2855 .hfront_porch
= { 2, 2, 2 },
2856 .hback_porch
= { 2, 2, 2 },
2857 .hsync_len
= { 86, 124, 244 },
2858 .vactive
= { 768, 768, 768 },
2859 .vfront_porch
= { 2, 2, 2 },
2860 .vback_porch
= { 2, 2, 2 },
2861 .vsync_len
= { 6, 34, 73 },
2862 .flags
= DISPLAY_FLAGS_DE_HIGH
,
2865 static const struct panel_desc kyo_tcg121xglp
= {
2866 .timings
= &kyo_tcg121xglp_timing
,
2873 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2874 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2877 static const struct drm_display_mode lemaker_bl035_rgb_002_mode
= {
2880 .hsync_start
= 320 + 20,
2881 .hsync_end
= 320 + 20 + 30,
2882 .htotal
= 320 + 20 + 30 + 38,
2884 .vsync_start
= 240 + 4,
2885 .vsync_end
= 240 + 4 + 3,
2886 .vtotal
= 240 + 4 + 3 + 15,
2889 static const struct panel_desc lemaker_bl035_rgb_002
= {
2890 .modes
= &lemaker_bl035_rgb_002_mode
,
2896 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
2897 .bus_flags
= DRM_BUS_FLAG_DE_LOW
,
2900 static const struct display_timing lg_lb070wv8_timing
= {
2901 .pixelclock
= { 31950000, 33260000, 34600000 },
2902 .hactive
= { 800, 800, 800 },
2903 .hfront_porch
= { 88, 88, 88 },
2904 .hback_porch
= { 88, 88, 88 },
2905 .hsync_len
= { 80, 80, 80 },
2906 .vactive
= { 480, 480, 480 },
2907 .vfront_porch
= { 10, 10, 10 },
2908 .vback_porch
= { 10, 10, 10 },
2909 .vsync_len
= { 25, 25, 25 },
2912 static const struct panel_desc lg_lb070wv8
= {
2913 .timings
= &lg_lb070wv8_timing
,
2920 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2921 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2924 static const struct drm_display_mode lincolntech_lcd185_101ct_mode
= {
2927 .hsync_start
= 1920 + 128,
2928 .hsync_end
= 1920 + 128 + 20,
2929 .htotal
= 1920 + 128 + 20 + 12,
2931 .vsync_start
= 1200 + 19,
2932 .vsync_end
= 1200 + 19 + 4,
2933 .vtotal
= 1200 + 19 + 4 + 20,
2936 static const struct panel_desc lincolntech_lcd185_101ct
= {
2937 .modes
= &lincolntech_lcd185_101ct_mode
,
2948 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
2949 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
2950 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
2953 static const struct display_timing logictechno_lt161010_2nh_timing
= {
2954 .pixelclock
= { 26400000, 33300000, 46800000 },
2955 .hactive
= { 800, 800, 800 },
2956 .hfront_porch
= { 16, 210, 354 },
2957 .hback_porch
= { 46, 46, 46 },
2958 .hsync_len
= { 1, 20, 40 },
2959 .vactive
= { 480, 480, 480 },
2960 .vfront_porch
= { 7, 22, 147 },
2961 .vback_porch
= { 23, 23, 23 },
2962 .vsync_len
= { 1, 10, 20 },
2963 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
2964 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
2965 DISPLAY_FLAGS_SYNC_POSEDGE
,
2968 static const struct panel_desc logictechno_lt161010_2nh
= {
2969 .timings
= &logictechno_lt161010_2nh_timing
,
2976 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
2977 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
|
2978 DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
2979 DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE
,
2980 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
2983 static const struct display_timing logictechno_lt170410_2whc_timing
= {
2984 .pixelclock
= { 68900000, 71100000, 73400000 },
2985 .hactive
= { 1280, 1280, 1280 },
2986 .hfront_porch
= { 23, 60, 71 },
2987 .hback_porch
= { 23, 60, 71 },
2988 .hsync_len
= { 15, 40, 47 },
2989 .vactive
= { 800, 800, 800 },
2990 .vfront_porch
= { 5, 7, 10 },
2991 .vback_porch
= { 5, 7, 10 },
2992 .vsync_len
= { 6, 9, 12 },
2993 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
2994 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
2995 DISPLAY_FLAGS_SYNC_POSEDGE
,
2998 static const struct panel_desc logictechno_lt170410_2whc
= {
2999 .timings
= &logictechno_lt170410_2whc_timing
,
3006 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3007 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
3008 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3011 static const struct drm_display_mode logictechno_lttd800480070_l2rt_mode
= {
3014 .hsync_start
= 800 + 112,
3015 .hsync_end
= 800 + 112 + 3,
3016 .htotal
= 800 + 112 + 3 + 85,
3018 .vsync_start
= 480 + 38,
3019 .vsync_end
= 480 + 38 + 3,
3020 .vtotal
= 480 + 38 + 3 + 29,
3021 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3024 static const struct panel_desc logictechno_lttd800480070_l2rt
= {
3025 .modes
= &logictechno_lttd800480070_l2rt_mode
,
3038 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3039 .bus_flags
= DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
3040 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3043 static const struct drm_display_mode logictechno_lttd800480070_l6wh_rt_mode
= {
3046 .hsync_start
= 800 + 154,
3047 .hsync_end
= 800 + 154 + 3,
3048 .htotal
= 800 + 154 + 3 + 43,
3050 .vsync_start
= 480 + 47,
3051 .vsync_end
= 480 + 47 + 3,
3052 .vtotal
= 480 + 47 + 3 + 20,
3053 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3056 static const struct panel_desc logictechno_lttd800480070_l6wh_rt
= {
3057 .modes
= &logictechno_lttd800480070_l6wh_rt_mode
,
3070 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3071 .bus_flags
= DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
3072 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3075 static const struct drm_display_mode logicpd_type_28_mode
= {
3078 .hsync_start
= 480 + 3,
3079 .hsync_end
= 480 + 3 + 42,
3080 .htotal
= 480 + 3 + 42 + 2,
3083 .vsync_start
= 272 + 2,
3084 .vsync_end
= 272 + 2 + 11,
3085 .vtotal
= 272 + 2 + 11 + 3,
3086 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_PVSYNC
,
3089 static const struct panel_desc logicpd_type_28
= {
3090 .modes
= &logicpd_type_28_mode
,
3103 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3104 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
|
3105 DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE
,
3106 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3109 static const struct drm_display_mode microtips_mf_101hiebcaf0_c_mode
= {
3112 .hsync_start
= 1920 + 32,
3113 .hsync_end
= 1920 + 32 + 52,
3114 .htotal
= 1920 + 32 + 52 + 24,
3116 .vsync_start
= 1200 + 24,
3117 .vsync_end
= 1200 + 24 + 8,
3118 .vtotal
= 1200 + 24 + 8 + 3,
3121 static const struct panel_desc microtips_mf_101hiebcaf0_c
= {
3122 .modes
= µtips_mf_101hiebcaf0_c_mode
,
3133 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
3134 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3135 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3138 static const struct drm_display_mode microtips_mf_103hieb0ga0_mode
= {
3141 .hsync_start
= 1920 + 72,
3142 .hsync_end
= 1920 + 72 + 72,
3143 .htotal
= 1920 + 72 + 72 + 72,
3145 .vsync_start
= 720 + 3,
3146 .vsync_end
= 720 + 3 + 3,
3147 .vtotal
= 720 + 3 + 3 + 2,
3150 static const struct panel_desc microtips_mf_103hieb0ga0
= {
3151 .modes
= µtips_mf_103hieb0ga0_mode
,
3162 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
3163 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3164 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3167 static const struct drm_display_mode mitsubishi_aa070mc01_mode
= {
3170 .hsync_start
= 800 + 0,
3171 .hsync_end
= 800 + 1,
3172 .htotal
= 800 + 0 + 1 + 160,
3174 .vsync_start
= 480 + 0,
3175 .vsync_end
= 480 + 48 + 1,
3176 .vtotal
= 480 + 48 + 1 + 0,
3177 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
3180 static const struct panel_desc mitsubishi_aa070mc01
= {
3181 .modes
= &mitsubishi_aa070mc01_mode
,
3194 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3195 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3196 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
3199 static const struct drm_display_mode mitsubishi_aa084xe01_mode
= {
3202 .hsync_start
= 1024 + 24,
3203 .hsync_end
= 1024 + 24 + 63,
3204 .htotal
= 1024 + 24 + 63 + 1,
3206 .vsync_start
= 768 + 3,
3207 .vsync_end
= 768 + 3 + 6,
3208 .vtotal
= 768 + 3 + 6 + 1,
3209 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_PVSYNC
,
3212 static const struct panel_desc mitsubishi_aa084xe01
= {
3213 .modes
= &mitsubishi_aa084xe01_mode
,
3220 .bus_format
= MEDIA_BUS_FMT_RGB565_1X16
,
3221 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3222 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
3225 static const struct display_timing multi_inno_mi0700s4t_6_timing
= {
3226 .pixelclock
= { 29000000, 33000000, 38000000 },
3227 .hactive
= { 800, 800, 800 },
3228 .hfront_porch
= { 180, 210, 240 },
3229 .hback_porch
= { 16, 16, 16 },
3230 .hsync_len
= { 30, 30, 30 },
3231 .vactive
= { 480, 480, 480 },
3232 .vfront_porch
= { 12, 22, 32 },
3233 .vback_porch
= { 10, 10, 10 },
3234 .vsync_len
= { 13, 13, 13 },
3235 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
3236 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
3237 DISPLAY_FLAGS_SYNC_POSEDGE
,
3240 static const struct panel_desc multi_inno_mi0700s4t_6
= {
3241 .timings
= &multi_inno_mi0700s4t_6_timing
,
3248 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3249 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
|
3250 DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
3251 DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE
,
3252 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3255 static const struct display_timing multi_inno_mi0800ft_9_timing
= {
3256 .pixelclock
= { 32000000, 40000000, 50000000 },
3257 .hactive
= { 800, 800, 800 },
3258 .hfront_porch
= { 16, 210, 354 },
3259 .hback_porch
= { 6, 26, 45 },
3260 .hsync_len
= { 1, 20, 40 },
3261 .vactive
= { 600, 600, 600 },
3262 .vfront_porch
= { 1, 12, 77 },
3263 .vback_porch
= { 3, 13, 22 },
3264 .vsync_len
= { 1, 10, 20 },
3265 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
3266 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
3267 DISPLAY_FLAGS_SYNC_POSEDGE
,
3270 static const struct panel_desc multi_inno_mi0800ft_9
= {
3271 .timings
= &multi_inno_mi0800ft_9_timing
,
3278 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3279 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
|
3280 DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
3281 DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE
,
3282 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3285 static const struct display_timing multi_inno_mi1010ait_1cp_timing
= {
3286 .pixelclock
= { 68900000, 70000000, 73400000 },
3287 .hactive
= { 1280, 1280, 1280 },
3288 .hfront_porch
= { 30, 60, 71 },
3289 .hback_porch
= { 30, 60, 71 },
3290 .hsync_len
= { 10, 10, 48 },
3291 .vactive
= { 800, 800, 800 },
3292 .vfront_porch
= { 5, 10, 10 },
3293 .vback_porch
= { 5, 10, 10 },
3294 .vsync_len
= { 5, 6, 13 },
3295 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
3296 DISPLAY_FLAGS_DE_HIGH
,
3299 static const struct panel_desc multi_inno_mi1010ait_1cp
= {
3300 .timings
= &multi_inno_mi1010ait_1cp_timing
,
3311 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3312 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
3313 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3316 static const struct display_timing nec_nl12880bc20_05_timing
= {
3317 .pixelclock
= { 67000000, 71000000, 75000000 },
3318 .hactive
= { 1280, 1280, 1280 },
3319 .hfront_porch
= { 2, 30, 30 },
3320 .hback_porch
= { 6, 100, 100 },
3321 .hsync_len
= { 2, 30, 30 },
3322 .vactive
= { 800, 800, 800 },
3323 .vfront_porch
= { 5, 5, 5 },
3324 .vback_porch
= { 11, 11, 11 },
3325 .vsync_len
= { 7, 7, 7 },
3328 static const struct panel_desc nec_nl12880bc20_05
= {
3329 .timings
= &nec_nl12880bc20_05_timing
,
3340 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3341 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3344 static const struct drm_display_mode nec_nl4827hc19_05b_mode
= {
3347 .hsync_start
= 480 + 2,
3348 .hsync_end
= 480 + 2 + 41,
3349 .htotal
= 480 + 2 + 41 + 2,
3351 .vsync_start
= 272 + 2,
3352 .vsync_end
= 272 + 2 + 4,
3353 .vtotal
= 272 + 2 + 4 + 2,
3354 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3357 static const struct panel_desc nec_nl4827hc19_05b
= {
3358 .modes
= &nec_nl4827hc19_05b_mode
,
3365 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3366 .bus_flags
= DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
3369 static const struct drm_display_mode netron_dy_e231732_mode
= {
3372 .hsync_start
= 1024 + 160,
3373 .hsync_end
= 1024 + 160 + 70,
3374 .htotal
= 1024 + 160 + 70 + 90,
3376 .vsync_start
= 600 + 127,
3377 .vsync_end
= 600 + 127 + 20,
3378 .vtotal
= 600 + 127 + 20 + 3,
3381 static const struct panel_desc netron_dy_e231732
= {
3382 .modes
= &netron_dy_e231732_mode
,
3388 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
3391 static const struct drm_display_mode newhaven_nhd_43_480272ef_atxl_mode
= {
3394 .hsync_start
= 480 + 2,
3395 .hsync_end
= 480 + 2 + 41,
3396 .htotal
= 480 + 2 + 41 + 2,
3398 .vsync_start
= 272 + 2,
3399 .vsync_end
= 272 + 2 + 10,
3400 .vtotal
= 272 + 2 + 10 + 2,
3401 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3404 static const struct panel_desc newhaven_nhd_43_480272ef_atxl
= {
3405 .modes
= &newhaven_nhd_43_480272ef_atxl_mode
,
3412 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3413 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
|
3414 DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE
,
3415 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3418 static const struct display_timing nlt_nl192108ac18_02d_timing
= {
3419 .pixelclock
= { 130000000, 148350000, 163000000 },
3420 .hactive
= { 1920, 1920, 1920 },
3421 .hfront_porch
= { 80, 100, 100 },
3422 .hback_porch
= { 100, 120, 120 },
3423 .hsync_len
= { 50, 60, 60 },
3424 .vactive
= { 1080, 1080, 1080 },
3425 .vfront_porch
= { 12, 30, 30 },
3426 .vback_porch
= { 4, 10, 10 },
3427 .vsync_len
= { 4, 5, 5 },
3430 static const struct panel_desc nlt_nl192108ac18_02d
= {
3431 .timings
= &nlt_nl192108ac18_02d_timing
,
3441 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3442 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3445 static const struct drm_display_mode nvd_9128_mode
= {
3448 .hsync_start
= 800 + 130,
3449 .hsync_end
= 800 + 130 + 98,
3450 .htotal
= 800 + 0 + 130 + 98,
3452 .vsync_start
= 480 + 10,
3453 .vsync_end
= 480 + 10 + 50,
3454 .vtotal
= 480 + 0 + 10 + 50,
3457 static const struct panel_desc nvd_9128
= {
3458 .modes
= &nvd_9128_mode
,
3465 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3466 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3469 static const struct display_timing okaya_rs800480t_7x0gp_timing
= {
3470 .pixelclock
= { 30000000, 30000000, 40000000 },
3471 .hactive
= { 800, 800, 800 },
3472 .hfront_porch
= { 40, 40, 40 },
3473 .hback_porch
= { 40, 40, 40 },
3474 .hsync_len
= { 1, 48, 48 },
3475 .vactive
= { 480, 480, 480 },
3476 .vfront_porch
= { 13, 13, 13 },
3477 .vback_porch
= { 29, 29, 29 },
3478 .vsync_len
= { 3, 3, 3 },
3479 .flags
= DISPLAY_FLAGS_DE_HIGH
,
3482 static const struct panel_desc okaya_rs800480t_7x0gp
= {
3483 .timings
= &okaya_rs800480t_7x0gp_timing
,
3496 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
3499 static const struct drm_display_mode olimex_lcd_olinuxino_43ts_mode
= {
3502 .hsync_start
= 480 + 5,
3503 .hsync_end
= 480 + 5 + 30,
3504 .htotal
= 480 + 5 + 30 + 10,
3506 .vsync_start
= 272 + 8,
3507 .vsync_end
= 272 + 8 + 5,
3508 .vtotal
= 272 + 8 + 5 + 3,
3511 static const struct panel_desc olimex_lcd_olinuxino_43ts
= {
3512 .modes
= &olimex_lcd_olinuxino_43ts_mode
,
3518 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3521 static const struct display_timing ontat_kd50g21_40nt_a1_timing
= {
3522 .pixelclock
= { 30000000, 30000000, 50000000 },
3523 .hactive
= { 800, 800, 800 },
3524 .hfront_porch
= { 1, 40, 255 },
3525 .hback_porch
= { 1, 40, 87 },
3526 .hsync_len
= { 1, 48, 87 },
3527 .vactive
= { 480, 480, 480 },
3528 .vfront_porch
= { 1, 13, 255 },
3529 .vback_porch
= { 1, 29, 29 },
3530 .vsync_len
= { 3, 3, 31 },
3531 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
3532 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
,
3535 static const struct panel_desc ontat_kd50g21_40nt_a1
= {
3536 .timings
= &ontat_kd50g21_40nt_a1_timing
,
3544 .prepare
= 147, /* 5 VSDs */
3545 .enable
= 147, /* 5 VSDs */
3546 .disable
= 88, /* 3 VSDs */
3547 .unprepare
= 117, /* 4 VSDs */
3549 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3550 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
3551 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3555 * 800x480 CVT. The panel appears to be quite accepting, at least as far as
3556 * pixel clocks, but this is the timing that was being used in the Adafruit
3557 * installation instructions.
3559 static const struct drm_display_mode ontat_yx700wv03_mode
= {
3569 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3574 * https://www.adafruit.com/images/product-files/2406/c3163.pdf
3576 static const struct panel_desc ontat_yx700wv03
= {
3577 .modes
= &ontat_yx700wv03_mode
,
3584 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
3587 static const struct drm_display_mode ortustech_com37h3m_mode
= {
3590 .hsync_start
= 480 + 40,
3591 .hsync_end
= 480 + 40 + 10,
3592 .htotal
= 480 + 40 + 10 + 40,
3594 .vsync_start
= 640 + 4,
3595 .vsync_end
= 640 + 4 + 2,
3596 .vtotal
= 640 + 4 + 2 + 4,
3597 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3600 static const struct panel_desc ortustech_com37h3m
= {
3601 .modes
= &ortustech_com37h3m_mode
,
3605 .width
= 56, /* 56.16mm */
3606 .height
= 75, /* 74.88mm */
3608 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3609 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
3610 DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE
,
3613 static const struct drm_display_mode ortustech_com43h4m85ulc_mode
= {
3616 .hsync_start
= 480 + 10,
3617 .hsync_end
= 480 + 10 + 10,
3618 .htotal
= 480 + 10 + 10 + 15,
3620 .vsync_start
= 800 + 3,
3621 .vsync_end
= 800 + 3 + 3,
3622 .vtotal
= 800 + 3 + 3 + 3,
3625 static const struct panel_desc ortustech_com43h4m85ulc
= {
3626 .modes
= &ortustech_com43h4m85ulc_mode
,
3633 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
3634 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
3635 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3638 static const struct drm_display_mode osddisplays_osd070t1718_19ts_mode
= {
3641 .hsync_start
= 800 + 210,
3642 .hsync_end
= 800 + 210 + 30,
3643 .htotal
= 800 + 210 + 30 + 16,
3645 .vsync_start
= 480 + 22,
3646 .vsync_end
= 480 + 22 + 13,
3647 .vtotal
= 480 + 22 + 13 + 10,
3648 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3651 static const struct panel_desc osddisplays_osd070t1718_19ts
= {
3652 .modes
= &osddisplays_osd070t1718_19ts_mode
,
3659 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3660 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
|
3661 DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE
,
3662 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3665 static const struct drm_display_mode pda_91_00156_a0_mode
= {
3668 .hsync_start
= 800 + 1,
3669 .hsync_end
= 800 + 1 + 64,
3670 .htotal
= 800 + 1 + 64 + 64,
3672 .vsync_start
= 480 + 1,
3673 .vsync_end
= 480 + 1 + 23,
3674 .vtotal
= 480 + 1 + 23 + 22,
3677 static const struct panel_desc pda_91_00156_a0
= {
3678 .modes
= &pda_91_00156_a0_mode
,
3684 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3687 static const struct drm_display_mode powertip_ph128800t006_zhc01_mode
= {
3690 .hsync_start
= 1280 + 12,
3691 .hsync_end
= 1280 + 12 + 20,
3692 .htotal
= 1280 + 12 + 20 + 56,
3694 .vsync_start
= 800 + 1,
3695 .vsync_end
= 800 + 1 + 3,
3696 .vtotal
= 800 + 1 + 3 + 20,
3697 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_PVSYNC
,
3700 static const struct panel_desc powertip_ph128800t006_zhc01
= {
3701 .modes
= &powertip_ph128800t006_zhc01_mode
,
3708 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3709 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
3710 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3713 static const struct drm_display_mode powertip_ph800480t013_idf02_mode
= {
3716 .hsync_start
= 800 + 54,
3717 .hsync_end
= 800 + 54 + 2,
3718 .htotal
= 800 + 54 + 2 + 44,
3720 .vsync_start
= 480 + 49,
3721 .vsync_end
= 480 + 49 + 2,
3722 .vtotal
= 480 + 49 + 2 + 22,
3723 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3726 static const struct panel_desc powertip_ph800480t013_idf02
= {
3727 .modes
= &powertip_ph800480t013_idf02_mode
,
3734 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
|
3735 DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
3736 DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE
,
3737 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3738 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3741 static const struct drm_display_mode primeview_pm070wl4_mode
= {
3744 .hsync_start
= 800 + 42,
3745 .hsync_end
= 800 + 42 + 128,
3746 .htotal
= 800 + 42 + 128 + 86,
3748 .vsync_start
= 480 + 10,
3749 .vsync_end
= 480 + 10 + 2,
3750 .vtotal
= 480 + 10 + 2 + 33,
3751 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
3754 static const struct panel_desc primeview_pm070wl4
= {
3755 .modes
= &primeview_pm070wl4_mode
,
3762 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
,
3763 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
3764 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3767 static const struct drm_display_mode qd43003c0_40_mode
= {
3770 .hsync_start
= 480 + 8,
3771 .hsync_end
= 480 + 8 + 4,
3772 .htotal
= 480 + 8 + 4 + 39,
3774 .vsync_start
= 272 + 4,
3775 .vsync_end
= 272 + 4 + 10,
3776 .vtotal
= 272 + 4 + 10 + 2,
3779 static const struct panel_desc qd43003c0_40
= {
3780 .modes
= &qd43003c0_40_mode
,
3787 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3790 static const struct drm_display_mode qishenglong_gopher2b_lcd_modes
[] = {
3794 .hsync_start
= 480 + 77,
3795 .hsync_end
= 480 + 77 + 41,
3796 .htotal
= 480 + 77 + 41 + 2,
3798 .vsync_start
= 272 + 16,
3799 .vsync_end
= 272 + 16 + 10,
3800 .vtotal
= 272 + 16 + 10 + 2,
3801 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3806 .hsync_start
= 480 + 17,
3807 .hsync_end
= 480 + 17 + 41,
3808 .htotal
= 480 + 17 + 41 + 2,
3810 .vsync_start
= 272 + 116,
3811 .vsync_end
= 272 + 116 + 10,
3812 .vtotal
= 272 + 116 + 10 + 2,
3813 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
3817 static const struct panel_desc qishenglong_gopher2b_lcd
= {
3818 .modes
= qishenglong_gopher2b_lcd_modes
,
3819 .num_modes
= ARRAY_SIZE(qishenglong_gopher2b_lcd_modes
),
3825 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3826 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
3827 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3830 static const struct display_timing rocktech_rk043fn48h_timing
= {
3831 .pixelclock
= { 6000000, 9000000, 12000000 },
3832 .hactive
= { 480, 480, 480 },
3833 .hback_porch
= { 8, 43, 43 },
3834 .hfront_porch
= { 2, 8, 10 },
3835 .hsync_len
= { 1, 1, 1 },
3836 .vactive
= { 272, 272, 272 },
3837 .vback_porch
= { 2, 12, 26 },
3838 .vfront_porch
= { 1, 4, 4 },
3839 .vsync_len
= { 1, 10, 10 },
3840 .flags
= DISPLAY_FLAGS_VSYNC_LOW
| DISPLAY_FLAGS_HSYNC_LOW
|
3841 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
3842 DISPLAY_FLAGS_SYNC_POSEDGE
,
3845 static const struct panel_desc rocktech_rk043fn48h
= {
3846 .timings
= &rocktech_rk043fn48h_timing
,
3853 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
3854 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
3857 static const struct display_timing rocktech_rk070er9427_timing
= {
3858 .pixelclock
= { 26400000, 33300000, 46800000 },
3859 .hactive
= { 800, 800, 800 },
3860 .hfront_porch
= { 16, 210, 354 },
3861 .hback_porch
= { 46, 46, 46 },
3862 .hsync_len
= { 1, 1, 1 },
3863 .vactive
= { 480, 480, 480 },
3864 .vfront_porch
= { 7, 22, 147 },
3865 .vback_porch
= { 23, 23, 23 },
3866 .vsync_len
= { 1, 1, 1 },
3867 .flags
= DISPLAY_FLAGS_DE_HIGH
,
3870 static const struct panel_desc rocktech_rk070er9427
= {
3871 .timings
= &rocktech_rk070er9427_timing
,
3884 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
3887 static const struct drm_display_mode rocktech_rk101ii01d_ct_mode
= {
3890 .hsync_start
= 1280 + 48,
3891 .hsync_end
= 1280 + 48 + 32,
3892 .htotal
= 1280 + 48 + 32 + 80,
3894 .vsync_start
= 800 + 2,
3895 .vsync_end
= 800 + 2 + 5,
3896 .vtotal
= 800 + 2 + 5 + 16,
3899 static const struct panel_desc rocktech_rk101ii01d_ct
= {
3900 .modes
= &rocktech_rk101ii01d_ct_mode
,
3911 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
3912 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3913 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3916 static const struct display_timing samsung_ltl101al01_timing
= {
3917 .pixelclock
= { 66663000, 66663000, 66663000 },
3918 .hactive
= { 1280, 1280, 1280 },
3919 .hfront_porch
= { 18, 18, 18 },
3920 .hback_porch
= { 36, 36, 36 },
3921 .hsync_len
= { 16, 16, 16 },
3922 .vactive
= { 800, 800, 800 },
3923 .vfront_porch
= { 4, 4, 4 },
3924 .vback_porch
= { 16, 16, 16 },
3925 .vsync_len
= { 3, 3, 3 },
3926 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
,
3929 static const struct panel_desc samsung_ltl101al01
= {
3930 .timings
= &samsung_ltl101al01_timing
,
3943 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3944 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3947 static const struct drm_display_mode samsung_ltn101nt05_mode
= {
3950 .hsync_start
= 1024 + 24,
3951 .hsync_end
= 1024 + 24 + 136,
3952 .htotal
= 1024 + 24 + 136 + 160,
3954 .vsync_start
= 600 + 3,
3955 .vsync_end
= 600 + 3 + 6,
3956 .vtotal
= 600 + 3 + 6 + 61,
3959 static const struct panel_desc samsung_ltn101nt05
= {
3960 .modes
= &samsung_ltn101nt05_mode
,
3967 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
3968 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
3969 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3972 static const struct display_timing satoz_sat050at40h12r2_timing
= {
3973 .pixelclock
= {33300000, 33300000, 50000000},
3974 .hactive
= {800, 800, 800},
3975 .hfront_porch
= {16, 210, 354},
3976 .hback_porch
= {46, 46, 46},
3977 .hsync_len
= {1, 1, 40},
3978 .vactive
= {480, 480, 480},
3979 .vfront_porch
= {7, 22, 147},
3980 .vback_porch
= {23, 23, 23},
3981 .vsync_len
= {1, 1, 20},
3984 static const struct panel_desc satoz_sat050at40h12r2
= {
3985 .timings
= &satoz_sat050at40h12r2_timing
,
3992 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
3993 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
3996 static const struct drm_display_mode sharp_lq070y3dg3b_mode
= {
3999 .hsync_start
= 800 + 64,
4000 .hsync_end
= 800 + 64 + 128,
4001 .htotal
= 800 + 64 + 128 + 64,
4003 .vsync_start
= 480 + 8,
4004 .vsync_end
= 480 + 8 + 2,
4005 .vtotal
= 480 + 8 + 2 + 35,
4006 .flags
= DISPLAY_FLAGS_PIXDATA_POSEDGE
,
4009 static const struct panel_desc sharp_lq070y3dg3b
= {
4010 .modes
= &sharp_lq070y3dg3b_mode
,
4014 .width
= 152, /* 152.4mm */
4015 .height
= 91, /* 91.4mm */
4017 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
4018 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
4019 DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE
,
4022 static const struct drm_display_mode sharp_lq035q7db03_mode
= {
4025 .hsync_start
= 240 + 16,
4026 .hsync_end
= 240 + 16 + 7,
4027 .htotal
= 240 + 16 + 7 + 5,
4029 .vsync_start
= 320 + 9,
4030 .vsync_end
= 320 + 9 + 1,
4031 .vtotal
= 320 + 9 + 1 + 7,
4034 static const struct panel_desc sharp_lq035q7db03
= {
4035 .modes
= &sharp_lq035q7db03_mode
,
4042 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
4045 static const struct display_timing sharp_lq101k1ly04_timing
= {
4046 .pixelclock
= { 60000000, 65000000, 80000000 },
4047 .hactive
= { 1280, 1280, 1280 },
4048 .hfront_porch
= { 20, 20, 20 },
4049 .hback_porch
= { 20, 20, 20 },
4050 .hsync_len
= { 10, 10, 10 },
4051 .vactive
= { 800, 800, 800 },
4052 .vfront_porch
= { 4, 4, 4 },
4053 .vback_porch
= { 4, 4, 4 },
4054 .vsync_len
= { 4, 4, 4 },
4055 .flags
= DISPLAY_FLAGS_PIXDATA_POSEDGE
,
4058 static const struct panel_desc sharp_lq101k1ly04
= {
4059 .timings
= &sharp_lq101k1ly04_timing
,
4066 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA
,
4067 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
4070 static const struct drm_display_mode sharp_ls020b1dd01d_modes
[] = {
4074 .hsync_start
= 240 + 58,
4075 .hsync_end
= 240 + 58 + 1,
4076 .htotal
= 240 + 58 + 1 + 1,
4078 .vsync_start
= 160 + 24,
4079 .vsync_end
= 160 + 24 + 10,
4080 .vtotal
= 160 + 24 + 10 + 6,
4081 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_NVSYNC
,
4086 .hsync_start
= 240 + 8,
4087 .hsync_end
= 240 + 8 + 1,
4088 .htotal
= 240 + 8 + 1 + 1,
4090 .vsync_start
= 160 + 24,
4091 .vsync_end
= 160 + 24 + 10,
4092 .vtotal
= 160 + 24 + 10 + 6,
4093 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_NVSYNC
,
4097 static const struct panel_desc sharp_ls020b1dd01d
= {
4098 .modes
= sharp_ls020b1dd01d_modes
,
4099 .num_modes
= ARRAY_SIZE(sharp_ls020b1dd01d_modes
),
4105 .bus_format
= MEDIA_BUS_FMT_RGB565_1X16
,
4106 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
4107 | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
4108 | DRM_BUS_FLAG_SHARP_SIGNALS
,
4111 static const struct drm_display_mode shelly_sca07010_bfn_lnn_mode
= {
4114 .hsync_start
= 800 + 1,
4115 .hsync_end
= 800 + 1 + 64,
4116 .htotal
= 800 + 1 + 64 + 64,
4118 .vsync_start
= 480 + 1,
4119 .vsync_end
= 480 + 1 + 23,
4120 .vtotal
= 480 + 1 + 23 + 22,
4123 static const struct panel_desc shelly_sca07010_bfn_lnn
= {
4124 .modes
= &shelly_sca07010_bfn_lnn_mode
,
4130 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
4133 static const struct drm_display_mode starry_kr070pe2t_mode
= {
4136 .hsync_start
= 800 + 209,
4137 .hsync_end
= 800 + 209 + 1,
4138 .htotal
= 800 + 209 + 1 + 45,
4140 .vsync_start
= 480 + 22,
4141 .vsync_end
= 480 + 22 + 1,
4142 .vtotal
= 480 + 22 + 1 + 22,
4145 static const struct panel_desc starry_kr070pe2t
= {
4146 .modes
= &starry_kr070pe2t_mode
,
4153 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
4154 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE
,
4155 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
4158 static const struct display_timing startek_kd070wvfpa_mode
= {
4159 .pixelclock
= { 25200000, 27200000, 30500000 },
4160 .hactive
= { 800, 800, 800 },
4161 .hfront_porch
= { 19, 44, 115 },
4162 .hback_porch
= { 5, 16, 101 },
4163 .hsync_len
= { 1, 2, 100 },
4164 .vactive
= { 480, 480, 480 },
4165 .vfront_porch
= { 5, 43, 67 },
4166 .vback_porch
= { 5, 5, 67 },
4167 .vsync_len
= { 1, 2, 66 },
4168 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
4169 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
|
4170 DISPLAY_FLAGS_SYNC_POSEDGE
,
4173 static const struct panel_desc startek_kd070wvfpa
= {
4174 .timings
= &startek_kd070wvfpa_mode
,
4186 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
4187 .connector_type
= DRM_MODE_CONNECTOR_DPI
,
4188 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
|
4189 DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
|
4190 DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE
,
4193 static const struct display_timing tsd_tst043015cmhx_timing
= {
4194 .pixelclock
= { 5000000, 9000000, 12000000 },
4195 .hactive
= { 480, 480, 480 },
4196 .hfront_porch
= { 4, 5, 65 },
4197 .hback_porch
= { 36, 40, 255 },
4198 .hsync_len
= { 1, 1, 1 },
4199 .vactive
= { 272, 272, 272 },
4200 .vfront_porch
= { 2, 8, 97 },
4201 .vback_porch
= { 3, 8, 31 },
4202 .vsync_len
= { 1, 1, 1 },
4204 .flags
= DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
|
4205 DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_POSEDGE
,
4208 static const struct panel_desc tsd_tst043015cmhx
= {
4209 .timings
= &tsd_tst043015cmhx_timing
,
4216 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
4217 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
4220 static const struct drm_display_mode tfc_s9700rtwv43tr_01b_mode
= {
4223 .hsync_start
= 800 + 39,
4224 .hsync_end
= 800 + 39 + 47,
4225 .htotal
= 800 + 39 + 47 + 39,
4227 .vsync_start
= 480 + 13,
4228 .vsync_end
= 480 + 13 + 2,
4229 .vtotal
= 480 + 13 + 2 + 29,
4232 static const struct panel_desc tfc_s9700rtwv43tr_01b
= {
4233 .modes
= &tfc_s9700rtwv43tr_01b_mode
,
4240 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
4241 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
4244 static const struct display_timing tianma_tm070jdhg30_timing
= {
4245 .pixelclock
= { 62600000, 68200000, 78100000 },
4246 .hactive
= { 1280, 1280, 1280 },
4247 .hfront_porch
= { 15, 64, 159 },
4248 .hback_porch
= { 5, 5, 5 },
4249 .hsync_len
= { 1, 1, 256 },
4250 .vactive
= { 800, 800, 800 },
4251 .vfront_porch
= { 3, 40, 99 },
4252 .vback_porch
= { 2, 2, 2 },
4253 .vsync_len
= { 1, 1, 128 },
4254 .flags
= DISPLAY_FLAGS_DE_HIGH
,
4257 static const struct panel_desc tianma_tm070jdhg30
= {
4258 .timings
= &tianma_tm070jdhg30_timing
,
4265 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
4266 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
4267 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
4270 static const struct panel_desc tianma_tm070jvhg33
= {
4271 .timings
= &tianma_tm070jdhg30_timing
,
4278 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
4279 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
4280 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
4283 static const struct display_timing tianma_tm070rvhg71_timing
= {
4284 .pixelclock
= { 27700000, 29200000, 39600000 },
4285 .hactive
= { 800, 800, 800 },
4286 .hfront_porch
= { 12, 40, 212 },
4287 .hback_porch
= { 88, 88, 88 },
4288 .hsync_len
= { 1, 1, 40 },
4289 .vactive
= { 480, 480, 480 },
4290 .vfront_porch
= { 1, 13, 88 },
4291 .vback_porch
= { 32, 32, 32 },
4292 .vsync_len
= { 1, 1, 3 },
4293 .flags
= DISPLAY_FLAGS_DE_HIGH
,
4296 static const struct panel_desc tianma_tm070rvhg71
= {
4297 .timings
= &tianma_tm070rvhg71_timing
,
4304 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
4305 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
4308 static const struct drm_display_mode ti_nspire_cx_lcd_mode
[] = {
4312 .hsync_start
= 320 + 50,
4313 .hsync_end
= 320 + 50 + 6,
4314 .htotal
= 320 + 50 + 6 + 38,
4316 .vsync_start
= 240 + 3,
4317 .vsync_end
= 240 + 3 + 1,
4318 .vtotal
= 240 + 3 + 1 + 17,
4319 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
4323 static const struct panel_desc ti_nspire_cx_lcd_panel
= {
4324 .modes
= ti_nspire_cx_lcd_mode
,
4331 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
4332 .bus_flags
= DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
,
4335 static const struct drm_display_mode ti_nspire_classic_lcd_mode
[] = {
4339 .hsync_start
= 320 + 6,
4340 .hsync_end
= 320 + 6 + 6,
4341 .htotal
= 320 + 6 + 6 + 6,
4343 .vsync_start
= 240 + 0,
4344 .vsync_end
= 240 + 0 + 1,
4345 .vtotal
= 240 + 0 + 1 + 0,
4346 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_PVSYNC
,
4350 static const struct panel_desc ti_nspire_classic_lcd_panel
= {
4351 .modes
= ti_nspire_classic_lcd_mode
,
4353 /* The grayscale panel has 8 bit for the color .. Y (black) */
4359 /* This is the grayscale bus format */
4360 .bus_format
= MEDIA_BUS_FMT_Y8_1X8
,
4361 .bus_flags
= DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
4364 static const struct drm_display_mode toshiba_lt089ac29000_mode
= {
4367 .hsync_start
= 1280 + 192,
4368 .hsync_end
= 1280 + 192 + 128,
4369 .htotal
= 1280 + 192 + 128 + 64,
4371 .vsync_start
= 768 + 20,
4372 .vsync_end
= 768 + 20 + 7,
4373 .vtotal
= 768 + 20 + 7 + 3,
4376 static const struct panel_desc toshiba_lt089ac29000
= {
4377 .modes
= &toshiba_lt089ac29000_mode
,
4383 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA
,
4384 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
4385 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
4388 static const struct drm_display_mode tpk_f07a_0102_mode
= {
4391 .hsync_start
= 800 + 40,
4392 .hsync_end
= 800 + 40 + 128,
4393 .htotal
= 800 + 40 + 128 + 88,
4395 .vsync_start
= 480 + 10,
4396 .vsync_end
= 480 + 10 + 2,
4397 .vtotal
= 480 + 10 + 2 + 33,
4400 static const struct panel_desc tpk_f07a_0102
= {
4401 .modes
= &tpk_f07a_0102_mode
,
4407 .bus_flags
= DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
,
4410 static const struct drm_display_mode tpk_f10a_0102_mode
= {
4413 .hsync_start
= 1024 + 176,
4414 .hsync_end
= 1024 + 176 + 5,
4415 .htotal
= 1024 + 176 + 5 + 88,
4417 .vsync_start
= 600 + 20,
4418 .vsync_end
= 600 + 20 + 5,
4419 .vtotal
= 600 + 20 + 5 + 25,
4422 static const struct panel_desc tpk_f10a_0102
= {
4423 .modes
= &tpk_f10a_0102_mode
,
4431 static const struct display_timing urt_umsh_8596md_timing
= {
4432 .pixelclock
= { 33260000, 33260000, 33260000 },
4433 .hactive
= { 800, 800, 800 },
4434 .hfront_porch
= { 41, 41, 41 },
4435 .hback_porch
= { 216 - 128, 216 - 128, 216 - 128 },
4436 .hsync_len
= { 71, 128, 128 },
4437 .vactive
= { 480, 480, 480 },
4438 .vfront_porch
= { 10, 10, 10 },
4439 .vback_porch
= { 35 - 2, 35 - 2, 35 - 2 },
4440 .vsync_len
= { 2, 2, 2 },
4441 .flags
= DISPLAY_FLAGS_DE_HIGH
| DISPLAY_FLAGS_PIXDATA_NEGEDGE
|
4442 DISPLAY_FLAGS_HSYNC_LOW
| DISPLAY_FLAGS_VSYNC_LOW
,
4445 static const struct panel_desc urt_umsh_8596md_lvds
= {
4446 .timings
= &urt_umsh_8596md_timing
,
4453 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
4454 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
4457 static const struct panel_desc urt_umsh_8596md_parallel
= {
4458 .timings
= &urt_umsh_8596md_timing
,
4465 .bus_format
= MEDIA_BUS_FMT_RGB666_1X18
,
4468 static const struct drm_display_mode vivax_tpc9150_panel_mode
= {
4471 .hsync_start
= 1024 + 160,
4472 .hsync_end
= 1024 + 160 + 100,
4473 .htotal
= 1024 + 160 + 100 + 60,
4475 .vsync_start
= 600 + 12,
4476 .vsync_end
= 600 + 12 + 10,
4477 .vtotal
= 600 + 12 + 10 + 13,
4480 static const struct panel_desc vivax_tpc9150_panel
= {
4481 .modes
= &vivax_tpc9150_panel_mode
,
4488 .bus_format
= MEDIA_BUS_FMT_RGB666_1X7X3_SPWG
,
4489 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
4490 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
4493 static const struct drm_display_mode vl050_8048nt_c01_mode
= {
4496 .hsync_start
= 800 + 210,
4497 .hsync_end
= 800 + 210 + 20,
4498 .htotal
= 800 + 210 + 20 + 46,
4500 .vsync_start
= 480 + 22,
4501 .vsync_end
= 480 + 22 + 10,
4502 .vtotal
= 480 + 22 + 10 + 23,
4503 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
4506 static const struct panel_desc vl050_8048nt_c01
= {
4507 .modes
= &vl050_8048nt_c01_mode
,
4514 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
4515 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
| DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE
,
4518 static const struct drm_display_mode winstar_wf35ltiacd_mode
= {
4521 .hsync_start
= 320 + 20,
4522 .hsync_end
= 320 + 20 + 30,
4523 .htotal
= 320 + 20 + 30 + 38,
4525 .vsync_start
= 240 + 4,
4526 .vsync_end
= 240 + 4 + 3,
4527 .vtotal
= 240 + 4 + 3 + 15,
4528 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
4531 static const struct panel_desc winstar_wf35ltiacd
= {
4532 .modes
= &winstar_wf35ltiacd_mode
,
4539 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
4542 static const struct drm_display_mode yes_optoelectronics_ytc700tlag_05_201c_mode
= {
4545 .hsync_start
= 1024 + 100,
4546 .hsync_end
= 1024 + 100 + 100,
4547 .htotal
= 1024 + 100 + 100 + 120,
4549 .vsync_start
= 600 + 10,
4550 .vsync_end
= 600 + 10 + 10,
4551 .vtotal
= 600 + 10 + 10 + 15,
4552 .flags
= DRM_MODE_FLAG_PHSYNC
| DRM_MODE_FLAG_PVSYNC
,
4555 static const struct panel_desc yes_optoelectronics_ytc700tlag_05_201c
= {
4556 .modes
= &yes_optoelectronics_ytc700tlag_05_201c_mode
,
4563 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
4564 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_SPWG
,
4565 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
4568 static const struct drm_display_mode mchp_ac69t88a_mode
= {
4571 .hsync_start
= 800 + 88,
4572 .hsync_end
= 800 + 88 + 5,
4573 .htotal
= 800 + 88 + 5 + 40,
4575 .vsync_start
= 480 + 23,
4576 .vsync_end
= 480 + 23 + 5,
4577 .vtotal
= 480 + 23 + 5 + 1,
4580 static const struct panel_desc mchp_ac69t88a
= {
4581 .modes
= &mchp_ac69t88a_mode
,
4588 .bus_flags
= DRM_BUS_FLAG_DE_HIGH
,
4589 .bus_format
= MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA
,
4590 .connector_type
= DRM_MODE_CONNECTOR_LVDS
,
4593 static const struct drm_display_mode arm_rtsm_mode
[] = {
4597 .hsync_start
= 1024 + 24,
4598 .hsync_end
= 1024 + 24 + 136,
4599 .htotal
= 1024 + 24 + 136 + 160,
4601 .vsync_start
= 768 + 3,
4602 .vsync_end
= 768 + 3 + 6,
4603 .vtotal
= 768 + 3 + 6 + 29,
4604 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
4608 static const struct panel_desc arm_rtsm
= {
4609 .modes
= arm_rtsm_mode
,
4616 .bus_format
= MEDIA_BUS_FMT_RGB888_1X24
,
4619 static const struct of_device_id platform_of_match
[] = {
4621 .compatible
= "ampire,am-1280800n3tzqw-t00h",
4622 .data
= &ire_am_1280800n3tzqw_t00h
,
4624 .compatible
= "ampire,am-480272h3tmqw-t01h",
4625 .data
= &ire_am_480272h3tmqw_t01h
,
4627 .compatible
= "ampire,am-800480l1tmqw-t00h",
4628 .data
= &ire_am_800480l1tmqw_t00h
,
4630 .compatible
= "ampire,am800480r3tmqwa1h",
4631 .data
= &ire_am800480r3tmqwa1h
,
4633 .compatible
= "ampire,am800600p5tmqw-tb8h",
4634 .data
= &ire_am800600p5tmqwtb8h
,
4636 .compatible
= "arm,rtsm-display",
4639 .compatible
= "armadeus,st0700-adapt",
4640 .data
= &armadeus_st0700_adapt
,
4642 .compatible
= "auo,b101aw03",
4643 .data
= &auo_b101aw03
,
4645 .compatible
= "auo,b101xtn01",
4646 .data
= &auo_b101xtn01
,
4648 .compatible
= "auo,b116xw03",
4649 .data
= &auo_b116xw03
,
4651 .compatible
= "auo,g070vvn01",
4652 .data
= &auo_g070vvn01
,
4654 .compatible
= "auo,g101evn010",
4655 .data
= &auo_g101evn010
,
4657 .compatible
= "auo,g104sn02",
4658 .data
= &auo_g104sn02
,
4660 .compatible
= "auo,g104stn01",
4661 .data
= &auo_g104stn01
,
4663 .compatible
= "auo,g121ean01",
4664 .data
= &auo_g121ean01
,
4666 .compatible
= "auo,g133han01",
4667 .data
= &auo_g133han01
,
4669 .compatible
= "auo,g156han04",
4670 .data
= &auo_g156han04
,
4672 .compatible
= "auo,g156xtn01",
4673 .data
= &auo_g156xtn01
,
4675 .compatible
= "auo,g185han01",
4676 .data
= &auo_g185han01
,
4678 .compatible
= "auo,g190ean01",
4679 .data
= &auo_g190ean01
,
4681 .compatible
= "auo,p320hvn03",
4682 .data
= &auo_p320hvn03
,
4684 .compatible
= "auo,t215hvn01",
4685 .data
= &auo_t215hvn01
,
4687 .compatible
= "avic,tm070ddh03",
4688 .data
= &avic_tm070ddh03
,
4690 .compatible
= "bananapi,s070wv20-ct16",
4691 .data
= &bananapi_s070wv20_ct16
,
4693 .compatible
= "boe,bp082wx1-100",
4694 .data
= &boe_bp082wx1_100
,
4696 .compatible
= "boe,bp101wx1-100",
4697 .data
= &boe_bp101wx1_100
,
4699 .compatible
= "boe,ev121wxm-n10-1850",
4700 .data
= &boe_ev121wxm_n10_1850
,
4702 .compatible
= "boe,hv070wsa-100",
4703 .data
= &boe_hv070wsa
4705 .compatible
= "cct,cmt430b19n00",
4706 .data
= &cct_cmt430b19n00
,
4708 .compatible
= "cdtech,s043wq26h-ct7",
4709 .data
= &cdtech_s043wq26h_ct7
,
4711 .compatible
= "cdtech,s070pws19hp-fc21",
4712 .data
= &cdtech_s070pws19hp_fc21
,
4714 .compatible
= "cdtech,s070swv29hg-dc44",
4715 .data
= &cdtech_s070swv29hg_dc44
,
4717 .compatible
= "cdtech,s070wv95-ct16",
4718 .data
= &cdtech_s070wv95_ct16
,
4720 .compatible
= "chefree,ch101olhlwh-002",
4721 .data
= &chefree_ch101olhlwh_002
,
4723 .compatible
= "chunghwa,claa070wp03xg",
4724 .data
= &chunghwa_claa070wp03xg
,
4726 .compatible
= "chunghwa,claa101wa01a",
4727 .data
= &chunghwa_claa101wa01a
4729 .compatible
= "chunghwa,claa101wb01",
4730 .data
= &chunghwa_claa101wb01
4732 .compatible
= "dataimage,fg040346dsswbg04",
4733 .data
= &dataimage_fg040346dsswbg04
,
4735 .compatible
= "dataimage,fg1001l0dsswmg01",
4736 .data
= &dataimage_fg1001l0dsswmg01
,
4738 .compatible
= "dataimage,scf0700c48ggu18",
4739 .data
= &dataimage_scf0700c48ggu18
,
4741 .compatible
= "dlc,dlc0700yzg-1",
4742 .data
= &dlc_dlc0700yzg_1
,
4744 .compatible
= "dlc,dlc1010gig",
4745 .data
= &dlc_dlc1010gig
,
4747 .compatible
= "edt,et035012dm6",
4748 .data
= &edt_et035012dm6
,
4750 .compatible
= "edt,etm0350g0dh6",
4751 .data
= &edt_etm0350g0dh6
,
4753 .compatible
= "edt,etm043080dh6gp",
4754 .data
= &edt_etm043080dh6gp
,
4756 .compatible
= "edt,etm0430g0dh6",
4757 .data
= &edt_etm0430g0dh6
,
4759 .compatible
= "edt,et057090dhu",
4760 .data
= &edt_et057090dhu
,
4762 .compatible
= "edt,et070080dh6",
4763 .data
= &edt_etm0700g0dh6
,
4765 .compatible
= "edt,etm0700g0dh6",
4766 .data
= &edt_etm0700g0dh6
,
4768 .compatible
= "edt,etm0700g0bdh6",
4769 .data
= &edt_etm0700g0bdh6
,
4771 .compatible
= "edt,etm0700g0edh6",
4772 .data
= &edt_etm0700g0bdh6
,
4774 .compatible
= "edt,etml0700y5dha",
4775 .data
= &edt_etml0700y5dha
,
4777 .compatible
= "edt,etml1010g3dra",
4778 .data
= &edt_etml1010g3dra
,
4780 .compatible
= "edt,etmv570g2dhu",
4781 .data
= &edt_etmv570g2dhu
,
4783 .compatible
= "eink,vb3300-kca",
4784 .data
= &eink_vb3300_kca
,
4786 .compatible
= "evervision,vgg644804",
4787 .data
= &evervision_vgg644804
,
4789 .compatible
= "evervision,vgg804821",
4790 .data
= &evervision_vgg804821
,
4792 .compatible
= "foxlink,fl500wvr00-a0t",
4793 .data
= &foxlink_fl500wvr00_a0t
,
4795 .compatible
= "frida,frd350h54004",
4796 .data
= &frida_frd350h54004
,
4798 .compatible
= "friendlyarm,hd702e",
4799 .data
= &friendlyarm_hd702e
,
4801 .compatible
= "giantplus,gpg482739qs5",
4802 .data
= &giantplus_gpg482739qs5
4804 .compatible
= "giantplus,gpm940b0",
4805 .data
= &giantplus_gpm940b0
,
4807 .compatible
= "hannstar,hsd070pww1",
4808 .data
= &hannstar_hsd070pww1
,
4810 .compatible
= "hannstar,hsd100pxn1",
4811 .data
= &hannstar_hsd100pxn1
,
4813 .compatible
= "hannstar,hsd101pww2",
4814 .data
= &hannstar_hsd101pww2
,
4816 .compatible
= "hit,tx23d38vm0caa",
4817 .data
= &hitachi_tx23d38vm0caa
4819 .compatible
= "innolux,at043tn24",
4820 .data
= &innolux_at043tn24
,
4822 .compatible
= "innolux,at070tn92",
4823 .data
= &innolux_at070tn92
,
4825 .compatible
= "innolux,g070ace-l01",
4826 .data
= &innolux_g070ace_l01
,
4828 .compatible
= "innolux,g070ace-lh3",
4829 .data
= &innolux_g070ace_lh3
,
4831 .compatible
= "innolux,g070y2-l01",
4832 .data
= &innolux_g070y2_l01
,
4834 .compatible
= "innolux,g070y2-t02",
4835 .data
= &innolux_g070y2_t02
,
4837 .compatible
= "innolux,g101ice-l01",
4838 .data
= &innolux_g101ice_l01
4840 .compatible
= "innolux,g121i1-l01",
4841 .data
= &innolux_g121i1_l01
4843 .compatible
= "innolux,g121x1-l03",
4844 .data
= &innolux_g121x1_l03
,
4846 .compatible
= "innolux,g121xce-l01",
4847 .data
= &innolux_g121xce_l01
,
4849 .compatible
= "innolux,g156hce-l01",
4850 .data
= &innolux_g156hce_l01
,
4852 .compatible
= "innolux,n156bge-l21",
4853 .data
= &innolux_n156bge_l21
,
4855 .compatible
= "innolux,zj070na-01p",
4856 .data
= &innolux_zj070na_01p
,
4858 .compatible
= "koe,tx14d24vm1bpa",
4859 .data
= &koe_tx14d24vm1bpa
,
4861 .compatible
= "koe,tx26d202vm0bwa",
4862 .data
= &koe_tx26d202vm0bwa
,
4864 .compatible
= "koe,tx31d200vm0baa",
4865 .data
= &koe_tx31d200vm0baa
,
4867 .compatible
= "kyo,tcg121xglp",
4868 .data
= &kyo_tcg121xglp
,
4870 .compatible
= "lemaker,bl035-rgb-002",
4871 .data
= &lemaker_bl035_rgb_002
,
4873 .compatible
= "lg,lb070wv8",
4874 .data
= &lg_lb070wv8
,
4876 .compatible
= "lincolntech,lcd185-101ct",
4877 .data
= &lincolntech_lcd185_101ct
,
4879 .compatible
= "logicpd,type28",
4880 .data
= &logicpd_type_28
,
4882 .compatible
= "logictechno,lt161010-2nhc",
4883 .data
= &logictechno_lt161010_2nh
,
4885 .compatible
= "logictechno,lt161010-2nhr",
4886 .data
= &logictechno_lt161010_2nh
,
4888 .compatible
= "logictechno,lt170410-2whc",
4889 .data
= &logictechno_lt170410_2whc
,
4891 .compatible
= "logictechno,lttd800480070-l2rt",
4892 .data
= &logictechno_lttd800480070_l2rt
,
4894 .compatible
= "logictechno,lttd800480070-l6wh-rt",
4895 .data
= &logictechno_lttd800480070_l6wh_rt
,
4897 .compatible
= "microtips,mf-101hiebcaf0",
4898 .data
= µtips_mf_101hiebcaf0_c
,
4900 .compatible
= "microtips,mf-103hieb0ga0",
4901 .data
= µtips_mf_103hieb0ga0
,
4903 .compatible
= "mitsubishi,aa070mc01-ca1",
4904 .data
= &mitsubishi_aa070mc01
,
4906 .compatible
= "mitsubishi,aa084xe01",
4907 .data
= &mitsubishi_aa084xe01
,
4909 .compatible
= "multi-inno,mi0700s4t-6",
4910 .data
= &multi_inno_mi0700s4t_6
,
4912 .compatible
= "multi-inno,mi0800ft-9",
4913 .data
= &multi_inno_mi0800ft_9
,
4915 .compatible
= "multi-inno,mi1010ait-1cp",
4916 .data
= &multi_inno_mi1010ait_1cp
,
4918 .compatible
= "nec,nl12880bc20-05",
4919 .data
= &nec_nl12880bc20_05
,
4921 .compatible
= "nec,nl4827hc19-05b",
4922 .data
= &nec_nl4827hc19_05b
,
4924 .compatible
= "netron-dy,e231732",
4925 .data
= &netron_dy_e231732
,
4927 .compatible
= "newhaven,nhd-4.3-480272ef-atxl",
4928 .data
= &newhaven_nhd_43_480272ef_atxl
,
4930 .compatible
= "nlt,nl192108ac18-02d",
4931 .data
= &nlt_nl192108ac18_02d
,
4933 .compatible
= "nvd,9128",
4936 .compatible
= "okaya,rs800480t-7x0gp",
4937 .data
= &okaya_rs800480t_7x0gp
,
4939 .compatible
= "olimex,lcd-olinuxino-43-ts",
4940 .data
= &olimex_lcd_olinuxino_43ts
,
4942 .compatible
= "ontat,kd50g21-40nt-a1",
4943 .data
= &ontat_kd50g21_40nt_a1
,
4945 .compatible
= "ontat,yx700wv03",
4946 .data
= &ontat_yx700wv03
,
4948 .compatible
= "ortustech,com37h3m05dtc",
4949 .data
= &ortustech_com37h3m
,
4951 .compatible
= "ortustech,com37h3m99dtc",
4952 .data
= &ortustech_com37h3m
,
4954 .compatible
= "ortustech,com43h4m85ulc",
4955 .data
= &ortustech_com43h4m85ulc
,
4957 .compatible
= "osddisplays,osd070t1718-19ts",
4958 .data
= &osddisplays_osd070t1718_19ts
,
4960 .compatible
= "pda,91-00156-a0",
4961 .data
= &pda_91_00156_a0
,
4963 .compatible
= "powertip,ph128800t006-zhc01",
4964 .data
= &powertip_ph128800t006_zhc01
,
4966 .compatible
= "powertip,ph800480t013-idf02",
4967 .data
= &powertip_ph800480t013_idf02
,
4969 .compatible
= "primeview,pm070wl4",
4970 .data
= &primeview_pm070wl4
,
4972 .compatible
= "qiaodian,qd43003c0-40",
4973 .data
= &qd43003c0_40
,
4975 .compatible
= "qishenglong,gopher2b-lcd",
4976 .data
= &qishenglong_gopher2b_lcd
,
4978 .compatible
= "rocktech,rk043fn48h",
4979 .data
= &rocktech_rk043fn48h
,
4981 .compatible
= "rocktech,rk070er9427",
4982 .data
= &rocktech_rk070er9427
,
4984 .compatible
= "rocktech,rk101ii01d-ct",
4985 .data
= &rocktech_rk101ii01d_ct
,
4987 .compatible
= "samsung,ltl101al01",
4988 .data
= &samsung_ltl101al01
,
4990 .compatible
= "samsung,ltn101nt05",
4991 .data
= &samsung_ltn101nt05
,
4993 .compatible
= "satoz,sat050at40h12r2",
4994 .data
= &satoz_sat050at40h12r2
,
4996 .compatible
= "sharp,lq035q7db03",
4997 .data
= &sharp_lq035q7db03
,
4999 .compatible
= "sharp,lq070y3dg3b",
5000 .data
= &sharp_lq070y3dg3b
,
5002 .compatible
= "sharp,lq101k1ly04",
5003 .data
= &sharp_lq101k1ly04
,
5005 .compatible
= "sharp,ls020b1dd01d",
5006 .data
= &sharp_ls020b1dd01d
,
5008 .compatible
= "shelly,sca07010-bfn-lnn",
5009 .data
= &shelly_sca07010_bfn_lnn
,
5011 .compatible
= "starry,kr070pe2t",
5012 .data
= &starry_kr070pe2t
,
5014 .compatible
= "startek,kd070wvfpa",
5015 .data
= &startek_kd070wvfpa
,
5017 .compatible
= "team-source-display,tst043015cmhx",
5018 .data
= &tsd_tst043015cmhx
,
5020 .compatible
= "tfc,s9700rtwv43tr-01b",
5021 .data
= &tfc_s9700rtwv43tr_01b
,
5023 .compatible
= "tianma,tm070jdhg30",
5024 .data
= &tianma_tm070jdhg30
,
5026 .compatible
= "tianma,tm070jvhg33",
5027 .data
= &tianma_tm070jvhg33
,
5029 .compatible
= "tianma,tm070rvhg71",
5030 .data
= &tianma_tm070rvhg71
,
5032 .compatible
= "ti,nspire-cx-lcd-panel",
5033 .data
= &ti_nspire_cx_lcd_panel
,
5035 .compatible
= "ti,nspire-classic-lcd-panel",
5036 .data
= &ti_nspire_classic_lcd_panel
,
5038 .compatible
= "toshiba,lt089ac29000",
5039 .data
= &toshiba_lt089ac29000
,
5041 .compatible
= "tpk,f07a-0102",
5042 .data
= &tpk_f07a_0102
,
5044 .compatible
= "tpk,f10a-0102",
5045 .data
= &tpk_f10a_0102
,
5047 .compatible
= "urt,umsh-8596md-t",
5048 .data
= &urt_umsh_8596md_parallel
,
5050 .compatible
= "urt,umsh-8596md-1t",
5051 .data
= &urt_umsh_8596md_parallel
,
5053 .compatible
= "urt,umsh-8596md-7t",
5054 .data
= &urt_umsh_8596md_parallel
,
5056 .compatible
= "urt,umsh-8596md-11t",
5057 .data
= &urt_umsh_8596md_lvds
,
5059 .compatible
= "urt,umsh-8596md-19t",
5060 .data
= &urt_umsh_8596md_lvds
,
5062 .compatible
= "urt,umsh-8596md-20t",
5063 .data
= &urt_umsh_8596md_parallel
,
5065 .compatible
= "vivax,tpc9150-panel",
5066 .data
= &vivax_tpc9150_panel
,
5068 .compatible
= "vxt,vl050-8048nt-c01",
5069 .data
= &vl050_8048nt_c01
,
5071 .compatible
= "winstar,wf35ltiacd",
5072 .data
= &winstar_wf35ltiacd
,
5074 .compatible
= "yes-optoelectronics,ytc700tlag-05-201c",
5075 .data
= &yes_optoelectronics_ytc700tlag_05_201c
,
5077 .compatible
= "microchip,ac69t88a",
5078 .data
= &mchp_ac69t88a
,
5080 /* Must be the last entry */
5081 .compatible
= "panel-dpi",
5087 MODULE_DEVICE_TABLE(of
, platform_of_match
);
5089 static int panel_simple_platform_probe(struct platform_device
*pdev
)
5091 const struct panel_desc
*desc
;
5093 desc
= of_device_get_match_data(&pdev
->dev
);
5097 return panel_simple_probe(&pdev
->dev
, desc
);
5100 static void panel_simple_platform_remove(struct platform_device
*pdev
)
5102 panel_simple_remove(&pdev
->dev
);
5105 static void panel_simple_platform_shutdown(struct platform_device
*pdev
)
5107 panel_simple_shutdown(&pdev
->dev
);
5110 static const struct dev_pm_ops panel_simple_pm_ops
= {
5111 SET_RUNTIME_PM_OPS(panel_simple_suspend
, panel_simple_resume
, NULL
)
5112 SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend
,
5113 pm_runtime_force_resume
)
5116 static struct platform_driver panel_simple_platform_driver
= {
5118 .name
= "panel-simple",
5119 .of_match_table
= platform_of_match
,
5120 .pm
= &panel_simple_pm_ops
,
5122 .probe
= panel_simple_platform_probe
,
5123 .remove
= panel_simple_platform_remove
,
5124 .shutdown
= panel_simple_platform_shutdown
,
5127 struct panel_desc_dsi
{
5128 struct panel_desc desc
;
5130 unsigned long flags
;
5131 enum mipi_dsi_pixel_format format
;
5135 static const struct drm_display_mode auo_b080uan01_mode
= {
5138 .hsync_start
= 1200 + 62,
5139 .hsync_end
= 1200 + 62 + 4,
5140 .htotal
= 1200 + 62 + 4 + 62,
5142 .vsync_start
= 1920 + 9,
5143 .vsync_end
= 1920 + 9 + 2,
5144 .vtotal
= 1920 + 9 + 2 + 8,
5147 static const struct panel_desc_dsi auo_b080uan01
= {
5149 .modes
= &auo_b080uan01_mode
,
5156 .connector_type
= DRM_MODE_CONNECTOR_DSI
,
5158 .flags
= MIPI_DSI_MODE_VIDEO
| MIPI_DSI_CLOCK_NON_CONTINUOUS
,
5159 .format
= MIPI_DSI_FMT_RGB888
,
5163 static const struct drm_display_mode boe_tv080wum_nl0_mode
= {
5166 .hsync_start
= 1200 + 120,
5167 .hsync_end
= 1200 + 120 + 20,
5168 .htotal
= 1200 + 120 + 20 + 21,
5170 .vsync_start
= 1920 + 21,
5171 .vsync_end
= 1920 + 21 + 3,
5172 .vtotal
= 1920 + 21 + 3 + 18,
5173 .flags
= DRM_MODE_FLAG_NVSYNC
| DRM_MODE_FLAG_NHSYNC
,
5176 static const struct panel_desc_dsi boe_tv080wum_nl0
= {
5178 .modes
= &boe_tv080wum_nl0_mode
,
5184 .connector_type
= DRM_MODE_CONNECTOR_DSI
,
5186 .flags
= MIPI_DSI_MODE_VIDEO
|
5187 MIPI_DSI_MODE_VIDEO_BURST
|
5188 MIPI_DSI_MODE_VIDEO_SYNC_PULSE
,
5189 .format
= MIPI_DSI_FMT_RGB888
,
5193 static const struct drm_display_mode lg_ld070wx3_sl01_mode
= {
5196 .hsync_start
= 800 + 32,
5197 .hsync_end
= 800 + 32 + 1,
5198 .htotal
= 800 + 32 + 1 + 57,
5200 .vsync_start
= 1280 + 28,
5201 .vsync_end
= 1280 + 28 + 1,
5202 .vtotal
= 1280 + 28 + 1 + 14,
5205 static const struct panel_desc_dsi lg_ld070wx3_sl01
= {
5207 .modes
= &lg_ld070wx3_sl01_mode
,
5214 .connector_type
= DRM_MODE_CONNECTOR_DSI
,
5216 .flags
= MIPI_DSI_MODE_VIDEO
| MIPI_DSI_CLOCK_NON_CONTINUOUS
,
5217 .format
= MIPI_DSI_FMT_RGB888
,
5221 static const struct drm_display_mode lg_lh500wx1_sd03_mode
= {
5224 .hsync_start
= 720 + 12,
5225 .hsync_end
= 720 + 12 + 4,
5226 .htotal
= 720 + 12 + 4 + 112,
5228 .vsync_start
= 1280 + 8,
5229 .vsync_end
= 1280 + 8 + 4,
5230 .vtotal
= 1280 + 8 + 4 + 12,
5233 static const struct panel_desc_dsi lg_lh500wx1_sd03
= {
5235 .modes
= &lg_lh500wx1_sd03_mode
,
5242 .connector_type
= DRM_MODE_CONNECTOR_DSI
,
5244 .flags
= MIPI_DSI_MODE_VIDEO
,
5245 .format
= MIPI_DSI_FMT_RGB888
,
5249 static const struct drm_display_mode panasonic_vvx10f004b00_mode
= {
5252 .hsync_start
= 1920 + 154,
5253 .hsync_end
= 1920 + 154 + 16,
5254 .htotal
= 1920 + 154 + 16 + 32,
5256 .vsync_start
= 1200 + 17,
5257 .vsync_end
= 1200 + 17 + 2,
5258 .vtotal
= 1200 + 17 + 2 + 16,
5261 static const struct panel_desc_dsi panasonic_vvx10f004b00
= {
5263 .modes
= &panasonic_vvx10f004b00_mode
,
5270 .connector_type
= DRM_MODE_CONNECTOR_DSI
,
5272 .flags
= MIPI_DSI_MODE_VIDEO
| MIPI_DSI_MODE_VIDEO_SYNC_PULSE
|
5273 MIPI_DSI_CLOCK_NON_CONTINUOUS
,
5274 .format
= MIPI_DSI_FMT_RGB888
,
5278 static const struct drm_display_mode lg_acx467akm_7_mode
= {
5281 .hsync_start
= 1080 + 2,
5282 .hsync_end
= 1080 + 2 + 2,
5283 .htotal
= 1080 + 2 + 2 + 2,
5285 .vsync_start
= 1920 + 2,
5286 .vsync_end
= 1920 + 2 + 2,
5287 .vtotal
= 1920 + 2 + 2 + 2,
5290 static const struct panel_desc_dsi lg_acx467akm_7
= {
5292 .modes
= &lg_acx467akm_7_mode
,
5299 .connector_type
= DRM_MODE_CONNECTOR_DSI
,
5302 .format
= MIPI_DSI_FMT_RGB888
,
5306 static const struct drm_display_mode osd101t2045_53ts_mode
= {
5309 .hsync_start
= 1920 + 112,
5310 .hsync_end
= 1920 + 112 + 16,
5311 .htotal
= 1920 + 112 + 16 + 32,
5313 .vsync_start
= 1200 + 16,
5314 .vsync_end
= 1200 + 16 + 2,
5315 .vtotal
= 1200 + 16 + 2 + 16,
5316 .flags
= DRM_MODE_FLAG_NHSYNC
| DRM_MODE_FLAG_NVSYNC
,
5319 static const struct panel_desc_dsi osd101t2045_53ts
= {
5321 .modes
= &osd101t2045_53ts_mode
,
5328 .connector_type
= DRM_MODE_CONNECTOR_DSI
,
5330 .flags
= MIPI_DSI_MODE_VIDEO
| MIPI_DSI_MODE_VIDEO_BURST
|
5331 MIPI_DSI_MODE_VIDEO_SYNC_PULSE
|
5332 MIPI_DSI_MODE_NO_EOT_PACKET
,
5333 .format
= MIPI_DSI_FMT_RGB888
,
5337 static const struct of_device_id dsi_of_match
[] = {
5339 .compatible
= "auo,b080uan01",
5340 .data
= &auo_b080uan01
5342 .compatible
= "boe,tv080wum-nl0",
5343 .data
= &boe_tv080wum_nl0
5345 .compatible
= "lg,ld070wx3-sl01",
5346 .data
= &lg_ld070wx3_sl01
5348 .compatible
= "lg,lh500wx1-sd03",
5349 .data
= &lg_lh500wx1_sd03
5351 .compatible
= "panasonic,vvx10f004b00",
5352 .data
= &panasonic_vvx10f004b00
5354 .compatible
= "lg,acx467akm-7",
5355 .data
= &lg_acx467akm_7
5357 .compatible
= "osddisplays,osd101t2045-53ts",
5358 .data
= &osd101t2045_53ts
5363 MODULE_DEVICE_TABLE(of
, dsi_of_match
);
5365 static int panel_simple_dsi_probe(struct mipi_dsi_device
*dsi
)
5367 const struct panel_desc_dsi
*desc
;
5370 desc
= of_device_get_match_data(&dsi
->dev
);
5374 err
= panel_simple_probe(&dsi
->dev
, &desc
->desc
);
5378 dsi
->mode_flags
= desc
->flags
;
5379 dsi
->format
= desc
->format
;
5380 dsi
->lanes
= desc
->lanes
;
5382 err
= mipi_dsi_attach(dsi
);
5384 struct panel_simple
*panel
= mipi_dsi_get_drvdata(dsi
);
5386 drm_panel_remove(&panel
->base
);
5392 static void panel_simple_dsi_remove(struct mipi_dsi_device
*dsi
)
5396 err
= mipi_dsi_detach(dsi
);
5398 dev_err(&dsi
->dev
, "failed to detach from DSI host: %d\n", err
);
5400 panel_simple_remove(&dsi
->dev
);
5403 static void panel_simple_dsi_shutdown(struct mipi_dsi_device
*dsi
)
5405 panel_simple_shutdown(&dsi
->dev
);
5408 static struct mipi_dsi_driver panel_simple_dsi_driver
= {
5410 .name
= "panel-simple-dsi",
5411 .of_match_table
= dsi_of_match
,
5412 .pm
= &panel_simple_pm_ops
,
5414 .probe
= panel_simple_dsi_probe
,
5415 .remove
= panel_simple_dsi_remove
,
5416 .shutdown
= panel_simple_dsi_shutdown
,
5419 static int __init
panel_simple_init(void)
5423 err
= platform_driver_register(&panel_simple_platform_driver
);
5427 if (IS_ENABLED(CONFIG_DRM_MIPI_DSI
)) {
5428 err
= mipi_dsi_driver_register(&panel_simple_dsi_driver
);
5430 goto err_did_platform_register
;
5435 err_did_platform_register
:
5436 platform_driver_unregister(&panel_simple_platform_driver
);
5440 module_init(panel_simple_init
);
5442 static void __exit
panel_simple_exit(void)
5444 if (IS_ENABLED(CONFIG_DRM_MIPI_DSI
))
5445 mipi_dsi_driver_unregister(&panel_simple_dsi_driver
);
5447 platform_driver_unregister(&panel_simple_platform_driver
);
5449 module_exit(panel_simple_exit
);
5451 MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
5452 MODULE_DESCRIPTION("DRM Driver for Simple Panels");
5453 MODULE_LICENSE("GPL and additional rights");