162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * Copyright (C) 2013, NVIDIA Corporation.  All rights reserved.
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a
562306a36Sopenharmony_ci * copy of this software and associated documentation files (the "Software"),
662306a36Sopenharmony_ci * to deal in the Software without restriction, including without limitation
762306a36Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sub license,
862306a36Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the
962306a36Sopenharmony_ci * Software is furnished to do so, subject to the following conditions:
1062306a36Sopenharmony_ci *
1162306a36Sopenharmony_ci * The above copyright notice and this permission notice (including the
1262306a36Sopenharmony_ci * next paragraph) shall be included in all copies or substantial portions
1362306a36Sopenharmony_ci * of the Software.
1462306a36Sopenharmony_ci *
1562306a36Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1662306a36Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1762306a36Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
1862306a36Sopenharmony_ci * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1962306a36Sopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2062306a36Sopenharmony_ci * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2162306a36Sopenharmony_ci * DEALINGS IN THE SOFTWARE.
2262306a36Sopenharmony_ci */
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#include <linux/delay.h>
2562306a36Sopenharmony_ci#include <linux/gpio/consumer.h>
2662306a36Sopenharmony_ci#include <linux/i2c.h>
2762306a36Sopenharmony_ci#include <linux/media-bus-format.h>
2862306a36Sopenharmony_ci#include <linux/module.h>
2962306a36Sopenharmony_ci#include <linux/of_platform.h>
3062306a36Sopenharmony_ci#include <linux/platform_device.h>
3162306a36Sopenharmony_ci#include <linux/pm_runtime.h>
3262306a36Sopenharmony_ci#include <linux/regulator/consumer.h>
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#include <video/display_timing.h>
3562306a36Sopenharmony_ci#include <video/of_display_timing.h>
3662306a36Sopenharmony_ci#include <video/videomode.h>
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#include <drm/drm_crtc.h>
3962306a36Sopenharmony_ci#include <drm/drm_device.h>
4062306a36Sopenharmony_ci#include <drm/drm_edid.h>
4162306a36Sopenharmony_ci#include <drm/drm_mipi_dsi.h>
4262306a36Sopenharmony_ci#include <drm/drm_panel.h>
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci/**
4562306a36Sopenharmony_ci * struct panel_desc - Describes a simple panel.
4662306a36Sopenharmony_ci */
4762306a36Sopenharmony_cistruct panel_desc {
4862306a36Sopenharmony_ci	/**
4962306a36Sopenharmony_ci	 * @modes: Pointer to array of fixed modes appropriate for this panel.
5062306a36Sopenharmony_ci	 *
5162306a36Sopenharmony_ci	 * If only one mode then this can just be the address of the mode.
5262306a36Sopenharmony_ci	 * NOTE: cannot be used with "timings" and also if this is specified
5362306a36Sopenharmony_ci	 * then you cannot override the mode in the device tree.
5462306a36Sopenharmony_ci	 */
5562306a36Sopenharmony_ci	const struct drm_display_mode *modes;
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	/** @num_modes: Number of elements in modes array. */
5862306a36Sopenharmony_ci	unsigned int num_modes;
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci	/**
6162306a36Sopenharmony_ci	 * @timings: Pointer to array of display timings
6262306a36Sopenharmony_ci	 *
6362306a36Sopenharmony_ci	 * NOTE: cannot be used with "modes" and also these will be used to
6462306a36Sopenharmony_ci	 * validate a device tree override if one is present.
6562306a36Sopenharmony_ci	 */
6662306a36Sopenharmony_ci	const struct display_timing *timings;
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci	/** @num_timings: Number of elements in timings array. */
6962306a36Sopenharmony_ci	unsigned int num_timings;
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci	/** @bpc: Bits per color. */
7262306a36Sopenharmony_ci	unsigned int bpc;
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci	/** @size: Structure containing the physical size of this panel. */
7562306a36Sopenharmony_ci	struct {
7662306a36Sopenharmony_ci		/**
7762306a36Sopenharmony_ci		 * @size.width: Width (in mm) of the active display area.
7862306a36Sopenharmony_ci		 */
7962306a36Sopenharmony_ci		unsigned int width;
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci		/**
8262306a36Sopenharmony_ci		 * @size.height: Height (in mm) of the active display area.
8362306a36Sopenharmony_ci		 */
8462306a36Sopenharmony_ci		unsigned int height;
8562306a36Sopenharmony_ci	} size;
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci	/** @delay: Structure containing various delay values for this panel. */
8862306a36Sopenharmony_ci	struct {
8962306a36Sopenharmony_ci		/**
9062306a36Sopenharmony_ci		 * @delay.prepare: Time for the panel to become ready.
9162306a36Sopenharmony_ci		 *
9262306a36Sopenharmony_ci		 * The time (in milliseconds) that it takes for the panel to
9362306a36Sopenharmony_ci		 * become ready and start receiving video data
9462306a36Sopenharmony_ci		 */
9562306a36Sopenharmony_ci		unsigned int prepare;
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci		/**
9862306a36Sopenharmony_ci		 * @delay.enable: Time for the panel to display a valid frame.
9962306a36Sopenharmony_ci		 *
10062306a36Sopenharmony_ci		 * The time (in milliseconds) that it takes for the panel to
10162306a36Sopenharmony_ci		 * display the first valid frame after starting to receive
10262306a36Sopenharmony_ci		 * video data.
10362306a36Sopenharmony_ci		 */
10462306a36Sopenharmony_ci		unsigned int enable;
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci		/**
10762306a36Sopenharmony_ci		 * @delay.disable: Time for the panel to turn the display off.
10862306a36Sopenharmony_ci		 *
10962306a36Sopenharmony_ci		 * The time (in milliseconds) that it takes for the panel to
11062306a36Sopenharmony_ci		 * turn the display off (no content is visible).
11162306a36Sopenharmony_ci		 */
11262306a36Sopenharmony_ci		unsigned int disable;
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci		/**
11562306a36Sopenharmony_ci		 * @delay.unprepare: Time to power down completely.
11662306a36Sopenharmony_ci		 *
11762306a36Sopenharmony_ci		 * The time (in milliseconds) that it takes for the panel
11862306a36Sopenharmony_ci		 * to power itself down completely.
11962306a36Sopenharmony_ci		 *
12062306a36Sopenharmony_ci		 * This time is used to prevent a future "prepare" from
12162306a36Sopenharmony_ci		 * starting until at least this many milliseconds has passed.
12262306a36Sopenharmony_ci		 * If at prepare time less time has passed since unprepare
12362306a36Sopenharmony_ci		 * finished, the driver waits for the remaining time.
12462306a36Sopenharmony_ci		 */
12562306a36Sopenharmony_ci		unsigned int unprepare;
12662306a36Sopenharmony_ci	} delay;
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci	/** @bus_format: See MEDIA_BUS_FMT_... defines. */
12962306a36Sopenharmony_ci	u32 bus_format;
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci	/** @bus_flags: See DRM_BUS_FLAG_... defines. */
13262306a36Sopenharmony_ci	u32 bus_flags;
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci	/** @connector_type: LVDS, eDP, DSI, DPI, etc. */
13562306a36Sopenharmony_ci	int connector_type;
13662306a36Sopenharmony_ci};
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_cistruct panel_simple {
13962306a36Sopenharmony_ci	struct drm_panel base;
14062306a36Sopenharmony_ci	bool enabled;
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci	bool prepared;
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci	ktime_t unprepared_time;
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci	const struct panel_desc *desc;
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci	struct regulator *supply;
14962306a36Sopenharmony_ci	struct i2c_adapter *ddc;
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci	struct gpio_desc *enable_gpio;
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ci	struct edid *edid;
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci	struct drm_display_mode override_mode;
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci	enum drm_panel_orientation orientation;
15862306a36Sopenharmony_ci};
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_cistatic inline struct panel_simple *to_panel_simple(struct drm_panel *panel)
16162306a36Sopenharmony_ci{
16262306a36Sopenharmony_ci	return container_of(panel, struct panel_simple, base);
16362306a36Sopenharmony_ci}
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_cistatic unsigned int panel_simple_get_timings_modes(struct panel_simple *panel,
16662306a36Sopenharmony_ci						   struct drm_connector *connector)
16762306a36Sopenharmony_ci{
16862306a36Sopenharmony_ci	struct drm_display_mode *mode;
16962306a36Sopenharmony_ci	unsigned int i, num = 0;
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci	for (i = 0; i < panel->desc->num_timings; i++) {
17262306a36Sopenharmony_ci		const struct display_timing *dt = &panel->desc->timings[i];
17362306a36Sopenharmony_ci		struct videomode vm;
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci		videomode_from_timing(dt, &vm);
17662306a36Sopenharmony_ci		mode = drm_mode_create(connector->dev);
17762306a36Sopenharmony_ci		if (!mode) {
17862306a36Sopenharmony_ci			dev_err(panel->base.dev, "failed to add mode %ux%u\n",
17962306a36Sopenharmony_ci				dt->hactive.typ, dt->vactive.typ);
18062306a36Sopenharmony_ci			continue;
18162306a36Sopenharmony_ci		}
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci		drm_display_mode_from_videomode(&vm, mode);
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_ci		mode->type |= DRM_MODE_TYPE_DRIVER;
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci		if (panel->desc->num_timings == 1)
18862306a36Sopenharmony_ci			mode->type |= DRM_MODE_TYPE_PREFERRED;
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ci		drm_mode_probed_add(connector, mode);
19162306a36Sopenharmony_ci		num++;
19262306a36Sopenharmony_ci	}
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci	return num;
19562306a36Sopenharmony_ci}
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_cistatic unsigned int panel_simple_get_display_modes(struct panel_simple *panel,
19862306a36Sopenharmony_ci						   struct drm_connector *connector)
19962306a36Sopenharmony_ci{
20062306a36Sopenharmony_ci	struct drm_display_mode *mode;
20162306a36Sopenharmony_ci	unsigned int i, num = 0;
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci	for (i = 0; i < panel->desc->num_modes; i++) {
20462306a36Sopenharmony_ci		const struct drm_display_mode *m = &panel->desc->modes[i];
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci		mode = drm_mode_duplicate(connector->dev, m);
20762306a36Sopenharmony_ci		if (!mode) {
20862306a36Sopenharmony_ci			dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n",
20962306a36Sopenharmony_ci				m->hdisplay, m->vdisplay,
21062306a36Sopenharmony_ci				drm_mode_vrefresh(m));
21162306a36Sopenharmony_ci			continue;
21262306a36Sopenharmony_ci		}
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_ci		mode->type |= DRM_MODE_TYPE_DRIVER;
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci		if (panel->desc->num_modes == 1)
21762306a36Sopenharmony_ci			mode->type |= DRM_MODE_TYPE_PREFERRED;
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ci		drm_mode_set_name(mode);
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci		drm_mode_probed_add(connector, mode);
22262306a36Sopenharmony_ci		num++;
22362306a36Sopenharmony_ci	}
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ci	return num;
22662306a36Sopenharmony_ci}
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_cistatic int panel_simple_get_non_edid_modes(struct panel_simple *panel,
22962306a36Sopenharmony_ci					   struct drm_connector *connector)
23062306a36Sopenharmony_ci{
23162306a36Sopenharmony_ci	struct drm_display_mode *mode;
23262306a36Sopenharmony_ci	bool has_override = panel->override_mode.type;
23362306a36Sopenharmony_ci	unsigned int num = 0;
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci	if (!panel->desc)
23662306a36Sopenharmony_ci		return 0;
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_ci	if (has_override) {
23962306a36Sopenharmony_ci		mode = drm_mode_duplicate(connector->dev,
24062306a36Sopenharmony_ci					  &panel->override_mode);
24162306a36Sopenharmony_ci		if (mode) {
24262306a36Sopenharmony_ci			drm_mode_probed_add(connector, mode);
24362306a36Sopenharmony_ci			num = 1;
24462306a36Sopenharmony_ci		} else {
24562306a36Sopenharmony_ci			dev_err(panel->base.dev, "failed to add override mode\n");
24662306a36Sopenharmony_ci		}
24762306a36Sopenharmony_ci	}
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci	/* Only add timings if override was not there or failed to validate */
25062306a36Sopenharmony_ci	if (num == 0 && panel->desc->num_timings)
25162306a36Sopenharmony_ci		num = panel_simple_get_timings_modes(panel, connector);
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_ci	/*
25462306a36Sopenharmony_ci	 * Only add fixed modes if timings/override added no mode.
25562306a36Sopenharmony_ci	 *
25662306a36Sopenharmony_ci	 * We should only ever have either the display timings specified
25762306a36Sopenharmony_ci	 * or a fixed mode. Anything else is rather bogus.
25862306a36Sopenharmony_ci	 */
25962306a36Sopenharmony_ci	WARN_ON(panel->desc->num_timings && panel->desc->num_modes);
26062306a36Sopenharmony_ci	if (num == 0)
26162306a36Sopenharmony_ci		num = panel_simple_get_display_modes(panel, connector);
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_ci	connector->display_info.bpc = panel->desc->bpc;
26462306a36Sopenharmony_ci	connector->display_info.width_mm = panel->desc->size.width;
26562306a36Sopenharmony_ci	connector->display_info.height_mm = panel->desc->size.height;
26662306a36Sopenharmony_ci	if (panel->desc->bus_format)
26762306a36Sopenharmony_ci		drm_display_info_set_bus_formats(&connector->display_info,
26862306a36Sopenharmony_ci						 &panel->desc->bus_format, 1);
26962306a36Sopenharmony_ci	connector->display_info.bus_flags = panel->desc->bus_flags;
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ci	return num;
27262306a36Sopenharmony_ci}
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_cistatic void panel_simple_wait(ktime_t start_ktime, unsigned int min_ms)
27562306a36Sopenharmony_ci{
27662306a36Sopenharmony_ci	ktime_t now_ktime, min_ktime;
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ci	if (!min_ms)
27962306a36Sopenharmony_ci		return;
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ci	min_ktime = ktime_add(start_ktime, ms_to_ktime(min_ms));
28262306a36Sopenharmony_ci	now_ktime = ktime_get_boottime();
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci	if (ktime_before(now_ktime, min_ktime))
28562306a36Sopenharmony_ci		msleep(ktime_to_ms(ktime_sub(min_ktime, now_ktime)) + 1);
28662306a36Sopenharmony_ci}
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_cistatic int panel_simple_disable(struct drm_panel *panel)
28962306a36Sopenharmony_ci{
29062306a36Sopenharmony_ci	struct panel_simple *p = to_panel_simple(panel);
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci	if (!p->enabled)
29362306a36Sopenharmony_ci		return 0;
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_ci	if (p->desc->delay.disable)
29662306a36Sopenharmony_ci		msleep(p->desc->delay.disable);
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci	p->enabled = false;
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ci	return 0;
30162306a36Sopenharmony_ci}
30262306a36Sopenharmony_ci
30362306a36Sopenharmony_cistatic int panel_simple_suspend(struct device *dev)
30462306a36Sopenharmony_ci{
30562306a36Sopenharmony_ci	struct panel_simple *p = dev_get_drvdata(dev);
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci	gpiod_set_value_cansleep(p->enable_gpio, 0);
30862306a36Sopenharmony_ci	regulator_disable(p->supply);
30962306a36Sopenharmony_ci	p->unprepared_time = ktime_get_boottime();
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ci	kfree(p->edid);
31262306a36Sopenharmony_ci	p->edid = NULL;
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ci	return 0;
31562306a36Sopenharmony_ci}
31662306a36Sopenharmony_ci
31762306a36Sopenharmony_cistatic int panel_simple_unprepare(struct drm_panel *panel)
31862306a36Sopenharmony_ci{
31962306a36Sopenharmony_ci	struct panel_simple *p = to_panel_simple(panel);
32062306a36Sopenharmony_ci	int ret;
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ci	/* Unpreparing when already unprepared is a no-op */
32362306a36Sopenharmony_ci	if (!p->prepared)
32462306a36Sopenharmony_ci		return 0;
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ci	pm_runtime_mark_last_busy(panel->dev);
32762306a36Sopenharmony_ci	ret = pm_runtime_put_autosuspend(panel->dev);
32862306a36Sopenharmony_ci	if (ret < 0)
32962306a36Sopenharmony_ci		return ret;
33062306a36Sopenharmony_ci	p->prepared = false;
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ci	return 0;
33362306a36Sopenharmony_ci}
33462306a36Sopenharmony_ci
33562306a36Sopenharmony_cistatic int panel_simple_resume(struct device *dev)
33662306a36Sopenharmony_ci{
33762306a36Sopenharmony_ci	struct panel_simple *p = dev_get_drvdata(dev);
33862306a36Sopenharmony_ci	int err;
33962306a36Sopenharmony_ci
34062306a36Sopenharmony_ci	panel_simple_wait(p->unprepared_time, p->desc->delay.unprepare);
34162306a36Sopenharmony_ci
34262306a36Sopenharmony_ci	err = regulator_enable(p->supply);
34362306a36Sopenharmony_ci	if (err < 0) {
34462306a36Sopenharmony_ci		dev_err(dev, "failed to enable supply: %d\n", err);
34562306a36Sopenharmony_ci		return err;
34662306a36Sopenharmony_ci	}
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_ci	gpiod_set_value_cansleep(p->enable_gpio, 1);
34962306a36Sopenharmony_ci
35062306a36Sopenharmony_ci	if (p->desc->delay.prepare)
35162306a36Sopenharmony_ci		msleep(p->desc->delay.prepare);
35262306a36Sopenharmony_ci
35362306a36Sopenharmony_ci	return 0;
35462306a36Sopenharmony_ci}
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_cistatic int panel_simple_prepare(struct drm_panel *panel)
35762306a36Sopenharmony_ci{
35862306a36Sopenharmony_ci	struct panel_simple *p = to_panel_simple(panel);
35962306a36Sopenharmony_ci	int ret;
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ci	/* Preparing when already prepared is a no-op */
36262306a36Sopenharmony_ci	if (p->prepared)
36362306a36Sopenharmony_ci		return 0;
36462306a36Sopenharmony_ci
36562306a36Sopenharmony_ci	ret = pm_runtime_get_sync(panel->dev);
36662306a36Sopenharmony_ci	if (ret < 0) {
36762306a36Sopenharmony_ci		pm_runtime_put_autosuspend(panel->dev);
36862306a36Sopenharmony_ci		return ret;
36962306a36Sopenharmony_ci	}
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ci	p->prepared = true;
37262306a36Sopenharmony_ci
37362306a36Sopenharmony_ci	return 0;
37462306a36Sopenharmony_ci}
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_cistatic int panel_simple_enable(struct drm_panel *panel)
37762306a36Sopenharmony_ci{
37862306a36Sopenharmony_ci	struct panel_simple *p = to_panel_simple(panel);
37962306a36Sopenharmony_ci
38062306a36Sopenharmony_ci	if (p->enabled)
38162306a36Sopenharmony_ci		return 0;
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ci	if (p->desc->delay.enable)
38462306a36Sopenharmony_ci		msleep(p->desc->delay.enable);
38562306a36Sopenharmony_ci
38662306a36Sopenharmony_ci	p->enabled = true;
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ci	return 0;
38962306a36Sopenharmony_ci}
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_cistatic int panel_simple_get_modes(struct drm_panel *panel,
39262306a36Sopenharmony_ci				  struct drm_connector *connector)
39362306a36Sopenharmony_ci{
39462306a36Sopenharmony_ci	struct panel_simple *p = to_panel_simple(panel);
39562306a36Sopenharmony_ci	int num = 0;
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci	/* probe EDID if a DDC bus is available */
39862306a36Sopenharmony_ci	if (p->ddc) {
39962306a36Sopenharmony_ci		pm_runtime_get_sync(panel->dev);
40062306a36Sopenharmony_ci
40162306a36Sopenharmony_ci		if (!p->edid)
40262306a36Sopenharmony_ci			p->edid = drm_get_edid(connector, p->ddc);
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_ci		if (p->edid)
40562306a36Sopenharmony_ci			num += drm_add_edid_modes(connector, p->edid);
40662306a36Sopenharmony_ci
40762306a36Sopenharmony_ci		pm_runtime_mark_last_busy(panel->dev);
40862306a36Sopenharmony_ci		pm_runtime_put_autosuspend(panel->dev);
40962306a36Sopenharmony_ci	}
41062306a36Sopenharmony_ci
41162306a36Sopenharmony_ci	/* add hard-coded panel modes */
41262306a36Sopenharmony_ci	num += panel_simple_get_non_edid_modes(p, connector);
41362306a36Sopenharmony_ci
41462306a36Sopenharmony_ci	/*
41562306a36Sopenharmony_ci	 * TODO: Remove once all drm drivers call
41662306a36Sopenharmony_ci	 * drm_connector_set_orientation_from_panel()
41762306a36Sopenharmony_ci	 */
41862306a36Sopenharmony_ci	drm_connector_set_panel_orientation(connector, p->orientation);
41962306a36Sopenharmony_ci
42062306a36Sopenharmony_ci	return num;
42162306a36Sopenharmony_ci}
42262306a36Sopenharmony_ci
42362306a36Sopenharmony_cistatic int panel_simple_get_timings(struct drm_panel *panel,
42462306a36Sopenharmony_ci				    unsigned int num_timings,
42562306a36Sopenharmony_ci				    struct display_timing *timings)
42662306a36Sopenharmony_ci{
42762306a36Sopenharmony_ci	struct panel_simple *p = to_panel_simple(panel);
42862306a36Sopenharmony_ci	unsigned int i;
42962306a36Sopenharmony_ci
43062306a36Sopenharmony_ci	if (p->desc->num_timings < num_timings)
43162306a36Sopenharmony_ci		num_timings = p->desc->num_timings;
43262306a36Sopenharmony_ci
43362306a36Sopenharmony_ci	if (timings)
43462306a36Sopenharmony_ci		for (i = 0; i < num_timings; i++)
43562306a36Sopenharmony_ci			timings[i] = p->desc->timings[i];
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_ci	return p->desc->num_timings;
43862306a36Sopenharmony_ci}
43962306a36Sopenharmony_ci
44062306a36Sopenharmony_cistatic enum drm_panel_orientation panel_simple_get_orientation(struct drm_panel *panel)
44162306a36Sopenharmony_ci{
44262306a36Sopenharmony_ci	struct panel_simple *p = to_panel_simple(panel);
44362306a36Sopenharmony_ci
44462306a36Sopenharmony_ci	return p->orientation;
44562306a36Sopenharmony_ci}
44662306a36Sopenharmony_ci
44762306a36Sopenharmony_cistatic const struct drm_panel_funcs panel_simple_funcs = {
44862306a36Sopenharmony_ci	.disable = panel_simple_disable,
44962306a36Sopenharmony_ci	.unprepare = panel_simple_unprepare,
45062306a36Sopenharmony_ci	.prepare = panel_simple_prepare,
45162306a36Sopenharmony_ci	.enable = panel_simple_enable,
45262306a36Sopenharmony_ci	.get_modes = panel_simple_get_modes,
45362306a36Sopenharmony_ci	.get_orientation = panel_simple_get_orientation,
45462306a36Sopenharmony_ci	.get_timings = panel_simple_get_timings,
45562306a36Sopenharmony_ci};
45662306a36Sopenharmony_ci
45762306a36Sopenharmony_cistatic struct panel_desc panel_dpi;
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_cistatic int panel_dpi_probe(struct device *dev,
46062306a36Sopenharmony_ci			   struct panel_simple *panel)
46162306a36Sopenharmony_ci{
46262306a36Sopenharmony_ci	struct display_timing *timing;
46362306a36Sopenharmony_ci	const struct device_node *np;
46462306a36Sopenharmony_ci	struct panel_desc *desc;
46562306a36Sopenharmony_ci	unsigned int bus_flags;
46662306a36Sopenharmony_ci	struct videomode vm;
46762306a36Sopenharmony_ci	int ret;
46862306a36Sopenharmony_ci
46962306a36Sopenharmony_ci	np = dev->of_node;
47062306a36Sopenharmony_ci	desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL);
47162306a36Sopenharmony_ci	if (!desc)
47262306a36Sopenharmony_ci		return -ENOMEM;
47362306a36Sopenharmony_ci
47462306a36Sopenharmony_ci	timing = devm_kzalloc(dev, sizeof(*timing), GFP_KERNEL);
47562306a36Sopenharmony_ci	if (!timing)
47662306a36Sopenharmony_ci		return -ENOMEM;
47762306a36Sopenharmony_ci
47862306a36Sopenharmony_ci	ret = of_get_display_timing(np, "panel-timing", timing);
47962306a36Sopenharmony_ci	if (ret < 0) {
48062306a36Sopenharmony_ci		dev_err(dev, "%pOF: no panel-timing node found for \"panel-dpi\" binding\n",
48162306a36Sopenharmony_ci			np);
48262306a36Sopenharmony_ci		return ret;
48362306a36Sopenharmony_ci	}
48462306a36Sopenharmony_ci
48562306a36Sopenharmony_ci	desc->timings = timing;
48662306a36Sopenharmony_ci	desc->num_timings = 1;
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_ci	of_property_read_u32(np, "width-mm", &desc->size.width);
48962306a36Sopenharmony_ci	of_property_read_u32(np, "height-mm", &desc->size.height);
49062306a36Sopenharmony_ci
49162306a36Sopenharmony_ci	/* Extract bus_flags from display_timing */
49262306a36Sopenharmony_ci	bus_flags = 0;
49362306a36Sopenharmony_ci	vm.flags = timing->flags;
49462306a36Sopenharmony_ci	drm_bus_flags_from_videomode(&vm, &bus_flags);
49562306a36Sopenharmony_ci	desc->bus_flags = bus_flags;
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_ci	/* We do not know the connector for the DT node, so guess it */
49862306a36Sopenharmony_ci	desc->connector_type = DRM_MODE_CONNECTOR_DPI;
49962306a36Sopenharmony_ci
50062306a36Sopenharmony_ci	panel->desc = desc;
50162306a36Sopenharmony_ci
50262306a36Sopenharmony_ci	return 0;
50362306a36Sopenharmony_ci}
50462306a36Sopenharmony_ci
50562306a36Sopenharmony_ci#define PANEL_SIMPLE_BOUNDS_CHECK(to_check, bounds, field) \
50662306a36Sopenharmony_ci	(to_check->field.typ >= bounds->field.min && \
50762306a36Sopenharmony_ci	 to_check->field.typ <= bounds->field.max)
50862306a36Sopenharmony_cistatic void panel_simple_parse_panel_timing_node(struct device *dev,
50962306a36Sopenharmony_ci						 struct panel_simple *panel,
51062306a36Sopenharmony_ci						 const struct display_timing *ot)
51162306a36Sopenharmony_ci{
51262306a36Sopenharmony_ci	const struct panel_desc *desc = panel->desc;
51362306a36Sopenharmony_ci	struct videomode vm;
51462306a36Sopenharmony_ci	unsigned int i;
51562306a36Sopenharmony_ci
51662306a36Sopenharmony_ci	if (WARN_ON(desc->num_modes)) {
51762306a36Sopenharmony_ci		dev_err(dev, "Reject override mode: panel has a fixed mode\n");
51862306a36Sopenharmony_ci		return;
51962306a36Sopenharmony_ci	}
52062306a36Sopenharmony_ci	if (WARN_ON(!desc->num_timings)) {
52162306a36Sopenharmony_ci		dev_err(dev, "Reject override mode: no timings specified\n");
52262306a36Sopenharmony_ci		return;
52362306a36Sopenharmony_ci	}
52462306a36Sopenharmony_ci
52562306a36Sopenharmony_ci	for (i = 0; i < panel->desc->num_timings; i++) {
52662306a36Sopenharmony_ci		const struct display_timing *dt = &panel->desc->timings[i];
52762306a36Sopenharmony_ci
52862306a36Sopenharmony_ci		if (!PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, hactive) ||
52962306a36Sopenharmony_ci		    !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, hfront_porch) ||
53062306a36Sopenharmony_ci		    !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, hback_porch) ||
53162306a36Sopenharmony_ci		    !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, hsync_len) ||
53262306a36Sopenharmony_ci		    !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, vactive) ||
53362306a36Sopenharmony_ci		    !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, vfront_porch) ||
53462306a36Sopenharmony_ci		    !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, vback_porch) ||
53562306a36Sopenharmony_ci		    !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, vsync_len))
53662306a36Sopenharmony_ci			continue;
53762306a36Sopenharmony_ci
53862306a36Sopenharmony_ci		if (ot->flags != dt->flags)
53962306a36Sopenharmony_ci			continue;
54062306a36Sopenharmony_ci
54162306a36Sopenharmony_ci		videomode_from_timing(ot, &vm);
54262306a36Sopenharmony_ci		drm_display_mode_from_videomode(&vm, &panel->override_mode);
54362306a36Sopenharmony_ci		panel->override_mode.type |= DRM_MODE_TYPE_DRIVER |
54462306a36Sopenharmony_ci					     DRM_MODE_TYPE_PREFERRED;
54562306a36Sopenharmony_ci		break;
54662306a36Sopenharmony_ci	}
54762306a36Sopenharmony_ci
54862306a36Sopenharmony_ci	if (WARN_ON(!panel->override_mode.type))
54962306a36Sopenharmony_ci		dev_err(dev, "Reject override mode: No display_timing found\n");
55062306a36Sopenharmony_ci}
55162306a36Sopenharmony_ci
55262306a36Sopenharmony_cistatic int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
55362306a36Sopenharmony_ci{
55462306a36Sopenharmony_ci	struct panel_simple *panel;
55562306a36Sopenharmony_ci	struct display_timing dt;
55662306a36Sopenharmony_ci	struct device_node *ddc;
55762306a36Sopenharmony_ci	int connector_type;
55862306a36Sopenharmony_ci	u32 bus_flags;
55962306a36Sopenharmony_ci	int err;
56062306a36Sopenharmony_ci
56162306a36Sopenharmony_ci	panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
56262306a36Sopenharmony_ci	if (!panel)
56362306a36Sopenharmony_ci		return -ENOMEM;
56462306a36Sopenharmony_ci
56562306a36Sopenharmony_ci	panel->enabled = false;
56662306a36Sopenharmony_ci	panel->desc = desc;
56762306a36Sopenharmony_ci
56862306a36Sopenharmony_ci	panel->supply = devm_regulator_get(dev, "power");
56962306a36Sopenharmony_ci	if (IS_ERR(panel->supply))
57062306a36Sopenharmony_ci		return PTR_ERR(panel->supply);
57162306a36Sopenharmony_ci
57262306a36Sopenharmony_ci	panel->enable_gpio = devm_gpiod_get_optional(dev, "enable",
57362306a36Sopenharmony_ci						     GPIOD_OUT_LOW);
57462306a36Sopenharmony_ci	if (IS_ERR(panel->enable_gpio))
57562306a36Sopenharmony_ci		return dev_err_probe(dev, PTR_ERR(panel->enable_gpio),
57662306a36Sopenharmony_ci				     "failed to request GPIO\n");
57762306a36Sopenharmony_ci
57862306a36Sopenharmony_ci	err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation);
57962306a36Sopenharmony_ci	if (err) {
58062306a36Sopenharmony_ci		dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err);
58162306a36Sopenharmony_ci		return err;
58262306a36Sopenharmony_ci	}
58362306a36Sopenharmony_ci
58462306a36Sopenharmony_ci	ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0);
58562306a36Sopenharmony_ci	if (ddc) {
58662306a36Sopenharmony_ci		panel->ddc = of_find_i2c_adapter_by_node(ddc);
58762306a36Sopenharmony_ci		of_node_put(ddc);
58862306a36Sopenharmony_ci
58962306a36Sopenharmony_ci		if (!panel->ddc)
59062306a36Sopenharmony_ci			return -EPROBE_DEFER;
59162306a36Sopenharmony_ci	}
59262306a36Sopenharmony_ci
59362306a36Sopenharmony_ci	if (desc == &panel_dpi) {
59462306a36Sopenharmony_ci		/* Handle the generic panel-dpi binding */
59562306a36Sopenharmony_ci		err = panel_dpi_probe(dev, panel);
59662306a36Sopenharmony_ci		if (err)
59762306a36Sopenharmony_ci			goto free_ddc;
59862306a36Sopenharmony_ci		desc = panel->desc;
59962306a36Sopenharmony_ci	} else {
60062306a36Sopenharmony_ci		if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
60162306a36Sopenharmony_ci			panel_simple_parse_panel_timing_node(dev, panel, &dt);
60262306a36Sopenharmony_ci	}
60362306a36Sopenharmony_ci
60462306a36Sopenharmony_ci	connector_type = desc->connector_type;
60562306a36Sopenharmony_ci	/* Catch common mistakes for panels. */
60662306a36Sopenharmony_ci	switch (connector_type) {
60762306a36Sopenharmony_ci	case 0:
60862306a36Sopenharmony_ci		dev_warn(dev, "Specify missing connector_type\n");
60962306a36Sopenharmony_ci		connector_type = DRM_MODE_CONNECTOR_DPI;
61062306a36Sopenharmony_ci		break;
61162306a36Sopenharmony_ci	case DRM_MODE_CONNECTOR_LVDS:
61262306a36Sopenharmony_ci		WARN_ON(desc->bus_flags &
61362306a36Sopenharmony_ci			~(DRM_BUS_FLAG_DE_LOW |
61462306a36Sopenharmony_ci			  DRM_BUS_FLAG_DE_HIGH |
61562306a36Sopenharmony_ci			  DRM_BUS_FLAG_DATA_MSB_TO_LSB |
61662306a36Sopenharmony_ci			  DRM_BUS_FLAG_DATA_LSB_TO_MSB));
61762306a36Sopenharmony_ci		WARN_ON(desc->bus_format != MEDIA_BUS_FMT_RGB666_1X7X3_SPWG &&
61862306a36Sopenharmony_ci			desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_SPWG &&
61962306a36Sopenharmony_ci			desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA);
62062306a36Sopenharmony_ci		WARN_ON(desc->bus_format == MEDIA_BUS_FMT_RGB666_1X7X3_SPWG &&
62162306a36Sopenharmony_ci			desc->bpc != 6);
62262306a36Sopenharmony_ci		WARN_ON((desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG ||
62362306a36Sopenharmony_ci			 desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA) &&
62462306a36Sopenharmony_ci			desc->bpc != 8);
62562306a36Sopenharmony_ci		break;
62662306a36Sopenharmony_ci	case DRM_MODE_CONNECTOR_eDP:
62762306a36Sopenharmony_ci		dev_warn(dev, "eDP panels moved to panel-edp\n");
62862306a36Sopenharmony_ci		err = -EINVAL;
62962306a36Sopenharmony_ci		goto free_ddc;
63062306a36Sopenharmony_ci	case DRM_MODE_CONNECTOR_DSI:
63162306a36Sopenharmony_ci		if (desc->bpc != 6 && desc->bpc != 8)
63262306a36Sopenharmony_ci			dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
63362306a36Sopenharmony_ci		break;
63462306a36Sopenharmony_ci	case DRM_MODE_CONNECTOR_DPI:
63562306a36Sopenharmony_ci		bus_flags = DRM_BUS_FLAG_DE_LOW |
63662306a36Sopenharmony_ci			    DRM_BUS_FLAG_DE_HIGH |
63762306a36Sopenharmony_ci			    DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
63862306a36Sopenharmony_ci			    DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
63962306a36Sopenharmony_ci			    DRM_BUS_FLAG_DATA_MSB_TO_LSB |
64062306a36Sopenharmony_ci			    DRM_BUS_FLAG_DATA_LSB_TO_MSB |
64162306a36Sopenharmony_ci			    DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE |
64262306a36Sopenharmony_ci			    DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE;
64362306a36Sopenharmony_ci		if (desc->bus_flags & ~bus_flags)
64462306a36Sopenharmony_ci			dev_warn(dev, "Unexpected bus_flags(%d)\n", desc->bus_flags & ~bus_flags);
64562306a36Sopenharmony_ci		if (!(desc->bus_flags & bus_flags))
64662306a36Sopenharmony_ci			dev_warn(dev, "Specify missing bus_flags\n");
64762306a36Sopenharmony_ci		if (desc->bus_format == 0)
64862306a36Sopenharmony_ci			dev_warn(dev, "Specify missing bus_format\n");
64962306a36Sopenharmony_ci		if (desc->bpc != 6 && desc->bpc != 8)
65062306a36Sopenharmony_ci			dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
65162306a36Sopenharmony_ci		break;
65262306a36Sopenharmony_ci	default:
65362306a36Sopenharmony_ci		dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type);
65462306a36Sopenharmony_ci		connector_type = DRM_MODE_CONNECTOR_DPI;
65562306a36Sopenharmony_ci		break;
65662306a36Sopenharmony_ci	}
65762306a36Sopenharmony_ci
65862306a36Sopenharmony_ci	dev_set_drvdata(dev, panel);
65962306a36Sopenharmony_ci
66062306a36Sopenharmony_ci	/*
66162306a36Sopenharmony_ci	 * We use runtime PM for prepare / unprepare since those power the panel
66262306a36Sopenharmony_ci	 * on and off and those can be very slow operations. This is important
66362306a36Sopenharmony_ci	 * to optimize powering the panel on briefly to read the EDID before
66462306a36Sopenharmony_ci	 * fully enabling the panel.
66562306a36Sopenharmony_ci	 */
66662306a36Sopenharmony_ci	pm_runtime_enable(dev);
66762306a36Sopenharmony_ci	pm_runtime_set_autosuspend_delay(dev, 1000);
66862306a36Sopenharmony_ci	pm_runtime_use_autosuspend(dev);
66962306a36Sopenharmony_ci
67062306a36Sopenharmony_ci	drm_panel_init(&panel->base, dev, &panel_simple_funcs, connector_type);
67162306a36Sopenharmony_ci
67262306a36Sopenharmony_ci	err = drm_panel_of_backlight(&panel->base);
67362306a36Sopenharmony_ci	if (err) {
67462306a36Sopenharmony_ci		dev_err_probe(dev, err, "Could not find backlight\n");
67562306a36Sopenharmony_ci		goto disable_pm_runtime;
67662306a36Sopenharmony_ci	}
67762306a36Sopenharmony_ci
67862306a36Sopenharmony_ci	drm_panel_add(&panel->base);
67962306a36Sopenharmony_ci
68062306a36Sopenharmony_ci	return 0;
68162306a36Sopenharmony_ci
68262306a36Sopenharmony_cidisable_pm_runtime:
68362306a36Sopenharmony_ci	pm_runtime_dont_use_autosuspend(dev);
68462306a36Sopenharmony_ci	pm_runtime_disable(dev);
68562306a36Sopenharmony_cifree_ddc:
68662306a36Sopenharmony_ci	if (panel->ddc)
68762306a36Sopenharmony_ci		put_device(&panel->ddc->dev);
68862306a36Sopenharmony_ci
68962306a36Sopenharmony_ci	return err;
69062306a36Sopenharmony_ci}
69162306a36Sopenharmony_ci
69262306a36Sopenharmony_cistatic void panel_simple_remove(struct device *dev)
69362306a36Sopenharmony_ci{
69462306a36Sopenharmony_ci	struct panel_simple *panel = dev_get_drvdata(dev);
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_ci	drm_panel_remove(&panel->base);
69762306a36Sopenharmony_ci	drm_panel_disable(&panel->base);
69862306a36Sopenharmony_ci	drm_panel_unprepare(&panel->base);
69962306a36Sopenharmony_ci
70062306a36Sopenharmony_ci	pm_runtime_dont_use_autosuspend(dev);
70162306a36Sopenharmony_ci	pm_runtime_disable(dev);
70262306a36Sopenharmony_ci	if (panel->ddc)
70362306a36Sopenharmony_ci		put_device(&panel->ddc->dev);
70462306a36Sopenharmony_ci}
70562306a36Sopenharmony_ci
70662306a36Sopenharmony_cistatic void panel_simple_shutdown(struct device *dev)
70762306a36Sopenharmony_ci{
70862306a36Sopenharmony_ci	struct panel_simple *panel = dev_get_drvdata(dev);
70962306a36Sopenharmony_ci
71062306a36Sopenharmony_ci	drm_panel_disable(&panel->base);
71162306a36Sopenharmony_ci	drm_panel_unprepare(&panel->base);
71262306a36Sopenharmony_ci}
71362306a36Sopenharmony_ci
71462306a36Sopenharmony_cistatic const struct drm_display_mode ampire_am_1280800n3tzqw_t00h_mode = {
71562306a36Sopenharmony_ci	.clock = 71100,
71662306a36Sopenharmony_ci	.hdisplay = 1280,
71762306a36Sopenharmony_ci	.hsync_start = 1280 + 40,
71862306a36Sopenharmony_ci	.hsync_end = 1280 + 40 + 80,
71962306a36Sopenharmony_ci	.htotal = 1280 + 40 + 80 + 40,
72062306a36Sopenharmony_ci	.vdisplay = 800,
72162306a36Sopenharmony_ci	.vsync_start = 800 + 3,
72262306a36Sopenharmony_ci	.vsync_end = 800 + 3 + 10,
72362306a36Sopenharmony_ci	.vtotal = 800 + 3 + 10 + 10,
72462306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
72562306a36Sopenharmony_ci};
72662306a36Sopenharmony_ci
72762306a36Sopenharmony_cistatic const struct panel_desc ampire_am_1280800n3tzqw_t00h = {
72862306a36Sopenharmony_ci	.modes = &ampire_am_1280800n3tzqw_t00h_mode,
72962306a36Sopenharmony_ci	.num_modes = 1,
73062306a36Sopenharmony_ci	.bpc = 8,
73162306a36Sopenharmony_ci	.size = {
73262306a36Sopenharmony_ci		.width = 217,
73362306a36Sopenharmony_ci		.height = 136,
73462306a36Sopenharmony_ci	},
73562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
73662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
73762306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
73862306a36Sopenharmony_ci};
73962306a36Sopenharmony_ci
74062306a36Sopenharmony_cistatic const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode = {
74162306a36Sopenharmony_ci	.clock = 9000,
74262306a36Sopenharmony_ci	.hdisplay = 480,
74362306a36Sopenharmony_ci	.hsync_start = 480 + 2,
74462306a36Sopenharmony_ci	.hsync_end = 480 + 2 + 41,
74562306a36Sopenharmony_ci	.htotal = 480 + 2 + 41 + 2,
74662306a36Sopenharmony_ci	.vdisplay = 272,
74762306a36Sopenharmony_ci	.vsync_start = 272 + 2,
74862306a36Sopenharmony_ci	.vsync_end = 272 + 2 + 10,
74962306a36Sopenharmony_ci	.vtotal = 272 + 2 + 10 + 2,
75062306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
75162306a36Sopenharmony_ci};
75262306a36Sopenharmony_ci
75362306a36Sopenharmony_cistatic const struct panel_desc ampire_am_480272h3tmqw_t01h = {
75462306a36Sopenharmony_ci	.modes = &ampire_am_480272h3tmqw_t01h_mode,
75562306a36Sopenharmony_ci	.num_modes = 1,
75662306a36Sopenharmony_ci	.bpc = 8,
75762306a36Sopenharmony_ci	.size = {
75862306a36Sopenharmony_ci		.width = 99,
75962306a36Sopenharmony_ci		.height = 58,
76062306a36Sopenharmony_ci	},
76162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
76262306a36Sopenharmony_ci};
76362306a36Sopenharmony_ci
76462306a36Sopenharmony_cistatic const struct drm_display_mode ampire_am800480r3tmqwa1h_mode = {
76562306a36Sopenharmony_ci	.clock = 33333,
76662306a36Sopenharmony_ci	.hdisplay = 800,
76762306a36Sopenharmony_ci	.hsync_start = 800 + 0,
76862306a36Sopenharmony_ci	.hsync_end = 800 + 0 + 255,
76962306a36Sopenharmony_ci	.htotal = 800 + 0 + 255 + 0,
77062306a36Sopenharmony_ci	.vdisplay = 480,
77162306a36Sopenharmony_ci	.vsync_start = 480 + 2,
77262306a36Sopenharmony_ci	.vsync_end = 480 + 2 + 45,
77362306a36Sopenharmony_ci	.vtotal = 480 + 2 + 45 + 0,
77462306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
77562306a36Sopenharmony_ci};
77662306a36Sopenharmony_ci
77762306a36Sopenharmony_cistatic const struct display_timing ampire_am_800480l1tmqw_t00h_timing = {
77862306a36Sopenharmony_ci	.pixelclock = { 29930000, 33260000, 36590000 },
77962306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
78062306a36Sopenharmony_ci	.hfront_porch = { 1, 40, 168 },
78162306a36Sopenharmony_ci	.hback_porch = { 88, 88, 88 },
78262306a36Sopenharmony_ci	.hsync_len = { 1, 128, 128 },
78362306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
78462306a36Sopenharmony_ci	.vfront_porch = { 1, 35, 37 },
78562306a36Sopenharmony_ci	.vback_porch = { 8, 8, 8 },
78662306a36Sopenharmony_ci	.vsync_len = { 1, 2, 2 },
78762306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
78862306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
78962306a36Sopenharmony_ci		 DISPLAY_FLAGS_SYNC_POSEDGE,
79062306a36Sopenharmony_ci};
79162306a36Sopenharmony_ci
79262306a36Sopenharmony_cistatic const struct panel_desc ampire_am_800480l1tmqw_t00h = {
79362306a36Sopenharmony_ci	.timings = &ampire_am_800480l1tmqw_t00h_timing,
79462306a36Sopenharmony_ci	.num_timings = 1,
79562306a36Sopenharmony_ci	.bpc = 8,
79662306a36Sopenharmony_ci	.size = {
79762306a36Sopenharmony_ci		.width = 111,
79862306a36Sopenharmony_ci		.height = 67,
79962306a36Sopenharmony_ci	},
80062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
80162306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH |
80262306a36Sopenharmony_ci		     DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
80362306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
80462306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
80562306a36Sopenharmony_ci};
80662306a36Sopenharmony_ci
80762306a36Sopenharmony_cistatic const struct panel_desc ampire_am800480r3tmqwa1h = {
80862306a36Sopenharmony_ci	.modes = &ampire_am800480r3tmqwa1h_mode,
80962306a36Sopenharmony_ci	.num_modes = 1,
81062306a36Sopenharmony_ci	.bpc = 6,
81162306a36Sopenharmony_ci	.size = {
81262306a36Sopenharmony_ci		.width = 152,
81362306a36Sopenharmony_ci		.height = 91,
81462306a36Sopenharmony_ci	},
81562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
81662306a36Sopenharmony_ci};
81762306a36Sopenharmony_ci
81862306a36Sopenharmony_cistatic const struct display_timing ampire_am800600p5tmqw_tb8h_timing = {
81962306a36Sopenharmony_ci	.pixelclock = { 34500000, 39600000, 50400000 },
82062306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
82162306a36Sopenharmony_ci	.hfront_porch = { 12, 112, 312 },
82262306a36Sopenharmony_ci	.hback_porch = { 87, 87, 48 },
82362306a36Sopenharmony_ci	.hsync_len = { 1, 1, 40 },
82462306a36Sopenharmony_ci	.vactive = { 600, 600, 600 },
82562306a36Sopenharmony_ci	.vfront_porch = { 1, 21, 61 },
82662306a36Sopenharmony_ci	.vback_porch = { 38, 38, 19 },
82762306a36Sopenharmony_ci	.vsync_len = { 1, 1, 20 },
82862306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
82962306a36Sopenharmony_ci		DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
83062306a36Sopenharmony_ci		DISPLAY_FLAGS_SYNC_POSEDGE,
83162306a36Sopenharmony_ci};
83262306a36Sopenharmony_ci
83362306a36Sopenharmony_cistatic const struct panel_desc ampire_am800600p5tmqwtb8h = {
83462306a36Sopenharmony_ci	.timings = &ampire_am800600p5tmqw_tb8h_timing,
83562306a36Sopenharmony_ci	.num_timings = 1,
83662306a36Sopenharmony_ci	.bpc = 6,
83762306a36Sopenharmony_ci	.size = {
83862306a36Sopenharmony_ci		.width = 162,
83962306a36Sopenharmony_ci		.height = 122,
84062306a36Sopenharmony_ci	},
84162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
84262306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH |
84362306a36Sopenharmony_ci		DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
84462306a36Sopenharmony_ci		DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
84562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
84662306a36Sopenharmony_ci};
84762306a36Sopenharmony_ci
84862306a36Sopenharmony_cistatic const struct display_timing santek_st0700i5y_rbslw_f_timing = {
84962306a36Sopenharmony_ci	.pixelclock = { 26400000, 33300000, 46800000 },
85062306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
85162306a36Sopenharmony_ci	.hfront_porch = { 16, 210, 354 },
85262306a36Sopenharmony_ci	.hback_porch = { 45, 36, 6 },
85362306a36Sopenharmony_ci	.hsync_len = { 1, 10, 40 },
85462306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
85562306a36Sopenharmony_ci	.vfront_porch = { 7, 22, 147 },
85662306a36Sopenharmony_ci	.vback_porch = { 22, 13, 3 },
85762306a36Sopenharmony_ci	.vsync_len = { 1, 10, 20 },
85862306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
85962306a36Sopenharmony_ci		DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE
86062306a36Sopenharmony_ci};
86162306a36Sopenharmony_ci
86262306a36Sopenharmony_cistatic const struct panel_desc armadeus_st0700_adapt = {
86362306a36Sopenharmony_ci	.timings = &santek_st0700i5y_rbslw_f_timing,
86462306a36Sopenharmony_ci	.num_timings = 1,
86562306a36Sopenharmony_ci	.bpc = 6,
86662306a36Sopenharmony_ci	.size = {
86762306a36Sopenharmony_ci		.width = 154,
86862306a36Sopenharmony_ci		.height = 86,
86962306a36Sopenharmony_ci	},
87062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
87162306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
87262306a36Sopenharmony_ci};
87362306a36Sopenharmony_ci
87462306a36Sopenharmony_cistatic const struct drm_display_mode auo_b101aw03_mode = {
87562306a36Sopenharmony_ci	.clock = 51450,
87662306a36Sopenharmony_ci	.hdisplay = 1024,
87762306a36Sopenharmony_ci	.hsync_start = 1024 + 156,
87862306a36Sopenharmony_ci	.hsync_end = 1024 + 156 + 8,
87962306a36Sopenharmony_ci	.htotal = 1024 + 156 + 8 + 156,
88062306a36Sopenharmony_ci	.vdisplay = 600,
88162306a36Sopenharmony_ci	.vsync_start = 600 + 16,
88262306a36Sopenharmony_ci	.vsync_end = 600 + 16 + 6,
88362306a36Sopenharmony_ci	.vtotal = 600 + 16 + 6 + 16,
88462306a36Sopenharmony_ci};
88562306a36Sopenharmony_ci
88662306a36Sopenharmony_cistatic const struct panel_desc auo_b101aw03 = {
88762306a36Sopenharmony_ci	.modes = &auo_b101aw03_mode,
88862306a36Sopenharmony_ci	.num_modes = 1,
88962306a36Sopenharmony_ci	.bpc = 6,
89062306a36Sopenharmony_ci	.size = {
89162306a36Sopenharmony_ci		.width = 223,
89262306a36Sopenharmony_ci		.height = 125,
89362306a36Sopenharmony_ci	},
89462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
89562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
89662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
89762306a36Sopenharmony_ci};
89862306a36Sopenharmony_ci
89962306a36Sopenharmony_cistatic const struct drm_display_mode auo_b101xtn01_mode = {
90062306a36Sopenharmony_ci	.clock = 72000,
90162306a36Sopenharmony_ci	.hdisplay = 1366,
90262306a36Sopenharmony_ci	.hsync_start = 1366 + 20,
90362306a36Sopenharmony_ci	.hsync_end = 1366 + 20 + 70,
90462306a36Sopenharmony_ci	.htotal = 1366 + 20 + 70,
90562306a36Sopenharmony_ci	.vdisplay = 768,
90662306a36Sopenharmony_ci	.vsync_start = 768 + 14,
90762306a36Sopenharmony_ci	.vsync_end = 768 + 14 + 42,
90862306a36Sopenharmony_ci	.vtotal = 768 + 14 + 42,
90962306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
91062306a36Sopenharmony_ci};
91162306a36Sopenharmony_ci
91262306a36Sopenharmony_cistatic const struct panel_desc auo_b101xtn01 = {
91362306a36Sopenharmony_ci	.modes = &auo_b101xtn01_mode,
91462306a36Sopenharmony_ci	.num_modes = 1,
91562306a36Sopenharmony_ci	.bpc = 6,
91662306a36Sopenharmony_ci	.size = {
91762306a36Sopenharmony_ci		.width = 223,
91862306a36Sopenharmony_ci		.height = 125,
91962306a36Sopenharmony_ci	},
92062306a36Sopenharmony_ci};
92162306a36Sopenharmony_ci
92262306a36Sopenharmony_cistatic const struct drm_display_mode auo_b116xw03_mode = {
92362306a36Sopenharmony_ci	.clock = 70589,
92462306a36Sopenharmony_ci	.hdisplay = 1366,
92562306a36Sopenharmony_ci	.hsync_start = 1366 + 40,
92662306a36Sopenharmony_ci	.hsync_end = 1366 + 40 + 40,
92762306a36Sopenharmony_ci	.htotal = 1366 + 40 + 40 + 32,
92862306a36Sopenharmony_ci	.vdisplay = 768,
92962306a36Sopenharmony_ci	.vsync_start = 768 + 10,
93062306a36Sopenharmony_ci	.vsync_end = 768 + 10 + 12,
93162306a36Sopenharmony_ci	.vtotal = 768 + 10 + 12 + 6,
93262306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
93362306a36Sopenharmony_ci};
93462306a36Sopenharmony_ci
93562306a36Sopenharmony_cistatic const struct panel_desc auo_b116xw03 = {
93662306a36Sopenharmony_ci	.modes = &auo_b116xw03_mode,
93762306a36Sopenharmony_ci	.num_modes = 1,
93862306a36Sopenharmony_ci	.bpc = 6,
93962306a36Sopenharmony_ci	.size = {
94062306a36Sopenharmony_ci		.width = 256,
94162306a36Sopenharmony_ci		.height = 144,
94262306a36Sopenharmony_ci	},
94362306a36Sopenharmony_ci	.delay = {
94462306a36Sopenharmony_ci		.prepare = 1,
94562306a36Sopenharmony_ci		.enable = 200,
94662306a36Sopenharmony_ci		.disable = 200,
94762306a36Sopenharmony_ci		.unprepare = 500,
94862306a36Sopenharmony_ci	},
94962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
95062306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
95162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
95262306a36Sopenharmony_ci};
95362306a36Sopenharmony_ci
95462306a36Sopenharmony_cistatic const struct display_timing auo_g070vvn01_timings = {
95562306a36Sopenharmony_ci	.pixelclock = { 33300000, 34209000, 45000000 },
95662306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
95762306a36Sopenharmony_ci	.hfront_porch = { 20, 40, 200 },
95862306a36Sopenharmony_ci	.hback_porch = { 87, 40, 1 },
95962306a36Sopenharmony_ci	.hsync_len = { 1, 48, 87 },
96062306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
96162306a36Sopenharmony_ci	.vfront_porch = { 5, 13, 200 },
96262306a36Sopenharmony_ci	.vback_porch = { 31, 31, 29 },
96362306a36Sopenharmony_ci	.vsync_len = { 1, 1, 3 },
96462306a36Sopenharmony_ci};
96562306a36Sopenharmony_ci
96662306a36Sopenharmony_cistatic const struct panel_desc auo_g070vvn01 = {
96762306a36Sopenharmony_ci	.timings = &auo_g070vvn01_timings,
96862306a36Sopenharmony_ci	.num_timings = 1,
96962306a36Sopenharmony_ci	.bpc = 8,
97062306a36Sopenharmony_ci	.size = {
97162306a36Sopenharmony_ci		.width = 152,
97262306a36Sopenharmony_ci		.height = 91,
97362306a36Sopenharmony_ci	},
97462306a36Sopenharmony_ci	.delay = {
97562306a36Sopenharmony_ci		.prepare = 200,
97662306a36Sopenharmony_ci		.enable = 50,
97762306a36Sopenharmony_ci		.disable = 50,
97862306a36Sopenharmony_ci		.unprepare = 1000,
97962306a36Sopenharmony_ci	},
98062306a36Sopenharmony_ci};
98162306a36Sopenharmony_ci
98262306a36Sopenharmony_cistatic const struct drm_display_mode auo_g101evn010_mode = {
98362306a36Sopenharmony_ci	.clock = 68930,
98462306a36Sopenharmony_ci	.hdisplay = 1280,
98562306a36Sopenharmony_ci	.hsync_start = 1280 + 82,
98662306a36Sopenharmony_ci	.hsync_end = 1280 + 82 + 2,
98762306a36Sopenharmony_ci	.htotal = 1280 + 82 + 2 + 84,
98862306a36Sopenharmony_ci	.vdisplay = 800,
98962306a36Sopenharmony_ci	.vsync_start = 800 + 8,
99062306a36Sopenharmony_ci	.vsync_end = 800 + 8 + 2,
99162306a36Sopenharmony_ci	.vtotal = 800 + 8 + 2 + 6,
99262306a36Sopenharmony_ci};
99362306a36Sopenharmony_ci
99462306a36Sopenharmony_cistatic const struct panel_desc auo_g101evn010 = {
99562306a36Sopenharmony_ci	.modes = &auo_g101evn010_mode,
99662306a36Sopenharmony_ci	.num_modes = 1,
99762306a36Sopenharmony_ci	.bpc = 6,
99862306a36Sopenharmony_ci	.size = {
99962306a36Sopenharmony_ci		.width = 216,
100062306a36Sopenharmony_ci		.height = 135,
100162306a36Sopenharmony_ci	},
100262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
100362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
100462306a36Sopenharmony_ci};
100562306a36Sopenharmony_ci
100662306a36Sopenharmony_cistatic const struct drm_display_mode auo_g104sn02_mode = {
100762306a36Sopenharmony_ci	.clock = 40000,
100862306a36Sopenharmony_ci	.hdisplay = 800,
100962306a36Sopenharmony_ci	.hsync_start = 800 + 40,
101062306a36Sopenharmony_ci	.hsync_end = 800 + 40 + 216,
101162306a36Sopenharmony_ci	.htotal = 800 + 40 + 216 + 128,
101262306a36Sopenharmony_ci	.vdisplay = 600,
101362306a36Sopenharmony_ci	.vsync_start = 600 + 10,
101462306a36Sopenharmony_ci	.vsync_end = 600 + 10 + 35,
101562306a36Sopenharmony_ci	.vtotal = 600 + 10 + 35 + 2,
101662306a36Sopenharmony_ci};
101762306a36Sopenharmony_ci
101862306a36Sopenharmony_cistatic const struct panel_desc auo_g104sn02 = {
101962306a36Sopenharmony_ci	.modes = &auo_g104sn02_mode,
102062306a36Sopenharmony_ci	.num_modes = 1,
102162306a36Sopenharmony_ci	.bpc = 8,
102262306a36Sopenharmony_ci	.size = {
102362306a36Sopenharmony_ci		.width = 211,
102462306a36Sopenharmony_ci		.height = 158,
102562306a36Sopenharmony_ci	},
102662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
102762306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
102862306a36Sopenharmony_ci};
102962306a36Sopenharmony_ci
103062306a36Sopenharmony_cistatic const struct display_timing auo_g121ean01_timing = {
103162306a36Sopenharmony_ci	.pixelclock = { 60000000, 74400000, 90000000 },
103262306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
103362306a36Sopenharmony_ci	.hfront_porch = { 20, 50, 100 },
103462306a36Sopenharmony_ci	.hback_porch = { 20, 50, 100 },
103562306a36Sopenharmony_ci	.hsync_len = { 30, 100, 200 },
103662306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
103762306a36Sopenharmony_ci	.vfront_porch = { 2, 10, 25 },
103862306a36Sopenharmony_ci	.vback_porch = { 2, 10, 25 },
103962306a36Sopenharmony_ci	.vsync_len = { 4, 18, 50 },
104062306a36Sopenharmony_ci};
104162306a36Sopenharmony_ci
104262306a36Sopenharmony_cistatic const struct panel_desc auo_g121ean01 = {
104362306a36Sopenharmony_ci	.timings = &auo_g121ean01_timing,
104462306a36Sopenharmony_ci	.num_timings = 1,
104562306a36Sopenharmony_ci	.bpc = 8,
104662306a36Sopenharmony_ci	.size = {
104762306a36Sopenharmony_ci		.width = 261,
104862306a36Sopenharmony_ci		.height = 163,
104962306a36Sopenharmony_ci	},
105062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
105162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
105262306a36Sopenharmony_ci};
105362306a36Sopenharmony_ci
105462306a36Sopenharmony_cistatic const struct display_timing auo_g133han01_timings = {
105562306a36Sopenharmony_ci	.pixelclock = { 134000000, 141200000, 149000000 },
105662306a36Sopenharmony_ci	.hactive = { 1920, 1920, 1920 },
105762306a36Sopenharmony_ci	.hfront_porch = { 39, 58, 77 },
105862306a36Sopenharmony_ci	.hback_porch = { 59, 88, 117 },
105962306a36Sopenharmony_ci	.hsync_len = { 28, 42, 56 },
106062306a36Sopenharmony_ci	.vactive = { 1080, 1080, 1080 },
106162306a36Sopenharmony_ci	.vfront_porch = { 3, 8, 11 },
106262306a36Sopenharmony_ci	.vback_porch = { 5, 14, 19 },
106362306a36Sopenharmony_ci	.vsync_len = { 4, 14, 19 },
106462306a36Sopenharmony_ci};
106562306a36Sopenharmony_ci
106662306a36Sopenharmony_cistatic const struct panel_desc auo_g133han01 = {
106762306a36Sopenharmony_ci	.timings = &auo_g133han01_timings,
106862306a36Sopenharmony_ci	.num_timings = 1,
106962306a36Sopenharmony_ci	.bpc = 8,
107062306a36Sopenharmony_ci	.size = {
107162306a36Sopenharmony_ci		.width = 293,
107262306a36Sopenharmony_ci		.height = 165,
107362306a36Sopenharmony_ci	},
107462306a36Sopenharmony_ci	.delay = {
107562306a36Sopenharmony_ci		.prepare = 200,
107662306a36Sopenharmony_ci		.enable = 50,
107762306a36Sopenharmony_ci		.disable = 50,
107862306a36Sopenharmony_ci		.unprepare = 1000,
107962306a36Sopenharmony_ci	},
108062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
108162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
108262306a36Sopenharmony_ci};
108362306a36Sopenharmony_ci
108462306a36Sopenharmony_cistatic const struct drm_display_mode auo_g156xtn01_mode = {
108562306a36Sopenharmony_ci	.clock = 76000,
108662306a36Sopenharmony_ci	.hdisplay = 1366,
108762306a36Sopenharmony_ci	.hsync_start = 1366 + 33,
108862306a36Sopenharmony_ci	.hsync_end = 1366 + 33 + 67,
108962306a36Sopenharmony_ci	.htotal = 1560,
109062306a36Sopenharmony_ci	.vdisplay = 768,
109162306a36Sopenharmony_ci	.vsync_start = 768 + 4,
109262306a36Sopenharmony_ci	.vsync_end = 768 + 4 + 4,
109362306a36Sopenharmony_ci	.vtotal = 806,
109462306a36Sopenharmony_ci};
109562306a36Sopenharmony_ci
109662306a36Sopenharmony_cistatic const struct panel_desc auo_g156xtn01 = {
109762306a36Sopenharmony_ci	.modes = &auo_g156xtn01_mode,
109862306a36Sopenharmony_ci	.num_modes = 1,
109962306a36Sopenharmony_ci	.bpc = 8,
110062306a36Sopenharmony_ci	.size = {
110162306a36Sopenharmony_ci		.width = 344,
110262306a36Sopenharmony_ci		.height = 194,
110362306a36Sopenharmony_ci	},
110462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
110562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
110662306a36Sopenharmony_ci};
110762306a36Sopenharmony_ci
110862306a36Sopenharmony_cistatic const struct display_timing auo_g185han01_timings = {
110962306a36Sopenharmony_ci	.pixelclock = { 120000000, 144000000, 175000000 },
111062306a36Sopenharmony_ci	.hactive = { 1920, 1920, 1920 },
111162306a36Sopenharmony_ci	.hfront_porch = { 36, 120, 148 },
111262306a36Sopenharmony_ci	.hback_porch = { 24, 88, 108 },
111362306a36Sopenharmony_ci	.hsync_len = { 20, 48, 64 },
111462306a36Sopenharmony_ci	.vactive = { 1080, 1080, 1080 },
111562306a36Sopenharmony_ci	.vfront_porch = { 6, 10, 40 },
111662306a36Sopenharmony_ci	.vback_porch = { 2, 5, 20 },
111762306a36Sopenharmony_ci	.vsync_len = { 2, 5, 20 },
111862306a36Sopenharmony_ci};
111962306a36Sopenharmony_ci
112062306a36Sopenharmony_cistatic const struct panel_desc auo_g185han01 = {
112162306a36Sopenharmony_ci	.timings = &auo_g185han01_timings,
112262306a36Sopenharmony_ci	.num_timings = 1,
112362306a36Sopenharmony_ci	.bpc = 8,
112462306a36Sopenharmony_ci	.size = {
112562306a36Sopenharmony_ci		.width = 409,
112662306a36Sopenharmony_ci		.height = 230,
112762306a36Sopenharmony_ci	},
112862306a36Sopenharmony_ci	.delay = {
112962306a36Sopenharmony_ci		.prepare = 50,
113062306a36Sopenharmony_ci		.enable = 200,
113162306a36Sopenharmony_ci		.disable = 110,
113262306a36Sopenharmony_ci		.unprepare = 1000,
113362306a36Sopenharmony_ci	},
113462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
113562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
113662306a36Sopenharmony_ci};
113762306a36Sopenharmony_ci
113862306a36Sopenharmony_cistatic const struct display_timing auo_g190ean01_timings = {
113962306a36Sopenharmony_ci	.pixelclock = { 90000000, 108000000, 135000000 },
114062306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
114162306a36Sopenharmony_ci	.hfront_porch = { 126, 184, 1266 },
114262306a36Sopenharmony_ci	.hback_porch = { 84, 122, 844 },
114362306a36Sopenharmony_ci	.hsync_len = { 70, 102, 704 },
114462306a36Sopenharmony_ci	.vactive = { 1024, 1024, 1024 },
114562306a36Sopenharmony_ci	.vfront_porch = { 4, 26, 76 },
114662306a36Sopenharmony_ci	.vback_porch = { 2, 8, 25 },
114762306a36Sopenharmony_ci	.vsync_len = { 2, 8, 25 },
114862306a36Sopenharmony_ci};
114962306a36Sopenharmony_ci
115062306a36Sopenharmony_cistatic const struct panel_desc auo_g190ean01 = {
115162306a36Sopenharmony_ci	.timings = &auo_g190ean01_timings,
115262306a36Sopenharmony_ci	.num_timings = 1,
115362306a36Sopenharmony_ci	.bpc = 8,
115462306a36Sopenharmony_ci	.size = {
115562306a36Sopenharmony_ci		.width = 376,
115662306a36Sopenharmony_ci		.height = 301,
115762306a36Sopenharmony_ci	},
115862306a36Sopenharmony_ci	.delay = {
115962306a36Sopenharmony_ci		.prepare = 50,
116062306a36Sopenharmony_ci		.enable = 200,
116162306a36Sopenharmony_ci		.disable = 110,
116262306a36Sopenharmony_ci		.unprepare = 1000,
116362306a36Sopenharmony_ci	},
116462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
116562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
116662306a36Sopenharmony_ci};
116762306a36Sopenharmony_ci
116862306a36Sopenharmony_cistatic const struct display_timing auo_p320hvn03_timings = {
116962306a36Sopenharmony_ci	.pixelclock = { 106000000, 148500000, 164000000 },
117062306a36Sopenharmony_ci	.hactive = { 1920, 1920, 1920 },
117162306a36Sopenharmony_ci	.hfront_porch = { 25, 50, 130 },
117262306a36Sopenharmony_ci	.hback_porch = { 25, 50, 130 },
117362306a36Sopenharmony_ci	.hsync_len = { 20, 40, 105 },
117462306a36Sopenharmony_ci	.vactive = { 1080, 1080, 1080 },
117562306a36Sopenharmony_ci	.vfront_porch = { 8, 17, 150 },
117662306a36Sopenharmony_ci	.vback_porch = { 8, 17, 150 },
117762306a36Sopenharmony_ci	.vsync_len = { 4, 11, 100 },
117862306a36Sopenharmony_ci};
117962306a36Sopenharmony_ci
118062306a36Sopenharmony_cistatic const struct panel_desc auo_p320hvn03 = {
118162306a36Sopenharmony_ci	.timings = &auo_p320hvn03_timings,
118262306a36Sopenharmony_ci	.num_timings = 1,
118362306a36Sopenharmony_ci	.bpc = 8,
118462306a36Sopenharmony_ci	.size = {
118562306a36Sopenharmony_ci		.width = 698,
118662306a36Sopenharmony_ci		.height = 393,
118762306a36Sopenharmony_ci	},
118862306a36Sopenharmony_ci	.delay = {
118962306a36Sopenharmony_ci		.prepare = 1,
119062306a36Sopenharmony_ci		.enable = 450,
119162306a36Sopenharmony_ci		.unprepare = 500,
119262306a36Sopenharmony_ci	},
119362306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
119462306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
119562306a36Sopenharmony_ci};
119662306a36Sopenharmony_ci
119762306a36Sopenharmony_cistatic const struct drm_display_mode auo_t215hvn01_mode = {
119862306a36Sopenharmony_ci	.clock = 148800,
119962306a36Sopenharmony_ci	.hdisplay = 1920,
120062306a36Sopenharmony_ci	.hsync_start = 1920 + 88,
120162306a36Sopenharmony_ci	.hsync_end = 1920 + 88 + 44,
120262306a36Sopenharmony_ci	.htotal = 1920 + 88 + 44 + 148,
120362306a36Sopenharmony_ci	.vdisplay = 1080,
120462306a36Sopenharmony_ci	.vsync_start = 1080 + 4,
120562306a36Sopenharmony_ci	.vsync_end = 1080 + 4 + 5,
120662306a36Sopenharmony_ci	.vtotal = 1080 + 4 + 5 + 36,
120762306a36Sopenharmony_ci};
120862306a36Sopenharmony_ci
120962306a36Sopenharmony_cistatic const struct panel_desc auo_t215hvn01 = {
121062306a36Sopenharmony_ci	.modes = &auo_t215hvn01_mode,
121162306a36Sopenharmony_ci	.num_modes = 1,
121262306a36Sopenharmony_ci	.bpc = 8,
121362306a36Sopenharmony_ci	.size = {
121462306a36Sopenharmony_ci		.width = 430,
121562306a36Sopenharmony_ci		.height = 270,
121662306a36Sopenharmony_ci	},
121762306a36Sopenharmony_ci	.delay = {
121862306a36Sopenharmony_ci		.disable = 5,
121962306a36Sopenharmony_ci		.unprepare = 1000,
122062306a36Sopenharmony_ci	},
122162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
122262306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
122362306a36Sopenharmony_ci};
122462306a36Sopenharmony_ci
122562306a36Sopenharmony_cistatic const struct drm_display_mode avic_tm070ddh03_mode = {
122662306a36Sopenharmony_ci	.clock = 51200,
122762306a36Sopenharmony_ci	.hdisplay = 1024,
122862306a36Sopenharmony_ci	.hsync_start = 1024 + 160,
122962306a36Sopenharmony_ci	.hsync_end = 1024 + 160 + 4,
123062306a36Sopenharmony_ci	.htotal = 1024 + 160 + 4 + 156,
123162306a36Sopenharmony_ci	.vdisplay = 600,
123262306a36Sopenharmony_ci	.vsync_start = 600 + 17,
123362306a36Sopenharmony_ci	.vsync_end = 600 + 17 + 1,
123462306a36Sopenharmony_ci	.vtotal = 600 + 17 + 1 + 17,
123562306a36Sopenharmony_ci};
123662306a36Sopenharmony_ci
123762306a36Sopenharmony_cistatic const struct panel_desc avic_tm070ddh03 = {
123862306a36Sopenharmony_ci	.modes = &avic_tm070ddh03_mode,
123962306a36Sopenharmony_ci	.num_modes = 1,
124062306a36Sopenharmony_ci	.bpc = 8,
124162306a36Sopenharmony_ci	.size = {
124262306a36Sopenharmony_ci		.width = 154,
124362306a36Sopenharmony_ci		.height = 90,
124462306a36Sopenharmony_ci	},
124562306a36Sopenharmony_ci	.delay = {
124662306a36Sopenharmony_ci		.prepare = 20,
124762306a36Sopenharmony_ci		.enable = 200,
124862306a36Sopenharmony_ci		.disable = 200,
124962306a36Sopenharmony_ci	},
125062306a36Sopenharmony_ci};
125162306a36Sopenharmony_ci
125262306a36Sopenharmony_cistatic const struct drm_display_mode bananapi_s070wv20_ct16_mode = {
125362306a36Sopenharmony_ci	.clock = 30000,
125462306a36Sopenharmony_ci	.hdisplay = 800,
125562306a36Sopenharmony_ci	.hsync_start = 800 + 40,
125662306a36Sopenharmony_ci	.hsync_end = 800 + 40 + 48,
125762306a36Sopenharmony_ci	.htotal = 800 + 40 + 48 + 40,
125862306a36Sopenharmony_ci	.vdisplay = 480,
125962306a36Sopenharmony_ci	.vsync_start = 480 + 13,
126062306a36Sopenharmony_ci	.vsync_end = 480 + 13 + 3,
126162306a36Sopenharmony_ci	.vtotal = 480 + 13 + 3 + 29,
126262306a36Sopenharmony_ci};
126362306a36Sopenharmony_ci
126462306a36Sopenharmony_cistatic const struct panel_desc bananapi_s070wv20_ct16 = {
126562306a36Sopenharmony_ci	.modes = &bananapi_s070wv20_ct16_mode,
126662306a36Sopenharmony_ci	.num_modes = 1,
126762306a36Sopenharmony_ci	.bpc = 6,
126862306a36Sopenharmony_ci	.size = {
126962306a36Sopenharmony_ci		.width = 154,
127062306a36Sopenharmony_ci		.height = 86,
127162306a36Sopenharmony_ci	},
127262306a36Sopenharmony_ci};
127362306a36Sopenharmony_ci
127462306a36Sopenharmony_cistatic const struct display_timing boe_ev121wxm_n10_1850_timing = {
127562306a36Sopenharmony_ci	.pixelclock = { 69922000, 71000000, 72293000 },
127662306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
127762306a36Sopenharmony_ci	.hfront_porch = { 48, 48, 48 },
127862306a36Sopenharmony_ci	.hback_porch = { 80, 80, 80 },
127962306a36Sopenharmony_ci	.hsync_len = { 32, 32, 32 },
128062306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
128162306a36Sopenharmony_ci	.vfront_porch = { 3, 3, 3 },
128262306a36Sopenharmony_ci	.vback_porch = { 14, 14, 14 },
128362306a36Sopenharmony_ci	.vsync_len = { 6, 6, 6 },
128462306a36Sopenharmony_ci};
128562306a36Sopenharmony_ci
128662306a36Sopenharmony_cistatic const struct panel_desc boe_ev121wxm_n10_1850 = {
128762306a36Sopenharmony_ci	.timings = &boe_ev121wxm_n10_1850_timing,
128862306a36Sopenharmony_ci	.num_timings = 1,
128962306a36Sopenharmony_ci	.bpc = 8,
129062306a36Sopenharmony_ci	.size = {
129162306a36Sopenharmony_ci		.width = 261,
129262306a36Sopenharmony_ci		.height = 163,
129362306a36Sopenharmony_ci	},
129462306a36Sopenharmony_ci	.delay = {
129562306a36Sopenharmony_ci		.prepare = 9,
129662306a36Sopenharmony_ci		.enable = 300,
129762306a36Sopenharmony_ci		.unprepare = 300,
129862306a36Sopenharmony_ci		.disable = 560,
129962306a36Sopenharmony_ci	},
130062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
130162306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
130262306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
130362306a36Sopenharmony_ci};
130462306a36Sopenharmony_ci
130562306a36Sopenharmony_cistatic const struct drm_display_mode boe_hv070wsa_mode = {
130662306a36Sopenharmony_ci	.clock = 42105,
130762306a36Sopenharmony_ci	.hdisplay = 1024,
130862306a36Sopenharmony_ci	.hsync_start = 1024 + 30,
130962306a36Sopenharmony_ci	.hsync_end = 1024 + 30 + 30,
131062306a36Sopenharmony_ci	.htotal = 1024 + 30 + 30 + 30,
131162306a36Sopenharmony_ci	.vdisplay = 600,
131262306a36Sopenharmony_ci	.vsync_start = 600 + 10,
131362306a36Sopenharmony_ci	.vsync_end = 600 + 10 + 10,
131462306a36Sopenharmony_ci	.vtotal = 600 + 10 + 10 + 10,
131562306a36Sopenharmony_ci};
131662306a36Sopenharmony_ci
131762306a36Sopenharmony_cistatic const struct panel_desc boe_hv070wsa = {
131862306a36Sopenharmony_ci	.modes = &boe_hv070wsa_mode,
131962306a36Sopenharmony_ci	.num_modes = 1,
132062306a36Sopenharmony_ci	.bpc = 8,
132162306a36Sopenharmony_ci	.size = {
132262306a36Sopenharmony_ci		.width = 154,
132362306a36Sopenharmony_ci		.height = 90,
132462306a36Sopenharmony_ci	},
132562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
132662306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
132762306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
132862306a36Sopenharmony_ci};
132962306a36Sopenharmony_ci
133062306a36Sopenharmony_cistatic const struct drm_display_mode cdtech_s043wq26h_ct7_mode = {
133162306a36Sopenharmony_ci	.clock = 9000,
133262306a36Sopenharmony_ci	.hdisplay = 480,
133362306a36Sopenharmony_ci	.hsync_start = 480 + 5,
133462306a36Sopenharmony_ci	.hsync_end = 480 + 5 + 5,
133562306a36Sopenharmony_ci	.htotal = 480 + 5 + 5 + 40,
133662306a36Sopenharmony_ci	.vdisplay = 272,
133762306a36Sopenharmony_ci	.vsync_start = 272 + 8,
133862306a36Sopenharmony_ci	.vsync_end = 272 + 8 + 8,
133962306a36Sopenharmony_ci	.vtotal = 272 + 8 + 8 + 8,
134062306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
134162306a36Sopenharmony_ci};
134262306a36Sopenharmony_ci
134362306a36Sopenharmony_cistatic const struct panel_desc cdtech_s043wq26h_ct7 = {
134462306a36Sopenharmony_ci	.modes = &cdtech_s043wq26h_ct7_mode,
134562306a36Sopenharmony_ci	.num_modes = 1,
134662306a36Sopenharmony_ci	.bpc = 8,
134762306a36Sopenharmony_ci	.size = {
134862306a36Sopenharmony_ci		.width = 95,
134962306a36Sopenharmony_ci		.height = 54,
135062306a36Sopenharmony_ci	},
135162306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
135262306a36Sopenharmony_ci};
135362306a36Sopenharmony_ci
135462306a36Sopenharmony_ci/* S070PWS19HP-FC21 2017/04/22 */
135562306a36Sopenharmony_cistatic const struct drm_display_mode cdtech_s070pws19hp_fc21_mode = {
135662306a36Sopenharmony_ci	.clock = 51200,
135762306a36Sopenharmony_ci	.hdisplay = 1024,
135862306a36Sopenharmony_ci	.hsync_start = 1024 + 160,
135962306a36Sopenharmony_ci	.hsync_end = 1024 + 160 + 20,
136062306a36Sopenharmony_ci	.htotal = 1024 + 160 + 20 + 140,
136162306a36Sopenharmony_ci	.vdisplay = 600,
136262306a36Sopenharmony_ci	.vsync_start = 600 + 12,
136362306a36Sopenharmony_ci	.vsync_end = 600 + 12 + 3,
136462306a36Sopenharmony_ci	.vtotal = 600 + 12 + 3 + 20,
136562306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
136662306a36Sopenharmony_ci};
136762306a36Sopenharmony_ci
136862306a36Sopenharmony_cistatic const struct panel_desc cdtech_s070pws19hp_fc21 = {
136962306a36Sopenharmony_ci	.modes = &cdtech_s070pws19hp_fc21_mode,
137062306a36Sopenharmony_ci	.num_modes = 1,
137162306a36Sopenharmony_ci	.bpc = 6,
137262306a36Sopenharmony_ci	.size = {
137362306a36Sopenharmony_ci		.width = 154,
137462306a36Sopenharmony_ci		.height = 86,
137562306a36Sopenharmony_ci	},
137662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
137762306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
137862306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
137962306a36Sopenharmony_ci};
138062306a36Sopenharmony_ci
138162306a36Sopenharmony_ci/* S070SWV29HG-DC44 2017/09/21 */
138262306a36Sopenharmony_cistatic const struct drm_display_mode cdtech_s070swv29hg_dc44_mode = {
138362306a36Sopenharmony_ci	.clock = 33300,
138462306a36Sopenharmony_ci	.hdisplay = 800,
138562306a36Sopenharmony_ci	.hsync_start = 800 + 210,
138662306a36Sopenharmony_ci	.hsync_end = 800 + 210 + 2,
138762306a36Sopenharmony_ci	.htotal = 800 + 210 + 2 + 44,
138862306a36Sopenharmony_ci	.vdisplay = 480,
138962306a36Sopenharmony_ci	.vsync_start = 480 + 22,
139062306a36Sopenharmony_ci	.vsync_end = 480 + 22 + 2,
139162306a36Sopenharmony_ci	.vtotal = 480 + 22 + 2 + 21,
139262306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
139362306a36Sopenharmony_ci};
139462306a36Sopenharmony_ci
139562306a36Sopenharmony_cistatic const struct panel_desc cdtech_s070swv29hg_dc44 = {
139662306a36Sopenharmony_ci	.modes = &cdtech_s070swv29hg_dc44_mode,
139762306a36Sopenharmony_ci	.num_modes = 1,
139862306a36Sopenharmony_ci	.bpc = 6,
139962306a36Sopenharmony_ci	.size = {
140062306a36Sopenharmony_ci		.width = 154,
140162306a36Sopenharmony_ci		.height = 86,
140262306a36Sopenharmony_ci	},
140362306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
140462306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
140562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
140662306a36Sopenharmony_ci};
140762306a36Sopenharmony_ci
140862306a36Sopenharmony_cistatic const struct drm_display_mode cdtech_s070wv95_ct16_mode = {
140962306a36Sopenharmony_ci	.clock = 35000,
141062306a36Sopenharmony_ci	.hdisplay = 800,
141162306a36Sopenharmony_ci	.hsync_start = 800 + 40,
141262306a36Sopenharmony_ci	.hsync_end = 800 + 40 + 40,
141362306a36Sopenharmony_ci	.htotal = 800 + 40 + 40 + 48,
141462306a36Sopenharmony_ci	.vdisplay = 480,
141562306a36Sopenharmony_ci	.vsync_start = 480 + 29,
141662306a36Sopenharmony_ci	.vsync_end = 480 + 29 + 13,
141762306a36Sopenharmony_ci	.vtotal = 480 + 29 + 13 + 3,
141862306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
141962306a36Sopenharmony_ci};
142062306a36Sopenharmony_ci
142162306a36Sopenharmony_cistatic const struct panel_desc cdtech_s070wv95_ct16 = {
142262306a36Sopenharmony_ci	.modes = &cdtech_s070wv95_ct16_mode,
142362306a36Sopenharmony_ci	.num_modes = 1,
142462306a36Sopenharmony_ci	.bpc = 8,
142562306a36Sopenharmony_ci	.size = {
142662306a36Sopenharmony_ci		.width = 154,
142762306a36Sopenharmony_ci		.height = 85,
142862306a36Sopenharmony_ci	},
142962306a36Sopenharmony_ci};
143062306a36Sopenharmony_ci
143162306a36Sopenharmony_cistatic const struct display_timing chefree_ch101olhlwh_002_timing = {
143262306a36Sopenharmony_ci	.pixelclock = { 68900000, 71100000, 73400000 },
143362306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
143462306a36Sopenharmony_ci	.hfront_porch = { 65, 80, 95 },
143562306a36Sopenharmony_ci	.hback_porch = { 64, 79, 94 },
143662306a36Sopenharmony_ci	.hsync_len = { 1, 1, 1 },
143762306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
143862306a36Sopenharmony_ci	.vfront_porch = { 7, 11, 14 },
143962306a36Sopenharmony_ci	.vback_porch = { 7, 11, 14 },
144062306a36Sopenharmony_ci	.vsync_len = { 1, 1, 1 },
144162306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
144262306a36Sopenharmony_ci};
144362306a36Sopenharmony_ci
144462306a36Sopenharmony_cistatic const struct panel_desc chefree_ch101olhlwh_002 = {
144562306a36Sopenharmony_ci	.timings = &chefree_ch101olhlwh_002_timing,
144662306a36Sopenharmony_ci	.num_timings = 1,
144762306a36Sopenharmony_ci	.bpc = 8,
144862306a36Sopenharmony_ci	.size = {
144962306a36Sopenharmony_ci		.width = 217,
145062306a36Sopenharmony_ci		.height = 135,
145162306a36Sopenharmony_ci	},
145262306a36Sopenharmony_ci	.delay = {
145362306a36Sopenharmony_ci		.enable = 200,
145462306a36Sopenharmony_ci		.disable = 200,
145562306a36Sopenharmony_ci	},
145662306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
145762306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
145862306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
145962306a36Sopenharmony_ci};
146062306a36Sopenharmony_ci
146162306a36Sopenharmony_cistatic const struct drm_display_mode chunghwa_claa070wp03xg_mode = {
146262306a36Sopenharmony_ci	.clock = 66770,
146362306a36Sopenharmony_ci	.hdisplay = 800,
146462306a36Sopenharmony_ci	.hsync_start = 800 + 49,
146562306a36Sopenharmony_ci	.hsync_end = 800 + 49 + 33,
146662306a36Sopenharmony_ci	.htotal = 800 + 49 + 33 + 17,
146762306a36Sopenharmony_ci	.vdisplay = 1280,
146862306a36Sopenharmony_ci	.vsync_start = 1280 + 1,
146962306a36Sopenharmony_ci	.vsync_end = 1280 + 1 + 7,
147062306a36Sopenharmony_ci	.vtotal = 1280 + 1 + 7 + 15,
147162306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
147262306a36Sopenharmony_ci};
147362306a36Sopenharmony_ci
147462306a36Sopenharmony_cistatic const struct panel_desc chunghwa_claa070wp03xg = {
147562306a36Sopenharmony_ci	.modes = &chunghwa_claa070wp03xg_mode,
147662306a36Sopenharmony_ci	.num_modes = 1,
147762306a36Sopenharmony_ci	.bpc = 6,
147862306a36Sopenharmony_ci	.size = {
147962306a36Sopenharmony_ci		.width = 94,
148062306a36Sopenharmony_ci		.height = 150,
148162306a36Sopenharmony_ci	},
148262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
148362306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
148462306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
148562306a36Sopenharmony_ci};
148662306a36Sopenharmony_ci
148762306a36Sopenharmony_cistatic const struct drm_display_mode chunghwa_claa101wa01a_mode = {
148862306a36Sopenharmony_ci	.clock = 72070,
148962306a36Sopenharmony_ci	.hdisplay = 1366,
149062306a36Sopenharmony_ci	.hsync_start = 1366 + 58,
149162306a36Sopenharmony_ci	.hsync_end = 1366 + 58 + 58,
149262306a36Sopenharmony_ci	.htotal = 1366 + 58 + 58 + 58,
149362306a36Sopenharmony_ci	.vdisplay = 768,
149462306a36Sopenharmony_ci	.vsync_start = 768 + 4,
149562306a36Sopenharmony_ci	.vsync_end = 768 + 4 + 4,
149662306a36Sopenharmony_ci	.vtotal = 768 + 4 + 4 + 4,
149762306a36Sopenharmony_ci};
149862306a36Sopenharmony_ci
149962306a36Sopenharmony_cistatic const struct panel_desc chunghwa_claa101wa01a = {
150062306a36Sopenharmony_ci	.modes = &chunghwa_claa101wa01a_mode,
150162306a36Sopenharmony_ci	.num_modes = 1,
150262306a36Sopenharmony_ci	.bpc = 6,
150362306a36Sopenharmony_ci	.size = {
150462306a36Sopenharmony_ci		.width = 220,
150562306a36Sopenharmony_ci		.height = 120,
150662306a36Sopenharmony_ci	},
150762306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
150862306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
150962306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
151062306a36Sopenharmony_ci};
151162306a36Sopenharmony_ci
151262306a36Sopenharmony_cistatic const struct drm_display_mode chunghwa_claa101wb01_mode = {
151362306a36Sopenharmony_ci	.clock = 69300,
151462306a36Sopenharmony_ci	.hdisplay = 1366,
151562306a36Sopenharmony_ci	.hsync_start = 1366 + 48,
151662306a36Sopenharmony_ci	.hsync_end = 1366 + 48 + 32,
151762306a36Sopenharmony_ci	.htotal = 1366 + 48 + 32 + 20,
151862306a36Sopenharmony_ci	.vdisplay = 768,
151962306a36Sopenharmony_ci	.vsync_start = 768 + 16,
152062306a36Sopenharmony_ci	.vsync_end = 768 + 16 + 8,
152162306a36Sopenharmony_ci	.vtotal = 768 + 16 + 8 + 16,
152262306a36Sopenharmony_ci};
152362306a36Sopenharmony_ci
152462306a36Sopenharmony_cistatic const struct panel_desc chunghwa_claa101wb01 = {
152562306a36Sopenharmony_ci	.modes = &chunghwa_claa101wb01_mode,
152662306a36Sopenharmony_ci	.num_modes = 1,
152762306a36Sopenharmony_ci	.bpc = 6,
152862306a36Sopenharmony_ci	.size = {
152962306a36Sopenharmony_ci		.width = 223,
153062306a36Sopenharmony_ci		.height = 125,
153162306a36Sopenharmony_ci	},
153262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
153362306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
153462306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
153562306a36Sopenharmony_ci};
153662306a36Sopenharmony_ci
153762306a36Sopenharmony_cistatic const struct display_timing dataimage_fg040346dsswbg04_timing = {
153862306a36Sopenharmony_ci	.pixelclock = { 5000000, 9000000, 12000000 },
153962306a36Sopenharmony_ci	.hactive = { 480, 480, 480 },
154062306a36Sopenharmony_ci	.hfront_porch = { 12, 12, 12 },
154162306a36Sopenharmony_ci	.hback_porch = { 12, 12, 12 },
154262306a36Sopenharmony_ci	.hsync_len = { 21, 21, 21 },
154362306a36Sopenharmony_ci	.vactive = { 272, 272, 272 },
154462306a36Sopenharmony_ci	.vfront_porch = { 4, 4, 4 },
154562306a36Sopenharmony_ci	.vback_porch = { 4, 4, 4 },
154662306a36Sopenharmony_ci	.vsync_len = { 8, 8, 8 },
154762306a36Sopenharmony_ci};
154862306a36Sopenharmony_ci
154962306a36Sopenharmony_cistatic const struct panel_desc dataimage_fg040346dsswbg04 = {
155062306a36Sopenharmony_ci	.timings = &dataimage_fg040346dsswbg04_timing,
155162306a36Sopenharmony_ci	.num_timings = 1,
155262306a36Sopenharmony_ci	.bpc = 8,
155362306a36Sopenharmony_ci	.size = {
155462306a36Sopenharmony_ci		.width = 95,
155562306a36Sopenharmony_ci		.height = 54,
155662306a36Sopenharmony_ci	},
155762306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
155862306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
155962306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
156062306a36Sopenharmony_ci};
156162306a36Sopenharmony_ci
156262306a36Sopenharmony_cistatic const struct display_timing dataimage_fg1001l0dsswmg01_timing = {
156362306a36Sopenharmony_ci	.pixelclock = { 68900000, 71110000, 73400000 },
156462306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
156562306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
156662306a36Sopenharmony_ci	.hback_porch = { 100, 100, 100 },
156762306a36Sopenharmony_ci	.hfront_porch = { 100, 100, 100 },
156862306a36Sopenharmony_ci	.vback_porch = { 5, 5, 5 },
156962306a36Sopenharmony_ci	.vfront_porch = { 5, 5, 5 },
157062306a36Sopenharmony_ci	.hsync_len = { 24, 24, 24 },
157162306a36Sopenharmony_ci	.vsync_len = { 3, 3, 3 },
157262306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
157362306a36Sopenharmony_ci		 DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW,
157462306a36Sopenharmony_ci};
157562306a36Sopenharmony_ci
157662306a36Sopenharmony_cistatic const struct panel_desc dataimage_fg1001l0dsswmg01 = {
157762306a36Sopenharmony_ci	.timings = &dataimage_fg1001l0dsswmg01_timing,
157862306a36Sopenharmony_ci	.num_timings = 1,
157962306a36Sopenharmony_ci	.bpc = 8,
158062306a36Sopenharmony_ci	.size = {
158162306a36Sopenharmony_ci		.width = 217,
158262306a36Sopenharmony_ci		.height = 136,
158362306a36Sopenharmony_ci	},
158462306a36Sopenharmony_ci};
158562306a36Sopenharmony_ci
158662306a36Sopenharmony_cistatic const struct drm_display_mode dataimage_scf0700c48ggu18_mode = {
158762306a36Sopenharmony_ci	.clock = 33260,
158862306a36Sopenharmony_ci	.hdisplay = 800,
158962306a36Sopenharmony_ci	.hsync_start = 800 + 40,
159062306a36Sopenharmony_ci	.hsync_end = 800 + 40 + 128,
159162306a36Sopenharmony_ci	.htotal = 800 + 40 + 128 + 88,
159262306a36Sopenharmony_ci	.vdisplay = 480,
159362306a36Sopenharmony_ci	.vsync_start = 480 + 10,
159462306a36Sopenharmony_ci	.vsync_end = 480 + 10 + 2,
159562306a36Sopenharmony_ci	.vtotal = 480 + 10 + 2 + 33,
159662306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
159762306a36Sopenharmony_ci};
159862306a36Sopenharmony_ci
159962306a36Sopenharmony_cistatic const struct panel_desc dataimage_scf0700c48ggu18 = {
160062306a36Sopenharmony_ci	.modes = &dataimage_scf0700c48ggu18_mode,
160162306a36Sopenharmony_ci	.num_modes = 1,
160262306a36Sopenharmony_ci	.bpc = 8,
160362306a36Sopenharmony_ci	.size = {
160462306a36Sopenharmony_ci		.width = 152,
160562306a36Sopenharmony_ci		.height = 91,
160662306a36Sopenharmony_ci	},
160762306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
160862306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
160962306a36Sopenharmony_ci};
161062306a36Sopenharmony_ci
161162306a36Sopenharmony_cistatic const struct display_timing dlc_dlc0700yzg_1_timing = {
161262306a36Sopenharmony_ci	.pixelclock = { 45000000, 51200000, 57000000 },
161362306a36Sopenharmony_ci	.hactive = { 1024, 1024, 1024 },
161462306a36Sopenharmony_ci	.hfront_porch = { 100, 106, 113 },
161562306a36Sopenharmony_ci	.hback_porch = { 100, 106, 113 },
161662306a36Sopenharmony_ci	.hsync_len = { 100, 108, 114 },
161762306a36Sopenharmony_ci	.vactive = { 600, 600, 600 },
161862306a36Sopenharmony_ci	.vfront_porch = { 8, 11, 15 },
161962306a36Sopenharmony_ci	.vback_porch = { 8, 11, 15 },
162062306a36Sopenharmony_ci	.vsync_len = { 9, 13, 15 },
162162306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
162262306a36Sopenharmony_ci};
162362306a36Sopenharmony_ci
162462306a36Sopenharmony_cistatic const struct panel_desc dlc_dlc0700yzg_1 = {
162562306a36Sopenharmony_ci	.timings = &dlc_dlc0700yzg_1_timing,
162662306a36Sopenharmony_ci	.num_timings = 1,
162762306a36Sopenharmony_ci	.bpc = 6,
162862306a36Sopenharmony_ci	.size = {
162962306a36Sopenharmony_ci		.width = 154,
163062306a36Sopenharmony_ci		.height = 86,
163162306a36Sopenharmony_ci	},
163262306a36Sopenharmony_ci	.delay = {
163362306a36Sopenharmony_ci		.prepare = 30,
163462306a36Sopenharmony_ci		.enable = 200,
163562306a36Sopenharmony_ci		.disable = 200,
163662306a36Sopenharmony_ci	},
163762306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
163862306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
163962306a36Sopenharmony_ci};
164062306a36Sopenharmony_ci
164162306a36Sopenharmony_cistatic const struct display_timing dlc_dlc1010gig_timing = {
164262306a36Sopenharmony_ci	.pixelclock = { 68900000, 71100000, 73400000 },
164362306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
164462306a36Sopenharmony_ci	.hfront_porch = { 43, 53, 63 },
164562306a36Sopenharmony_ci	.hback_porch = { 43, 53, 63 },
164662306a36Sopenharmony_ci	.hsync_len = { 44, 54, 64 },
164762306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
164862306a36Sopenharmony_ci	.vfront_porch = { 5, 8, 11 },
164962306a36Sopenharmony_ci	.vback_porch = { 5, 8, 11 },
165062306a36Sopenharmony_ci	.vsync_len = { 5, 7, 11 },
165162306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
165262306a36Sopenharmony_ci};
165362306a36Sopenharmony_ci
165462306a36Sopenharmony_cistatic const struct panel_desc dlc_dlc1010gig = {
165562306a36Sopenharmony_ci	.timings = &dlc_dlc1010gig_timing,
165662306a36Sopenharmony_ci	.num_timings = 1,
165762306a36Sopenharmony_ci	.bpc = 8,
165862306a36Sopenharmony_ci	.size = {
165962306a36Sopenharmony_ci		.width = 216,
166062306a36Sopenharmony_ci		.height = 135,
166162306a36Sopenharmony_ci	},
166262306a36Sopenharmony_ci	.delay = {
166362306a36Sopenharmony_ci		.prepare = 60,
166462306a36Sopenharmony_ci		.enable = 150,
166562306a36Sopenharmony_ci		.disable = 100,
166662306a36Sopenharmony_ci		.unprepare = 60,
166762306a36Sopenharmony_ci	},
166862306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
166962306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
167062306a36Sopenharmony_ci};
167162306a36Sopenharmony_ci
167262306a36Sopenharmony_cistatic const struct drm_display_mode edt_et035012dm6_mode = {
167362306a36Sopenharmony_ci	.clock = 6500,
167462306a36Sopenharmony_ci	.hdisplay = 320,
167562306a36Sopenharmony_ci	.hsync_start = 320 + 20,
167662306a36Sopenharmony_ci	.hsync_end = 320 + 20 + 30,
167762306a36Sopenharmony_ci	.htotal = 320 + 20 + 68,
167862306a36Sopenharmony_ci	.vdisplay = 240,
167962306a36Sopenharmony_ci	.vsync_start = 240 + 4,
168062306a36Sopenharmony_ci	.vsync_end = 240 + 4 + 4,
168162306a36Sopenharmony_ci	.vtotal = 240 + 4 + 4 + 14,
168262306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
168362306a36Sopenharmony_ci};
168462306a36Sopenharmony_ci
168562306a36Sopenharmony_cistatic const struct panel_desc edt_et035012dm6 = {
168662306a36Sopenharmony_ci	.modes = &edt_et035012dm6_mode,
168762306a36Sopenharmony_ci	.num_modes = 1,
168862306a36Sopenharmony_ci	.bpc = 8,
168962306a36Sopenharmony_ci	.size = {
169062306a36Sopenharmony_ci		.width = 70,
169162306a36Sopenharmony_ci		.height = 52,
169262306a36Sopenharmony_ci	},
169362306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
169462306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
169562306a36Sopenharmony_ci};
169662306a36Sopenharmony_ci
169762306a36Sopenharmony_cistatic const struct drm_display_mode edt_etm0350g0dh6_mode = {
169862306a36Sopenharmony_ci	.clock = 6520,
169962306a36Sopenharmony_ci	.hdisplay = 320,
170062306a36Sopenharmony_ci	.hsync_start = 320 + 20,
170162306a36Sopenharmony_ci	.hsync_end = 320 + 20 + 68,
170262306a36Sopenharmony_ci	.htotal = 320 + 20 + 68,
170362306a36Sopenharmony_ci	.vdisplay = 240,
170462306a36Sopenharmony_ci	.vsync_start = 240 + 4,
170562306a36Sopenharmony_ci	.vsync_end = 240 + 4 + 18,
170662306a36Sopenharmony_ci	.vtotal = 240 + 4 + 18,
170762306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
170862306a36Sopenharmony_ci};
170962306a36Sopenharmony_ci
171062306a36Sopenharmony_cistatic const struct panel_desc edt_etm0350g0dh6 = {
171162306a36Sopenharmony_ci	.modes = &edt_etm0350g0dh6_mode,
171262306a36Sopenharmony_ci	.num_modes = 1,
171362306a36Sopenharmony_ci	.bpc = 6,
171462306a36Sopenharmony_ci	.size = {
171562306a36Sopenharmony_ci		.width = 70,
171662306a36Sopenharmony_ci		.height = 53,
171762306a36Sopenharmony_ci	},
171862306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
171962306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
172062306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
172162306a36Sopenharmony_ci};
172262306a36Sopenharmony_ci
172362306a36Sopenharmony_cistatic const struct drm_display_mode edt_etm043080dh6gp_mode = {
172462306a36Sopenharmony_ci	.clock = 10870,
172562306a36Sopenharmony_ci	.hdisplay = 480,
172662306a36Sopenharmony_ci	.hsync_start = 480 + 8,
172762306a36Sopenharmony_ci	.hsync_end = 480 + 8 + 4,
172862306a36Sopenharmony_ci	.htotal = 480 + 8 + 4 + 41,
172962306a36Sopenharmony_ci
173062306a36Sopenharmony_ci	/*
173162306a36Sopenharmony_ci	 * IWG22M: Y resolution changed for "dc_linuxfb" module crashing while
173262306a36Sopenharmony_ci	 * fb_align
173362306a36Sopenharmony_ci	 */
173462306a36Sopenharmony_ci
173562306a36Sopenharmony_ci	.vdisplay = 288,
173662306a36Sopenharmony_ci	.vsync_start = 288 + 2,
173762306a36Sopenharmony_ci	.vsync_end = 288 + 2 + 4,
173862306a36Sopenharmony_ci	.vtotal = 288 + 2 + 4 + 10,
173962306a36Sopenharmony_ci};
174062306a36Sopenharmony_ci
174162306a36Sopenharmony_cistatic const struct panel_desc edt_etm043080dh6gp = {
174262306a36Sopenharmony_ci	.modes = &edt_etm043080dh6gp_mode,
174362306a36Sopenharmony_ci	.num_modes = 1,
174462306a36Sopenharmony_ci	.bpc = 8,
174562306a36Sopenharmony_ci	.size = {
174662306a36Sopenharmony_ci		.width = 100,
174762306a36Sopenharmony_ci		.height = 65,
174862306a36Sopenharmony_ci	},
174962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
175062306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
175162306a36Sopenharmony_ci};
175262306a36Sopenharmony_ci
175362306a36Sopenharmony_cistatic const struct drm_display_mode edt_etm0430g0dh6_mode = {
175462306a36Sopenharmony_ci	.clock = 9000,
175562306a36Sopenharmony_ci	.hdisplay = 480,
175662306a36Sopenharmony_ci	.hsync_start = 480 + 2,
175762306a36Sopenharmony_ci	.hsync_end = 480 + 2 + 41,
175862306a36Sopenharmony_ci	.htotal = 480 + 2 + 41 + 2,
175962306a36Sopenharmony_ci	.vdisplay = 272,
176062306a36Sopenharmony_ci	.vsync_start = 272 + 2,
176162306a36Sopenharmony_ci	.vsync_end = 272 + 2 + 10,
176262306a36Sopenharmony_ci	.vtotal = 272 + 2 + 10 + 2,
176362306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
176462306a36Sopenharmony_ci};
176562306a36Sopenharmony_ci
176662306a36Sopenharmony_cistatic const struct panel_desc edt_etm0430g0dh6 = {
176762306a36Sopenharmony_ci	.modes = &edt_etm0430g0dh6_mode,
176862306a36Sopenharmony_ci	.num_modes = 1,
176962306a36Sopenharmony_ci	.bpc = 6,
177062306a36Sopenharmony_ci	.size = {
177162306a36Sopenharmony_ci		.width = 95,
177262306a36Sopenharmony_ci		.height = 54,
177362306a36Sopenharmony_ci	},
177462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
177562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
177662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
177762306a36Sopenharmony_ci};
177862306a36Sopenharmony_ci
177962306a36Sopenharmony_cistatic const struct drm_display_mode edt_et057090dhu_mode = {
178062306a36Sopenharmony_ci	.clock = 25175,
178162306a36Sopenharmony_ci	.hdisplay = 640,
178262306a36Sopenharmony_ci	.hsync_start = 640 + 16,
178362306a36Sopenharmony_ci	.hsync_end = 640 + 16 + 30,
178462306a36Sopenharmony_ci	.htotal = 640 + 16 + 30 + 114,
178562306a36Sopenharmony_ci	.vdisplay = 480,
178662306a36Sopenharmony_ci	.vsync_start = 480 + 10,
178762306a36Sopenharmony_ci	.vsync_end = 480 + 10 + 3,
178862306a36Sopenharmony_ci	.vtotal = 480 + 10 + 3 + 32,
178962306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
179062306a36Sopenharmony_ci};
179162306a36Sopenharmony_ci
179262306a36Sopenharmony_cistatic const struct panel_desc edt_et057090dhu = {
179362306a36Sopenharmony_ci	.modes = &edt_et057090dhu_mode,
179462306a36Sopenharmony_ci	.num_modes = 1,
179562306a36Sopenharmony_ci	.bpc = 6,
179662306a36Sopenharmony_ci	.size = {
179762306a36Sopenharmony_ci		.width = 115,
179862306a36Sopenharmony_ci		.height = 86,
179962306a36Sopenharmony_ci	},
180062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
180162306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
180262306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
180362306a36Sopenharmony_ci};
180462306a36Sopenharmony_ci
180562306a36Sopenharmony_cistatic const struct drm_display_mode edt_etm0700g0dh6_mode = {
180662306a36Sopenharmony_ci	.clock = 33260,
180762306a36Sopenharmony_ci	.hdisplay = 800,
180862306a36Sopenharmony_ci	.hsync_start = 800 + 40,
180962306a36Sopenharmony_ci	.hsync_end = 800 + 40 + 128,
181062306a36Sopenharmony_ci	.htotal = 800 + 40 + 128 + 88,
181162306a36Sopenharmony_ci	.vdisplay = 480,
181262306a36Sopenharmony_ci	.vsync_start = 480 + 10,
181362306a36Sopenharmony_ci	.vsync_end = 480 + 10 + 2,
181462306a36Sopenharmony_ci	.vtotal = 480 + 10 + 2 + 33,
181562306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
181662306a36Sopenharmony_ci};
181762306a36Sopenharmony_ci
181862306a36Sopenharmony_cistatic const struct panel_desc edt_etm0700g0dh6 = {
181962306a36Sopenharmony_ci	.modes = &edt_etm0700g0dh6_mode,
182062306a36Sopenharmony_ci	.num_modes = 1,
182162306a36Sopenharmony_ci	.bpc = 6,
182262306a36Sopenharmony_ci	.size = {
182362306a36Sopenharmony_ci		.width = 152,
182462306a36Sopenharmony_ci		.height = 91,
182562306a36Sopenharmony_ci	},
182662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
182762306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
182862306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
182962306a36Sopenharmony_ci};
183062306a36Sopenharmony_ci
183162306a36Sopenharmony_cistatic const struct panel_desc edt_etm0700g0bdh6 = {
183262306a36Sopenharmony_ci	.modes = &edt_etm0700g0dh6_mode,
183362306a36Sopenharmony_ci	.num_modes = 1,
183462306a36Sopenharmony_ci	.bpc = 6,
183562306a36Sopenharmony_ci	.size = {
183662306a36Sopenharmony_ci		.width = 152,
183762306a36Sopenharmony_ci		.height = 91,
183862306a36Sopenharmony_ci	},
183962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
184062306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
184162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
184262306a36Sopenharmony_ci};
184362306a36Sopenharmony_ci
184462306a36Sopenharmony_cistatic const struct display_timing edt_etml0700y5dha_timing = {
184562306a36Sopenharmony_ci	.pixelclock = { 40800000, 51200000, 67200000 },
184662306a36Sopenharmony_ci	.hactive = { 1024, 1024, 1024 },
184762306a36Sopenharmony_ci	.hfront_porch = { 30, 106, 125 },
184862306a36Sopenharmony_ci	.hback_porch = { 30, 106, 125 },
184962306a36Sopenharmony_ci	.hsync_len = { 30, 108, 126 },
185062306a36Sopenharmony_ci	.vactive = { 600, 600, 600 },
185162306a36Sopenharmony_ci	.vfront_porch = { 3, 12, 67},
185262306a36Sopenharmony_ci	.vback_porch = { 3, 12, 67 },
185362306a36Sopenharmony_ci	.vsync_len = { 4, 11, 66 },
185462306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
185562306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH,
185662306a36Sopenharmony_ci};
185762306a36Sopenharmony_ci
185862306a36Sopenharmony_cistatic const struct panel_desc edt_etml0700y5dha = {
185962306a36Sopenharmony_ci	.timings = &edt_etml0700y5dha_timing,
186062306a36Sopenharmony_ci	.num_timings = 1,
186162306a36Sopenharmony_ci	.bpc = 8,
186262306a36Sopenharmony_ci	.size = {
186362306a36Sopenharmony_ci		.width = 155,
186462306a36Sopenharmony_ci		.height = 86,
186562306a36Sopenharmony_ci	},
186662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
186762306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
186862306a36Sopenharmony_ci};
186962306a36Sopenharmony_ci
187062306a36Sopenharmony_cistatic const struct drm_display_mode edt_etmv570g2dhu_mode = {
187162306a36Sopenharmony_ci	.clock = 25175,
187262306a36Sopenharmony_ci	.hdisplay = 640,
187362306a36Sopenharmony_ci	.hsync_start = 640,
187462306a36Sopenharmony_ci	.hsync_end = 640 + 16,
187562306a36Sopenharmony_ci	.htotal = 640 + 16 + 30 + 114,
187662306a36Sopenharmony_ci	.vdisplay = 480,
187762306a36Sopenharmony_ci	.vsync_start = 480 + 10,
187862306a36Sopenharmony_ci	.vsync_end = 480 + 10 + 3,
187962306a36Sopenharmony_ci	.vtotal = 480 + 10 + 3 + 35,
188062306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_PHSYNC,
188162306a36Sopenharmony_ci};
188262306a36Sopenharmony_ci
188362306a36Sopenharmony_cistatic const struct panel_desc edt_etmv570g2dhu = {
188462306a36Sopenharmony_ci	.modes = &edt_etmv570g2dhu_mode,
188562306a36Sopenharmony_ci	.num_modes = 1,
188662306a36Sopenharmony_ci	.bpc = 6,
188762306a36Sopenharmony_ci	.size = {
188862306a36Sopenharmony_ci		.width = 115,
188962306a36Sopenharmony_ci		.height = 86,
189062306a36Sopenharmony_ci	},
189162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
189262306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
189362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
189462306a36Sopenharmony_ci};
189562306a36Sopenharmony_ci
189662306a36Sopenharmony_cistatic const struct display_timing eink_vb3300_kca_timing = {
189762306a36Sopenharmony_ci	.pixelclock = { 40000000, 40000000, 40000000 },
189862306a36Sopenharmony_ci	.hactive = { 334, 334, 334 },
189962306a36Sopenharmony_ci	.hfront_porch = { 1, 1, 1 },
190062306a36Sopenharmony_ci	.hback_porch = { 1, 1, 1 },
190162306a36Sopenharmony_ci	.hsync_len = { 1, 1, 1 },
190262306a36Sopenharmony_ci	.vactive = { 1405, 1405, 1405 },
190362306a36Sopenharmony_ci	.vfront_porch = { 1, 1, 1 },
190462306a36Sopenharmony_ci	.vback_porch = { 1, 1, 1 },
190562306a36Sopenharmony_ci	.vsync_len = { 1, 1, 1 },
190662306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
190762306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE,
190862306a36Sopenharmony_ci};
190962306a36Sopenharmony_ci
191062306a36Sopenharmony_cistatic const struct panel_desc eink_vb3300_kca = {
191162306a36Sopenharmony_ci	.timings = &eink_vb3300_kca_timing,
191262306a36Sopenharmony_ci	.num_timings = 1,
191362306a36Sopenharmony_ci	.bpc = 6,
191462306a36Sopenharmony_ci	.size = {
191562306a36Sopenharmony_ci		.width = 157,
191662306a36Sopenharmony_ci		.height = 209,
191762306a36Sopenharmony_ci	},
191862306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
191962306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
192062306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
192162306a36Sopenharmony_ci};
192262306a36Sopenharmony_ci
192362306a36Sopenharmony_cistatic const struct display_timing evervision_vgg804821_timing = {
192462306a36Sopenharmony_ci	.pixelclock = { 27600000, 33300000, 50000000 },
192562306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
192662306a36Sopenharmony_ci	.hfront_porch = { 40, 66, 70 },
192762306a36Sopenharmony_ci	.hback_porch = { 40, 67, 70 },
192862306a36Sopenharmony_ci	.hsync_len = { 40, 67, 70 },
192962306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
193062306a36Sopenharmony_ci	.vfront_porch = { 6, 10, 10 },
193162306a36Sopenharmony_ci	.vback_porch = { 7, 11, 11 },
193262306a36Sopenharmony_ci	.vsync_len = { 7, 11, 11 },
193362306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_HIGH | DISPLAY_FLAGS_VSYNC_HIGH |
193462306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_NEGEDGE |
193562306a36Sopenharmony_ci		 DISPLAY_FLAGS_SYNC_NEGEDGE,
193662306a36Sopenharmony_ci};
193762306a36Sopenharmony_ci
193862306a36Sopenharmony_cistatic const struct panel_desc evervision_vgg804821 = {
193962306a36Sopenharmony_ci	.timings = &evervision_vgg804821_timing,
194062306a36Sopenharmony_ci	.num_timings = 1,
194162306a36Sopenharmony_ci	.bpc = 8,
194262306a36Sopenharmony_ci	.size = {
194362306a36Sopenharmony_ci		.width = 108,
194462306a36Sopenharmony_ci		.height = 64,
194562306a36Sopenharmony_ci	},
194662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
194762306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
194862306a36Sopenharmony_ci};
194962306a36Sopenharmony_ci
195062306a36Sopenharmony_cistatic const struct drm_display_mode foxlink_fl500wvr00_a0t_mode = {
195162306a36Sopenharmony_ci	.clock = 32260,
195262306a36Sopenharmony_ci	.hdisplay = 800,
195362306a36Sopenharmony_ci	.hsync_start = 800 + 168,
195462306a36Sopenharmony_ci	.hsync_end = 800 + 168 + 64,
195562306a36Sopenharmony_ci	.htotal = 800 + 168 + 64 + 88,
195662306a36Sopenharmony_ci	.vdisplay = 480,
195762306a36Sopenharmony_ci	.vsync_start = 480 + 37,
195862306a36Sopenharmony_ci	.vsync_end = 480 + 37 + 2,
195962306a36Sopenharmony_ci	.vtotal = 480 + 37 + 2 + 8,
196062306a36Sopenharmony_ci};
196162306a36Sopenharmony_ci
196262306a36Sopenharmony_cistatic const struct panel_desc foxlink_fl500wvr00_a0t = {
196362306a36Sopenharmony_ci	.modes = &foxlink_fl500wvr00_a0t_mode,
196462306a36Sopenharmony_ci	.num_modes = 1,
196562306a36Sopenharmony_ci	.bpc = 8,
196662306a36Sopenharmony_ci	.size = {
196762306a36Sopenharmony_ci		.width = 108,
196862306a36Sopenharmony_ci		.height = 65,
196962306a36Sopenharmony_ci	},
197062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
197162306a36Sopenharmony_ci};
197262306a36Sopenharmony_ci
197362306a36Sopenharmony_cistatic const struct drm_display_mode frida_frd350h54004_modes[] = {
197462306a36Sopenharmony_ci	{ /* 60 Hz */
197562306a36Sopenharmony_ci		.clock = 6000,
197662306a36Sopenharmony_ci		.hdisplay = 320,
197762306a36Sopenharmony_ci		.hsync_start = 320 + 44,
197862306a36Sopenharmony_ci		.hsync_end = 320 + 44 + 16,
197962306a36Sopenharmony_ci		.htotal = 320 + 44 + 16 + 20,
198062306a36Sopenharmony_ci		.vdisplay = 240,
198162306a36Sopenharmony_ci		.vsync_start = 240 + 2,
198262306a36Sopenharmony_ci		.vsync_end = 240 + 2 + 6,
198362306a36Sopenharmony_ci		.vtotal = 240 + 2 + 6 + 2,
198462306a36Sopenharmony_ci		.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
198562306a36Sopenharmony_ci	},
198662306a36Sopenharmony_ci	{ /* 50 Hz */
198762306a36Sopenharmony_ci		.clock = 5400,
198862306a36Sopenharmony_ci		.hdisplay = 320,
198962306a36Sopenharmony_ci		.hsync_start = 320 + 56,
199062306a36Sopenharmony_ci		.hsync_end = 320 + 56 + 16,
199162306a36Sopenharmony_ci		.htotal = 320 + 56 + 16 + 40,
199262306a36Sopenharmony_ci		.vdisplay = 240,
199362306a36Sopenharmony_ci		.vsync_start = 240 + 2,
199462306a36Sopenharmony_ci		.vsync_end = 240 + 2 + 6,
199562306a36Sopenharmony_ci		.vtotal = 240 + 2 + 6 + 2,
199662306a36Sopenharmony_ci		.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
199762306a36Sopenharmony_ci	},
199862306a36Sopenharmony_ci};
199962306a36Sopenharmony_ci
200062306a36Sopenharmony_cistatic const struct panel_desc frida_frd350h54004 = {
200162306a36Sopenharmony_ci	.modes = frida_frd350h54004_modes,
200262306a36Sopenharmony_ci	.num_modes = ARRAY_SIZE(frida_frd350h54004_modes),
200362306a36Sopenharmony_ci	.bpc = 8,
200462306a36Sopenharmony_ci	.size = {
200562306a36Sopenharmony_ci		.width = 77,
200662306a36Sopenharmony_ci		.height = 64,
200762306a36Sopenharmony_ci	},
200862306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
200962306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
201062306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
201162306a36Sopenharmony_ci};
201262306a36Sopenharmony_ci
201362306a36Sopenharmony_cistatic const struct drm_display_mode friendlyarm_hd702e_mode = {
201462306a36Sopenharmony_ci	.clock		= 67185,
201562306a36Sopenharmony_ci	.hdisplay	= 800,
201662306a36Sopenharmony_ci	.hsync_start	= 800 + 20,
201762306a36Sopenharmony_ci	.hsync_end	= 800 + 20 + 24,
201862306a36Sopenharmony_ci	.htotal		= 800 + 20 + 24 + 20,
201962306a36Sopenharmony_ci	.vdisplay	= 1280,
202062306a36Sopenharmony_ci	.vsync_start	= 1280 + 4,
202162306a36Sopenharmony_ci	.vsync_end	= 1280 + 4 + 8,
202262306a36Sopenharmony_ci	.vtotal		= 1280 + 4 + 8 + 4,
202362306a36Sopenharmony_ci	.flags		= DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
202462306a36Sopenharmony_ci};
202562306a36Sopenharmony_ci
202662306a36Sopenharmony_cistatic const struct panel_desc friendlyarm_hd702e = {
202762306a36Sopenharmony_ci	.modes = &friendlyarm_hd702e_mode,
202862306a36Sopenharmony_ci	.num_modes = 1,
202962306a36Sopenharmony_ci	.size = {
203062306a36Sopenharmony_ci		.width	= 94,
203162306a36Sopenharmony_ci		.height	= 151,
203262306a36Sopenharmony_ci	},
203362306a36Sopenharmony_ci};
203462306a36Sopenharmony_ci
203562306a36Sopenharmony_cistatic const struct drm_display_mode giantplus_gpg482739qs5_mode = {
203662306a36Sopenharmony_ci	.clock = 9000,
203762306a36Sopenharmony_ci	.hdisplay = 480,
203862306a36Sopenharmony_ci	.hsync_start = 480 + 5,
203962306a36Sopenharmony_ci	.hsync_end = 480 + 5 + 1,
204062306a36Sopenharmony_ci	.htotal = 480 + 5 + 1 + 40,
204162306a36Sopenharmony_ci	.vdisplay = 272,
204262306a36Sopenharmony_ci	.vsync_start = 272 + 8,
204362306a36Sopenharmony_ci	.vsync_end = 272 + 8 + 1,
204462306a36Sopenharmony_ci	.vtotal = 272 + 8 + 1 + 8,
204562306a36Sopenharmony_ci};
204662306a36Sopenharmony_ci
204762306a36Sopenharmony_cistatic const struct panel_desc giantplus_gpg482739qs5 = {
204862306a36Sopenharmony_ci	.modes = &giantplus_gpg482739qs5_mode,
204962306a36Sopenharmony_ci	.num_modes = 1,
205062306a36Sopenharmony_ci	.bpc = 8,
205162306a36Sopenharmony_ci	.size = {
205262306a36Sopenharmony_ci		.width = 95,
205362306a36Sopenharmony_ci		.height = 54,
205462306a36Sopenharmony_ci	},
205562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
205662306a36Sopenharmony_ci};
205762306a36Sopenharmony_ci
205862306a36Sopenharmony_cistatic const struct display_timing giantplus_gpm940b0_timing = {
205962306a36Sopenharmony_ci	.pixelclock = { 13500000, 27000000, 27500000 },
206062306a36Sopenharmony_ci	.hactive = { 320, 320, 320 },
206162306a36Sopenharmony_ci	.hfront_porch = { 14, 686, 718 },
206262306a36Sopenharmony_ci	.hback_porch = { 50, 70, 255 },
206362306a36Sopenharmony_ci	.hsync_len = { 1, 1, 1 },
206462306a36Sopenharmony_ci	.vactive = { 240, 240, 240 },
206562306a36Sopenharmony_ci	.vfront_porch = { 1, 1, 179 },
206662306a36Sopenharmony_ci	.vback_porch = { 1, 21, 31 },
206762306a36Sopenharmony_ci	.vsync_len = { 1, 1, 6 },
206862306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW,
206962306a36Sopenharmony_ci};
207062306a36Sopenharmony_ci
207162306a36Sopenharmony_cistatic const struct panel_desc giantplus_gpm940b0 = {
207262306a36Sopenharmony_ci	.timings = &giantplus_gpm940b0_timing,
207362306a36Sopenharmony_ci	.num_timings = 1,
207462306a36Sopenharmony_ci	.bpc = 8,
207562306a36Sopenharmony_ci	.size = {
207662306a36Sopenharmony_ci		.width = 60,
207762306a36Sopenharmony_ci		.height = 45,
207862306a36Sopenharmony_ci	},
207962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_3X8,
208062306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
208162306a36Sopenharmony_ci};
208262306a36Sopenharmony_ci
208362306a36Sopenharmony_cistatic const struct display_timing hannstar_hsd070pww1_timing = {
208462306a36Sopenharmony_ci	.pixelclock = { 64300000, 71100000, 82000000 },
208562306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
208662306a36Sopenharmony_ci	.hfront_porch = { 1, 1, 10 },
208762306a36Sopenharmony_ci	.hback_porch = { 1, 1, 10 },
208862306a36Sopenharmony_ci	/*
208962306a36Sopenharmony_ci	 * According to the data sheet, the minimum horizontal blanking interval
209062306a36Sopenharmony_ci	 * is 54 clocks (1 + 52 + 1), but tests with a Nitrogen6X have shown the
209162306a36Sopenharmony_ci	 * minimum working horizontal blanking interval to be 60 clocks.
209262306a36Sopenharmony_ci	 */
209362306a36Sopenharmony_ci	.hsync_len = { 58, 158, 661 },
209462306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
209562306a36Sopenharmony_ci	.vfront_porch = { 1, 1, 10 },
209662306a36Sopenharmony_ci	.vback_porch = { 1, 1, 10 },
209762306a36Sopenharmony_ci	.vsync_len = { 1, 21, 203 },
209862306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
209962306a36Sopenharmony_ci};
210062306a36Sopenharmony_ci
210162306a36Sopenharmony_cistatic const struct panel_desc hannstar_hsd070pww1 = {
210262306a36Sopenharmony_ci	.timings = &hannstar_hsd070pww1_timing,
210362306a36Sopenharmony_ci	.num_timings = 1,
210462306a36Sopenharmony_ci	.bpc = 6,
210562306a36Sopenharmony_ci	.size = {
210662306a36Sopenharmony_ci		.width = 151,
210762306a36Sopenharmony_ci		.height = 94,
210862306a36Sopenharmony_ci	},
210962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
211062306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
211162306a36Sopenharmony_ci};
211262306a36Sopenharmony_ci
211362306a36Sopenharmony_cistatic const struct display_timing hannstar_hsd100pxn1_timing = {
211462306a36Sopenharmony_ci	.pixelclock = { 55000000, 65000000, 75000000 },
211562306a36Sopenharmony_ci	.hactive = { 1024, 1024, 1024 },
211662306a36Sopenharmony_ci	.hfront_porch = { 40, 40, 40 },
211762306a36Sopenharmony_ci	.hback_porch = { 220, 220, 220 },
211862306a36Sopenharmony_ci	.hsync_len = { 20, 60, 100 },
211962306a36Sopenharmony_ci	.vactive = { 768, 768, 768 },
212062306a36Sopenharmony_ci	.vfront_porch = { 7, 7, 7 },
212162306a36Sopenharmony_ci	.vback_porch = { 21, 21, 21 },
212262306a36Sopenharmony_ci	.vsync_len = { 10, 10, 10 },
212362306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
212462306a36Sopenharmony_ci};
212562306a36Sopenharmony_ci
212662306a36Sopenharmony_cistatic const struct panel_desc hannstar_hsd100pxn1 = {
212762306a36Sopenharmony_ci	.timings = &hannstar_hsd100pxn1_timing,
212862306a36Sopenharmony_ci	.num_timings = 1,
212962306a36Sopenharmony_ci	.bpc = 6,
213062306a36Sopenharmony_ci	.size = {
213162306a36Sopenharmony_ci		.width = 203,
213262306a36Sopenharmony_ci		.height = 152,
213362306a36Sopenharmony_ci	},
213462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
213562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
213662306a36Sopenharmony_ci};
213762306a36Sopenharmony_ci
213862306a36Sopenharmony_cistatic const struct display_timing hannstar_hsd101pww2_timing = {
213962306a36Sopenharmony_ci	.pixelclock = { 64300000, 71100000, 82000000 },
214062306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
214162306a36Sopenharmony_ci	.hfront_porch = { 1, 1, 10 },
214262306a36Sopenharmony_ci	.hback_porch = { 1, 1, 10 },
214362306a36Sopenharmony_ci	.hsync_len = { 58, 158, 661 },
214462306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
214562306a36Sopenharmony_ci	.vfront_porch = { 1, 1, 10 },
214662306a36Sopenharmony_ci	.vback_porch = { 1, 1, 10 },
214762306a36Sopenharmony_ci	.vsync_len = { 1, 21, 203 },
214862306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
214962306a36Sopenharmony_ci};
215062306a36Sopenharmony_ci
215162306a36Sopenharmony_cistatic const struct panel_desc hannstar_hsd101pww2 = {
215262306a36Sopenharmony_ci	.timings = &hannstar_hsd101pww2_timing,
215362306a36Sopenharmony_ci	.num_timings = 1,
215462306a36Sopenharmony_ci	.bpc = 8,
215562306a36Sopenharmony_ci	.size = {
215662306a36Sopenharmony_ci		.width = 217,
215762306a36Sopenharmony_ci		.height = 136,
215862306a36Sopenharmony_ci	},
215962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
216062306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
216162306a36Sopenharmony_ci};
216262306a36Sopenharmony_ci
216362306a36Sopenharmony_cistatic const struct drm_display_mode hitachi_tx23d38vm0caa_mode = {
216462306a36Sopenharmony_ci	.clock = 33333,
216562306a36Sopenharmony_ci	.hdisplay = 800,
216662306a36Sopenharmony_ci	.hsync_start = 800 + 85,
216762306a36Sopenharmony_ci	.hsync_end = 800 + 85 + 86,
216862306a36Sopenharmony_ci	.htotal = 800 + 85 + 86 + 85,
216962306a36Sopenharmony_ci	.vdisplay = 480,
217062306a36Sopenharmony_ci	.vsync_start = 480 + 16,
217162306a36Sopenharmony_ci	.vsync_end = 480 + 16 + 13,
217262306a36Sopenharmony_ci	.vtotal = 480 + 16 + 13 + 16,
217362306a36Sopenharmony_ci};
217462306a36Sopenharmony_ci
217562306a36Sopenharmony_cistatic const struct panel_desc hitachi_tx23d38vm0caa = {
217662306a36Sopenharmony_ci	.modes = &hitachi_tx23d38vm0caa_mode,
217762306a36Sopenharmony_ci	.num_modes = 1,
217862306a36Sopenharmony_ci	.bpc = 6,
217962306a36Sopenharmony_ci	.size = {
218062306a36Sopenharmony_ci		.width = 195,
218162306a36Sopenharmony_ci		.height = 117,
218262306a36Sopenharmony_ci	},
218362306a36Sopenharmony_ci	.delay = {
218462306a36Sopenharmony_ci		.enable = 160,
218562306a36Sopenharmony_ci		.disable = 160,
218662306a36Sopenharmony_ci	},
218762306a36Sopenharmony_ci};
218862306a36Sopenharmony_ci
218962306a36Sopenharmony_cistatic const struct drm_display_mode innolux_at043tn24_mode = {
219062306a36Sopenharmony_ci	.clock = 9000,
219162306a36Sopenharmony_ci	.hdisplay = 480,
219262306a36Sopenharmony_ci	.hsync_start = 480 + 2,
219362306a36Sopenharmony_ci	.hsync_end = 480 + 2 + 41,
219462306a36Sopenharmony_ci	.htotal = 480 + 2 + 41 + 2,
219562306a36Sopenharmony_ci	.vdisplay = 272,
219662306a36Sopenharmony_ci	.vsync_start = 272 + 2,
219762306a36Sopenharmony_ci	.vsync_end = 272 + 2 + 10,
219862306a36Sopenharmony_ci	.vtotal = 272 + 2 + 10 + 2,
219962306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
220062306a36Sopenharmony_ci};
220162306a36Sopenharmony_ci
220262306a36Sopenharmony_cistatic const struct panel_desc innolux_at043tn24 = {
220362306a36Sopenharmony_ci	.modes = &innolux_at043tn24_mode,
220462306a36Sopenharmony_ci	.num_modes = 1,
220562306a36Sopenharmony_ci	.bpc = 8,
220662306a36Sopenharmony_ci	.size = {
220762306a36Sopenharmony_ci		.width = 95,
220862306a36Sopenharmony_ci		.height = 54,
220962306a36Sopenharmony_ci	},
221062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
221162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
221262306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
221362306a36Sopenharmony_ci};
221462306a36Sopenharmony_ci
221562306a36Sopenharmony_cistatic const struct drm_display_mode innolux_at070tn92_mode = {
221662306a36Sopenharmony_ci	.clock = 33333,
221762306a36Sopenharmony_ci	.hdisplay = 800,
221862306a36Sopenharmony_ci	.hsync_start = 800 + 210,
221962306a36Sopenharmony_ci	.hsync_end = 800 + 210 + 20,
222062306a36Sopenharmony_ci	.htotal = 800 + 210 + 20 + 46,
222162306a36Sopenharmony_ci	.vdisplay = 480,
222262306a36Sopenharmony_ci	.vsync_start = 480 + 22,
222362306a36Sopenharmony_ci	.vsync_end = 480 + 22 + 10,
222462306a36Sopenharmony_ci	.vtotal = 480 + 22 + 23 + 10,
222562306a36Sopenharmony_ci};
222662306a36Sopenharmony_ci
222762306a36Sopenharmony_cistatic const struct panel_desc innolux_at070tn92 = {
222862306a36Sopenharmony_ci	.modes = &innolux_at070tn92_mode,
222962306a36Sopenharmony_ci	.num_modes = 1,
223062306a36Sopenharmony_ci	.size = {
223162306a36Sopenharmony_ci		.width = 154,
223262306a36Sopenharmony_ci		.height = 86,
223362306a36Sopenharmony_ci	},
223462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
223562306a36Sopenharmony_ci};
223662306a36Sopenharmony_ci
223762306a36Sopenharmony_cistatic const struct display_timing innolux_g070ace_l01_timing = {
223862306a36Sopenharmony_ci	.pixelclock = { 25200000, 35000000, 35700000 },
223962306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
224062306a36Sopenharmony_ci	.hfront_porch = { 30, 32, 87 },
224162306a36Sopenharmony_ci	.hback_porch = { 30, 32, 87 },
224262306a36Sopenharmony_ci	.hsync_len = { 1, 1, 1 },
224362306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
224462306a36Sopenharmony_ci	.vfront_porch = { 3, 3, 3 },
224562306a36Sopenharmony_ci	.vback_porch = { 13, 13, 13 },
224662306a36Sopenharmony_ci	.vsync_len = { 1, 1, 4 },
224762306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
224862306a36Sopenharmony_ci};
224962306a36Sopenharmony_ci
225062306a36Sopenharmony_cistatic const struct panel_desc innolux_g070ace_l01 = {
225162306a36Sopenharmony_ci	.timings = &innolux_g070ace_l01_timing,
225262306a36Sopenharmony_ci	.num_timings = 1,
225362306a36Sopenharmony_ci	.bpc = 8,
225462306a36Sopenharmony_ci	.size = {
225562306a36Sopenharmony_ci		.width = 152,
225662306a36Sopenharmony_ci		.height = 91,
225762306a36Sopenharmony_ci	},
225862306a36Sopenharmony_ci	.delay = {
225962306a36Sopenharmony_ci		.prepare = 10,
226062306a36Sopenharmony_ci		.enable = 50,
226162306a36Sopenharmony_ci		.disable = 50,
226262306a36Sopenharmony_ci		.unprepare = 500,
226362306a36Sopenharmony_ci	},
226462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
226562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
226662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
226762306a36Sopenharmony_ci};
226862306a36Sopenharmony_ci
226962306a36Sopenharmony_cistatic const struct display_timing innolux_g070y2_l01_timing = {
227062306a36Sopenharmony_ci	.pixelclock = { 28000000, 29500000, 32000000 },
227162306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
227262306a36Sopenharmony_ci	.hfront_porch = { 61, 91, 141 },
227362306a36Sopenharmony_ci	.hback_porch = { 60, 90, 140 },
227462306a36Sopenharmony_ci	.hsync_len = { 12, 12, 12 },
227562306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
227662306a36Sopenharmony_ci	.vfront_porch = { 4, 9, 30 },
227762306a36Sopenharmony_ci	.vback_porch = { 4, 8, 28 },
227862306a36Sopenharmony_ci	.vsync_len = { 2, 2, 2 },
227962306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
228062306a36Sopenharmony_ci};
228162306a36Sopenharmony_ci
228262306a36Sopenharmony_cistatic const struct panel_desc innolux_g070y2_l01 = {
228362306a36Sopenharmony_ci	.timings = &innolux_g070y2_l01_timing,
228462306a36Sopenharmony_ci	.num_timings = 1,
228562306a36Sopenharmony_ci	.bpc = 8,
228662306a36Sopenharmony_ci	.size = {
228762306a36Sopenharmony_ci		.width = 152,
228862306a36Sopenharmony_ci		.height = 91,
228962306a36Sopenharmony_ci	},
229062306a36Sopenharmony_ci	.delay = {
229162306a36Sopenharmony_ci		.prepare = 10,
229262306a36Sopenharmony_ci		.enable = 100,
229362306a36Sopenharmony_ci		.disable = 100,
229462306a36Sopenharmony_ci		.unprepare = 800,
229562306a36Sopenharmony_ci	},
229662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
229762306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
229862306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
229962306a36Sopenharmony_ci};
230062306a36Sopenharmony_ci
230162306a36Sopenharmony_cistatic const struct drm_display_mode innolux_g070y2_t02_mode = {
230262306a36Sopenharmony_ci	.clock = 33333,
230362306a36Sopenharmony_ci	.hdisplay = 800,
230462306a36Sopenharmony_ci	.hsync_start = 800 + 210,
230562306a36Sopenharmony_ci	.hsync_end = 800 + 210 + 20,
230662306a36Sopenharmony_ci	.htotal = 800 + 210 + 20 + 46,
230762306a36Sopenharmony_ci	.vdisplay = 480,
230862306a36Sopenharmony_ci	.vsync_start = 480 + 22,
230962306a36Sopenharmony_ci	.vsync_end = 480 + 22 + 10,
231062306a36Sopenharmony_ci	.vtotal = 480 + 22 + 23 + 10,
231162306a36Sopenharmony_ci};
231262306a36Sopenharmony_ci
231362306a36Sopenharmony_cistatic const struct panel_desc innolux_g070y2_t02 = {
231462306a36Sopenharmony_ci	.modes = &innolux_g070y2_t02_mode,
231562306a36Sopenharmony_ci	.num_modes = 1,
231662306a36Sopenharmony_ci	.bpc = 8,
231762306a36Sopenharmony_ci	.size = {
231862306a36Sopenharmony_ci		.width = 152,
231962306a36Sopenharmony_ci		.height = 92,
232062306a36Sopenharmony_ci	},
232162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
232262306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
232362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
232462306a36Sopenharmony_ci};
232562306a36Sopenharmony_ci
232662306a36Sopenharmony_cistatic const struct display_timing innolux_g101ice_l01_timing = {
232762306a36Sopenharmony_ci	.pixelclock = { 60400000, 71100000, 74700000 },
232862306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
232962306a36Sopenharmony_ci	.hfront_porch = { 30, 60, 70 },
233062306a36Sopenharmony_ci	.hback_porch = { 30, 60, 70 },
233162306a36Sopenharmony_ci	.hsync_len = { 22, 40, 60 },
233262306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
233362306a36Sopenharmony_ci	.vfront_porch = { 3, 8, 14 },
233462306a36Sopenharmony_ci	.vback_porch = { 3, 8, 14 },
233562306a36Sopenharmony_ci	.vsync_len = { 4, 7, 12 },
233662306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
233762306a36Sopenharmony_ci};
233862306a36Sopenharmony_ci
233962306a36Sopenharmony_cistatic const struct panel_desc innolux_g101ice_l01 = {
234062306a36Sopenharmony_ci	.timings = &innolux_g101ice_l01_timing,
234162306a36Sopenharmony_ci	.num_timings = 1,
234262306a36Sopenharmony_ci	.bpc = 8,
234362306a36Sopenharmony_ci	.size = {
234462306a36Sopenharmony_ci		.width = 217,
234562306a36Sopenharmony_ci		.height = 135,
234662306a36Sopenharmony_ci	},
234762306a36Sopenharmony_ci	.delay = {
234862306a36Sopenharmony_ci		.enable = 200,
234962306a36Sopenharmony_ci		.disable = 200,
235062306a36Sopenharmony_ci	},
235162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
235262306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
235362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
235462306a36Sopenharmony_ci};
235562306a36Sopenharmony_ci
235662306a36Sopenharmony_cistatic const struct display_timing innolux_g121i1_l01_timing = {
235762306a36Sopenharmony_ci	.pixelclock = { 67450000, 71000000, 74550000 },
235862306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
235962306a36Sopenharmony_ci	.hfront_porch = { 40, 80, 160 },
236062306a36Sopenharmony_ci	.hback_porch = { 39, 79, 159 },
236162306a36Sopenharmony_ci	.hsync_len = { 1, 1, 1 },
236262306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
236362306a36Sopenharmony_ci	.vfront_porch = { 5, 11, 100 },
236462306a36Sopenharmony_ci	.vback_porch = { 4, 11, 99 },
236562306a36Sopenharmony_ci	.vsync_len = { 1, 1, 1 },
236662306a36Sopenharmony_ci};
236762306a36Sopenharmony_ci
236862306a36Sopenharmony_cistatic const struct panel_desc innolux_g121i1_l01 = {
236962306a36Sopenharmony_ci	.timings = &innolux_g121i1_l01_timing,
237062306a36Sopenharmony_ci	.num_timings = 1,
237162306a36Sopenharmony_ci	.bpc = 6,
237262306a36Sopenharmony_ci	.size = {
237362306a36Sopenharmony_ci		.width = 261,
237462306a36Sopenharmony_ci		.height = 163,
237562306a36Sopenharmony_ci	},
237662306a36Sopenharmony_ci	.delay = {
237762306a36Sopenharmony_ci		.enable = 200,
237862306a36Sopenharmony_ci		.disable = 20,
237962306a36Sopenharmony_ci	},
238062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
238162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
238262306a36Sopenharmony_ci};
238362306a36Sopenharmony_ci
238462306a36Sopenharmony_cistatic const struct drm_display_mode innolux_g121x1_l03_mode = {
238562306a36Sopenharmony_ci	.clock = 65000,
238662306a36Sopenharmony_ci	.hdisplay = 1024,
238762306a36Sopenharmony_ci	.hsync_start = 1024 + 0,
238862306a36Sopenharmony_ci	.hsync_end = 1024 + 1,
238962306a36Sopenharmony_ci	.htotal = 1024 + 0 + 1 + 320,
239062306a36Sopenharmony_ci	.vdisplay = 768,
239162306a36Sopenharmony_ci	.vsync_start = 768 + 38,
239262306a36Sopenharmony_ci	.vsync_end = 768 + 38 + 1,
239362306a36Sopenharmony_ci	.vtotal = 768 + 38 + 1 + 0,
239462306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
239562306a36Sopenharmony_ci};
239662306a36Sopenharmony_ci
239762306a36Sopenharmony_cistatic const struct panel_desc innolux_g121x1_l03 = {
239862306a36Sopenharmony_ci	.modes = &innolux_g121x1_l03_mode,
239962306a36Sopenharmony_ci	.num_modes = 1,
240062306a36Sopenharmony_ci	.bpc = 6,
240162306a36Sopenharmony_ci	.size = {
240262306a36Sopenharmony_ci		.width = 246,
240362306a36Sopenharmony_ci		.height = 185,
240462306a36Sopenharmony_ci	},
240562306a36Sopenharmony_ci	.delay = {
240662306a36Sopenharmony_ci		.enable = 200,
240762306a36Sopenharmony_ci		.unprepare = 200,
240862306a36Sopenharmony_ci		.disable = 400,
240962306a36Sopenharmony_ci	},
241062306a36Sopenharmony_ci};
241162306a36Sopenharmony_ci
241262306a36Sopenharmony_cistatic const struct display_timing innolux_g156hce_l01_timings = {
241362306a36Sopenharmony_ci	.pixelclock = { 120000000, 141860000, 150000000 },
241462306a36Sopenharmony_ci	.hactive = { 1920, 1920, 1920 },
241562306a36Sopenharmony_ci	.hfront_porch = { 80, 90, 100 },
241662306a36Sopenharmony_ci	.hback_porch = { 80, 90, 100 },
241762306a36Sopenharmony_ci	.hsync_len = { 20, 30, 30 },
241862306a36Sopenharmony_ci	.vactive = { 1080, 1080, 1080 },
241962306a36Sopenharmony_ci	.vfront_porch = { 3, 10, 20 },
242062306a36Sopenharmony_ci	.vback_porch = { 3, 10, 20 },
242162306a36Sopenharmony_ci	.vsync_len = { 4, 10, 10 },
242262306a36Sopenharmony_ci};
242362306a36Sopenharmony_ci
242462306a36Sopenharmony_cistatic const struct panel_desc innolux_g156hce_l01 = {
242562306a36Sopenharmony_ci	.timings = &innolux_g156hce_l01_timings,
242662306a36Sopenharmony_ci	.num_timings = 1,
242762306a36Sopenharmony_ci	.bpc = 8,
242862306a36Sopenharmony_ci	.size = {
242962306a36Sopenharmony_ci		.width = 344,
243062306a36Sopenharmony_ci		.height = 194,
243162306a36Sopenharmony_ci	},
243262306a36Sopenharmony_ci	.delay = {
243362306a36Sopenharmony_ci		.prepare = 1,		/* T1+T2 */
243462306a36Sopenharmony_ci		.enable = 450,		/* T5 */
243562306a36Sopenharmony_ci		.disable = 200,		/* T6 */
243662306a36Sopenharmony_ci		.unprepare = 10,	/* T3+T7 */
243762306a36Sopenharmony_ci	},
243862306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
243962306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
244062306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
244162306a36Sopenharmony_ci};
244262306a36Sopenharmony_ci
244362306a36Sopenharmony_cistatic const struct drm_display_mode innolux_n156bge_l21_mode = {
244462306a36Sopenharmony_ci	.clock = 69300,
244562306a36Sopenharmony_ci	.hdisplay = 1366,
244662306a36Sopenharmony_ci	.hsync_start = 1366 + 16,
244762306a36Sopenharmony_ci	.hsync_end = 1366 + 16 + 34,
244862306a36Sopenharmony_ci	.htotal = 1366 + 16 + 34 + 50,
244962306a36Sopenharmony_ci	.vdisplay = 768,
245062306a36Sopenharmony_ci	.vsync_start = 768 + 2,
245162306a36Sopenharmony_ci	.vsync_end = 768 + 2 + 6,
245262306a36Sopenharmony_ci	.vtotal = 768 + 2 + 6 + 12,
245362306a36Sopenharmony_ci};
245462306a36Sopenharmony_ci
245562306a36Sopenharmony_cistatic const struct panel_desc innolux_n156bge_l21 = {
245662306a36Sopenharmony_ci	.modes = &innolux_n156bge_l21_mode,
245762306a36Sopenharmony_ci	.num_modes = 1,
245862306a36Sopenharmony_ci	.bpc = 6,
245962306a36Sopenharmony_ci	.size = {
246062306a36Sopenharmony_ci		.width = 344,
246162306a36Sopenharmony_ci		.height = 193,
246262306a36Sopenharmony_ci	},
246362306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
246462306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
246562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
246662306a36Sopenharmony_ci};
246762306a36Sopenharmony_ci
246862306a36Sopenharmony_cistatic const struct drm_display_mode innolux_zj070na_01p_mode = {
246962306a36Sopenharmony_ci	.clock = 51501,
247062306a36Sopenharmony_ci	.hdisplay = 1024,
247162306a36Sopenharmony_ci	.hsync_start = 1024 + 128,
247262306a36Sopenharmony_ci	.hsync_end = 1024 + 128 + 64,
247362306a36Sopenharmony_ci	.htotal = 1024 + 128 + 64 + 128,
247462306a36Sopenharmony_ci	.vdisplay = 600,
247562306a36Sopenharmony_ci	.vsync_start = 600 + 16,
247662306a36Sopenharmony_ci	.vsync_end = 600 + 16 + 4,
247762306a36Sopenharmony_ci	.vtotal = 600 + 16 + 4 + 16,
247862306a36Sopenharmony_ci};
247962306a36Sopenharmony_ci
248062306a36Sopenharmony_cistatic const struct panel_desc innolux_zj070na_01p = {
248162306a36Sopenharmony_ci	.modes = &innolux_zj070na_01p_mode,
248262306a36Sopenharmony_ci	.num_modes = 1,
248362306a36Sopenharmony_ci	.bpc = 6,
248462306a36Sopenharmony_ci	.size = {
248562306a36Sopenharmony_ci		.width = 154,
248662306a36Sopenharmony_ci		.height = 90,
248762306a36Sopenharmony_ci	},
248862306a36Sopenharmony_ci};
248962306a36Sopenharmony_ci
249062306a36Sopenharmony_cistatic const struct display_timing koe_tx14d24vm1bpa_timing = {
249162306a36Sopenharmony_ci	.pixelclock = { 5580000, 5850000, 6200000 },
249262306a36Sopenharmony_ci	.hactive = { 320, 320, 320 },
249362306a36Sopenharmony_ci	.hfront_porch = { 30, 30, 30 },
249462306a36Sopenharmony_ci	.hback_porch = { 30, 30, 30 },
249562306a36Sopenharmony_ci	.hsync_len = { 1, 5, 17 },
249662306a36Sopenharmony_ci	.vactive = { 240, 240, 240 },
249762306a36Sopenharmony_ci	.vfront_porch = { 6, 6, 6 },
249862306a36Sopenharmony_ci	.vback_porch = { 5, 5, 5 },
249962306a36Sopenharmony_ci	.vsync_len = { 1, 2, 11 },
250062306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
250162306a36Sopenharmony_ci};
250262306a36Sopenharmony_ci
250362306a36Sopenharmony_cistatic const struct panel_desc koe_tx14d24vm1bpa = {
250462306a36Sopenharmony_ci	.timings = &koe_tx14d24vm1bpa_timing,
250562306a36Sopenharmony_ci	.num_timings = 1,
250662306a36Sopenharmony_ci	.bpc = 6,
250762306a36Sopenharmony_ci	.size = {
250862306a36Sopenharmony_ci		.width = 115,
250962306a36Sopenharmony_ci		.height = 86,
251062306a36Sopenharmony_ci	},
251162306a36Sopenharmony_ci};
251262306a36Sopenharmony_ci
251362306a36Sopenharmony_cistatic const struct display_timing koe_tx26d202vm0bwa_timing = {
251462306a36Sopenharmony_ci	.pixelclock = { 151820000, 156720000, 159780000 },
251562306a36Sopenharmony_ci	.hactive = { 1920, 1920, 1920 },
251662306a36Sopenharmony_ci	.hfront_porch = { 105, 130, 142 },
251762306a36Sopenharmony_ci	.hback_porch = { 45, 70, 82 },
251862306a36Sopenharmony_ci	.hsync_len = { 30, 30, 30 },
251962306a36Sopenharmony_ci	.vactive = { 1200, 1200, 1200},
252062306a36Sopenharmony_ci	.vfront_porch = { 3, 5, 10 },
252162306a36Sopenharmony_ci	.vback_porch = { 2, 5, 10 },
252262306a36Sopenharmony_ci	.vsync_len = { 5, 5, 5 },
252362306a36Sopenharmony_ci};
252462306a36Sopenharmony_ci
252562306a36Sopenharmony_cistatic const struct panel_desc koe_tx26d202vm0bwa = {
252662306a36Sopenharmony_ci	.timings = &koe_tx26d202vm0bwa_timing,
252762306a36Sopenharmony_ci	.num_timings = 1,
252862306a36Sopenharmony_ci	.bpc = 8,
252962306a36Sopenharmony_ci	.size = {
253062306a36Sopenharmony_ci		.width = 217,
253162306a36Sopenharmony_ci		.height = 136,
253262306a36Sopenharmony_ci	},
253362306a36Sopenharmony_ci	.delay = {
253462306a36Sopenharmony_ci		.prepare = 1000,
253562306a36Sopenharmony_ci		.enable = 1000,
253662306a36Sopenharmony_ci		.unprepare = 1000,
253762306a36Sopenharmony_ci		.disable = 1000,
253862306a36Sopenharmony_ci	},
253962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
254062306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
254162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
254262306a36Sopenharmony_ci};
254362306a36Sopenharmony_ci
254462306a36Sopenharmony_cistatic const struct display_timing koe_tx31d200vm0baa_timing = {
254562306a36Sopenharmony_ci	.pixelclock = { 39600000, 43200000, 48000000 },
254662306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
254762306a36Sopenharmony_ci	.hfront_porch = { 16, 36, 56 },
254862306a36Sopenharmony_ci	.hback_porch = { 16, 36, 56 },
254962306a36Sopenharmony_ci	.hsync_len = { 8, 8, 8 },
255062306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
255162306a36Sopenharmony_ci	.vfront_porch = { 6, 21, 33 },
255262306a36Sopenharmony_ci	.vback_porch = { 6, 21, 33 },
255362306a36Sopenharmony_ci	.vsync_len = { 8, 8, 8 },
255462306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
255562306a36Sopenharmony_ci};
255662306a36Sopenharmony_ci
255762306a36Sopenharmony_cistatic const struct panel_desc koe_tx31d200vm0baa = {
255862306a36Sopenharmony_ci	.timings = &koe_tx31d200vm0baa_timing,
255962306a36Sopenharmony_ci	.num_timings = 1,
256062306a36Sopenharmony_ci	.bpc = 6,
256162306a36Sopenharmony_ci	.size = {
256262306a36Sopenharmony_ci		.width = 292,
256362306a36Sopenharmony_ci		.height = 109,
256462306a36Sopenharmony_ci	},
256562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
256662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
256762306a36Sopenharmony_ci};
256862306a36Sopenharmony_ci
256962306a36Sopenharmony_cistatic const struct display_timing kyo_tcg121xglp_timing = {
257062306a36Sopenharmony_ci	.pixelclock = { 52000000, 65000000, 71000000 },
257162306a36Sopenharmony_ci	.hactive = { 1024, 1024, 1024 },
257262306a36Sopenharmony_ci	.hfront_porch = { 2, 2, 2 },
257362306a36Sopenharmony_ci	.hback_porch = { 2, 2, 2 },
257462306a36Sopenharmony_ci	.hsync_len = { 86, 124, 244 },
257562306a36Sopenharmony_ci	.vactive = { 768, 768, 768 },
257662306a36Sopenharmony_ci	.vfront_porch = { 2, 2, 2 },
257762306a36Sopenharmony_ci	.vback_porch = { 2, 2, 2 },
257862306a36Sopenharmony_ci	.vsync_len = { 6, 34, 73 },
257962306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
258062306a36Sopenharmony_ci};
258162306a36Sopenharmony_ci
258262306a36Sopenharmony_cistatic const struct panel_desc kyo_tcg121xglp = {
258362306a36Sopenharmony_ci	.timings = &kyo_tcg121xglp_timing,
258462306a36Sopenharmony_ci	.num_timings = 1,
258562306a36Sopenharmony_ci	.bpc = 8,
258662306a36Sopenharmony_ci	.size = {
258762306a36Sopenharmony_ci		.width = 246,
258862306a36Sopenharmony_ci		.height = 184,
258962306a36Sopenharmony_ci	},
259062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
259162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
259262306a36Sopenharmony_ci};
259362306a36Sopenharmony_ci
259462306a36Sopenharmony_cistatic const struct drm_display_mode lemaker_bl035_rgb_002_mode = {
259562306a36Sopenharmony_ci	.clock = 7000,
259662306a36Sopenharmony_ci	.hdisplay = 320,
259762306a36Sopenharmony_ci	.hsync_start = 320 + 20,
259862306a36Sopenharmony_ci	.hsync_end = 320 + 20 + 30,
259962306a36Sopenharmony_ci	.htotal = 320 + 20 + 30 + 38,
260062306a36Sopenharmony_ci	.vdisplay = 240,
260162306a36Sopenharmony_ci	.vsync_start = 240 + 4,
260262306a36Sopenharmony_ci	.vsync_end = 240 + 4 + 3,
260362306a36Sopenharmony_ci	.vtotal = 240 + 4 + 3 + 15,
260462306a36Sopenharmony_ci};
260562306a36Sopenharmony_ci
260662306a36Sopenharmony_cistatic const struct panel_desc lemaker_bl035_rgb_002 = {
260762306a36Sopenharmony_ci	.modes = &lemaker_bl035_rgb_002_mode,
260862306a36Sopenharmony_ci	.num_modes = 1,
260962306a36Sopenharmony_ci	.size = {
261062306a36Sopenharmony_ci		.width = 70,
261162306a36Sopenharmony_ci		.height = 52,
261262306a36Sopenharmony_ci	},
261362306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
261462306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_LOW,
261562306a36Sopenharmony_ci};
261662306a36Sopenharmony_ci
261762306a36Sopenharmony_cistatic const struct drm_display_mode lg_lb070wv8_mode = {
261862306a36Sopenharmony_ci	.clock = 33246,
261962306a36Sopenharmony_ci	.hdisplay = 800,
262062306a36Sopenharmony_ci	.hsync_start = 800 + 88,
262162306a36Sopenharmony_ci	.hsync_end = 800 + 88 + 80,
262262306a36Sopenharmony_ci	.htotal = 800 + 88 + 80 + 88,
262362306a36Sopenharmony_ci	.vdisplay = 480,
262462306a36Sopenharmony_ci	.vsync_start = 480 + 10,
262562306a36Sopenharmony_ci	.vsync_end = 480 + 10 + 25,
262662306a36Sopenharmony_ci	.vtotal = 480 + 10 + 25 + 10,
262762306a36Sopenharmony_ci};
262862306a36Sopenharmony_ci
262962306a36Sopenharmony_cistatic const struct panel_desc lg_lb070wv8 = {
263062306a36Sopenharmony_ci	.modes = &lg_lb070wv8_mode,
263162306a36Sopenharmony_ci	.num_modes = 1,
263262306a36Sopenharmony_ci	.bpc = 8,
263362306a36Sopenharmony_ci	.size = {
263462306a36Sopenharmony_ci		.width = 151,
263562306a36Sopenharmony_ci		.height = 91,
263662306a36Sopenharmony_ci	},
263762306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
263862306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
263962306a36Sopenharmony_ci};
264062306a36Sopenharmony_ci
264162306a36Sopenharmony_cistatic const struct display_timing logictechno_lt161010_2nh_timing = {
264262306a36Sopenharmony_ci	.pixelclock = { 26400000, 33300000, 46800000 },
264362306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
264462306a36Sopenharmony_ci	.hfront_porch = { 16, 210, 354 },
264562306a36Sopenharmony_ci	.hback_porch = { 46, 46, 46 },
264662306a36Sopenharmony_ci	.hsync_len = { 1, 20, 40 },
264762306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
264862306a36Sopenharmony_ci	.vfront_porch = { 7, 22, 147 },
264962306a36Sopenharmony_ci	.vback_porch = { 23, 23, 23 },
265062306a36Sopenharmony_ci	.vsync_len = { 1, 10, 20 },
265162306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
265262306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
265362306a36Sopenharmony_ci		 DISPLAY_FLAGS_SYNC_POSEDGE,
265462306a36Sopenharmony_ci};
265562306a36Sopenharmony_ci
265662306a36Sopenharmony_cistatic const struct panel_desc logictechno_lt161010_2nh = {
265762306a36Sopenharmony_ci	.timings = &logictechno_lt161010_2nh_timing,
265862306a36Sopenharmony_ci	.num_timings = 1,
265962306a36Sopenharmony_ci	.bpc = 6,
266062306a36Sopenharmony_ci	.size = {
266162306a36Sopenharmony_ci		.width = 154,
266262306a36Sopenharmony_ci		.height = 86,
266362306a36Sopenharmony_ci	},
266462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
266562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH |
266662306a36Sopenharmony_ci		     DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
266762306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
266862306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
266962306a36Sopenharmony_ci};
267062306a36Sopenharmony_ci
267162306a36Sopenharmony_cistatic const struct display_timing logictechno_lt170410_2whc_timing = {
267262306a36Sopenharmony_ci	.pixelclock = { 68900000, 71100000, 73400000 },
267362306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
267462306a36Sopenharmony_ci	.hfront_porch = { 23, 60, 71 },
267562306a36Sopenharmony_ci	.hback_porch = { 23, 60, 71 },
267662306a36Sopenharmony_ci	.hsync_len = { 15, 40, 47 },
267762306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
267862306a36Sopenharmony_ci	.vfront_porch = { 5, 7, 10 },
267962306a36Sopenharmony_ci	.vback_porch = { 5, 7, 10 },
268062306a36Sopenharmony_ci	.vsync_len = { 6, 9, 12 },
268162306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
268262306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
268362306a36Sopenharmony_ci		 DISPLAY_FLAGS_SYNC_POSEDGE,
268462306a36Sopenharmony_ci};
268562306a36Sopenharmony_ci
268662306a36Sopenharmony_cistatic const struct panel_desc logictechno_lt170410_2whc = {
268762306a36Sopenharmony_ci	.timings = &logictechno_lt170410_2whc_timing,
268862306a36Sopenharmony_ci	.num_timings = 1,
268962306a36Sopenharmony_ci	.bpc = 8,
269062306a36Sopenharmony_ci	.size = {
269162306a36Sopenharmony_ci		.width = 217,
269262306a36Sopenharmony_ci		.height = 136,
269362306a36Sopenharmony_ci	},
269462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
269562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
269662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
269762306a36Sopenharmony_ci};
269862306a36Sopenharmony_ci
269962306a36Sopenharmony_cistatic const struct drm_display_mode logictechno_lttd800480070_l2rt_mode = {
270062306a36Sopenharmony_ci	.clock = 33000,
270162306a36Sopenharmony_ci	.hdisplay = 800,
270262306a36Sopenharmony_ci	.hsync_start = 800 + 112,
270362306a36Sopenharmony_ci	.hsync_end = 800 + 112 + 3,
270462306a36Sopenharmony_ci	.htotal = 800 + 112 + 3 + 85,
270562306a36Sopenharmony_ci	.vdisplay = 480,
270662306a36Sopenharmony_ci	.vsync_start = 480 + 38,
270762306a36Sopenharmony_ci	.vsync_end = 480 + 38 + 3,
270862306a36Sopenharmony_ci	.vtotal = 480 + 38 + 3 + 29,
270962306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
271062306a36Sopenharmony_ci};
271162306a36Sopenharmony_ci
271262306a36Sopenharmony_cistatic const struct panel_desc logictechno_lttd800480070_l2rt = {
271362306a36Sopenharmony_ci	.modes = &logictechno_lttd800480070_l2rt_mode,
271462306a36Sopenharmony_ci	.num_modes = 1,
271562306a36Sopenharmony_ci	.bpc = 8,
271662306a36Sopenharmony_ci	.size = {
271762306a36Sopenharmony_ci		.width = 154,
271862306a36Sopenharmony_ci		.height = 86,
271962306a36Sopenharmony_ci	},
272062306a36Sopenharmony_ci	.delay = {
272162306a36Sopenharmony_ci		.prepare = 45,
272262306a36Sopenharmony_ci		.enable = 100,
272362306a36Sopenharmony_ci		.disable = 100,
272462306a36Sopenharmony_ci		.unprepare = 45
272562306a36Sopenharmony_ci	},
272662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
272762306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
272862306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
272962306a36Sopenharmony_ci};
273062306a36Sopenharmony_ci
273162306a36Sopenharmony_cistatic const struct drm_display_mode logictechno_lttd800480070_l6wh_rt_mode = {
273262306a36Sopenharmony_ci	.clock = 33000,
273362306a36Sopenharmony_ci	.hdisplay = 800,
273462306a36Sopenharmony_ci	.hsync_start = 800 + 154,
273562306a36Sopenharmony_ci	.hsync_end = 800 + 154 + 3,
273662306a36Sopenharmony_ci	.htotal = 800 + 154 + 3 + 43,
273762306a36Sopenharmony_ci	.vdisplay = 480,
273862306a36Sopenharmony_ci	.vsync_start = 480 + 47,
273962306a36Sopenharmony_ci	.vsync_end = 480 + 47 + 3,
274062306a36Sopenharmony_ci	.vtotal = 480 + 47 + 3 + 20,
274162306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
274262306a36Sopenharmony_ci};
274362306a36Sopenharmony_ci
274462306a36Sopenharmony_cistatic const struct panel_desc logictechno_lttd800480070_l6wh_rt = {
274562306a36Sopenharmony_ci	.modes = &logictechno_lttd800480070_l6wh_rt_mode,
274662306a36Sopenharmony_ci	.num_modes = 1,
274762306a36Sopenharmony_ci	.bpc = 8,
274862306a36Sopenharmony_ci	.size = {
274962306a36Sopenharmony_ci		.width = 154,
275062306a36Sopenharmony_ci		.height = 86,
275162306a36Sopenharmony_ci	},
275262306a36Sopenharmony_ci	.delay = {
275362306a36Sopenharmony_ci		.prepare = 45,
275462306a36Sopenharmony_ci		.enable = 100,
275562306a36Sopenharmony_ci		.disable = 100,
275662306a36Sopenharmony_ci		.unprepare = 45
275762306a36Sopenharmony_ci	},
275862306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
275962306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
276062306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
276162306a36Sopenharmony_ci};
276262306a36Sopenharmony_ci
276362306a36Sopenharmony_cistatic const struct drm_display_mode logicpd_type_28_mode = {
276462306a36Sopenharmony_ci	.clock = 9107,
276562306a36Sopenharmony_ci	.hdisplay = 480,
276662306a36Sopenharmony_ci	.hsync_start = 480 + 3,
276762306a36Sopenharmony_ci	.hsync_end = 480 + 3 + 42,
276862306a36Sopenharmony_ci	.htotal = 480 + 3 + 42 + 2,
276962306a36Sopenharmony_ci
277062306a36Sopenharmony_ci	.vdisplay = 272,
277162306a36Sopenharmony_ci	.vsync_start = 272 + 2,
277262306a36Sopenharmony_ci	.vsync_end = 272 + 2 + 11,
277362306a36Sopenharmony_ci	.vtotal = 272 + 2 + 11 + 3,
277462306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
277562306a36Sopenharmony_ci};
277662306a36Sopenharmony_ci
277762306a36Sopenharmony_cistatic const struct panel_desc logicpd_type_28 = {
277862306a36Sopenharmony_ci	.modes = &logicpd_type_28_mode,
277962306a36Sopenharmony_ci	.num_modes = 1,
278062306a36Sopenharmony_ci	.bpc = 8,
278162306a36Sopenharmony_ci	.size = {
278262306a36Sopenharmony_ci		.width = 105,
278362306a36Sopenharmony_ci		.height = 67,
278462306a36Sopenharmony_ci	},
278562306a36Sopenharmony_ci	.delay = {
278662306a36Sopenharmony_ci		.prepare = 200,
278762306a36Sopenharmony_ci		.enable = 200,
278862306a36Sopenharmony_ci		.unprepare = 200,
278962306a36Sopenharmony_ci		.disable = 200,
279062306a36Sopenharmony_ci	},
279162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
279262306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
279362306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE,
279462306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
279562306a36Sopenharmony_ci};
279662306a36Sopenharmony_ci
279762306a36Sopenharmony_cistatic const struct drm_display_mode mitsubishi_aa070mc01_mode = {
279862306a36Sopenharmony_ci	.clock = 30400,
279962306a36Sopenharmony_ci	.hdisplay = 800,
280062306a36Sopenharmony_ci	.hsync_start = 800 + 0,
280162306a36Sopenharmony_ci	.hsync_end = 800 + 1,
280262306a36Sopenharmony_ci	.htotal = 800 + 0 + 1 + 160,
280362306a36Sopenharmony_ci	.vdisplay = 480,
280462306a36Sopenharmony_ci	.vsync_start = 480 + 0,
280562306a36Sopenharmony_ci	.vsync_end = 480 + 48 + 1,
280662306a36Sopenharmony_ci	.vtotal = 480 + 48 + 1 + 0,
280762306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
280862306a36Sopenharmony_ci};
280962306a36Sopenharmony_ci
281062306a36Sopenharmony_cistatic const struct panel_desc mitsubishi_aa070mc01 = {
281162306a36Sopenharmony_ci	.modes = &mitsubishi_aa070mc01_mode,
281262306a36Sopenharmony_ci	.num_modes = 1,
281362306a36Sopenharmony_ci	.bpc = 8,
281462306a36Sopenharmony_ci	.size = {
281562306a36Sopenharmony_ci		.width = 152,
281662306a36Sopenharmony_ci		.height = 91,
281762306a36Sopenharmony_ci	},
281862306a36Sopenharmony_ci
281962306a36Sopenharmony_ci	.delay = {
282062306a36Sopenharmony_ci		.enable = 200,
282162306a36Sopenharmony_ci		.unprepare = 200,
282262306a36Sopenharmony_ci		.disable = 400,
282362306a36Sopenharmony_ci	},
282462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
282562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
282662306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
282762306a36Sopenharmony_ci};
282862306a36Sopenharmony_ci
282962306a36Sopenharmony_cistatic const struct display_timing multi_inno_mi0700s4t_6_timing = {
283062306a36Sopenharmony_ci	.pixelclock = { 29000000, 33000000, 38000000 },
283162306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
283262306a36Sopenharmony_ci	.hfront_porch = { 180, 210, 240 },
283362306a36Sopenharmony_ci	.hback_porch = { 16, 16, 16 },
283462306a36Sopenharmony_ci	.hsync_len = { 30, 30, 30 },
283562306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
283662306a36Sopenharmony_ci	.vfront_porch = { 12, 22, 32 },
283762306a36Sopenharmony_ci	.vback_porch = { 10, 10, 10 },
283862306a36Sopenharmony_ci	.vsync_len = { 13, 13, 13 },
283962306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
284062306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
284162306a36Sopenharmony_ci		 DISPLAY_FLAGS_SYNC_POSEDGE,
284262306a36Sopenharmony_ci};
284362306a36Sopenharmony_ci
284462306a36Sopenharmony_cistatic const struct panel_desc multi_inno_mi0700s4t_6 = {
284562306a36Sopenharmony_ci	.timings = &multi_inno_mi0700s4t_6_timing,
284662306a36Sopenharmony_ci	.num_timings = 1,
284762306a36Sopenharmony_ci	.bpc = 8,
284862306a36Sopenharmony_ci	.size = {
284962306a36Sopenharmony_ci		.width = 154,
285062306a36Sopenharmony_ci		.height = 86,
285162306a36Sopenharmony_ci	},
285262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
285362306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH |
285462306a36Sopenharmony_ci		     DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
285562306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
285662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
285762306a36Sopenharmony_ci};
285862306a36Sopenharmony_ci
285962306a36Sopenharmony_cistatic const struct display_timing multi_inno_mi0800ft_9_timing = {
286062306a36Sopenharmony_ci	.pixelclock = { 32000000, 40000000, 50000000 },
286162306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
286262306a36Sopenharmony_ci	.hfront_porch = { 16, 210, 354 },
286362306a36Sopenharmony_ci	.hback_porch = { 6, 26, 45 },
286462306a36Sopenharmony_ci	.hsync_len = { 1, 20, 40 },
286562306a36Sopenharmony_ci	.vactive = { 600, 600, 600 },
286662306a36Sopenharmony_ci	.vfront_porch = { 1, 12, 77 },
286762306a36Sopenharmony_ci	.vback_porch = { 3, 13, 22 },
286862306a36Sopenharmony_ci	.vsync_len = { 1, 10, 20 },
286962306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
287062306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
287162306a36Sopenharmony_ci		 DISPLAY_FLAGS_SYNC_POSEDGE,
287262306a36Sopenharmony_ci};
287362306a36Sopenharmony_ci
287462306a36Sopenharmony_cistatic const struct panel_desc multi_inno_mi0800ft_9 = {
287562306a36Sopenharmony_ci	.timings = &multi_inno_mi0800ft_9_timing,
287662306a36Sopenharmony_ci	.num_timings = 1,
287762306a36Sopenharmony_ci	.bpc = 8,
287862306a36Sopenharmony_ci	.size = {
287962306a36Sopenharmony_ci		.width = 162,
288062306a36Sopenharmony_ci		.height = 122,
288162306a36Sopenharmony_ci	},
288262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
288362306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH |
288462306a36Sopenharmony_ci		     DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
288562306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
288662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
288762306a36Sopenharmony_ci};
288862306a36Sopenharmony_ci
288962306a36Sopenharmony_cistatic const struct display_timing multi_inno_mi1010ait_1cp_timing = {
289062306a36Sopenharmony_ci	.pixelclock = { 68900000, 70000000, 73400000 },
289162306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
289262306a36Sopenharmony_ci	.hfront_porch = { 30, 60, 71 },
289362306a36Sopenharmony_ci	.hback_porch = { 30, 60, 71 },
289462306a36Sopenharmony_ci	.hsync_len = { 10, 10, 48 },
289562306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
289662306a36Sopenharmony_ci	.vfront_porch = { 5, 10, 10 },
289762306a36Sopenharmony_ci	.vback_porch = { 5, 10, 10 },
289862306a36Sopenharmony_ci	.vsync_len = { 5, 6, 13 },
289962306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
290062306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH,
290162306a36Sopenharmony_ci};
290262306a36Sopenharmony_ci
290362306a36Sopenharmony_cistatic const struct panel_desc multi_inno_mi1010ait_1cp = {
290462306a36Sopenharmony_ci	.timings = &multi_inno_mi1010ait_1cp_timing,
290562306a36Sopenharmony_ci	.num_timings = 1,
290662306a36Sopenharmony_ci	.bpc = 8,
290762306a36Sopenharmony_ci	.size = {
290862306a36Sopenharmony_ci		.width = 217,
290962306a36Sopenharmony_ci		.height = 136,
291062306a36Sopenharmony_ci	},
291162306a36Sopenharmony_ci	.delay = {
291262306a36Sopenharmony_ci		.enable = 50,
291362306a36Sopenharmony_ci		.disable = 50,
291462306a36Sopenharmony_ci	},
291562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
291662306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
291762306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
291862306a36Sopenharmony_ci};
291962306a36Sopenharmony_ci
292062306a36Sopenharmony_cistatic const struct display_timing nec_nl12880bc20_05_timing = {
292162306a36Sopenharmony_ci	.pixelclock = { 67000000, 71000000, 75000000 },
292262306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
292362306a36Sopenharmony_ci	.hfront_porch = { 2, 30, 30 },
292462306a36Sopenharmony_ci	.hback_porch = { 6, 100, 100 },
292562306a36Sopenharmony_ci	.hsync_len = { 2, 30, 30 },
292662306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
292762306a36Sopenharmony_ci	.vfront_porch = { 5, 5, 5 },
292862306a36Sopenharmony_ci	.vback_porch = { 11, 11, 11 },
292962306a36Sopenharmony_ci	.vsync_len = { 7, 7, 7 },
293062306a36Sopenharmony_ci};
293162306a36Sopenharmony_ci
293262306a36Sopenharmony_cistatic const struct panel_desc nec_nl12880bc20_05 = {
293362306a36Sopenharmony_ci	.timings = &nec_nl12880bc20_05_timing,
293462306a36Sopenharmony_ci	.num_timings = 1,
293562306a36Sopenharmony_ci	.bpc = 8,
293662306a36Sopenharmony_ci	.size = {
293762306a36Sopenharmony_ci		.width = 261,
293862306a36Sopenharmony_ci		.height = 163,
293962306a36Sopenharmony_ci	},
294062306a36Sopenharmony_ci	.delay = {
294162306a36Sopenharmony_ci		.enable = 50,
294262306a36Sopenharmony_ci		.disable = 50,
294362306a36Sopenharmony_ci	},
294462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
294562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
294662306a36Sopenharmony_ci};
294762306a36Sopenharmony_ci
294862306a36Sopenharmony_cistatic const struct drm_display_mode nec_nl4827hc19_05b_mode = {
294962306a36Sopenharmony_ci	.clock = 10870,
295062306a36Sopenharmony_ci	.hdisplay = 480,
295162306a36Sopenharmony_ci	.hsync_start = 480 + 2,
295262306a36Sopenharmony_ci	.hsync_end = 480 + 2 + 41,
295362306a36Sopenharmony_ci	.htotal = 480 + 2 + 41 + 2,
295462306a36Sopenharmony_ci	.vdisplay = 272,
295562306a36Sopenharmony_ci	.vsync_start = 272 + 2,
295662306a36Sopenharmony_ci	.vsync_end = 272 + 2 + 4,
295762306a36Sopenharmony_ci	.vtotal = 272 + 2 + 4 + 2,
295862306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
295962306a36Sopenharmony_ci};
296062306a36Sopenharmony_ci
296162306a36Sopenharmony_cistatic const struct panel_desc nec_nl4827hc19_05b = {
296262306a36Sopenharmony_ci	.modes = &nec_nl4827hc19_05b_mode,
296362306a36Sopenharmony_ci	.num_modes = 1,
296462306a36Sopenharmony_ci	.bpc = 8,
296562306a36Sopenharmony_ci	.size = {
296662306a36Sopenharmony_ci		.width = 95,
296762306a36Sopenharmony_ci		.height = 54,
296862306a36Sopenharmony_ci	},
296962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
297062306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
297162306a36Sopenharmony_ci};
297262306a36Sopenharmony_ci
297362306a36Sopenharmony_cistatic const struct drm_display_mode netron_dy_e231732_mode = {
297462306a36Sopenharmony_ci	.clock = 66000,
297562306a36Sopenharmony_ci	.hdisplay = 1024,
297662306a36Sopenharmony_ci	.hsync_start = 1024 + 160,
297762306a36Sopenharmony_ci	.hsync_end = 1024 + 160 + 70,
297862306a36Sopenharmony_ci	.htotal = 1024 + 160 + 70 + 90,
297962306a36Sopenharmony_ci	.vdisplay = 600,
298062306a36Sopenharmony_ci	.vsync_start = 600 + 127,
298162306a36Sopenharmony_ci	.vsync_end = 600 + 127 + 20,
298262306a36Sopenharmony_ci	.vtotal = 600 + 127 + 20 + 3,
298362306a36Sopenharmony_ci};
298462306a36Sopenharmony_ci
298562306a36Sopenharmony_cistatic const struct panel_desc netron_dy_e231732 = {
298662306a36Sopenharmony_ci	.modes = &netron_dy_e231732_mode,
298762306a36Sopenharmony_ci	.num_modes = 1,
298862306a36Sopenharmony_ci	.size = {
298962306a36Sopenharmony_ci		.width = 154,
299062306a36Sopenharmony_ci		.height = 87,
299162306a36Sopenharmony_ci	},
299262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
299362306a36Sopenharmony_ci};
299462306a36Sopenharmony_ci
299562306a36Sopenharmony_cistatic const struct drm_display_mode newhaven_nhd_43_480272ef_atxl_mode = {
299662306a36Sopenharmony_ci	.clock = 9000,
299762306a36Sopenharmony_ci	.hdisplay = 480,
299862306a36Sopenharmony_ci	.hsync_start = 480 + 2,
299962306a36Sopenharmony_ci	.hsync_end = 480 + 2 + 41,
300062306a36Sopenharmony_ci	.htotal = 480 + 2 + 41 + 2,
300162306a36Sopenharmony_ci	.vdisplay = 272,
300262306a36Sopenharmony_ci	.vsync_start = 272 + 2,
300362306a36Sopenharmony_ci	.vsync_end = 272 + 2 + 10,
300462306a36Sopenharmony_ci	.vtotal = 272 + 2 + 10 + 2,
300562306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
300662306a36Sopenharmony_ci};
300762306a36Sopenharmony_ci
300862306a36Sopenharmony_cistatic const struct panel_desc newhaven_nhd_43_480272ef_atxl = {
300962306a36Sopenharmony_ci	.modes = &newhaven_nhd_43_480272ef_atxl_mode,
301062306a36Sopenharmony_ci	.num_modes = 1,
301162306a36Sopenharmony_ci	.bpc = 8,
301262306a36Sopenharmony_ci	.size = {
301362306a36Sopenharmony_ci		.width = 95,
301462306a36Sopenharmony_ci		.height = 54,
301562306a36Sopenharmony_ci	},
301662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
301762306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
301862306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
301962306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
302062306a36Sopenharmony_ci};
302162306a36Sopenharmony_ci
302262306a36Sopenharmony_cistatic const struct display_timing nlt_nl192108ac18_02d_timing = {
302362306a36Sopenharmony_ci	.pixelclock = { 130000000, 148350000, 163000000 },
302462306a36Sopenharmony_ci	.hactive = { 1920, 1920, 1920 },
302562306a36Sopenharmony_ci	.hfront_porch = { 80, 100, 100 },
302662306a36Sopenharmony_ci	.hback_porch = { 100, 120, 120 },
302762306a36Sopenharmony_ci	.hsync_len = { 50, 60, 60 },
302862306a36Sopenharmony_ci	.vactive = { 1080, 1080, 1080 },
302962306a36Sopenharmony_ci	.vfront_porch = { 12, 30, 30 },
303062306a36Sopenharmony_ci	.vback_porch = { 4, 10, 10 },
303162306a36Sopenharmony_ci	.vsync_len = { 4, 5, 5 },
303262306a36Sopenharmony_ci};
303362306a36Sopenharmony_ci
303462306a36Sopenharmony_cistatic const struct panel_desc nlt_nl192108ac18_02d = {
303562306a36Sopenharmony_ci	.timings = &nlt_nl192108ac18_02d_timing,
303662306a36Sopenharmony_ci	.num_timings = 1,
303762306a36Sopenharmony_ci	.bpc = 8,
303862306a36Sopenharmony_ci	.size = {
303962306a36Sopenharmony_ci		.width = 344,
304062306a36Sopenharmony_ci		.height = 194,
304162306a36Sopenharmony_ci	},
304262306a36Sopenharmony_ci	.delay = {
304362306a36Sopenharmony_ci		.unprepare = 500,
304462306a36Sopenharmony_ci	},
304562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
304662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
304762306a36Sopenharmony_ci};
304862306a36Sopenharmony_ci
304962306a36Sopenharmony_cistatic const struct drm_display_mode nvd_9128_mode = {
305062306a36Sopenharmony_ci	.clock = 29500,
305162306a36Sopenharmony_ci	.hdisplay = 800,
305262306a36Sopenharmony_ci	.hsync_start = 800 + 130,
305362306a36Sopenharmony_ci	.hsync_end = 800 + 130 + 98,
305462306a36Sopenharmony_ci	.htotal = 800 + 0 + 130 + 98,
305562306a36Sopenharmony_ci	.vdisplay = 480,
305662306a36Sopenharmony_ci	.vsync_start = 480 + 10,
305762306a36Sopenharmony_ci	.vsync_end = 480 + 10 + 50,
305862306a36Sopenharmony_ci	.vtotal = 480 + 0 + 10 + 50,
305962306a36Sopenharmony_ci};
306062306a36Sopenharmony_ci
306162306a36Sopenharmony_cistatic const struct panel_desc nvd_9128 = {
306262306a36Sopenharmony_ci	.modes = &nvd_9128_mode,
306362306a36Sopenharmony_ci	.num_modes = 1,
306462306a36Sopenharmony_ci	.bpc = 8,
306562306a36Sopenharmony_ci	.size = {
306662306a36Sopenharmony_ci		.width = 156,
306762306a36Sopenharmony_ci		.height = 88,
306862306a36Sopenharmony_ci	},
306962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
307062306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
307162306a36Sopenharmony_ci};
307262306a36Sopenharmony_ci
307362306a36Sopenharmony_cistatic const struct display_timing okaya_rs800480t_7x0gp_timing = {
307462306a36Sopenharmony_ci	.pixelclock = { 30000000, 30000000, 40000000 },
307562306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
307662306a36Sopenharmony_ci	.hfront_porch = { 40, 40, 40 },
307762306a36Sopenharmony_ci	.hback_porch = { 40, 40, 40 },
307862306a36Sopenharmony_ci	.hsync_len = { 1, 48, 48 },
307962306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
308062306a36Sopenharmony_ci	.vfront_porch = { 13, 13, 13 },
308162306a36Sopenharmony_ci	.vback_porch = { 29, 29, 29 },
308262306a36Sopenharmony_ci	.vsync_len = { 3, 3, 3 },
308362306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
308462306a36Sopenharmony_ci};
308562306a36Sopenharmony_ci
308662306a36Sopenharmony_cistatic const struct panel_desc okaya_rs800480t_7x0gp = {
308762306a36Sopenharmony_ci	.timings = &okaya_rs800480t_7x0gp_timing,
308862306a36Sopenharmony_ci	.num_timings = 1,
308962306a36Sopenharmony_ci	.bpc = 6,
309062306a36Sopenharmony_ci	.size = {
309162306a36Sopenharmony_ci		.width = 154,
309262306a36Sopenharmony_ci		.height = 87,
309362306a36Sopenharmony_ci	},
309462306a36Sopenharmony_ci	.delay = {
309562306a36Sopenharmony_ci		.prepare = 41,
309662306a36Sopenharmony_ci		.enable = 50,
309762306a36Sopenharmony_ci		.unprepare = 41,
309862306a36Sopenharmony_ci		.disable = 50,
309962306a36Sopenharmony_ci	},
310062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
310162306a36Sopenharmony_ci};
310262306a36Sopenharmony_ci
310362306a36Sopenharmony_cistatic const struct drm_display_mode olimex_lcd_olinuxino_43ts_mode = {
310462306a36Sopenharmony_ci	.clock = 9000,
310562306a36Sopenharmony_ci	.hdisplay = 480,
310662306a36Sopenharmony_ci	.hsync_start = 480 + 5,
310762306a36Sopenharmony_ci	.hsync_end = 480 + 5 + 30,
310862306a36Sopenharmony_ci	.htotal = 480 + 5 + 30 + 10,
310962306a36Sopenharmony_ci	.vdisplay = 272,
311062306a36Sopenharmony_ci	.vsync_start = 272 + 8,
311162306a36Sopenharmony_ci	.vsync_end = 272 + 8 + 5,
311262306a36Sopenharmony_ci	.vtotal = 272 + 8 + 5 + 3,
311362306a36Sopenharmony_ci};
311462306a36Sopenharmony_ci
311562306a36Sopenharmony_cistatic const struct panel_desc olimex_lcd_olinuxino_43ts = {
311662306a36Sopenharmony_ci	.modes = &olimex_lcd_olinuxino_43ts_mode,
311762306a36Sopenharmony_ci	.num_modes = 1,
311862306a36Sopenharmony_ci	.size = {
311962306a36Sopenharmony_ci		.width = 95,
312062306a36Sopenharmony_ci		.height = 54,
312162306a36Sopenharmony_ci	},
312262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
312362306a36Sopenharmony_ci};
312462306a36Sopenharmony_ci
312562306a36Sopenharmony_ci/*
312662306a36Sopenharmony_ci * 800x480 CVT. The panel appears to be quite accepting, at least as far as
312762306a36Sopenharmony_ci * pixel clocks, but this is the timing that was being used in the Adafruit
312862306a36Sopenharmony_ci * installation instructions.
312962306a36Sopenharmony_ci */
313062306a36Sopenharmony_cistatic const struct drm_display_mode ontat_yx700wv03_mode = {
313162306a36Sopenharmony_ci	.clock = 29500,
313262306a36Sopenharmony_ci	.hdisplay = 800,
313362306a36Sopenharmony_ci	.hsync_start = 824,
313462306a36Sopenharmony_ci	.hsync_end = 896,
313562306a36Sopenharmony_ci	.htotal = 992,
313662306a36Sopenharmony_ci	.vdisplay = 480,
313762306a36Sopenharmony_ci	.vsync_start = 483,
313862306a36Sopenharmony_ci	.vsync_end = 493,
313962306a36Sopenharmony_ci	.vtotal = 500,
314062306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
314162306a36Sopenharmony_ci};
314262306a36Sopenharmony_ci
314362306a36Sopenharmony_ci/*
314462306a36Sopenharmony_ci * Specification at:
314562306a36Sopenharmony_ci * https://www.adafruit.com/images/product-files/2406/c3163.pdf
314662306a36Sopenharmony_ci */
314762306a36Sopenharmony_cistatic const struct panel_desc ontat_yx700wv03 = {
314862306a36Sopenharmony_ci	.modes = &ontat_yx700wv03_mode,
314962306a36Sopenharmony_ci	.num_modes = 1,
315062306a36Sopenharmony_ci	.bpc = 8,
315162306a36Sopenharmony_ci	.size = {
315262306a36Sopenharmony_ci		.width = 154,
315362306a36Sopenharmony_ci		.height = 83,
315462306a36Sopenharmony_ci	},
315562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
315662306a36Sopenharmony_ci};
315762306a36Sopenharmony_ci
315862306a36Sopenharmony_cistatic const struct drm_display_mode ortustech_com37h3m_mode  = {
315962306a36Sopenharmony_ci	.clock = 22230,
316062306a36Sopenharmony_ci	.hdisplay = 480,
316162306a36Sopenharmony_ci	.hsync_start = 480 + 40,
316262306a36Sopenharmony_ci	.hsync_end = 480 + 40 + 10,
316362306a36Sopenharmony_ci	.htotal = 480 + 40 + 10 + 40,
316462306a36Sopenharmony_ci	.vdisplay = 640,
316562306a36Sopenharmony_ci	.vsync_start = 640 + 4,
316662306a36Sopenharmony_ci	.vsync_end = 640 + 4 + 2,
316762306a36Sopenharmony_ci	.vtotal = 640 + 4 + 2 + 4,
316862306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
316962306a36Sopenharmony_ci};
317062306a36Sopenharmony_ci
317162306a36Sopenharmony_cistatic const struct panel_desc ortustech_com37h3m = {
317262306a36Sopenharmony_ci	.modes = &ortustech_com37h3m_mode,
317362306a36Sopenharmony_ci	.num_modes = 1,
317462306a36Sopenharmony_ci	.bpc = 8,
317562306a36Sopenharmony_ci	.size = {
317662306a36Sopenharmony_ci		.width = 56,	/* 56.16mm */
317762306a36Sopenharmony_ci		.height = 75,	/* 74.88mm */
317862306a36Sopenharmony_ci	},
317962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
318062306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
318162306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
318262306a36Sopenharmony_ci};
318362306a36Sopenharmony_ci
318462306a36Sopenharmony_cistatic const struct drm_display_mode ortustech_com43h4m85ulc_mode  = {
318562306a36Sopenharmony_ci	.clock = 25000,
318662306a36Sopenharmony_ci	.hdisplay = 480,
318762306a36Sopenharmony_ci	.hsync_start = 480 + 10,
318862306a36Sopenharmony_ci	.hsync_end = 480 + 10 + 10,
318962306a36Sopenharmony_ci	.htotal = 480 + 10 + 10 + 15,
319062306a36Sopenharmony_ci	.vdisplay = 800,
319162306a36Sopenharmony_ci	.vsync_start = 800 + 3,
319262306a36Sopenharmony_ci	.vsync_end = 800 + 3 + 3,
319362306a36Sopenharmony_ci	.vtotal = 800 + 3 + 3 + 3,
319462306a36Sopenharmony_ci};
319562306a36Sopenharmony_ci
319662306a36Sopenharmony_cistatic const struct panel_desc ortustech_com43h4m85ulc = {
319762306a36Sopenharmony_ci	.modes = &ortustech_com43h4m85ulc_mode,
319862306a36Sopenharmony_ci	.num_modes = 1,
319962306a36Sopenharmony_ci	.bpc = 6,
320062306a36Sopenharmony_ci	.size = {
320162306a36Sopenharmony_ci		.width = 56,
320262306a36Sopenharmony_ci		.height = 93,
320362306a36Sopenharmony_ci	},
320462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
320562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
320662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
320762306a36Sopenharmony_ci};
320862306a36Sopenharmony_ci
320962306a36Sopenharmony_cistatic const struct drm_display_mode osddisplays_osd070t1718_19ts_mode  = {
321062306a36Sopenharmony_ci	.clock = 33000,
321162306a36Sopenharmony_ci	.hdisplay = 800,
321262306a36Sopenharmony_ci	.hsync_start = 800 + 210,
321362306a36Sopenharmony_ci	.hsync_end = 800 + 210 + 30,
321462306a36Sopenharmony_ci	.htotal = 800 + 210 + 30 + 16,
321562306a36Sopenharmony_ci	.vdisplay = 480,
321662306a36Sopenharmony_ci	.vsync_start = 480 + 22,
321762306a36Sopenharmony_ci	.vsync_end = 480 + 22 + 13,
321862306a36Sopenharmony_ci	.vtotal = 480 + 22 + 13 + 10,
321962306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
322062306a36Sopenharmony_ci};
322162306a36Sopenharmony_ci
322262306a36Sopenharmony_cistatic const struct panel_desc osddisplays_osd070t1718_19ts = {
322362306a36Sopenharmony_ci	.modes = &osddisplays_osd070t1718_19ts_mode,
322462306a36Sopenharmony_ci	.num_modes = 1,
322562306a36Sopenharmony_ci	.bpc = 8,
322662306a36Sopenharmony_ci	.size = {
322762306a36Sopenharmony_ci		.width = 152,
322862306a36Sopenharmony_ci		.height = 91,
322962306a36Sopenharmony_ci	},
323062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
323162306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
323262306a36Sopenharmony_ci		DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
323362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
323462306a36Sopenharmony_ci};
323562306a36Sopenharmony_ci
323662306a36Sopenharmony_cistatic const struct drm_display_mode pda_91_00156_a0_mode = {
323762306a36Sopenharmony_ci	.clock = 33300,
323862306a36Sopenharmony_ci	.hdisplay = 800,
323962306a36Sopenharmony_ci	.hsync_start = 800 + 1,
324062306a36Sopenharmony_ci	.hsync_end = 800 + 1 + 64,
324162306a36Sopenharmony_ci	.htotal = 800 + 1 + 64 + 64,
324262306a36Sopenharmony_ci	.vdisplay = 480,
324362306a36Sopenharmony_ci	.vsync_start = 480 + 1,
324462306a36Sopenharmony_ci	.vsync_end = 480 + 1 + 23,
324562306a36Sopenharmony_ci	.vtotal = 480 + 1 + 23 + 22,
324662306a36Sopenharmony_ci};
324762306a36Sopenharmony_ci
324862306a36Sopenharmony_cistatic const struct panel_desc pda_91_00156_a0  = {
324962306a36Sopenharmony_ci	.modes = &pda_91_00156_a0_mode,
325062306a36Sopenharmony_ci	.num_modes = 1,
325162306a36Sopenharmony_ci	.size = {
325262306a36Sopenharmony_ci		.width = 152,
325362306a36Sopenharmony_ci		.height = 91,
325462306a36Sopenharmony_ci	},
325562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
325662306a36Sopenharmony_ci};
325762306a36Sopenharmony_ci
325862306a36Sopenharmony_cistatic const struct drm_display_mode powertip_ph800480t013_idf02_mode = {
325962306a36Sopenharmony_ci	.clock = 24750,
326062306a36Sopenharmony_ci	.hdisplay = 800,
326162306a36Sopenharmony_ci	.hsync_start = 800 + 54,
326262306a36Sopenharmony_ci	.hsync_end = 800 + 54 + 2,
326362306a36Sopenharmony_ci	.htotal = 800 + 54 + 2 + 44,
326462306a36Sopenharmony_ci	.vdisplay = 480,
326562306a36Sopenharmony_ci	.vsync_start = 480 + 49,
326662306a36Sopenharmony_ci	.vsync_end = 480 + 49 + 2,
326762306a36Sopenharmony_ci	.vtotal = 480 + 49 + 2 + 22,
326862306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
326962306a36Sopenharmony_ci};
327062306a36Sopenharmony_ci
327162306a36Sopenharmony_cistatic const struct panel_desc powertip_ph800480t013_idf02  = {
327262306a36Sopenharmony_ci	.modes = &powertip_ph800480t013_idf02_mode,
327362306a36Sopenharmony_ci	.num_modes = 1,
327462306a36Sopenharmony_ci	.bpc = 8,
327562306a36Sopenharmony_ci	.size = {
327662306a36Sopenharmony_ci		.width = 152,
327762306a36Sopenharmony_ci		.height = 91,
327862306a36Sopenharmony_ci	},
327962306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH |
328062306a36Sopenharmony_ci		     DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
328162306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
328262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
328362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
328462306a36Sopenharmony_ci};
328562306a36Sopenharmony_ci
328662306a36Sopenharmony_cistatic const struct drm_display_mode qd43003c0_40_mode = {
328762306a36Sopenharmony_ci	.clock = 9000,
328862306a36Sopenharmony_ci	.hdisplay = 480,
328962306a36Sopenharmony_ci	.hsync_start = 480 + 8,
329062306a36Sopenharmony_ci	.hsync_end = 480 + 8 + 4,
329162306a36Sopenharmony_ci	.htotal = 480 + 8 + 4 + 39,
329262306a36Sopenharmony_ci	.vdisplay = 272,
329362306a36Sopenharmony_ci	.vsync_start = 272 + 4,
329462306a36Sopenharmony_ci	.vsync_end = 272 + 4 + 10,
329562306a36Sopenharmony_ci	.vtotal = 272 + 4 + 10 + 2,
329662306a36Sopenharmony_ci};
329762306a36Sopenharmony_ci
329862306a36Sopenharmony_cistatic const struct panel_desc qd43003c0_40 = {
329962306a36Sopenharmony_ci	.modes = &qd43003c0_40_mode,
330062306a36Sopenharmony_ci	.num_modes = 1,
330162306a36Sopenharmony_ci	.bpc = 8,
330262306a36Sopenharmony_ci	.size = {
330362306a36Sopenharmony_ci		.width = 95,
330462306a36Sopenharmony_ci		.height = 53,
330562306a36Sopenharmony_ci	},
330662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
330762306a36Sopenharmony_ci};
330862306a36Sopenharmony_ci
330962306a36Sopenharmony_cistatic const struct drm_display_mode qishenglong_gopher2b_lcd_modes[] = {
331062306a36Sopenharmony_ci	{ /* 60 Hz */
331162306a36Sopenharmony_ci		.clock = 10800,
331262306a36Sopenharmony_ci		.hdisplay = 480,
331362306a36Sopenharmony_ci		.hsync_start = 480 + 77,
331462306a36Sopenharmony_ci		.hsync_end = 480 + 77 + 41,
331562306a36Sopenharmony_ci		.htotal = 480 + 77 + 41 + 2,
331662306a36Sopenharmony_ci		.vdisplay = 272,
331762306a36Sopenharmony_ci		.vsync_start = 272 + 16,
331862306a36Sopenharmony_ci		.vsync_end = 272 + 16 + 10,
331962306a36Sopenharmony_ci		.vtotal = 272 + 16 + 10 + 2,
332062306a36Sopenharmony_ci		.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
332162306a36Sopenharmony_ci	},
332262306a36Sopenharmony_ci	{ /* 50 Hz */
332362306a36Sopenharmony_ci		.clock = 10800,
332462306a36Sopenharmony_ci		.hdisplay = 480,
332562306a36Sopenharmony_ci		.hsync_start = 480 + 17,
332662306a36Sopenharmony_ci		.hsync_end = 480 + 17 + 41,
332762306a36Sopenharmony_ci		.htotal = 480 + 17 + 41 + 2,
332862306a36Sopenharmony_ci		.vdisplay = 272,
332962306a36Sopenharmony_ci		.vsync_start = 272 + 116,
333062306a36Sopenharmony_ci		.vsync_end = 272 + 116 + 10,
333162306a36Sopenharmony_ci		.vtotal = 272 + 116 + 10 + 2,
333262306a36Sopenharmony_ci		.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
333362306a36Sopenharmony_ci	},
333462306a36Sopenharmony_ci};
333562306a36Sopenharmony_ci
333662306a36Sopenharmony_cistatic const struct panel_desc qishenglong_gopher2b_lcd = {
333762306a36Sopenharmony_ci	.modes = qishenglong_gopher2b_lcd_modes,
333862306a36Sopenharmony_ci	.num_modes = ARRAY_SIZE(qishenglong_gopher2b_lcd_modes),
333962306a36Sopenharmony_ci	.bpc = 8,
334062306a36Sopenharmony_ci	.size = {
334162306a36Sopenharmony_ci		.width = 95,
334262306a36Sopenharmony_ci		.height = 54,
334362306a36Sopenharmony_ci	},
334462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
334562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
334662306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
334762306a36Sopenharmony_ci};
334862306a36Sopenharmony_ci
334962306a36Sopenharmony_cistatic const struct display_timing rocktech_rk043fn48h_timing = {
335062306a36Sopenharmony_ci	.pixelclock = { 6000000, 9000000, 12000000 },
335162306a36Sopenharmony_ci	.hactive = { 480, 480, 480 },
335262306a36Sopenharmony_ci	.hback_porch = { 8, 43, 43 },
335362306a36Sopenharmony_ci	.hfront_porch = { 2, 8, 8 },
335462306a36Sopenharmony_ci	.hsync_len = { 1, 1, 1 },
335562306a36Sopenharmony_ci	.vactive = { 272, 272, 272 },
335662306a36Sopenharmony_ci	.vback_porch = { 2, 12, 12 },
335762306a36Sopenharmony_ci	.vfront_porch = { 1, 4, 4 },
335862306a36Sopenharmony_ci	.vsync_len = { 1, 10, 10 },
335962306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_VSYNC_LOW | DISPLAY_FLAGS_HSYNC_LOW |
336062306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE,
336162306a36Sopenharmony_ci};
336262306a36Sopenharmony_ci
336362306a36Sopenharmony_cistatic const struct panel_desc rocktech_rk043fn48h = {
336462306a36Sopenharmony_ci	.timings = &rocktech_rk043fn48h_timing,
336562306a36Sopenharmony_ci	.num_timings = 1,
336662306a36Sopenharmony_ci	.bpc = 8,
336762306a36Sopenharmony_ci	.size = {
336862306a36Sopenharmony_ci		.width = 95,
336962306a36Sopenharmony_ci		.height = 54,
337062306a36Sopenharmony_ci	},
337162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
337262306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
337362306a36Sopenharmony_ci};
337462306a36Sopenharmony_ci
337562306a36Sopenharmony_cistatic const struct display_timing rocktech_rk070er9427_timing = {
337662306a36Sopenharmony_ci	.pixelclock = { 26400000, 33300000, 46800000 },
337762306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
337862306a36Sopenharmony_ci	.hfront_porch = { 16, 210, 354 },
337962306a36Sopenharmony_ci	.hback_porch = { 46, 46, 46 },
338062306a36Sopenharmony_ci	.hsync_len = { 1, 1, 1 },
338162306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
338262306a36Sopenharmony_ci	.vfront_porch = { 7, 22, 147 },
338362306a36Sopenharmony_ci	.vback_porch = { 23, 23, 23 },
338462306a36Sopenharmony_ci	.vsync_len = { 1, 1, 1 },
338562306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
338662306a36Sopenharmony_ci};
338762306a36Sopenharmony_ci
338862306a36Sopenharmony_cistatic const struct panel_desc rocktech_rk070er9427 = {
338962306a36Sopenharmony_ci	.timings = &rocktech_rk070er9427_timing,
339062306a36Sopenharmony_ci	.num_timings = 1,
339162306a36Sopenharmony_ci	.bpc = 6,
339262306a36Sopenharmony_ci	.size = {
339362306a36Sopenharmony_ci		.width = 154,
339462306a36Sopenharmony_ci		.height = 86,
339562306a36Sopenharmony_ci	},
339662306a36Sopenharmony_ci	.delay = {
339762306a36Sopenharmony_ci		.prepare = 41,
339862306a36Sopenharmony_ci		.enable = 50,
339962306a36Sopenharmony_ci		.unprepare = 41,
340062306a36Sopenharmony_ci		.disable = 50,
340162306a36Sopenharmony_ci	},
340262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
340362306a36Sopenharmony_ci};
340462306a36Sopenharmony_ci
340562306a36Sopenharmony_cistatic const struct drm_display_mode rocktech_rk101ii01d_ct_mode = {
340662306a36Sopenharmony_ci	.clock = 71100,
340762306a36Sopenharmony_ci	.hdisplay = 1280,
340862306a36Sopenharmony_ci	.hsync_start = 1280 + 48,
340962306a36Sopenharmony_ci	.hsync_end = 1280 + 48 + 32,
341062306a36Sopenharmony_ci	.htotal = 1280 + 48 + 32 + 80,
341162306a36Sopenharmony_ci	.vdisplay = 800,
341262306a36Sopenharmony_ci	.vsync_start = 800 + 2,
341362306a36Sopenharmony_ci	.vsync_end = 800 + 2 + 5,
341462306a36Sopenharmony_ci	.vtotal = 800 + 2 + 5 + 16,
341562306a36Sopenharmony_ci};
341662306a36Sopenharmony_ci
341762306a36Sopenharmony_cistatic const struct panel_desc rocktech_rk101ii01d_ct = {
341862306a36Sopenharmony_ci	.modes = &rocktech_rk101ii01d_ct_mode,
341962306a36Sopenharmony_ci	.bpc = 8,
342062306a36Sopenharmony_ci	.num_modes = 1,
342162306a36Sopenharmony_ci	.size = {
342262306a36Sopenharmony_ci		.width = 217,
342362306a36Sopenharmony_ci		.height = 136,
342462306a36Sopenharmony_ci	},
342562306a36Sopenharmony_ci	.delay = {
342662306a36Sopenharmony_ci		.prepare = 50,
342762306a36Sopenharmony_ci		.disable = 50,
342862306a36Sopenharmony_ci	},
342962306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
343062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
343162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
343262306a36Sopenharmony_ci};
343362306a36Sopenharmony_ci
343462306a36Sopenharmony_cistatic const struct display_timing samsung_ltl101al01_timing = {
343562306a36Sopenharmony_ci	.pixelclock = { 66663000, 66663000, 66663000 },
343662306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
343762306a36Sopenharmony_ci	.hfront_porch = { 18, 18, 18 },
343862306a36Sopenharmony_ci	.hback_porch = { 36, 36, 36 },
343962306a36Sopenharmony_ci	.hsync_len = { 16, 16, 16 },
344062306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
344162306a36Sopenharmony_ci	.vfront_porch = { 4, 4, 4 },
344262306a36Sopenharmony_ci	.vback_porch = { 16, 16, 16 },
344362306a36Sopenharmony_ci	.vsync_len = { 3, 3, 3 },
344462306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW,
344562306a36Sopenharmony_ci};
344662306a36Sopenharmony_ci
344762306a36Sopenharmony_cistatic const struct panel_desc samsung_ltl101al01 = {
344862306a36Sopenharmony_ci	.timings = &samsung_ltl101al01_timing,
344962306a36Sopenharmony_ci	.num_timings = 1,
345062306a36Sopenharmony_ci	.bpc = 8,
345162306a36Sopenharmony_ci	.size = {
345262306a36Sopenharmony_ci		.width = 217,
345362306a36Sopenharmony_ci		.height = 135,
345462306a36Sopenharmony_ci	},
345562306a36Sopenharmony_ci	.delay = {
345662306a36Sopenharmony_ci		.prepare = 40,
345762306a36Sopenharmony_ci		.enable = 300,
345862306a36Sopenharmony_ci		.disable = 200,
345962306a36Sopenharmony_ci		.unprepare = 600,
346062306a36Sopenharmony_ci	},
346162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
346262306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
346362306a36Sopenharmony_ci};
346462306a36Sopenharmony_ci
346562306a36Sopenharmony_cistatic const struct drm_display_mode samsung_ltn101nt05_mode = {
346662306a36Sopenharmony_ci	.clock = 54030,
346762306a36Sopenharmony_ci	.hdisplay = 1024,
346862306a36Sopenharmony_ci	.hsync_start = 1024 + 24,
346962306a36Sopenharmony_ci	.hsync_end = 1024 + 24 + 136,
347062306a36Sopenharmony_ci	.htotal = 1024 + 24 + 136 + 160,
347162306a36Sopenharmony_ci	.vdisplay = 600,
347262306a36Sopenharmony_ci	.vsync_start = 600 + 3,
347362306a36Sopenharmony_ci	.vsync_end = 600 + 3 + 6,
347462306a36Sopenharmony_ci	.vtotal = 600 + 3 + 6 + 61,
347562306a36Sopenharmony_ci};
347662306a36Sopenharmony_ci
347762306a36Sopenharmony_cistatic const struct panel_desc samsung_ltn101nt05 = {
347862306a36Sopenharmony_ci	.modes = &samsung_ltn101nt05_mode,
347962306a36Sopenharmony_ci	.num_modes = 1,
348062306a36Sopenharmony_ci	.bpc = 6,
348162306a36Sopenharmony_ci	.size = {
348262306a36Sopenharmony_ci		.width = 223,
348362306a36Sopenharmony_ci		.height = 125,
348462306a36Sopenharmony_ci	},
348562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
348662306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
348762306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
348862306a36Sopenharmony_ci};
348962306a36Sopenharmony_ci
349062306a36Sopenharmony_cistatic const struct display_timing satoz_sat050at40h12r2_timing = {
349162306a36Sopenharmony_ci	.pixelclock = {33300000, 33300000, 50000000},
349262306a36Sopenharmony_ci	.hactive = {800, 800, 800},
349362306a36Sopenharmony_ci	.hfront_porch = {16, 210, 354},
349462306a36Sopenharmony_ci	.hback_porch = {46, 46, 46},
349562306a36Sopenharmony_ci	.hsync_len = {1, 1, 40},
349662306a36Sopenharmony_ci	.vactive = {480, 480, 480},
349762306a36Sopenharmony_ci	.vfront_porch = {7, 22, 147},
349862306a36Sopenharmony_ci	.vback_porch = {23, 23, 23},
349962306a36Sopenharmony_ci	.vsync_len = {1, 1, 20},
350062306a36Sopenharmony_ci};
350162306a36Sopenharmony_ci
350262306a36Sopenharmony_cistatic const struct panel_desc satoz_sat050at40h12r2 = {
350362306a36Sopenharmony_ci	.timings = &satoz_sat050at40h12r2_timing,
350462306a36Sopenharmony_ci	.num_timings = 1,
350562306a36Sopenharmony_ci	.bpc = 8,
350662306a36Sopenharmony_ci	.size = {
350762306a36Sopenharmony_ci		.width = 108,
350862306a36Sopenharmony_ci		.height = 65,
350962306a36Sopenharmony_ci	},
351062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
351162306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
351262306a36Sopenharmony_ci};
351362306a36Sopenharmony_ci
351462306a36Sopenharmony_cistatic const struct drm_display_mode sharp_lq070y3dg3b_mode = {
351562306a36Sopenharmony_ci	.clock = 33260,
351662306a36Sopenharmony_ci	.hdisplay = 800,
351762306a36Sopenharmony_ci	.hsync_start = 800 + 64,
351862306a36Sopenharmony_ci	.hsync_end = 800 + 64 + 128,
351962306a36Sopenharmony_ci	.htotal = 800 + 64 + 128 + 64,
352062306a36Sopenharmony_ci	.vdisplay = 480,
352162306a36Sopenharmony_ci	.vsync_start = 480 + 8,
352262306a36Sopenharmony_ci	.vsync_end = 480 + 8 + 2,
352362306a36Sopenharmony_ci	.vtotal = 480 + 8 + 2 + 35,
352462306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_PIXDATA_POSEDGE,
352562306a36Sopenharmony_ci};
352662306a36Sopenharmony_ci
352762306a36Sopenharmony_cistatic const struct panel_desc sharp_lq070y3dg3b = {
352862306a36Sopenharmony_ci	.modes = &sharp_lq070y3dg3b_mode,
352962306a36Sopenharmony_ci	.num_modes = 1,
353062306a36Sopenharmony_ci	.bpc = 8,
353162306a36Sopenharmony_ci	.size = {
353262306a36Sopenharmony_ci		.width = 152,	/* 152.4mm */
353362306a36Sopenharmony_ci		.height = 91,	/* 91.4mm */
353462306a36Sopenharmony_ci	},
353562306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
353662306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
353762306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
353862306a36Sopenharmony_ci};
353962306a36Sopenharmony_ci
354062306a36Sopenharmony_cistatic const struct drm_display_mode sharp_lq035q7db03_mode = {
354162306a36Sopenharmony_ci	.clock = 5500,
354262306a36Sopenharmony_ci	.hdisplay = 240,
354362306a36Sopenharmony_ci	.hsync_start = 240 + 16,
354462306a36Sopenharmony_ci	.hsync_end = 240 + 16 + 7,
354562306a36Sopenharmony_ci	.htotal = 240 + 16 + 7 + 5,
354662306a36Sopenharmony_ci	.vdisplay = 320,
354762306a36Sopenharmony_ci	.vsync_start = 320 + 9,
354862306a36Sopenharmony_ci	.vsync_end = 320 + 9 + 1,
354962306a36Sopenharmony_ci	.vtotal = 320 + 9 + 1 + 7,
355062306a36Sopenharmony_ci};
355162306a36Sopenharmony_ci
355262306a36Sopenharmony_cistatic const struct panel_desc sharp_lq035q7db03 = {
355362306a36Sopenharmony_ci	.modes = &sharp_lq035q7db03_mode,
355462306a36Sopenharmony_ci	.num_modes = 1,
355562306a36Sopenharmony_ci	.bpc = 6,
355662306a36Sopenharmony_ci	.size = {
355762306a36Sopenharmony_ci		.width = 54,
355862306a36Sopenharmony_ci		.height = 72,
355962306a36Sopenharmony_ci	},
356062306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
356162306a36Sopenharmony_ci};
356262306a36Sopenharmony_ci
356362306a36Sopenharmony_cistatic const struct display_timing sharp_lq101k1ly04_timing = {
356462306a36Sopenharmony_ci	.pixelclock = { 60000000, 65000000, 80000000 },
356562306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
356662306a36Sopenharmony_ci	.hfront_porch = { 20, 20, 20 },
356762306a36Sopenharmony_ci	.hback_porch = { 20, 20, 20 },
356862306a36Sopenharmony_ci	.hsync_len = { 10, 10, 10 },
356962306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
357062306a36Sopenharmony_ci	.vfront_porch = { 4, 4, 4 },
357162306a36Sopenharmony_ci	.vback_porch = { 4, 4, 4 },
357262306a36Sopenharmony_ci	.vsync_len = { 4, 4, 4 },
357362306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_PIXDATA_POSEDGE,
357462306a36Sopenharmony_ci};
357562306a36Sopenharmony_ci
357662306a36Sopenharmony_cistatic const struct panel_desc sharp_lq101k1ly04 = {
357762306a36Sopenharmony_ci	.timings = &sharp_lq101k1ly04_timing,
357862306a36Sopenharmony_ci	.num_timings = 1,
357962306a36Sopenharmony_ci	.bpc = 8,
358062306a36Sopenharmony_ci	.size = {
358162306a36Sopenharmony_ci		.width = 217,
358262306a36Sopenharmony_ci		.height = 136,
358362306a36Sopenharmony_ci	},
358462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
358562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
358662306a36Sopenharmony_ci};
358762306a36Sopenharmony_ci
358862306a36Sopenharmony_cistatic const struct drm_display_mode sharp_ls020b1dd01d_modes[] = {
358962306a36Sopenharmony_ci	{ /* 50 Hz */
359062306a36Sopenharmony_ci		.clock = 3000,
359162306a36Sopenharmony_ci		.hdisplay = 240,
359262306a36Sopenharmony_ci		.hsync_start = 240 + 58,
359362306a36Sopenharmony_ci		.hsync_end = 240 + 58 + 1,
359462306a36Sopenharmony_ci		.htotal = 240 + 58 + 1 + 1,
359562306a36Sopenharmony_ci		.vdisplay = 160,
359662306a36Sopenharmony_ci		.vsync_start = 160 + 24,
359762306a36Sopenharmony_ci		.vsync_end = 160 + 24 + 10,
359862306a36Sopenharmony_ci		.vtotal = 160 + 24 + 10 + 6,
359962306a36Sopenharmony_ci		.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC,
360062306a36Sopenharmony_ci	},
360162306a36Sopenharmony_ci	{ /* 60 Hz */
360262306a36Sopenharmony_ci		.clock = 3000,
360362306a36Sopenharmony_ci		.hdisplay = 240,
360462306a36Sopenharmony_ci		.hsync_start = 240 + 8,
360562306a36Sopenharmony_ci		.hsync_end = 240 + 8 + 1,
360662306a36Sopenharmony_ci		.htotal = 240 + 8 + 1 + 1,
360762306a36Sopenharmony_ci		.vdisplay = 160,
360862306a36Sopenharmony_ci		.vsync_start = 160 + 24,
360962306a36Sopenharmony_ci		.vsync_end = 160 + 24 + 10,
361062306a36Sopenharmony_ci		.vtotal = 160 + 24 + 10 + 6,
361162306a36Sopenharmony_ci		.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC,
361262306a36Sopenharmony_ci	},
361362306a36Sopenharmony_ci};
361462306a36Sopenharmony_ci
361562306a36Sopenharmony_cistatic const struct panel_desc sharp_ls020b1dd01d = {
361662306a36Sopenharmony_ci	.modes = sharp_ls020b1dd01d_modes,
361762306a36Sopenharmony_ci	.num_modes = ARRAY_SIZE(sharp_ls020b1dd01d_modes),
361862306a36Sopenharmony_ci	.bpc = 6,
361962306a36Sopenharmony_ci	.size = {
362062306a36Sopenharmony_ci		.width = 42,
362162306a36Sopenharmony_ci		.height = 28,
362262306a36Sopenharmony_ci	},
362362306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB565_1X16,
362462306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH
362562306a36Sopenharmony_ci		   | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
362662306a36Sopenharmony_ci		   | DRM_BUS_FLAG_SHARP_SIGNALS,
362762306a36Sopenharmony_ci};
362862306a36Sopenharmony_ci
362962306a36Sopenharmony_cistatic const struct drm_display_mode shelly_sca07010_bfn_lnn_mode = {
363062306a36Sopenharmony_ci	.clock = 33300,
363162306a36Sopenharmony_ci	.hdisplay = 800,
363262306a36Sopenharmony_ci	.hsync_start = 800 + 1,
363362306a36Sopenharmony_ci	.hsync_end = 800 + 1 + 64,
363462306a36Sopenharmony_ci	.htotal = 800 + 1 + 64 + 64,
363562306a36Sopenharmony_ci	.vdisplay = 480,
363662306a36Sopenharmony_ci	.vsync_start = 480 + 1,
363762306a36Sopenharmony_ci	.vsync_end = 480 + 1 + 23,
363862306a36Sopenharmony_ci	.vtotal = 480 + 1 + 23 + 22,
363962306a36Sopenharmony_ci};
364062306a36Sopenharmony_ci
364162306a36Sopenharmony_cistatic const struct panel_desc shelly_sca07010_bfn_lnn = {
364262306a36Sopenharmony_ci	.modes = &shelly_sca07010_bfn_lnn_mode,
364362306a36Sopenharmony_ci	.num_modes = 1,
364462306a36Sopenharmony_ci	.size = {
364562306a36Sopenharmony_ci		.width = 152,
364662306a36Sopenharmony_ci		.height = 91,
364762306a36Sopenharmony_ci	},
364862306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
364962306a36Sopenharmony_ci};
365062306a36Sopenharmony_ci
365162306a36Sopenharmony_cistatic const struct drm_display_mode starry_kr070pe2t_mode = {
365262306a36Sopenharmony_ci	.clock = 33000,
365362306a36Sopenharmony_ci	.hdisplay = 800,
365462306a36Sopenharmony_ci	.hsync_start = 800 + 209,
365562306a36Sopenharmony_ci	.hsync_end = 800 + 209 + 1,
365662306a36Sopenharmony_ci	.htotal = 800 + 209 + 1 + 45,
365762306a36Sopenharmony_ci	.vdisplay = 480,
365862306a36Sopenharmony_ci	.vsync_start = 480 + 22,
365962306a36Sopenharmony_ci	.vsync_end = 480 + 22 + 1,
366062306a36Sopenharmony_ci	.vtotal = 480 + 22 + 1 + 22,
366162306a36Sopenharmony_ci};
366262306a36Sopenharmony_ci
366362306a36Sopenharmony_cistatic const struct panel_desc starry_kr070pe2t = {
366462306a36Sopenharmony_ci	.modes = &starry_kr070pe2t_mode,
366562306a36Sopenharmony_ci	.num_modes = 1,
366662306a36Sopenharmony_ci	.bpc = 8,
366762306a36Sopenharmony_ci	.size = {
366862306a36Sopenharmony_ci		.width = 152,
366962306a36Sopenharmony_ci		.height = 86,
367062306a36Sopenharmony_ci	},
367162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
367262306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
367362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
367462306a36Sopenharmony_ci};
367562306a36Sopenharmony_ci
367662306a36Sopenharmony_cistatic const struct display_timing startek_kd070wvfpa_mode = {
367762306a36Sopenharmony_ci	.pixelclock = { 25200000, 27200000, 30500000 },
367862306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
367962306a36Sopenharmony_ci	.hfront_porch = { 19, 44, 115 },
368062306a36Sopenharmony_ci	.hback_porch = { 5, 16, 101 },
368162306a36Sopenharmony_ci	.hsync_len = { 1, 2, 100 },
368262306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
368362306a36Sopenharmony_ci	.vfront_porch = { 5, 43, 67 },
368462306a36Sopenharmony_ci	.vback_porch = { 5, 5, 67 },
368562306a36Sopenharmony_ci	.vsync_len = { 1, 2, 66 },
368662306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
368762306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
368862306a36Sopenharmony_ci		 DISPLAY_FLAGS_SYNC_POSEDGE,
368962306a36Sopenharmony_ci};
369062306a36Sopenharmony_ci
369162306a36Sopenharmony_cistatic const struct panel_desc startek_kd070wvfpa = {
369262306a36Sopenharmony_ci	.timings = &startek_kd070wvfpa_mode,
369362306a36Sopenharmony_ci	.num_timings = 1,
369462306a36Sopenharmony_ci	.bpc = 8,
369562306a36Sopenharmony_ci	.size = {
369662306a36Sopenharmony_ci		.width = 152,
369762306a36Sopenharmony_ci		.height = 91,
369862306a36Sopenharmony_ci	},
369962306a36Sopenharmony_ci	.delay = {
370062306a36Sopenharmony_ci		.prepare = 20,
370162306a36Sopenharmony_ci		.enable = 200,
370262306a36Sopenharmony_ci		.disable = 200,
370362306a36Sopenharmony_ci	},
370462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
370562306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_DPI,
370662306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH |
370762306a36Sopenharmony_ci		     DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
370862306a36Sopenharmony_ci		     DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
370962306a36Sopenharmony_ci};
371062306a36Sopenharmony_ci
371162306a36Sopenharmony_cistatic const struct display_timing tsd_tst043015cmhx_timing = {
371262306a36Sopenharmony_ci	.pixelclock = { 5000000, 9000000, 12000000 },
371362306a36Sopenharmony_ci	.hactive = { 480, 480, 480 },
371462306a36Sopenharmony_ci	.hfront_porch = { 4, 5, 65 },
371562306a36Sopenharmony_ci	.hback_porch = { 36, 40, 255 },
371662306a36Sopenharmony_ci	.hsync_len = { 1, 1, 1 },
371762306a36Sopenharmony_ci	.vactive = { 272, 272, 272 },
371862306a36Sopenharmony_ci	.vfront_porch = { 2, 8, 97 },
371962306a36Sopenharmony_ci	.vback_porch = { 3, 8, 31 },
372062306a36Sopenharmony_ci	.vsync_len = { 1, 1, 1 },
372162306a36Sopenharmony_ci
372262306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
372362306a36Sopenharmony_ci		 DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE,
372462306a36Sopenharmony_ci};
372562306a36Sopenharmony_ci
372662306a36Sopenharmony_cistatic const struct panel_desc tsd_tst043015cmhx = {
372762306a36Sopenharmony_ci	.timings = &tsd_tst043015cmhx_timing,
372862306a36Sopenharmony_ci	.num_timings = 1,
372962306a36Sopenharmony_ci	.bpc = 8,
373062306a36Sopenharmony_ci	.size = {
373162306a36Sopenharmony_ci		.width = 105,
373262306a36Sopenharmony_ci		.height = 67,
373362306a36Sopenharmony_ci	},
373462306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
373562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
373662306a36Sopenharmony_ci};
373762306a36Sopenharmony_ci
373862306a36Sopenharmony_cistatic const struct drm_display_mode tfc_s9700rtwv43tr_01b_mode = {
373962306a36Sopenharmony_ci	.clock = 30000,
374062306a36Sopenharmony_ci	.hdisplay = 800,
374162306a36Sopenharmony_ci	.hsync_start = 800 + 39,
374262306a36Sopenharmony_ci	.hsync_end = 800 + 39 + 47,
374362306a36Sopenharmony_ci	.htotal = 800 + 39 + 47 + 39,
374462306a36Sopenharmony_ci	.vdisplay = 480,
374562306a36Sopenharmony_ci	.vsync_start = 480 + 13,
374662306a36Sopenharmony_ci	.vsync_end = 480 + 13 + 2,
374762306a36Sopenharmony_ci	.vtotal = 480 + 13 + 2 + 29,
374862306a36Sopenharmony_ci};
374962306a36Sopenharmony_ci
375062306a36Sopenharmony_cistatic const struct panel_desc tfc_s9700rtwv43tr_01b = {
375162306a36Sopenharmony_ci	.modes = &tfc_s9700rtwv43tr_01b_mode,
375262306a36Sopenharmony_ci	.num_modes = 1,
375362306a36Sopenharmony_ci	.bpc = 8,
375462306a36Sopenharmony_ci	.size = {
375562306a36Sopenharmony_ci		.width = 155,
375662306a36Sopenharmony_ci		.height = 90,
375762306a36Sopenharmony_ci	},
375862306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
375962306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
376062306a36Sopenharmony_ci};
376162306a36Sopenharmony_ci
376262306a36Sopenharmony_cistatic const struct display_timing tianma_tm070jdhg30_timing = {
376362306a36Sopenharmony_ci	.pixelclock = { 62600000, 68200000, 78100000 },
376462306a36Sopenharmony_ci	.hactive = { 1280, 1280, 1280 },
376562306a36Sopenharmony_ci	.hfront_porch = { 15, 64, 159 },
376662306a36Sopenharmony_ci	.hback_porch = { 5, 5, 5 },
376762306a36Sopenharmony_ci	.hsync_len = { 1, 1, 256 },
376862306a36Sopenharmony_ci	.vactive = { 800, 800, 800 },
376962306a36Sopenharmony_ci	.vfront_porch = { 3, 40, 99 },
377062306a36Sopenharmony_ci	.vback_porch = { 2, 2, 2 },
377162306a36Sopenharmony_ci	.vsync_len = { 1, 1, 128 },
377262306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
377362306a36Sopenharmony_ci};
377462306a36Sopenharmony_ci
377562306a36Sopenharmony_cistatic const struct panel_desc tianma_tm070jdhg30 = {
377662306a36Sopenharmony_ci	.timings = &tianma_tm070jdhg30_timing,
377762306a36Sopenharmony_ci	.num_timings = 1,
377862306a36Sopenharmony_ci	.bpc = 8,
377962306a36Sopenharmony_ci	.size = {
378062306a36Sopenharmony_ci		.width = 151,
378162306a36Sopenharmony_ci		.height = 95,
378262306a36Sopenharmony_ci	},
378362306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
378462306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
378562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
378662306a36Sopenharmony_ci};
378762306a36Sopenharmony_ci
378862306a36Sopenharmony_cistatic const struct panel_desc tianma_tm070jvhg33 = {
378962306a36Sopenharmony_ci	.timings = &tianma_tm070jdhg30_timing,
379062306a36Sopenharmony_ci	.num_timings = 1,
379162306a36Sopenharmony_ci	.bpc = 8,
379262306a36Sopenharmony_ci	.size = {
379362306a36Sopenharmony_ci		.width = 150,
379462306a36Sopenharmony_ci		.height = 94,
379562306a36Sopenharmony_ci	},
379662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
379762306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
379862306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
379962306a36Sopenharmony_ci};
380062306a36Sopenharmony_ci
380162306a36Sopenharmony_cistatic const struct display_timing tianma_tm070rvhg71_timing = {
380262306a36Sopenharmony_ci	.pixelclock = { 27700000, 29200000, 39600000 },
380362306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
380462306a36Sopenharmony_ci	.hfront_porch = { 12, 40, 212 },
380562306a36Sopenharmony_ci	.hback_porch = { 88, 88, 88 },
380662306a36Sopenharmony_ci	.hsync_len = { 1, 1, 40 },
380762306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
380862306a36Sopenharmony_ci	.vfront_porch = { 1, 13, 88 },
380962306a36Sopenharmony_ci	.vback_porch = { 32, 32, 32 },
381062306a36Sopenharmony_ci	.vsync_len = { 1, 1, 3 },
381162306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH,
381262306a36Sopenharmony_ci};
381362306a36Sopenharmony_ci
381462306a36Sopenharmony_cistatic const struct panel_desc tianma_tm070rvhg71 = {
381562306a36Sopenharmony_ci	.timings = &tianma_tm070rvhg71_timing,
381662306a36Sopenharmony_ci	.num_timings = 1,
381762306a36Sopenharmony_ci	.bpc = 8,
381862306a36Sopenharmony_ci	.size = {
381962306a36Sopenharmony_ci		.width = 154,
382062306a36Sopenharmony_ci		.height = 86,
382162306a36Sopenharmony_ci	},
382262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
382362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
382462306a36Sopenharmony_ci};
382562306a36Sopenharmony_ci
382662306a36Sopenharmony_cistatic const struct drm_display_mode ti_nspire_cx_lcd_mode[] = {
382762306a36Sopenharmony_ci	{
382862306a36Sopenharmony_ci		.clock = 10000,
382962306a36Sopenharmony_ci		.hdisplay = 320,
383062306a36Sopenharmony_ci		.hsync_start = 320 + 50,
383162306a36Sopenharmony_ci		.hsync_end = 320 + 50 + 6,
383262306a36Sopenharmony_ci		.htotal = 320 + 50 + 6 + 38,
383362306a36Sopenharmony_ci		.vdisplay = 240,
383462306a36Sopenharmony_ci		.vsync_start = 240 + 3,
383562306a36Sopenharmony_ci		.vsync_end = 240 + 3 + 1,
383662306a36Sopenharmony_ci		.vtotal = 240 + 3 + 1 + 17,
383762306a36Sopenharmony_ci		.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
383862306a36Sopenharmony_ci	},
383962306a36Sopenharmony_ci};
384062306a36Sopenharmony_ci
384162306a36Sopenharmony_cistatic const struct panel_desc ti_nspire_cx_lcd_panel = {
384262306a36Sopenharmony_ci	.modes = ti_nspire_cx_lcd_mode,
384362306a36Sopenharmony_ci	.num_modes = 1,
384462306a36Sopenharmony_ci	.bpc = 8,
384562306a36Sopenharmony_ci	.size = {
384662306a36Sopenharmony_ci		.width = 65,
384762306a36Sopenharmony_ci		.height = 49,
384862306a36Sopenharmony_ci	},
384962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
385062306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
385162306a36Sopenharmony_ci};
385262306a36Sopenharmony_ci
385362306a36Sopenharmony_cistatic const struct drm_display_mode ti_nspire_classic_lcd_mode[] = {
385462306a36Sopenharmony_ci	{
385562306a36Sopenharmony_ci		.clock = 10000,
385662306a36Sopenharmony_ci		.hdisplay = 320,
385762306a36Sopenharmony_ci		.hsync_start = 320 + 6,
385862306a36Sopenharmony_ci		.hsync_end = 320 + 6 + 6,
385962306a36Sopenharmony_ci		.htotal = 320 + 6 + 6 + 6,
386062306a36Sopenharmony_ci		.vdisplay = 240,
386162306a36Sopenharmony_ci		.vsync_start = 240 + 0,
386262306a36Sopenharmony_ci		.vsync_end = 240 + 0 + 1,
386362306a36Sopenharmony_ci		.vtotal = 240 + 0 + 1 + 0,
386462306a36Sopenharmony_ci		.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
386562306a36Sopenharmony_ci	},
386662306a36Sopenharmony_ci};
386762306a36Sopenharmony_ci
386862306a36Sopenharmony_cistatic const struct panel_desc ti_nspire_classic_lcd_panel = {
386962306a36Sopenharmony_ci	.modes = ti_nspire_classic_lcd_mode,
387062306a36Sopenharmony_ci	.num_modes = 1,
387162306a36Sopenharmony_ci	/* The grayscale panel has 8 bit for the color .. Y (black) */
387262306a36Sopenharmony_ci	.bpc = 8,
387362306a36Sopenharmony_ci	.size = {
387462306a36Sopenharmony_ci		.width = 71,
387562306a36Sopenharmony_ci		.height = 53,
387662306a36Sopenharmony_ci	},
387762306a36Sopenharmony_ci	/* This is the grayscale bus format */
387862306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_Y8_1X8,
387962306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
388062306a36Sopenharmony_ci};
388162306a36Sopenharmony_ci
388262306a36Sopenharmony_cistatic const struct drm_display_mode toshiba_lt089ac29000_mode = {
388362306a36Sopenharmony_ci	.clock = 79500,
388462306a36Sopenharmony_ci	.hdisplay = 1280,
388562306a36Sopenharmony_ci	.hsync_start = 1280 + 192,
388662306a36Sopenharmony_ci	.hsync_end = 1280 + 192 + 128,
388762306a36Sopenharmony_ci	.htotal = 1280 + 192 + 128 + 64,
388862306a36Sopenharmony_ci	.vdisplay = 768,
388962306a36Sopenharmony_ci	.vsync_start = 768 + 20,
389062306a36Sopenharmony_ci	.vsync_end = 768 + 20 + 7,
389162306a36Sopenharmony_ci	.vtotal = 768 + 20 + 7 + 3,
389262306a36Sopenharmony_ci};
389362306a36Sopenharmony_ci
389462306a36Sopenharmony_cistatic const struct panel_desc toshiba_lt089ac29000 = {
389562306a36Sopenharmony_ci	.modes = &toshiba_lt089ac29000_mode,
389662306a36Sopenharmony_ci	.num_modes = 1,
389762306a36Sopenharmony_ci	.size = {
389862306a36Sopenharmony_ci		.width = 194,
389962306a36Sopenharmony_ci		.height = 116,
390062306a36Sopenharmony_ci	},
390162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
390262306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
390362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
390462306a36Sopenharmony_ci};
390562306a36Sopenharmony_ci
390662306a36Sopenharmony_cistatic const struct drm_display_mode tpk_f07a_0102_mode = {
390762306a36Sopenharmony_ci	.clock = 33260,
390862306a36Sopenharmony_ci	.hdisplay = 800,
390962306a36Sopenharmony_ci	.hsync_start = 800 + 40,
391062306a36Sopenharmony_ci	.hsync_end = 800 + 40 + 128,
391162306a36Sopenharmony_ci	.htotal = 800 + 40 + 128 + 88,
391262306a36Sopenharmony_ci	.vdisplay = 480,
391362306a36Sopenharmony_ci	.vsync_start = 480 + 10,
391462306a36Sopenharmony_ci	.vsync_end = 480 + 10 + 2,
391562306a36Sopenharmony_ci	.vtotal = 480 + 10 + 2 + 33,
391662306a36Sopenharmony_ci};
391762306a36Sopenharmony_ci
391862306a36Sopenharmony_cistatic const struct panel_desc tpk_f07a_0102 = {
391962306a36Sopenharmony_ci	.modes = &tpk_f07a_0102_mode,
392062306a36Sopenharmony_ci	.num_modes = 1,
392162306a36Sopenharmony_ci	.size = {
392262306a36Sopenharmony_ci		.width = 152,
392362306a36Sopenharmony_ci		.height = 91,
392462306a36Sopenharmony_ci	},
392562306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
392662306a36Sopenharmony_ci};
392762306a36Sopenharmony_ci
392862306a36Sopenharmony_cistatic const struct drm_display_mode tpk_f10a_0102_mode = {
392962306a36Sopenharmony_ci	.clock = 45000,
393062306a36Sopenharmony_ci	.hdisplay = 1024,
393162306a36Sopenharmony_ci	.hsync_start = 1024 + 176,
393262306a36Sopenharmony_ci	.hsync_end = 1024 + 176 + 5,
393362306a36Sopenharmony_ci	.htotal = 1024 + 176 + 5 + 88,
393462306a36Sopenharmony_ci	.vdisplay = 600,
393562306a36Sopenharmony_ci	.vsync_start = 600 + 20,
393662306a36Sopenharmony_ci	.vsync_end = 600 + 20 + 5,
393762306a36Sopenharmony_ci	.vtotal = 600 + 20 + 5 + 25,
393862306a36Sopenharmony_ci};
393962306a36Sopenharmony_ci
394062306a36Sopenharmony_cistatic const struct panel_desc tpk_f10a_0102 = {
394162306a36Sopenharmony_ci	.modes = &tpk_f10a_0102_mode,
394262306a36Sopenharmony_ci	.num_modes = 1,
394362306a36Sopenharmony_ci	.size = {
394462306a36Sopenharmony_ci		.width = 223,
394562306a36Sopenharmony_ci		.height = 125,
394662306a36Sopenharmony_ci	},
394762306a36Sopenharmony_ci};
394862306a36Sopenharmony_ci
394962306a36Sopenharmony_cistatic const struct display_timing urt_umsh_8596md_timing = {
395062306a36Sopenharmony_ci	.pixelclock = { 33260000, 33260000, 33260000 },
395162306a36Sopenharmony_ci	.hactive = { 800, 800, 800 },
395262306a36Sopenharmony_ci	.hfront_porch = { 41, 41, 41 },
395362306a36Sopenharmony_ci	.hback_porch = { 216 - 128, 216 - 128, 216 - 128 },
395462306a36Sopenharmony_ci	.hsync_len = { 71, 128, 128 },
395562306a36Sopenharmony_ci	.vactive = { 480, 480, 480 },
395662306a36Sopenharmony_ci	.vfront_porch = { 10, 10, 10 },
395762306a36Sopenharmony_ci	.vback_porch = { 35 - 2, 35 - 2, 35 - 2 },
395862306a36Sopenharmony_ci	.vsync_len = { 2, 2, 2 },
395962306a36Sopenharmony_ci	.flags = DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_NEGEDGE |
396062306a36Sopenharmony_ci		DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW,
396162306a36Sopenharmony_ci};
396262306a36Sopenharmony_ci
396362306a36Sopenharmony_cistatic const struct panel_desc urt_umsh_8596md_lvds = {
396462306a36Sopenharmony_ci	.timings = &urt_umsh_8596md_timing,
396562306a36Sopenharmony_ci	.num_timings = 1,
396662306a36Sopenharmony_ci	.bpc = 6,
396762306a36Sopenharmony_ci	.size = {
396862306a36Sopenharmony_ci		.width = 152,
396962306a36Sopenharmony_ci		.height = 91,
397062306a36Sopenharmony_ci	},
397162306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
397262306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
397362306a36Sopenharmony_ci};
397462306a36Sopenharmony_ci
397562306a36Sopenharmony_cistatic const struct panel_desc urt_umsh_8596md_parallel = {
397662306a36Sopenharmony_ci	.timings = &urt_umsh_8596md_timing,
397762306a36Sopenharmony_ci	.num_timings = 1,
397862306a36Sopenharmony_ci	.bpc = 6,
397962306a36Sopenharmony_ci	.size = {
398062306a36Sopenharmony_ci		.width = 152,
398162306a36Sopenharmony_ci		.height = 91,
398262306a36Sopenharmony_ci	},
398362306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
398462306a36Sopenharmony_ci};
398562306a36Sopenharmony_ci
398662306a36Sopenharmony_cistatic const struct drm_display_mode vivax_tpc9150_panel_mode = {
398762306a36Sopenharmony_ci	.clock = 60000,
398862306a36Sopenharmony_ci	.hdisplay = 1024,
398962306a36Sopenharmony_ci	.hsync_start = 1024 + 160,
399062306a36Sopenharmony_ci	.hsync_end = 1024 + 160 + 100,
399162306a36Sopenharmony_ci	.htotal = 1024 + 160 + 100 + 60,
399262306a36Sopenharmony_ci	.vdisplay = 600,
399362306a36Sopenharmony_ci	.vsync_start = 600 + 12,
399462306a36Sopenharmony_ci	.vsync_end = 600 + 12 + 10,
399562306a36Sopenharmony_ci	.vtotal = 600 + 12 + 10 + 13,
399662306a36Sopenharmony_ci};
399762306a36Sopenharmony_ci
399862306a36Sopenharmony_cistatic const struct panel_desc vivax_tpc9150_panel = {
399962306a36Sopenharmony_ci	.modes = &vivax_tpc9150_panel_mode,
400062306a36Sopenharmony_ci	.num_modes = 1,
400162306a36Sopenharmony_ci	.bpc = 6,
400262306a36Sopenharmony_ci	.size = {
400362306a36Sopenharmony_ci		.width = 200,
400462306a36Sopenharmony_ci		.height = 115,
400562306a36Sopenharmony_ci	},
400662306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
400762306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
400862306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
400962306a36Sopenharmony_ci};
401062306a36Sopenharmony_ci
401162306a36Sopenharmony_cistatic const struct drm_display_mode vl050_8048nt_c01_mode = {
401262306a36Sopenharmony_ci	.clock = 33333,
401362306a36Sopenharmony_ci	.hdisplay = 800,
401462306a36Sopenharmony_ci	.hsync_start = 800 + 210,
401562306a36Sopenharmony_ci	.hsync_end = 800 + 210 + 20,
401662306a36Sopenharmony_ci	.htotal = 800 + 210 + 20 + 46,
401762306a36Sopenharmony_ci	.vdisplay =  480,
401862306a36Sopenharmony_ci	.vsync_start = 480 + 22,
401962306a36Sopenharmony_ci	.vsync_end = 480 + 22 + 10,
402062306a36Sopenharmony_ci	.vtotal = 480 + 22 + 10 + 23,
402162306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
402262306a36Sopenharmony_ci};
402362306a36Sopenharmony_ci
402462306a36Sopenharmony_cistatic const struct panel_desc vl050_8048nt_c01 = {
402562306a36Sopenharmony_ci	.modes = &vl050_8048nt_c01_mode,
402662306a36Sopenharmony_ci	.num_modes = 1,
402762306a36Sopenharmony_ci	.bpc = 8,
402862306a36Sopenharmony_ci	.size = {
402962306a36Sopenharmony_ci		.width = 120,
403062306a36Sopenharmony_ci		.height = 76,
403162306a36Sopenharmony_ci	},
403262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
403362306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
403462306a36Sopenharmony_ci};
403562306a36Sopenharmony_ci
403662306a36Sopenharmony_cistatic const struct drm_display_mode winstar_wf35ltiacd_mode = {
403762306a36Sopenharmony_ci	.clock = 6410,
403862306a36Sopenharmony_ci	.hdisplay = 320,
403962306a36Sopenharmony_ci	.hsync_start = 320 + 20,
404062306a36Sopenharmony_ci	.hsync_end = 320 + 20 + 30,
404162306a36Sopenharmony_ci	.htotal = 320 + 20 + 30 + 38,
404262306a36Sopenharmony_ci	.vdisplay = 240,
404362306a36Sopenharmony_ci	.vsync_start = 240 + 4,
404462306a36Sopenharmony_ci	.vsync_end = 240 + 4 + 3,
404562306a36Sopenharmony_ci	.vtotal = 240 + 4 + 3 + 15,
404662306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
404762306a36Sopenharmony_ci};
404862306a36Sopenharmony_ci
404962306a36Sopenharmony_cistatic const struct panel_desc winstar_wf35ltiacd = {
405062306a36Sopenharmony_ci	.modes = &winstar_wf35ltiacd_mode,
405162306a36Sopenharmony_ci	.num_modes = 1,
405262306a36Sopenharmony_ci	.bpc = 8,
405362306a36Sopenharmony_ci	.size = {
405462306a36Sopenharmony_ci		.width = 70,
405562306a36Sopenharmony_ci		.height = 53,
405662306a36Sopenharmony_ci	},
405762306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
405862306a36Sopenharmony_ci};
405962306a36Sopenharmony_ci
406062306a36Sopenharmony_cistatic const struct drm_display_mode yes_optoelectronics_ytc700tlag_05_201c_mode = {
406162306a36Sopenharmony_ci	.clock = 51200,
406262306a36Sopenharmony_ci	.hdisplay = 1024,
406362306a36Sopenharmony_ci	.hsync_start = 1024 + 100,
406462306a36Sopenharmony_ci	.hsync_end = 1024 + 100 + 100,
406562306a36Sopenharmony_ci	.htotal = 1024 + 100 + 100 + 120,
406662306a36Sopenharmony_ci	.vdisplay = 600,
406762306a36Sopenharmony_ci	.vsync_start = 600 + 10,
406862306a36Sopenharmony_ci	.vsync_end = 600 + 10 + 10,
406962306a36Sopenharmony_ci	.vtotal = 600 + 10 + 10 + 15,
407062306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
407162306a36Sopenharmony_ci};
407262306a36Sopenharmony_ci
407362306a36Sopenharmony_cistatic const struct panel_desc yes_optoelectronics_ytc700tlag_05_201c = {
407462306a36Sopenharmony_ci	.modes = &yes_optoelectronics_ytc700tlag_05_201c_mode,
407562306a36Sopenharmony_ci	.num_modes = 1,
407662306a36Sopenharmony_ci	.bpc = 8,
407762306a36Sopenharmony_ci	.size = {
407862306a36Sopenharmony_ci		.width = 154,
407962306a36Sopenharmony_ci		.height = 90,
408062306a36Sopenharmony_ci	},
408162306a36Sopenharmony_ci	.bus_flags = DRM_BUS_FLAG_DE_HIGH,
408262306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
408362306a36Sopenharmony_ci	.connector_type = DRM_MODE_CONNECTOR_LVDS,
408462306a36Sopenharmony_ci};
408562306a36Sopenharmony_ci
408662306a36Sopenharmony_cistatic const struct drm_display_mode arm_rtsm_mode[] = {
408762306a36Sopenharmony_ci	{
408862306a36Sopenharmony_ci		.clock = 65000,
408962306a36Sopenharmony_ci		.hdisplay = 1024,
409062306a36Sopenharmony_ci		.hsync_start = 1024 + 24,
409162306a36Sopenharmony_ci		.hsync_end = 1024 + 24 + 136,
409262306a36Sopenharmony_ci		.htotal = 1024 + 24 + 136 + 160,
409362306a36Sopenharmony_ci		.vdisplay = 768,
409462306a36Sopenharmony_ci		.vsync_start = 768 + 3,
409562306a36Sopenharmony_ci		.vsync_end = 768 + 3 + 6,
409662306a36Sopenharmony_ci		.vtotal = 768 + 3 + 6 + 29,
409762306a36Sopenharmony_ci		.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
409862306a36Sopenharmony_ci	},
409962306a36Sopenharmony_ci};
410062306a36Sopenharmony_ci
410162306a36Sopenharmony_cistatic const struct panel_desc arm_rtsm = {
410262306a36Sopenharmony_ci	.modes = arm_rtsm_mode,
410362306a36Sopenharmony_ci	.num_modes = 1,
410462306a36Sopenharmony_ci	.bpc = 8,
410562306a36Sopenharmony_ci	.size = {
410662306a36Sopenharmony_ci		.width = 400,
410762306a36Sopenharmony_ci		.height = 300,
410862306a36Sopenharmony_ci	},
410962306a36Sopenharmony_ci	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
411062306a36Sopenharmony_ci};
411162306a36Sopenharmony_ci
411262306a36Sopenharmony_cistatic const struct of_device_id platform_of_match[] = {
411362306a36Sopenharmony_ci	{
411462306a36Sopenharmony_ci		.compatible = "ampire,am-1280800n3tzqw-t00h",
411562306a36Sopenharmony_ci		.data = &ampire_am_1280800n3tzqw_t00h,
411662306a36Sopenharmony_ci	}, {
411762306a36Sopenharmony_ci		.compatible = "ampire,am-480272h3tmqw-t01h",
411862306a36Sopenharmony_ci		.data = &ampire_am_480272h3tmqw_t01h,
411962306a36Sopenharmony_ci	}, {
412062306a36Sopenharmony_ci		.compatible = "ampire,am-800480l1tmqw-t00h",
412162306a36Sopenharmony_ci		.data = &ampire_am_800480l1tmqw_t00h,
412262306a36Sopenharmony_ci	}, {
412362306a36Sopenharmony_ci		.compatible = "ampire,am800480r3tmqwa1h",
412462306a36Sopenharmony_ci		.data = &ampire_am800480r3tmqwa1h,
412562306a36Sopenharmony_ci	}, {
412662306a36Sopenharmony_ci		.compatible = "ampire,am800600p5tmqw-tb8h",
412762306a36Sopenharmony_ci		.data = &ampire_am800600p5tmqwtb8h,
412862306a36Sopenharmony_ci	}, {
412962306a36Sopenharmony_ci		.compatible = "arm,rtsm-display",
413062306a36Sopenharmony_ci		.data = &arm_rtsm,
413162306a36Sopenharmony_ci	}, {
413262306a36Sopenharmony_ci		.compatible = "armadeus,st0700-adapt",
413362306a36Sopenharmony_ci		.data = &armadeus_st0700_adapt,
413462306a36Sopenharmony_ci	}, {
413562306a36Sopenharmony_ci		.compatible = "auo,b101aw03",
413662306a36Sopenharmony_ci		.data = &auo_b101aw03,
413762306a36Sopenharmony_ci	}, {
413862306a36Sopenharmony_ci		.compatible = "auo,b101xtn01",
413962306a36Sopenharmony_ci		.data = &auo_b101xtn01,
414062306a36Sopenharmony_ci	}, {
414162306a36Sopenharmony_ci		.compatible = "auo,b116xw03",
414262306a36Sopenharmony_ci		.data = &auo_b116xw03,
414362306a36Sopenharmony_ci	}, {
414462306a36Sopenharmony_ci		.compatible = "auo,g070vvn01",
414562306a36Sopenharmony_ci		.data = &auo_g070vvn01,
414662306a36Sopenharmony_ci	}, {
414762306a36Sopenharmony_ci		.compatible = "auo,g101evn010",
414862306a36Sopenharmony_ci		.data = &auo_g101evn010,
414962306a36Sopenharmony_ci	}, {
415062306a36Sopenharmony_ci		.compatible = "auo,g104sn02",
415162306a36Sopenharmony_ci		.data = &auo_g104sn02,
415262306a36Sopenharmony_ci	}, {
415362306a36Sopenharmony_ci		.compatible = "auo,g121ean01",
415462306a36Sopenharmony_ci		.data = &auo_g121ean01,
415562306a36Sopenharmony_ci	}, {
415662306a36Sopenharmony_ci		.compatible = "auo,g133han01",
415762306a36Sopenharmony_ci		.data = &auo_g133han01,
415862306a36Sopenharmony_ci	}, {
415962306a36Sopenharmony_ci		.compatible = "auo,g156xtn01",
416062306a36Sopenharmony_ci		.data = &auo_g156xtn01,
416162306a36Sopenharmony_ci	}, {
416262306a36Sopenharmony_ci		.compatible = "auo,g185han01",
416362306a36Sopenharmony_ci		.data = &auo_g185han01,
416462306a36Sopenharmony_ci	}, {
416562306a36Sopenharmony_ci		.compatible = "auo,g190ean01",
416662306a36Sopenharmony_ci		.data = &auo_g190ean01,
416762306a36Sopenharmony_ci	}, {
416862306a36Sopenharmony_ci		.compatible = "auo,p320hvn03",
416962306a36Sopenharmony_ci		.data = &auo_p320hvn03,
417062306a36Sopenharmony_ci	}, {
417162306a36Sopenharmony_ci		.compatible = "auo,t215hvn01",
417262306a36Sopenharmony_ci		.data = &auo_t215hvn01,
417362306a36Sopenharmony_ci	}, {
417462306a36Sopenharmony_ci		.compatible = "avic,tm070ddh03",
417562306a36Sopenharmony_ci		.data = &avic_tm070ddh03,
417662306a36Sopenharmony_ci	}, {
417762306a36Sopenharmony_ci		.compatible = "bananapi,s070wv20-ct16",
417862306a36Sopenharmony_ci		.data = &bananapi_s070wv20_ct16,
417962306a36Sopenharmony_ci	}, {
418062306a36Sopenharmony_ci		.compatible = "boe,ev121wxm-n10-1850",
418162306a36Sopenharmony_ci		.data = &boe_ev121wxm_n10_1850,
418262306a36Sopenharmony_ci	}, {
418362306a36Sopenharmony_ci		.compatible = "boe,hv070wsa-100",
418462306a36Sopenharmony_ci		.data = &boe_hv070wsa
418562306a36Sopenharmony_ci	}, {
418662306a36Sopenharmony_ci		.compatible = "cdtech,s043wq26h-ct7",
418762306a36Sopenharmony_ci		.data = &cdtech_s043wq26h_ct7,
418862306a36Sopenharmony_ci	}, {
418962306a36Sopenharmony_ci		.compatible = "cdtech,s070pws19hp-fc21",
419062306a36Sopenharmony_ci		.data = &cdtech_s070pws19hp_fc21,
419162306a36Sopenharmony_ci	}, {
419262306a36Sopenharmony_ci		.compatible = "cdtech,s070swv29hg-dc44",
419362306a36Sopenharmony_ci		.data = &cdtech_s070swv29hg_dc44,
419462306a36Sopenharmony_ci	}, {
419562306a36Sopenharmony_ci		.compatible = "cdtech,s070wv95-ct16",
419662306a36Sopenharmony_ci		.data = &cdtech_s070wv95_ct16,
419762306a36Sopenharmony_ci	}, {
419862306a36Sopenharmony_ci		.compatible = "chefree,ch101olhlwh-002",
419962306a36Sopenharmony_ci		.data = &chefree_ch101olhlwh_002,
420062306a36Sopenharmony_ci	}, {
420162306a36Sopenharmony_ci		.compatible = "chunghwa,claa070wp03xg",
420262306a36Sopenharmony_ci		.data = &chunghwa_claa070wp03xg,
420362306a36Sopenharmony_ci	}, {
420462306a36Sopenharmony_ci		.compatible = "chunghwa,claa101wa01a",
420562306a36Sopenharmony_ci		.data = &chunghwa_claa101wa01a
420662306a36Sopenharmony_ci	}, {
420762306a36Sopenharmony_ci		.compatible = "chunghwa,claa101wb01",
420862306a36Sopenharmony_ci		.data = &chunghwa_claa101wb01
420962306a36Sopenharmony_ci	}, {
421062306a36Sopenharmony_ci		.compatible = "dataimage,fg040346dsswbg04",
421162306a36Sopenharmony_ci		.data = &dataimage_fg040346dsswbg04,
421262306a36Sopenharmony_ci	}, {
421362306a36Sopenharmony_ci		.compatible = "dataimage,fg1001l0dsswmg01",
421462306a36Sopenharmony_ci		.data = &dataimage_fg1001l0dsswmg01,
421562306a36Sopenharmony_ci	}, {
421662306a36Sopenharmony_ci		.compatible = "dataimage,scf0700c48ggu18",
421762306a36Sopenharmony_ci		.data = &dataimage_scf0700c48ggu18,
421862306a36Sopenharmony_ci	}, {
421962306a36Sopenharmony_ci		.compatible = "dlc,dlc0700yzg-1",
422062306a36Sopenharmony_ci		.data = &dlc_dlc0700yzg_1,
422162306a36Sopenharmony_ci	}, {
422262306a36Sopenharmony_ci		.compatible = "dlc,dlc1010gig",
422362306a36Sopenharmony_ci		.data = &dlc_dlc1010gig,
422462306a36Sopenharmony_ci	}, {
422562306a36Sopenharmony_ci		.compatible = "edt,et035012dm6",
422662306a36Sopenharmony_ci		.data = &edt_et035012dm6,
422762306a36Sopenharmony_ci	}, {
422862306a36Sopenharmony_ci		.compatible = "edt,etm0350g0dh6",
422962306a36Sopenharmony_ci		.data = &edt_etm0350g0dh6,
423062306a36Sopenharmony_ci	}, {
423162306a36Sopenharmony_ci		.compatible = "edt,etm043080dh6gp",
423262306a36Sopenharmony_ci		.data = &edt_etm043080dh6gp,
423362306a36Sopenharmony_ci	}, {
423462306a36Sopenharmony_ci		.compatible = "edt,etm0430g0dh6",
423562306a36Sopenharmony_ci		.data = &edt_etm0430g0dh6,
423662306a36Sopenharmony_ci	}, {
423762306a36Sopenharmony_ci		.compatible = "edt,et057090dhu",
423862306a36Sopenharmony_ci		.data = &edt_et057090dhu,
423962306a36Sopenharmony_ci	}, {
424062306a36Sopenharmony_ci		.compatible = "edt,et070080dh6",
424162306a36Sopenharmony_ci		.data = &edt_etm0700g0dh6,
424262306a36Sopenharmony_ci	}, {
424362306a36Sopenharmony_ci		.compatible = "edt,etm0700g0dh6",
424462306a36Sopenharmony_ci		.data = &edt_etm0700g0dh6,
424562306a36Sopenharmony_ci	}, {
424662306a36Sopenharmony_ci		.compatible = "edt,etm0700g0bdh6",
424762306a36Sopenharmony_ci		.data = &edt_etm0700g0bdh6,
424862306a36Sopenharmony_ci	}, {
424962306a36Sopenharmony_ci		.compatible = "edt,etm0700g0edh6",
425062306a36Sopenharmony_ci		.data = &edt_etm0700g0bdh6,
425162306a36Sopenharmony_ci	}, {
425262306a36Sopenharmony_ci		.compatible = "edt,etml0700y5dha",
425362306a36Sopenharmony_ci		.data = &edt_etml0700y5dha,
425462306a36Sopenharmony_ci	}, {
425562306a36Sopenharmony_ci		.compatible = "edt,etmv570g2dhu",
425662306a36Sopenharmony_ci		.data = &edt_etmv570g2dhu,
425762306a36Sopenharmony_ci	}, {
425862306a36Sopenharmony_ci		.compatible = "eink,vb3300-kca",
425962306a36Sopenharmony_ci		.data = &eink_vb3300_kca,
426062306a36Sopenharmony_ci	}, {
426162306a36Sopenharmony_ci		.compatible = "evervision,vgg804821",
426262306a36Sopenharmony_ci		.data = &evervision_vgg804821,
426362306a36Sopenharmony_ci	}, {
426462306a36Sopenharmony_ci		.compatible = "foxlink,fl500wvr00-a0t",
426562306a36Sopenharmony_ci		.data = &foxlink_fl500wvr00_a0t,
426662306a36Sopenharmony_ci	}, {
426762306a36Sopenharmony_ci		.compatible = "frida,frd350h54004",
426862306a36Sopenharmony_ci		.data = &frida_frd350h54004,
426962306a36Sopenharmony_ci	}, {
427062306a36Sopenharmony_ci		.compatible = "friendlyarm,hd702e",
427162306a36Sopenharmony_ci		.data = &friendlyarm_hd702e,
427262306a36Sopenharmony_ci	}, {
427362306a36Sopenharmony_ci		.compatible = "giantplus,gpg482739qs5",
427462306a36Sopenharmony_ci		.data = &giantplus_gpg482739qs5
427562306a36Sopenharmony_ci	}, {
427662306a36Sopenharmony_ci		.compatible = "giantplus,gpm940b0",
427762306a36Sopenharmony_ci		.data = &giantplus_gpm940b0,
427862306a36Sopenharmony_ci	}, {
427962306a36Sopenharmony_ci		.compatible = "hannstar,hsd070pww1",
428062306a36Sopenharmony_ci		.data = &hannstar_hsd070pww1,
428162306a36Sopenharmony_ci	}, {
428262306a36Sopenharmony_ci		.compatible = "hannstar,hsd100pxn1",
428362306a36Sopenharmony_ci		.data = &hannstar_hsd100pxn1,
428462306a36Sopenharmony_ci	}, {
428562306a36Sopenharmony_ci		.compatible = "hannstar,hsd101pww2",
428662306a36Sopenharmony_ci		.data = &hannstar_hsd101pww2,
428762306a36Sopenharmony_ci	}, {
428862306a36Sopenharmony_ci		.compatible = "hit,tx23d38vm0caa",
428962306a36Sopenharmony_ci		.data = &hitachi_tx23d38vm0caa
429062306a36Sopenharmony_ci	}, {
429162306a36Sopenharmony_ci		.compatible = "innolux,at043tn24",
429262306a36Sopenharmony_ci		.data = &innolux_at043tn24,
429362306a36Sopenharmony_ci	}, {
429462306a36Sopenharmony_ci		.compatible = "innolux,at070tn92",
429562306a36Sopenharmony_ci		.data = &innolux_at070tn92,
429662306a36Sopenharmony_ci	}, {
429762306a36Sopenharmony_ci		.compatible = "innolux,g070ace-l01",
429862306a36Sopenharmony_ci		.data = &innolux_g070ace_l01,
429962306a36Sopenharmony_ci	}, {
430062306a36Sopenharmony_ci		.compatible = "innolux,g070y2-l01",
430162306a36Sopenharmony_ci		.data = &innolux_g070y2_l01,
430262306a36Sopenharmony_ci	}, {
430362306a36Sopenharmony_ci		.compatible = "innolux,g070y2-t02",
430462306a36Sopenharmony_ci		.data = &innolux_g070y2_t02,
430562306a36Sopenharmony_ci	}, {
430662306a36Sopenharmony_ci		.compatible = "innolux,g101ice-l01",
430762306a36Sopenharmony_ci		.data = &innolux_g101ice_l01
430862306a36Sopenharmony_ci	}, {
430962306a36Sopenharmony_ci		.compatible = "innolux,g121i1-l01",
431062306a36Sopenharmony_ci		.data = &innolux_g121i1_l01
431162306a36Sopenharmony_ci	}, {
431262306a36Sopenharmony_ci		.compatible = "innolux,g121x1-l03",
431362306a36Sopenharmony_ci		.data = &innolux_g121x1_l03,
431462306a36Sopenharmony_ci	}, {
431562306a36Sopenharmony_ci		.compatible = "innolux,g156hce-l01",
431662306a36Sopenharmony_ci		.data = &innolux_g156hce_l01,
431762306a36Sopenharmony_ci	}, {
431862306a36Sopenharmony_ci		.compatible = "innolux,n156bge-l21",
431962306a36Sopenharmony_ci		.data = &innolux_n156bge_l21,
432062306a36Sopenharmony_ci	}, {
432162306a36Sopenharmony_ci		.compatible = "innolux,zj070na-01p",
432262306a36Sopenharmony_ci		.data = &innolux_zj070na_01p,
432362306a36Sopenharmony_ci	}, {
432462306a36Sopenharmony_ci		.compatible = "koe,tx14d24vm1bpa",
432562306a36Sopenharmony_ci		.data = &koe_tx14d24vm1bpa,
432662306a36Sopenharmony_ci	}, {
432762306a36Sopenharmony_ci		.compatible = "koe,tx26d202vm0bwa",
432862306a36Sopenharmony_ci		.data = &koe_tx26d202vm0bwa,
432962306a36Sopenharmony_ci	}, {
433062306a36Sopenharmony_ci		.compatible = "koe,tx31d200vm0baa",
433162306a36Sopenharmony_ci		.data = &koe_tx31d200vm0baa,
433262306a36Sopenharmony_ci	}, {
433362306a36Sopenharmony_ci		.compatible = "kyo,tcg121xglp",
433462306a36Sopenharmony_ci		.data = &kyo_tcg121xglp,
433562306a36Sopenharmony_ci	}, {
433662306a36Sopenharmony_ci		.compatible = "lemaker,bl035-rgb-002",
433762306a36Sopenharmony_ci		.data = &lemaker_bl035_rgb_002,
433862306a36Sopenharmony_ci	}, {
433962306a36Sopenharmony_ci		.compatible = "lg,lb070wv8",
434062306a36Sopenharmony_ci		.data = &lg_lb070wv8,
434162306a36Sopenharmony_ci	}, {
434262306a36Sopenharmony_ci		.compatible = "logicpd,type28",
434362306a36Sopenharmony_ci		.data = &logicpd_type_28,
434462306a36Sopenharmony_ci	}, {
434562306a36Sopenharmony_ci		.compatible = "logictechno,lt161010-2nhc",
434662306a36Sopenharmony_ci		.data = &logictechno_lt161010_2nh,
434762306a36Sopenharmony_ci	}, {
434862306a36Sopenharmony_ci		.compatible = "logictechno,lt161010-2nhr",
434962306a36Sopenharmony_ci		.data = &logictechno_lt161010_2nh,
435062306a36Sopenharmony_ci	}, {
435162306a36Sopenharmony_ci		.compatible = "logictechno,lt170410-2whc",
435262306a36Sopenharmony_ci		.data = &logictechno_lt170410_2whc,
435362306a36Sopenharmony_ci	}, {
435462306a36Sopenharmony_ci		.compatible = "logictechno,lttd800480070-l2rt",
435562306a36Sopenharmony_ci		.data = &logictechno_lttd800480070_l2rt,
435662306a36Sopenharmony_ci	}, {
435762306a36Sopenharmony_ci		.compatible = "logictechno,lttd800480070-l6wh-rt",
435862306a36Sopenharmony_ci		.data = &logictechno_lttd800480070_l6wh_rt,
435962306a36Sopenharmony_ci	}, {
436062306a36Sopenharmony_ci		.compatible = "mitsubishi,aa070mc01-ca1",
436162306a36Sopenharmony_ci		.data = &mitsubishi_aa070mc01,
436262306a36Sopenharmony_ci	}, {
436362306a36Sopenharmony_ci		.compatible = "multi-inno,mi0700s4t-6",
436462306a36Sopenharmony_ci		.data = &multi_inno_mi0700s4t_6,
436562306a36Sopenharmony_ci	}, {
436662306a36Sopenharmony_ci		.compatible = "multi-inno,mi0800ft-9",
436762306a36Sopenharmony_ci		.data = &multi_inno_mi0800ft_9,
436862306a36Sopenharmony_ci	}, {
436962306a36Sopenharmony_ci		.compatible = "multi-inno,mi1010ait-1cp",
437062306a36Sopenharmony_ci		.data = &multi_inno_mi1010ait_1cp,
437162306a36Sopenharmony_ci	}, {
437262306a36Sopenharmony_ci		.compatible = "nec,nl12880bc20-05",
437362306a36Sopenharmony_ci		.data = &nec_nl12880bc20_05,
437462306a36Sopenharmony_ci	}, {
437562306a36Sopenharmony_ci		.compatible = "nec,nl4827hc19-05b",
437662306a36Sopenharmony_ci		.data = &nec_nl4827hc19_05b,
437762306a36Sopenharmony_ci	}, {
437862306a36Sopenharmony_ci		.compatible = "netron-dy,e231732",
437962306a36Sopenharmony_ci		.data = &netron_dy_e231732,
438062306a36Sopenharmony_ci	}, {
438162306a36Sopenharmony_ci		.compatible = "newhaven,nhd-4.3-480272ef-atxl",
438262306a36Sopenharmony_ci		.data = &newhaven_nhd_43_480272ef_atxl,
438362306a36Sopenharmony_ci	}, {
438462306a36Sopenharmony_ci		.compatible = "nlt,nl192108ac18-02d",
438562306a36Sopenharmony_ci		.data = &nlt_nl192108ac18_02d,
438662306a36Sopenharmony_ci	}, {
438762306a36Sopenharmony_ci		.compatible = "nvd,9128",
438862306a36Sopenharmony_ci		.data = &nvd_9128,
438962306a36Sopenharmony_ci	}, {
439062306a36Sopenharmony_ci		.compatible = "okaya,rs800480t-7x0gp",
439162306a36Sopenharmony_ci		.data = &okaya_rs800480t_7x0gp,
439262306a36Sopenharmony_ci	}, {
439362306a36Sopenharmony_ci		.compatible = "olimex,lcd-olinuxino-43-ts",
439462306a36Sopenharmony_ci		.data = &olimex_lcd_olinuxino_43ts,
439562306a36Sopenharmony_ci	}, {
439662306a36Sopenharmony_ci		.compatible = "ontat,yx700wv03",
439762306a36Sopenharmony_ci		.data = &ontat_yx700wv03,
439862306a36Sopenharmony_ci	}, {
439962306a36Sopenharmony_ci		.compatible = "ortustech,com37h3m05dtc",
440062306a36Sopenharmony_ci		.data = &ortustech_com37h3m,
440162306a36Sopenharmony_ci	}, {
440262306a36Sopenharmony_ci		.compatible = "ortustech,com37h3m99dtc",
440362306a36Sopenharmony_ci		.data = &ortustech_com37h3m,
440462306a36Sopenharmony_ci	}, {
440562306a36Sopenharmony_ci		.compatible = "ortustech,com43h4m85ulc",
440662306a36Sopenharmony_ci		.data = &ortustech_com43h4m85ulc,
440762306a36Sopenharmony_ci	}, {
440862306a36Sopenharmony_ci		.compatible = "osddisplays,osd070t1718-19ts",
440962306a36Sopenharmony_ci		.data = &osddisplays_osd070t1718_19ts,
441062306a36Sopenharmony_ci	}, {
441162306a36Sopenharmony_ci		.compatible = "pda,91-00156-a0",
441262306a36Sopenharmony_ci		.data = &pda_91_00156_a0,
441362306a36Sopenharmony_ci	}, {
441462306a36Sopenharmony_ci		.compatible = "powertip,ph800480t013-idf02",
441562306a36Sopenharmony_ci		.data = &powertip_ph800480t013_idf02,
441662306a36Sopenharmony_ci	}, {
441762306a36Sopenharmony_ci		.compatible = "qiaodian,qd43003c0-40",
441862306a36Sopenharmony_ci		.data = &qd43003c0_40,
441962306a36Sopenharmony_ci	}, {
442062306a36Sopenharmony_ci		.compatible = "qishenglong,gopher2b-lcd",
442162306a36Sopenharmony_ci		.data = &qishenglong_gopher2b_lcd,
442262306a36Sopenharmony_ci	}, {
442362306a36Sopenharmony_ci		.compatible = "rocktech,rk043fn48h",
442462306a36Sopenharmony_ci		.data = &rocktech_rk043fn48h,
442562306a36Sopenharmony_ci	}, {
442662306a36Sopenharmony_ci		.compatible = "rocktech,rk070er9427",
442762306a36Sopenharmony_ci		.data = &rocktech_rk070er9427,
442862306a36Sopenharmony_ci	}, {
442962306a36Sopenharmony_ci		.compatible = "rocktech,rk101ii01d-ct",
443062306a36Sopenharmony_ci		.data = &rocktech_rk101ii01d_ct,
443162306a36Sopenharmony_ci	}, {
443262306a36Sopenharmony_ci		.compatible = "samsung,ltl101al01",
443362306a36Sopenharmony_ci		.data = &samsung_ltl101al01,
443462306a36Sopenharmony_ci	}, {
443562306a36Sopenharmony_ci		.compatible = "samsung,ltn101nt05",
443662306a36Sopenharmony_ci		.data = &samsung_ltn101nt05,
443762306a36Sopenharmony_ci	}, {
443862306a36Sopenharmony_ci		.compatible = "satoz,sat050at40h12r2",
443962306a36Sopenharmony_ci		.data = &satoz_sat050at40h12r2,
444062306a36Sopenharmony_ci	}, {
444162306a36Sopenharmony_ci		.compatible = "sharp,lq035q7db03",
444262306a36Sopenharmony_ci		.data = &sharp_lq035q7db03,
444362306a36Sopenharmony_ci	}, {
444462306a36Sopenharmony_ci		.compatible = "sharp,lq070y3dg3b",
444562306a36Sopenharmony_ci		.data = &sharp_lq070y3dg3b,
444662306a36Sopenharmony_ci	}, {
444762306a36Sopenharmony_ci		.compatible = "sharp,lq101k1ly04",
444862306a36Sopenharmony_ci		.data = &sharp_lq101k1ly04,
444962306a36Sopenharmony_ci	}, {
445062306a36Sopenharmony_ci		.compatible = "sharp,ls020b1dd01d",
445162306a36Sopenharmony_ci		.data = &sharp_ls020b1dd01d,
445262306a36Sopenharmony_ci	}, {
445362306a36Sopenharmony_ci		.compatible = "shelly,sca07010-bfn-lnn",
445462306a36Sopenharmony_ci		.data = &shelly_sca07010_bfn_lnn,
445562306a36Sopenharmony_ci	}, {
445662306a36Sopenharmony_ci		.compatible = "starry,kr070pe2t",
445762306a36Sopenharmony_ci		.data = &starry_kr070pe2t,
445862306a36Sopenharmony_ci	}, {
445962306a36Sopenharmony_ci		.compatible = "startek,kd070wvfpa",
446062306a36Sopenharmony_ci		.data = &startek_kd070wvfpa,
446162306a36Sopenharmony_ci	}, {
446262306a36Sopenharmony_ci		.compatible = "team-source-display,tst043015cmhx",
446362306a36Sopenharmony_ci		.data = &tsd_tst043015cmhx,
446462306a36Sopenharmony_ci	}, {
446562306a36Sopenharmony_ci		.compatible = "tfc,s9700rtwv43tr-01b",
446662306a36Sopenharmony_ci		.data = &tfc_s9700rtwv43tr_01b,
446762306a36Sopenharmony_ci	}, {
446862306a36Sopenharmony_ci		.compatible = "tianma,tm070jdhg30",
446962306a36Sopenharmony_ci		.data = &tianma_tm070jdhg30,
447062306a36Sopenharmony_ci	}, {
447162306a36Sopenharmony_ci		.compatible = "tianma,tm070jvhg33",
447262306a36Sopenharmony_ci		.data = &tianma_tm070jvhg33,
447362306a36Sopenharmony_ci	}, {
447462306a36Sopenharmony_ci		.compatible = "tianma,tm070rvhg71",
447562306a36Sopenharmony_ci		.data = &tianma_tm070rvhg71,
447662306a36Sopenharmony_ci	}, {
447762306a36Sopenharmony_ci		.compatible = "ti,nspire-cx-lcd-panel",
447862306a36Sopenharmony_ci		.data = &ti_nspire_cx_lcd_panel,
447962306a36Sopenharmony_ci	}, {
448062306a36Sopenharmony_ci		.compatible = "ti,nspire-classic-lcd-panel",
448162306a36Sopenharmony_ci		.data = &ti_nspire_classic_lcd_panel,
448262306a36Sopenharmony_ci	}, {
448362306a36Sopenharmony_ci		.compatible = "toshiba,lt089ac29000",
448462306a36Sopenharmony_ci		.data = &toshiba_lt089ac29000,
448562306a36Sopenharmony_ci	}, {
448662306a36Sopenharmony_ci		.compatible = "tpk,f07a-0102",
448762306a36Sopenharmony_ci		.data = &tpk_f07a_0102,
448862306a36Sopenharmony_ci	}, {
448962306a36Sopenharmony_ci		.compatible = "tpk,f10a-0102",
449062306a36Sopenharmony_ci		.data = &tpk_f10a_0102,
449162306a36Sopenharmony_ci	}, {
449262306a36Sopenharmony_ci		.compatible = "urt,umsh-8596md-t",
449362306a36Sopenharmony_ci		.data = &urt_umsh_8596md_parallel,
449462306a36Sopenharmony_ci	}, {
449562306a36Sopenharmony_ci		.compatible = "urt,umsh-8596md-1t",
449662306a36Sopenharmony_ci		.data = &urt_umsh_8596md_parallel,
449762306a36Sopenharmony_ci	}, {
449862306a36Sopenharmony_ci		.compatible = "urt,umsh-8596md-7t",
449962306a36Sopenharmony_ci		.data = &urt_umsh_8596md_parallel,
450062306a36Sopenharmony_ci	}, {
450162306a36Sopenharmony_ci		.compatible = "urt,umsh-8596md-11t",
450262306a36Sopenharmony_ci		.data = &urt_umsh_8596md_lvds,
450362306a36Sopenharmony_ci	}, {
450462306a36Sopenharmony_ci		.compatible = "urt,umsh-8596md-19t",
450562306a36Sopenharmony_ci		.data = &urt_umsh_8596md_lvds,
450662306a36Sopenharmony_ci	}, {
450762306a36Sopenharmony_ci		.compatible = "urt,umsh-8596md-20t",
450862306a36Sopenharmony_ci		.data = &urt_umsh_8596md_parallel,
450962306a36Sopenharmony_ci	}, {
451062306a36Sopenharmony_ci		.compatible = "vivax,tpc9150-panel",
451162306a36Sopenharmony_ci		.data = &vivax_tpc9150_panel,
451262306a36Sopenharmony_ci	}, {
451362306a36Sopenharmony_ci		.compatible = "vxt,vl050-8048nt-c01",
451462306a36Sopenharmony_ci		.data = &vl050_8048nt_c01,
451562306a36Sopenharmony_ci	}, {
451662306a36Sopenharmony_ci		.compatible = "winstar,wf35ltiacd",
451762306a36Sopenharmony_ci		.data = &winstar_wf35ltiacd,
451862306a36Sopenharmony_ci	}, {
451962306a36Sopenharmony_ci		.compatible = "yes-optoelectronics,ytc700tlag-05-201c",
452062306a36Sopenharmony_ci		.data = &yes_optoelectronics_ytc700tlag_05_201c,
452162306a36Sopenharmony_ci	}, {
452262306a36Sopenharmony_ci		/* Must be the last entry */
452362306a36Sopenharmony_ci		.compatible = "panel-dpi",
452462306a36Sopenharmony_ci		.data = &panel_dpi,
452562306a36Sopenharmony_ci	}, {
452662306a36Sopenharmony_ci		/* sentinel */
452762306a36Sopenharmony_ci	}
452862306a36Sopenharmony_ci};
452962306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, platform_of_match);
453062306a36Sopenharmony_ci
453162306a36Sopenharmony_cistatic int panel_simple_platform_probe(struct platform_device *pdev)
453262306a36Sopenharmony_ci{
453362306a36Sopenharmony_ci	const struct panel_desc *desc;
453462306a36Sopenharmony_ci
453562306a36Sopenharmony_ci	desc = of_device_get_match_data(&pdev->dev);
453662306a36Sopenharmony_ci	if (!desc)
453762306a36Sopenharmony_ci		return -ENODEV;
453862306a36Sopenharmony_ci
453962306a36Sopenharmony_ci	return panel_simple_probe(&pdev->dev, desc);
454062306a36Sopenharmony_ci}
454162306a36Sopenharmony_ci
454262306a36Sopenharmony_cistatic void panel_simple_platform_remove(struct platform_device *pdev)
454362306a36Sopenharmony_ci{
454462306a36Sopenharmony_ci	panel_simple_remove(&pdev->dev);
454562306a36Sopenharmony_ci}
454662306a36Sopenharmony_ci
454762306a36Sopenharmony_cistatic void panel_simple_platform_shutdown(struct platform_device *pdev)
454862306a36Sopenharmony_ci{
454962306a36Sopenharmony_ci	panel_simple_shutdown(&pdev->dev);
455062306a36Sopenharmony_ci}
455162306a36Sopenharmony_ci
455262306a36Sopenharmony_cistatic const struct dev_pm_ops panel_simple_pm_ops = {
455362306a36Sopenharmony_ci	SET_RUNTIME_PM_OPS(panel_simple_suspend, panel_simple_resume, NULL)
455462306a36Sopenharmony_ci	SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
455562306a36Sopenharmony_ci				pm_runtime_force_resume)
455662306a36Sopenharmony_ci};
455762306a36Sopenharmony_ci
455862306a36Sopenharmony_cistatic struct platform_driver panel_simple_platform_driver = {
455962306a36Sopenharmony_ci	.driver = {
456062306a36Sopenharmony_ci		.name = "panel-simple",
456162306a36Sopenharmony_ci		.of_match_table = platform_of_match,
456262306a36Sopenharmony_ci		.pm = &panel_simple_pm_ops,
456362306a36Sopenharmony_ci	},
456462306a36Sopenharmony_ci	.probe = panel_simple_platform_probe,
456562306a36Sopenharmony_ci	.remove_new = panel_simple_platform_remove,
456662306a36Sopenharmony_ci	.shutdown = panel_simple_platform_shutdown,
456762306a36Sopenharmony_ci};
456862306a36Sopenharmony_ci
456962306a36Sopenharmony_cistruct panel_desc_dsi {
457062306a36Sopenharmony_ci	struct panel_desc desc;
457162306a36Sopenharmony_ci
457262306a36Sopenharmony_ci	unsigned long flags;
457362306a36Sopenharmony_ci	enum mipi_dsi_pixel_format format;
457462306a36Sopenharmony_ci	unsigned int lanes;
457562306a36Sopenharmony_ci};
457662306a36Sopenharmony_ci
457762306a36Sopenharmony_cistatic const struct drm_display_mode auo_b080uan01_mode = {
457862306a36Sopenharmony_ci	.clock = 154500,
457962306a36Sopenharmony_ci	.hdisplay = 1200,
458062306a36Sopenharmony_ci	.hsync_start = 1200 + 62,
458162306a36Sopenharmony_ci	.hsync_end = 1200 + 62 + 4,
458262306a36Sopenharmony_ci	.htotal = 1200 + 62 + 4 + 62,
458362306a36Sopenharmony_ci	.vdisplay = 1920,
458462306a36Sopenharmony_ci	.vsync_start = 1920 + 9,
458562306a36Sopenharmony_ci	.vsync_end = 1920 + 9 + 2,
458662306a36Sopenharmony_ci	.vtotal = 1920 + 9 + 2 + 8,
458762306a36Sopenharmony_ci};
458862306a36Sopenharmony_ci
458962306a36Sopenharmony_cistatic const struct panel_desc_dsi auo_b080uan01 = {
459062306a36Sopenharmony_ci	.desc = {
459162306a36Sopenharmony_ci		.modes = &auo_b080uan01_mode,
459262306a36Sopenharmony_ci		.num_modes = 1,
459362306a36Sopenharmony_ci		.bpc = 8,
459462306a36Sopenharmony_ci		.size = {
459562306a36Sopenharmony_ci			.width = 108,
459662306a36Sopenharmony_ci			.height = 272,
459762306a36Sopenharmony_ci		},
459862306a36Sopenharmony_ci		.connector_type = DRM_MODE_CONNECTOR_DSI,
459962306a36Sopenharmony_ci	},
460062306a36Sopenharmony_ci	.flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_CLOCK_NON_CONTINUOUS,
460162306a36Sopenharmony_ci	.format = MIPI_DSI_FMT_RGB888,
460262306a36Sopenharmony_ci	.lanes = 4,
460362306a36Sopenharmony_ci};
460462306a36Sopenharmony_ci
460562306a36Sopenharmony_cistatic const struct drm_display_mode boe_tv080wum_nl0_mode = {
460662306a36Sopenharmony_ci	.clock = 160000,
460762306a36Sopenharmony_ci	.hdisplay = 1200,
460862306a36Sopenharmony_ci	.hsync_start = 1200 + 120,
460962306a36Sopenharmony_ci	.hsync_end = 1200 + 120 + 20,
461062306a36Sopenharmony_ci	.htotal = 1200 + 120 + 20 + 21,
461162306a36Sopenharmony_ci	.vdisplay = 1920,
461262306a36Sopenharmony_ci	.vsync_start = 1920 + 21,
461362306a36Sopenharmony_ci	.vsync_end = 1920 + 21 + 3,
461462306a36Sopenharmony_ci	.vtotal = 1920 + 21 + 3 + 18,
461562306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
461662306a36Sopenharmony_ci};
461762306a36Sopenharmony_ci
461862306a36Sopenharmony_cistatic const struct panel_desc_dsi boe_tv080wum_nl0 = {
461962306a36Sopenharmony_ci	.desc = {
462062306a36Sopenharmony_ci		.modes = &boe_tv080wum_nl0_mode,
462162306a36Sopenharmony_ci		.num_modes = 1,
462262306a36Sopenharmony_ci		.size = {
462362306a36Sopenharmony_ci			.width = 107,
462462306a36Sopenharmony_ci			.height = 172,
462562306a36Sopenharmony_ci		},
462662306a36Sopenharmony_ci		.connector_type = DRM_MODE_CONNECTOR_DSI,
462762306a36Sopenharmony_ci	},
462862306a36Sopenharmony_ci	.flags = MIPI_DSI_MODE_VIDEO |
462962306a36Sopenharmony_ci		 MIPI_DSI_MODE_VIDEO_BURST |
463062306a36Sopenharmony_ci		 MIPI_DSI_MODE_VIDEO_SYNC_PULSE,
463162306a36Sopenharmony_ci	.format = MIPI_DSI_FMT_RGB888,
463262306a36Sopenharmony_ci	.lanes = 4,
463362306a36Sopenharmony_ci};
463462306a36Sopenharmony_ci
463562306a36Sopenharmony_cistatic const struct drm_display_mode lg_ld070wx3_sl01_mode = {
463662306a36Sopenharmony_ci	.clock = 71000,
463762306a36Sopenharmony_ci	.hdisplay = 800,
463862306a36Sopenharmony_ci	.hsync_start = 800 + 32,
463962306a36Sopenharmony_ci	.hsync_end = 800 + 32 + 1,
464062306a36Sopenharmony_ci	.htotal = 800 + 32 + 1 + 57,
464162306a36Sopenharmony_ci	.vdisplay = 1280,
464262306a36Sopenharmony_ci	.vsync_start = 1280 + 28,
464362306a36Sopenharmony_ci	.vsync_end = 1280 + 28 + 1,
464462306a36Sopenharmony_ci	.vtotal = 1280 + 28 + 1 + 14,
464562306a36Sopenharmony_ci};
464662306a36Sopenharmony_ci
464762306a36Sopenharmony_cistatic const struct panel_desc_dsi lg_ld070wx3_sl01 = {
464862306a36Sopenharmony_ci	.desc = {
464962306a36Sopenharmony_ci		.modes = &lg_ld070wx3_sl01_mode,
465062306a36Sopenharmony_ci		.num_modes = 1,
465162306a36Sopenharmony_ci		.bpc = 8,
465262306a36Sopenharmony_ci		.size = {
465362306a36Sopenharmony_ci			.width = 94,
465462306a36Sopenharmony_ci			.height = 151,
465562306a36Sopenharmony_ci		},
465662306a36Sopenharmony_ci		.connector_type = DRM_MODE_CONNECTOR_DSI,
465762306a36Sopenharmony_ci	},
465862306a36Sopenharmony_ci	.flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_CLOCK_NON_CONTINUOUS,
465962306a36Sopenharmony_ci	.format = MIPI_DSI_FMT_RGB888,
466062306a36Sopenharmony_ci	.lanes = 4,
466162306a36Sopenharmony_ci};
466262306a36Sopenharmony_ci
466362306a36Sopenharmony_cistatic const struct drm_display_mode lg_lh500wx1_sd03_mode = {
466462306a36Sopenharmony_ci	.clock = 67000,
466562306a36Sopenharmony_ci	.hdisplay = 720,
466662306a36Sopenharmony_ci	.hsync_start = 720 + 12,
466762306a36Sopenharmony_ci	.hsync_end = 720 + 12 + 4,
466862306a36Sopenharmony_ci	.htotal = 720 + 12 + 4 + 112,
466962306a36Sopenharmony_ci	.vdisplay = 1280,
467062306a36Sopenharmony_ci	.vsync_start = 1280 + 8,
467162306a36Sopenharmony_ci	.vsync_end = 1280 + 8 + 4,
467262306a36Sopenharmony_ci	.vtotal = 1280 + 8 + 4 + 12,
467362306a36Sopenharmony_ci};
467462306a36Sopenharmony_ci
467562306a36Sopenharmony_cistatic const struct panel_desc_dsi lg_lh500wx1_sd03 = {
467662306a36Sopenharmony_ci	.desc = {
467762306a36Sopenharmony_ci		.modes = &lg_lh500wx1_sd03_mode,
467862306a36Sopenharmony_ci		.num_modes = 1,
467962306a36Sopenharmony_ci		.bpc = 8,
468062306a36Sopenharmony_ci		.size = {
468162306a36Sopenharmony_ci			.width = 62,
468262306a36Sopenharmony_ci			.height = 110,
468362306a36Sopenharmony_ci		},
468462306a36Sopenharmony_ci		.connector_type = DRM_MODE_CONNECTOR_DSI,
468562306a36Sopenharmony_ci	},
468662306a36Sopenharmony_ci	.flags = MIPI_DSI_MODE_VIDEO,
468762306a36Sopenharmony_ci	.format = MIPI_DSI_FMT_RGB888,
468862306a36Sopenharmony_ci	.lanes = 4,
468962306a36Sopenharmony_ci};
469062306a36Sopenharmony_ci
469162306a36Sopenharmony_cistatic const struct drm_display_mode panasonic_vvx10f004b00_mode = {
469262306a36Sopenharmony_ci	.clock = 157200,
469362306a36Sopenharmony_ci	.hdisplay = 1920,
469462306a36Sopenharmony_ci	.hsync_start = 1920 + 154,
469562306a36Sopenharmony_ci	.hsync_end = 1920 + 154 + 16,
469662306a36Sopenharmony_ci	.htotal = 1920 + 154 + 16 + 32,
469762306a36Sopenharmony_ci	.vdisplay = 1200,
469862306a36Sopenharmony_ci	.vsync_start = 1200 + 17,
469962306a36Sopenharmony_ci	.vsync_end = 1200 + 17 + 2,
470062306a36Sopenharmony_ci	.vtotal = 1200 + 17 + 2 + 16,
470162306a36Sopenharmony_ci};
470262306a36Sopenharmony_ci
470362306a36Sopenharmony_cistatic const struct panel_desc_dsi panasonic_vvx10f004b00 = {
470462306a36Sopenharmony_ci	.desc = {
470562306a36Sopenharmony_ci		.modes = &panasonic_vvx10f004b00_mode,
470662306a36Sopenharmony_ci		.num_modes = 1,
470762306a36Sopenharmony_ci		.bpc = 8,
470862306a36Sopenharmony_ci		.size = {
470962306a36Sopenharmony_ci			.width = 217,
471062306a36Sopenharmony_ci			.height = 136,
471162306a36Sopenharmony_ci		},
471262306a36Sopenharmony_ci		.connector_type = DRM_MODE_CONNECTOR_DSI,
471362306a36Sopenharmony_ci	},
471462306a36Sopenharmony_ci	.flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
471562306a36Sopenharmony_ci		 MIPI_DSI_CLOCK_NON_CONTINUOUS,
471662306a36Sopenharmony_ci	.format = MIPI_DSI_FMT_RGB888,
471762306a36Sopenharmony_ci	.lanes = 4,
471862306a36Sopenharmony_ci};
471962306a36Sopenharmony_ci
472062306a36Sopenharmony_cistatic const struct drm_display_mode lg_acx467akm_7_mode = {
472162306a36Sopenharmony_ci	.clock = 150000,
472262306a36Sopenharmony_ci	.hdisplay = 1080,
472362306a36Sopenharmony_ci	.hsync_start = 1080 + 2,
472462306a36Sopenharmony_ci	.hsync_end = 1080 + 2 + 2,
472562306a36Sopenharmony_ci	.htotal = 1080 + 2 + 2 + 2,
472662306a36Sopenharmony_ci	.vdisplay = 1920,
472762306a36Sopenharmony_ci	.vsync_start = 1920 + 2,
472862306a36Sopenharmony_ci	.vsync_end = 1920 + 2 + 2,
472962306a36Sopenharmony_ci	.vtotal = 1920 + 2 + 2 + 2,
473062306a36Sopenharmony_ci};
473162306a36Sopenharmony_ci
473262306a36Sopenharmony_cistatic const struct panel_desc_dsi lg_acx467akm_7 = {
473362306a36Sopenharmony_ci	.desc = {
473462306a36Sopenharmony_ci		.modes = &lg_acx467akm_7_mode,
473562306a36Sopenharmony_ci		.num_modes = 1,
473662306a36Sopenharmony_ci		.bpc = 8,
473762306a36Sopenharmony_ci		.size = {
473862306a36Sopenharmony_ci			.width = 62,
473962306a36Sopenharmony_ci			.height = 110,
474062306a36Sopenharmony_ci		},
474162306a36Sopenharmony_ci		.connector_type = DRM_MODE_CONNECTOR_DSI,
474262306a36Sopenharmony_ci	},
474362306a36Sopenharmony_ci	.flags = 0,
474462306a36Sopenharmony_ci	.format = MIPI_DSI_FMT_RGB888,
474562306a36Sopenharmony_ci	.lanes = 4,
474662306a36Sopenharmony_ci};
474762306a36Sopenharmony_ci
474862306a36Sopenharmony_cistatic const struct drm_display_mode osd101t2045_53ts_mode = {
474962306a36Sopenharmony_ci	.clock = 154500,
475062306a36Sopenharmony_ci	.hdisplay = 1920,
475162306a36Sopenharmony_ci	.hsync_start = 1920 + 112,
475262306a36Sopenharmony_ci	.hsync_end = 1920 + 112 + 16,
475362306a36Sopenharmony_ci	.htotal = 1920 + 112 + 16 + 32,
475462306a36Sopenharmony_ci	.vdisplay = 1200,
475562306a36Sopenharmony_ci	.vsync_start = 1200 + 16,
475662306a36Sopenharmony_ci	.vsync_end = 1200 + 16 + 2,
475762306a36Sopenharmony_ci	.vtotal = 1200 + 16 + 2 + 16,
475862306a36Sopenharmony_ci	.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
475962306a36Sopenharmony_ci};
476062306a36Sopenharmony_ci
476162306a36Sopenharmony_cistatic const struct panel_desc_dsi osd101t2045_53ts = {
476262306a36Sopenharmony_ci	.desc = {
476362306a36Sopenharmony_ci		.modes = &osd101t2045_53ts_mode,
476462306a36Sopenharmony_ci		.num_modes = 1,
476562306a36Sopenharmony_ci		.bpc = 8,
476662306a36Sopenharmony_ci		.size = {
476762306a36Sopenharmony_ci			.width = 217,
476862306a36Sopenharmony_ci			.height = 136,
476962306a36Sopenharmony_ci		},
477062306a36Sopenharmony_ci		.connector_type = DRM_MODE_CONNECTOR_DSI,
477162306a36Sopenharmony_ci	},
477262306a36Sopenharmony_ci	.flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
477362306a36Sopenharmony_ci		 MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
477462306a36Sopenharmony_ci		 MIPI_DSI_MODE_NO_EOT_PACKET,
477562306a36Sopenharmony_ci	.format = MIPI_DSI_FMT_RGB888,
477662306a36Sopenharmony_ci	.lanes = 4,
477762306a36Sopenharmony_ci};
477862306a36Sopenharmony_ci
477962306a36Sopenharmony_cistatic const struct of_device_id dsi_of_match[] = {
478062306a36Sopenharmony_ci	{
478162306a36Sopenharmony_ci		.compatible = "auo,b080uan01",
478262306a36Sopenharmony_ci		.data = &auo_b080uan01
478362306a36Sopenharmony_ci	}, {
478462306a36Sopenharmony_ci		.compatible = "boe,tv080wum-nl0",
478562306a36Sopenharmony_ci		.data = &boe_tv080wum_nl0
478662306a36Sopenharmony_ci	}, {
478762306a36Sopenharmony_ci		.compatible = "lg,ld070wx3-sl01",
478862306a36Sopenharmony_ci		.data = &lg_ld070wx3_sl01
478962306a36Sopenharmony_ci	}, {
479062306a36Sopenharmony_ci		.compatible = "lg,lh500wx1-sd03",
479162306a36Sopenharmony_ci		.data = &lg_lh500wx1_sd03
479262306a36Sopenharmony_ci	}, {
479362306a36Sopenharmony_ci		.compatible = "panasonic,vvx10f004b00",
479462306a36Sopenharmony_ci		.data = &panasonic_vvx10f004b00
479562306a36Sopenharmony_ci	}, {
479662306a36Sopenharmony_ci		.compatible = "lg,acx467akm-7",
479762306a36Sopenharmony_ci		.data = &lg_acx467akm_7
479862306a36Sopenharmony_ci	}, {
479962306a36Sopenharmony_ci		.compatible = "osddisplays,osd101t2045-53ts",
480062306a36Sopenharmony_ci		.data = &osd101t2045_53ts
480162306a36Sopenharmony_ci	}, {
480262306a36Sopenharmony_ci		/* sentinel */
480362306a36Sopenharmony_ci	}
480462306a36Sopenharmony_ci};
480562306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, dsi_of_match);
480662306a36Sopenharmony_ci
480762306a36Sopenharmony_cistatic int panel_simple_dsi_probe(struct mipi_dsi_device *dsi)
480862306a36Sopenharmony_ci{
480962306a36Sopenharmony_ci	const struct panel_desc_dsi *desc;
481062306a36Sopenharmony_ci	int err;
481162306a36Sopenharmony_ci
481262306a36Sopenharmony_ci	desc = of_device_get_match_data(&dsi->dev);
481362306a36Sopenharmony_ci	if (!desc)
481462306a36Sopenharmony_ci		return -ENODEV;
481562306a36Sopenharmony_ci
481662306a36Sopenharmony_ci	err = panel_simple_probe(&dsi->dev, &desc->desc);
481762306a36Sopenharmony_ci	if (err < 0)
481862306a36Sopenharmony_ci		return err;
481962306a36Sopenharmony_ci
482062306a36Sopenharmony_ci	dsi->mode_flags = desc->flags;
482162306a36Sopenharmony_ci	dsi->format = desc->format;
482262306a36Sopenharmony_ci	dsi->lanes = desc->lanes;
482362306a36Sopenharmony_ci
482462306a36Sopenharmony_ci	err = mipi_dsi_attach(dsi);
482562306a36Sopenharmony_ci	if (err) {
482662306a36Sopenharmony_ci		struct panel_simple *panel = mipi_dsi_get_drvdata(dsi);
482762306a36Sopenharmony_ci
482862306a36Sopenharmony_ci		drm_panel_remove(&panel->base);
482962306a36Sopenharmony_ci	}
483062306a36Sopenharmony_ci
483162306a36Sopenharmony_ci	return err;
483262306a36Sopenharmony_ci}
483362306a36Sopenharmony_ci
483462306a36Sopenharmony_cistatic void panel_simple_dsi_remove(struct mipi_dsi_device *dsi)
483562306a36Sopenharmony_ci{
483662306a36Sopenharmony_ci	int err;
483762306a36Sopenharmony_ci
483862306a36Sopenharmony_ci	err = mipi_dsi_detach(dsi);
483962306a36Sopenharmony_ci	if (err < 0)
484062306a36Sopenharmony_ci		dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", err);
484162306a36Sopenharmony_ci
484262306a36Sopenharmony_ci	panel_simple_remove(&dsi->dev);
484362306a36Sopenharmony_ci}
484462306a36Sopenharmony_ci
484562306a36Sopenharmony_cistatic void panel_simple_dsi_shutdown(struct mipi_dsi_device *dsi)
484662306a36Sopenharmony_ci{
484762306a36Sopenharmony_ci	panel_simple_shutdown(&dsi->dev);
484862306a36Sopenharmony_ci}
484962306a36Sopenharmony_ci
485062306a36Sopenharmony_cistatic struct mipi_dsi_driver panel_simple_dsi_driver = {
485162306a36Sopenharmony_ci	.driver = {
485262306a36Sopenharmony_ci		.name = "panel-simple-dsi",
485362306a36Sopenharmony_ci		.of_match_table = dsi_of_match,
485462306a36Sopenharmony_ci		.pm = &panel_simple_pm_ops,
485562306a36Sopenharmony_ci	},
485662306a36Sopenharmony_ci	.probe = panel_simple_dsi_probe,
485762306a36Sopenharmony_ci	.remove = panel_simple_dsi_remove,
485862306a36Sopenharmony_ci	.shutdown = panel_simple_dsi_shutdown,
485962306a36Sopenharmony_ci};
486062306a36Sopenharmony_ci
486162306a36Sopenharmony_cistatic int __init panel_simple_init(void)
486262306a36Sopenharmony_ci{
486362306a36Sopenharmony_ci	int err;
486462306a36Sopenharmony_ci
486562306a36Sopenharmony_ci	err = platform_driver_register(&panel_simple_platform_driver);
486662306a36Sopenharmony_ci	if (err < 0)
486762306a36Sopenharmony_ci		return err;
486862306a36Sopenharmony_ci
486962306a36Sopenharmony_ci	if (IS_ENABLED(CONFIG_DRM_MIPI_DSI)) {
487062306a36Sopenharmony_ci		err = mipi_dsi_driver_register(&panel_simple_dsi_driver);
487162306a36Sopenharmony_ci		if (err < 0)
487262306a36Sopenharmony_ci			goto err_did_platform_register;
487362306a36Sopenharmony_ci	}
487462306a36Sopenharmony_ci
487562306a36Sopenharmony_ci	return 0;
487662306a36Sopenharmony_ci
487762306a36Sopenharmony_cierr_did_platform_register:
487862306a36Sopenharmony_ci	platform_driver_unregister(&panel_simple_platform_driver);
487962306a36Sopenharmony_ci
488062306a36Sopenharmony_ci	return err;
488162306a36Sopenharmony_ci}
488262306a36Sopenharmony_cimodule_init(panel_simple_init);
488362306a36Sopenharmony_ci
488462306a36Sopenharmony_cistatic void __exit panel_simple_exit(void)
488562306a36Sopenharmony_ci{
488662306a36Sopenharmony_ci	if (IS_ENABLED(CONFIG_DRM_MIPI_DSI))
488762306a36Sopenharmony_ci		mipi_dsi_driver_unregister(&panel_simple_dsi_driver);
488862306a36Sopenharmony_ci
488962306a36Sopenharmony_ci	platform_driver_unregister(&panel_simple_platform_driver);
489062306a36Sopenharmony_ci}
489162306a36Sopenharmony_cimodule_exit(panel_simple_exit);
489262306a36Sopenharmony_ci
489362306a36Sopenharmony_ciMODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
489462306a36Sopenharmony_ciMODULE_DESCRIPTION("DRM Driver for Simple Panels");
489562306a36Sopenharmony_ciMODULE_LICENSE("GPL and additional rights");
4896