^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Copyright (C) 2013, NVIDIA Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Permission is hereby granted, free of charge, to any person obtaining a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * copy of this software and associated documentation files (the "Software"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * to deal in the Software without restriction, including without limitation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * the rights to use, copy, modify, merge, publish, distribute, sub license,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * and/or sell copies of the Software, and to permit persons to whom the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * Software is furnished to do so, subject to the following conditions:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * The above copyright notice and this permission notice (including the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * next paragraph) shall be included in all copies or substantial portions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * of the Software.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * DEALINGS IN THE SOFTWARE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #include <linux/delay.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #include <linux/gpio/consumer.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #include <linux/iopoll.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #include <linux/of_platform.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #include <linux/platform_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #include <linux/regulator/consumer.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #include <video/display_timing.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #include <video/mipi_display.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #include <video/of_display_timing.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #include <video/videomode.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #include <drm/drm_crtc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #include <drm/drm_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #include <drm/drm_mipi_dsi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #include <drm/drm_panel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #include <drm/drm_dsc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #include "panel-simple.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) struct panel_cmd_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) u8 data_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) u8 delay;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) u8 payload_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) struct panel_cmd_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) struct panel_cmd_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) u8 *payload;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) struct panel_cmd_seq {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) struct panel_cmd_desc *cmds;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) unsigned int cmd_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) * @modes: Pointer to array of fixed modes appropriate for this panel. If
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) * only one mode then this can just be the address of this the mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) * NOTE: cannot be used with "timings" and also if this is specified
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) * then you cannot override the mode in the device tree.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) * @num_modes: Number of elements in modes array.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) * @timings: Pointer to array of display timings. NOTE: cannot be used with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) * "modes" and also these will be used to validate a device tree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) * override if one is present.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) * @num_timings: Number of elements in timings array.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) * @bpc: Bits per color.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) * @size: Structure containing the physical size of this panel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) * @delay: Structure containing various delay values for this panel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) * @bus_format: See MEDIA_BUS_FMT_... defines.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) * @bus_flags: See DRM_BUS_FLAG_... defines.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) struct panel_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) const struct drm_display_mode *modes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) unsigned int num_modes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) const struct display_timing *timings;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) unsigned int num_timings;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) unsigned int bpc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) * @width: width (in millimeters) of the panel's active display area
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) * @height: height (in millimeters) of the panel's active display area
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) unsigned int width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) unsigned int height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) } size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) * @prepare: the time (in milliseconds) that it takes for the panel to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) * become ready and start receiving video data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) * @hpd_absent_delay: Add this to the prepare delay if we know Hot
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) * Plug Detect isn't used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) * @enable: the time (in milliseconds) that it takes for the panel to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) * display the first valid frame after starting to receive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) * video data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) * @disable: the time (in milliseconds) that it takes for the panel to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) * turn the display off (no content is visible)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) * @unprepare: the time (in milliseconds) that it takes for the panel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) * to power itself down completely
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * @reset: the time (in milliseconds) that it takes for the panel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) * to reset itself completely
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) * @init: the time (in milliseconds) that it takes for the panel to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) * send init command sequence after reset deassert
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) unsigned int prepare;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) unsigned int hpd_absent_delay;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) unsigned int enable;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) unsigned int disable;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) unsigned int unprepare;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) unsigned int reset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) unsigned int init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) } delay;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) u32 bus_format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) u32 bus_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) int connector_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) struct panel_cmd_seq *init_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) struct panel_cmd_seq *exit_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) struct panel_simple {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) struct drm_panel base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) struct mipi_dsi_device *dsi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) bool prepared;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) bool enabled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) bool power_invert;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) bool no_hpd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) const struct panel_desc *desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) struct regulator *supply;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) struct i2c_adapter *ddc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) struct gpio_desc *enable_gpio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) struct gpio_desc *reset_gpio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) struct gpio_desc *hpd_gpio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) struct drm_display_mode override_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) struct drm_dsc_picture_parameter_set *pps;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) enum drm_panel_orientation orientation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) static inline struct panel_simple *to_panel_simple(struct drm_panel *panel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) return container_of(panel, struct panel_simple, base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) static int panel_simple_parse_cmd_seq(struct device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) const u8 *data, int length,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) struct panel_cmd_seq *seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) struct panel_cmd_header *header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) struct panel_cmd_desc *desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) char *buf, *d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) unsigned int i, cnt, len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) if (!seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) buf = devm_kmemdup(dev, data, length, GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) if (!buf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) d = buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) len = length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) cnt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) while (len > sizeof(*header)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) header = (struct panel_cmd_header *)d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) d += sizeof(*header);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) len -= sizeof(*header);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) if (header->payload_length > len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) d += header->payload_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) len -= header->payload_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) if (len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) seq->cmd_cnt = cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) seq->cmds = devm_kcalloc(dev, cnt, sizeof(*desc), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) if (!seq->cmds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) d = buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) len = length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) for (i = 0; i < cnt; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) header = (struct panel_cmd_header *)d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) len -= sizeof(*header);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) d += sizeof(*header);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) desc = &seq->cmds[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) desc->header = *header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) desc->payload = d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) d += header->payload_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) len -= header->payload_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) static int panel_simple_xfer_dsi_cmd_seq(struct panel_simple *panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) struct panel_cmd_seq *seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) struct device *dev = panel->base.dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) struct mipi_dsi_device *dsi = panel->dsi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) unsigned int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) if (!IS_ENABLED(CONFIG_DRM_MIPI_DSI))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) if (!seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) for (i = 0; i < seq->cmd_cnt; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) struct panel_cmd_desc *cmd = &seq->cmds[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) switch (cmd->header.data_type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) case MIPI_DSI_COMPRESSION_MODE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) err = mipi_dsi_compression_mode(dsi, cmd->payload[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) case MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) case MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) case MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) case MIPI_DSI_GENERIC_LONG_WRITE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) err = mipi_dsi_generic_write(dsi, cmd->payload,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) cmd->header.payload_length);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) case MIPI_DSI_DCS_SHORT_WRITE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) case MIPI_DSI_DCS_LONG_WRITE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) err = mipi_dsi_dcs_write_buffer(dsi, cmd->payload,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) cmd->header.payload_length);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) case MIPI_DSI_PICTURE_PARAMETER_SET:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) if (!panel->pps) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) panel->pps = devm_kzalloc(dev, sizeof(*panel->pps),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) if (!panel->pps)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) memcpy(panel->pps, cmd->payload, cmd->header.payload_length);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) err = mipi_dsi_picture_parameter_set(dsi, panel->pps);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) dev_err(dev, "failed to write dcs cmd: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) if (cmd->header.delay)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) msleep(cmd->header.delay);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) static unsigned int panel_simple_get_timings_modes(struct panel_simple *panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) struct drm_connector *connector)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) struct drm_display_mode *mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) unsigned int i, num = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) for (i = 0; i < panel->desc->num_timings; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) const struct display_timing *dt = &panel->desc->timings[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) struct videomode vm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) videomode_from_timing(dt, &vm);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) mode = drm_mode_create(connector->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) if (!mode) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) dev_err(panel->base.dev, "failed to add mode %ux%u\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) dt->hactive.typ, dt->vactive.typ);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) drm_display_mode_from_videomode(&vm, mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) mode->type |= DRM_MODE_TYPE_DRIVER;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) if (panel->desc->num_timings == 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) mode->type |= DRM_MODE_TYPE_PREFERRED;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) drm_mode_probed_add(connector, mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) num++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) return num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) static unsigned int panel_simple_get_display_modes(struct panel_simple *panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) struct drm_connector *connector)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) struct drm_display_mode *mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) unsigned int i, num = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) for (i = 0; i < panel->desc->num_modes; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) const struct drm_display_mode *m = &panel->desc->modes[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) mode = drm_mode_duplicate(connector->dev, m);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) if (!mode) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) m->hdisplay, m->vdisplay,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) drm_mode_vrefresh(m));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) mode->type |= DRM_MODE_TYPE_DRIVER;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) if (panel->desc->num_modes == 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) mode->type |= DRM_MODE_TYPE_PREFERRED;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) drm_mode_set_name(mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) drm_mode_probed_add(connector, mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) num++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) return num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) static int panel_simple_get_non_edid_modes(struct panel_simple *panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) struct drm_connector *connector)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) struct drm_display_mode *mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) bool has_override = panel->override_mode.type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) unsigned int num = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) if (!panel->desc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) if (has_override) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) mode = drm_mode_duplicate(connector->dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) &panel->override_mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) if (mode) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) drm_mode_probed_add(connector, mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) num = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) dev_err(panel->base.dev, "failed to add override mode\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) /* Only add timings if override was not there or failed to validate */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) if (num == 0 && panel->desc->num_timings)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) num = panel_simple_get_timings_modes(panel, connector);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) * Only add fixed modes if timings/override added no mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) * We should only ever have either the display timings specified
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) * or a fixed mode. Anything else is rather bogus.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) WARN_ON(panel->desc->num_timings && panel->desc->num_modes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) if (num == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) num = panel_simple_get_display_modes(panel, connector);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) if (panel->desc->bpc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) connector->display_info.bpc = panel->desc->bpc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) if (panel->desc->size.width)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) connector->display_info.width_mm = panel->desc->size.width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) if (panel->desc->size.height)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) connector->display_info.height_mm = panel->desc->size.height;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) if (panel->desc->bus_format)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) drm_display_info_set_bus_formats(&connector->display_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) &panel->desc->bus_format, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) if (panel->desc->bus_flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) connector->display_info.bus_flags = panel->desc->bus_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) return num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) static int panel_simple_regulator_enable(struct panel_simple *p)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) if (p->power_invert) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) if (regulator_is_enabled(p->supply) > 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) regulator_disable(p->supply);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) err = regulator_enable(p->supply);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) static int panel_simple_regulator_disable(struct panel_simple *p)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) if (p->power_invert) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) if (!regulator_is_enabled(p->supply)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) err = regulator_enable(p->supply);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) regulator_disable(p->supply);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) int panel_simple_loader_protect(struct drm_panel *panel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) struct panel_simple *p = to_panel_simple(panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) err = panel_simple_regulator_enable(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) if (err < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) dev_err(panel->dev, "failed to enable supply: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) p->prepared = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) p->enabled = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) EXPORT_SYMBOL(panel_simple_loader_protect);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) static int panel_simple_disable(struct drm_panel *panel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) struct panel_simple *p = to_panel_simple(panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) if (!p->enabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) if (p->desc->delay.disable)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) msleep(p->desc->delay.disable);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) p->enabled = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) static int panel_simple_unprepare(struct drm_panel *panel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) struct panel_simple *p = to_panel_simple(panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) if (!p->prepared)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) if (p->desc->exit_seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) if (p->dsi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) panel_simple_xfer_dsi_cmd_seq(p, p->desc->exit_seq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) gpiod_direction_output(p->reset_gpio, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) gpiod_direction_output(p->enable_gpio, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) panel_simple_regulator_disable(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) if (p->desc->delay.unprepare)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) msleep(p->desc->delay.unprepare);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) p->prepared = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) static int panel_simple_get_hpd_gpio(struct device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) struct panel_simple *p, bool from_probe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) p->hpd_gpio = devm_gpiod_get_optional(dev, "hpd", GPIOD_IN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) if (IS_ERR(p->hpd_gpio)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) err = PTR_ERR(p->hpd_gpio);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) * If we're called from probe we won't consider '-EPROBE_DEFER'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) * to be an error--we'll leave the error code in "hpd_gpio".
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) * When we try to use it we'll try again. This allows for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) * circular dependencies where the component providing the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) * hpd gpio needs the panel to init before probing.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) if (err != -EPROBE_DEFER || !from_probe) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) dev_err(dev, "failed to get 'hpd' GPIO: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) static int panel_simple_prepare(struct drm_panel *panel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) struct panel_simple *p = to_panel_simple(panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) unsigned int delay;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) int hpd_asserted;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) if (p->prepared)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) err = panel_simple_regulator_enable(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) if (err < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) dev_err(panel->dev, "failed to enable supply: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) gpiod_direction_output(p->enable_gpio, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) delay = p->desc->delay.prepare;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) if (p->no_hpd)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) delay += p->desc->delay.hpd_absent_delay;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) if (delay)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) msleep(delay);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) if (p->hpd_gpio) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) if (IS_ERR(p->hpd_gpio)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) err = panel_simple_get_hpd_gpio(panel->dev, p, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) if (err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) err = readx_poll_timeout(gpiod_get_value_cansleep, p->hpd_gpio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) hpd_asserted, hpd_asserted,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 1000, 2000000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) if (hpd_asserted < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) err = hpd_asserted;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) dev_err(panel->dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) "error waiting for hpd GPIO: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) gpiod_direction_output(p->reset_gpio, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) if (p->desc->delay.reset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) msleep(p->desc->delay.reset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) gpiod_direction_output(p->reset_gpio, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) if (p->desc->delay.init)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) msleep(p->desc->delay.init);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) if (p->desc->init_seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) if (p->dsi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) panel_simple_xfer_dsi_cmd_seq(p, p->desc->init_seq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) p->prepared = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) static int panel_simple_enable(struct drm_panel *panel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) struct panel_simple *p = to_panel_simple(panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) if (p->enabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) if (p->desc->delay.enable)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) msleep(p->desc->delay.enable);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) p->enabled = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) static int panel_simple_get_modes(struct drm_panel *panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) struct drm_connector *connector)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) struct panel_simple *p = to_panel_simple(panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) int num = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) /* probe EDID if a DDC bus is available */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) if (p->ddc) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) struct edid *edid = drm_get_edid(connector, p->ddc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) drm_connector_update_edid_property(connector, edid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) if (edid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) num += drm_add_edid_modes(connector, edid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) kfree(edid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) /* add hard-coded panel modes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) num += panel_simple_get_non_edid_modes(p, connector);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) /* set up connector's "panel orientation" property */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) drm_connector_set_panel_orientation(connector, p->orientation);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) return num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) static int panel_simple_get_timings(struct drm_panel *panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) unsigned int num_timings,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) struct display_timing *timings)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) struct panel_simple *p = to_panel_simple(panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) unsigned int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) if (p->desc->num_timings < num_timings)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) num_timings = p->desc->num_timings;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) if (timings)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) for (i = 0; i < num_timings; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) timings[i] = p->desc->timings[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) return p->desc->num_timings;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) static const struct drm_panel_funcs panel_simple_funcs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) .disable = panel_simple_disable,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) .unprepare = panel_simple_unprepare,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) .prepare = panel_simple_prepare,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) .enable = panel_simple_enable,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) .get_modes = panel_simple_get_modes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) .get_timings = panel_simple_get_timings,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) static struct panel_desc panel_dpi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) static int panel_dpi_probe(struct device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) struct panel_simple *panel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) struct display_timing *timing;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) const struct device_node *np;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) struct panel_desc *desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) unsigned int bus_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) struct videomode vm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) np = dev->of_node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) if (!desc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) timing = devm_kzalloc(dev, sizeof(*timing), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) if (!timing)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) ret = of_get_display_timing(np, "panel-timing", timing);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) if (ret < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) dev_err(dev, "%pOF: no panel-timing node found for \"panel-dpi\" binding\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) np);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) desc->timings = timing;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) desc->num_timings = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) of_property_read_u32(np, "width-mm", &desc->size.width);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) of_property_read_u32(np, "height-mm", &desc->size.height);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) /* Extract bus_flags from display_timing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) bus_flags = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) vm.flags = timing->flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) drm_bus_flags_from_videomode(&vm, &bus_flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) desc->bus_flags = bus_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) /* We do not know the connector for the DT node, so guess it */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) desc->connector_type = DRM_MODE_CONNECTOR_DPI;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) panel->desc = desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) #define PANEL_SIMPLE_BOUNDS_CHECK(to_check, bounds, field) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) (to_check->field.typ >= bounds->field.min && \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) to_check->field.typ <= bounds->field.max)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) static void panel_simple_parse_panel_timing_node(struct device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) struct panel_simple *panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) const struct display_timing *ot)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) const struct panel_desc *desc = panel->desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) struct videomode vm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) unsigned int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) if (WARN_ON(desc->num_modes)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) dev_err(dev, "Reject override mode: panel has a fixed mode\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) if (WARN_ON(!desc->num_timings)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) dev_err(dev, "Reject override mode: no timings specified\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) for (i = 0; i < panel->desc->num_timings; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) const struct display_timing *dt = &panel->desc->timings[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) if (!PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, hactive) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, hfront_porch) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, hback_porch) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, hsync_len) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, vactive) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, vfront_porch) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, vback_porch) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) !PANEL_SIMPLE_BOUNDS_CHECK(ot, dt, vsync_len))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) if (ot->flags != dt->flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) videomode_from_timing(ot, &vm);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) drm_display_mode_from_videomode(&vm, &panel->override_mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) panel->override_mode.type |= DRM_MODE_TYPE_DRIVER |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) DRM_MODE_TYPE_PREFERRED;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) if (WARN_ON(!panel->override_mode.type))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) dev_err(dev, "Reject override mode: No display_timing found\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) static int dcs_bl_update_status(struct backlight_device *bl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) struct panel_simple *p = bl_get_data(bl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) struct mipi_dsi_device *dsi = p->dsi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) if (!p->prepared)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) ret = mipi_dsi_dcs_set_display_brightness(dsi, bl->props.brightness);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) if (ret < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) dsi->mode_flags |= MIPI_DSI_MODE_LPM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) static int dcs_bl_get_brightness(struct backlight_device *bl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) struct panel_simple *p = bl_get_data(bl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) struct mipi_dsi_device *dsi = p->dsi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) u16 brightness = bl->props.brightness;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) if (!p->prepared)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) ret = mipi_dsi_dcs_get_display_brightness(dsi, &brightness);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) if (ret < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) dsi->mode_flags |= MIPI_DSI_MODE_LPM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) return brightness & 0xff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) static const struct backlight_ops dcs_bl_ops = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) .update_status = dcs_bl_update_status,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) .get_brightness = dcs_bl_get_brightness,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) struct panel_simple *panel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) struct display_timing dt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) struct device_node *ddc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) int connector_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) u32 bus_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) if (!panel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) panel->enabled = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) panel->prepared = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) panel->desc = desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) panel->no_hpd = of_property_read_bool(dev->of_node, "no-hpd");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) if (!panel->no_hpd) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) err = panel_simple_get_hpd_gpio(dev, panel, true);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) if (err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) panel->supply = devm_regulator_get(dev, "power");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) if (IS_ERR(panel->supply)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) err = PTR_ERR(panel->supply);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) dev_err(dev, "failed to get power regulator: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) panel->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_ASIS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) if (IS_ERR(panel->enable_gpio)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) err = PTR_ERR(panel->enable_gpio);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) if (err != -EPROBE_DEFER)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) dev_err(dev, "failed to get enable GPIO: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) panel->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_ASIS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) if (IS_ERR(panel->reset_gpio)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) err = PTR_ERR(panel->reset_gpio);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) if (err != -EPROBE_DEFER)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) dev_err(dev, "failed to get reset GPIO: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) panel->power_invert = of_property_read_bool(dev->of_node, "power-invert");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) if (ddc) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) panel->ddc = of_find_i2c_adapter_by_node(ddc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) of_node_put(ddc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) if (!panel->ddc) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) err = -EPROBE_DEFER;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) dev_err(dev, "failed to find ddc-i2c-bus: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) if (desc == &panel_dpi) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) /* Handle the generic panel-dpi binding */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) err = panel_dpi_probe(dev, panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) if (err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) goto free_ddc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) desc = panel->desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) panel_simple_parse_panel_timing_node(dev, panel, &dt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) connector_type = desc->connector_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) /* Catch common mistakes for panels. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) switch (connector_type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) case 0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) dev_dbg(dev, "Specify missing connector_type\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) connector_type = DRM_MODE_CONNECTOR_DPI;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) case DRM_MODE_CONNECTOR_LVDS:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) WARN_ON(desc->bus_flags &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) ~(DRM_BUS_FLAG_DE_LOW |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) DRM_BUS_FLAG_DE_HIGH |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) DRM_BUS_FLAG_DATA_MSB_TO_LSB |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) DRM_BUS_FLAG_DATA_LSB_TO_MSB));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) WARN_ON(desc->bus_format != MEDIA_BUS_FMT_RGB666_1X7X3_SPWG &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_SPWG &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) WARN_ON(desc->bus_format == MEDIA_BUS_FMT_RGB666_1X7X3_SPWG &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) desc->bpc != 6);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) WARN_ON((desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA) &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) desc->bpc != 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) case DRM_MODE_CONNECTOR_eDP:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) if (desc->bus_format == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) dev_warn(dev, "Specify missing bus_format\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) if (desc->bpc != 6 && desc->bpc != 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) case DRM_MODE_CONNECTOR_DSI:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) if (desc->bpc != 6 && desc->bpc != 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) case DRM_MODE_CONNECTOR_DPI:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) bus_flags = DRM_BUS_FLAG_DE_LOW |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) DRM_BUS_FLAG_DE_HIGH |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) DRM_BUS_FLAG_DATA_MSB_TO_LSB |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) DRM_BUS_FLAG_DATA_LSB_TO_MSB |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) if (desc->bus_flags & ~bus_flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) dev_warn(dev, "Unexpected bus_flags(%d)\n", desc->bus_flags & ~bus_flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) if (!(desc->bus_flags & bus_flags))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) dev_warn(dev, "Specify missing bus_flags\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) if (desc->bus_format == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) dev_warn(dev, "Specify missing bus_format\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) if (desc->bpc != 6 && desc->bpc != 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) connector_type = DRM_MODE_CONNECTOR_DPI;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) drm_panel_init(&panel->base, dev, &panel_simple_funcs, connector_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) err = drm_panel_of_backlight(&panel->base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) dev_err(dev, "failed to find backlight: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) goto free_ddc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) drm_panel_add(&panel->base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) dev_set_drvdata(dev, panel);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) free_ddc:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) if (panel->ddc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) put_device(&panel->ddc->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) static int panel_simple_remove(struct device *dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) struct panel_simple *panel = dev_get_drvdata(dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) drm_panel_remove(&panel->base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) drm_panel_disable(&panel->base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) drm_panel_unprepare(&panel->base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) if (panel->ddc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) put_device(&panel->ddc->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) static void panel_simple_shutdown(struct device *dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) struct panel_simple *panel = dev_get_drvdata(dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) drm_panel_disable(&panel->base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) drm_panel_unprepare(&panel->base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) static const struct drm_display_mode ampire_am_1280800n3tzqw_t00h_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) .clock = 71100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) .hdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) .hsync_start = 1280 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) .hsync_end = 1280 + 40 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) .htotal = 1280 + 40 + 80 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) .vdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) .vsync_start = 800 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) .vsync_end = 800 + 3 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) .vtotal = 800 + 3 + 10 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) static const struct panel_desc ampire_am_1280800n3tzqw_t00h = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) .modes = &ire_am_1280800n3tzqw_t00h_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) .height = 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) static const struct drm_display_mode ampire_am_480272h3tmqw_t01h_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) .clock = 9000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) .hsync_start = 480 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) .hsync_end = 480 + 2 + 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) .htotal = 480 + 2 + 41 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) .vsync_start = 272 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) .vsync_end = 272 + 2 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) .vtotal = 272 + 2 + 10 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) static const struct panel_desc ampire_am_480272h3tmqw_t01h = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) .modes = &ire_am_480272h3tmqw_t01h_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) .width = 105,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996) .height = 67,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) static const struct drm_display_mode ampire_am800480r3tmqwa1h_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) .clock = 33333,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) .hsync_start = 800 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) .hsync_end = 800 + 0 + 255,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) .htotal = 800 + 0 + 255 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) .vsync_start = 480 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) .vsync_end = 480 + 2 + 45,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) .vtotal = 480 + 2 + 45 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) static const struct panel_desc ampire_am800480r3tmqwa1h = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) .modes = &ire_am800480r3tmqwa1h_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) static const struct display_timing santek_st0700i5y_rbslw_f_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) .pixelclock = { 26400000, 33300000, 46800000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) .hactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) .hfront_porch = { 16, 210, 354 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) .hback_porch = { 45, 36, 6 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) .hsync_len = { 1, 10, 40 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) .vfront_porch = { 7, 22, 147 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) .vback_porch = { 22, 13, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) .vsync_len = { 1, 10, 20 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) .flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) static const struct panel_desc armadeus_st0700_adapt = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) .timings = &santek_st0700i5y_rbslw_f_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) static const struct drm_display_mode auo_b101aw03_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) .clock = 51450,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) .hsync_start = 1024 + 156,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) .hsync_end = 1024 + 156 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) .htotal = 1024 + 156 + 8 + 156,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) .vdisplay = 600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) .vsync_start = 600 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) .vsync_end = 600 + 16 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) .vtotal = 600 + 16 + 6 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) static const struct panel_desc auo_b101aw03 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) .modes = &auo_b101aw03_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) .width = 223,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) .height = 125,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) static const struct display_timing auo_b101ean01_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) .pixelclock = { 65300000, 72500000, 75000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) .hfront_porch = { 18, 119, 119 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) .hback_porch = { 21, 21, 21 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) .hsync_len = { 32, 32, 32 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) .vfront_porch = { 4, 4, 4 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) .vback_porch = { 8, 8, 8 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) .vsync_len = { 18, 20, 20 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) static const struct panel_desc auo_b101ean01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) .timings = &auo_b101ean01_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) .height = 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) static const struct drm_display_mode auo_b101xtn01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) .clock = 72000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) .hsync_start = 1366 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) .hsync_end = 1366 + 20 + 70,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) .htotal = 1366 + 20 + 70,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) .vsync_start = 768 + 14,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) .vsync_end = 768 + 14 + 42,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) .vtotal = 768 + 14 + 42,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) static const struct panel_desc auo_b101xtn01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) .modes = &auo_b101xtn01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) .width = 223,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) .height = 125,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) static const struct drm_display_mode auo_b116xak01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) .clock = 69300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) .hsync_start = 1366 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) .hsync_end = 1366 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) .htotal = 1366 + 48 + 32 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) .vsync_start = 768 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) .vsync_end = 768 + 4 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) .vtotal = 768 + 4 + 6 + 15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) static const struct panel_desc auo_b116xak01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) .modes = &auo_b116xak01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) .width = 256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) .height = 144,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) .hpd_absent_delay = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) .connector_type = DRM_MODE_CONNECTOR_eDP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) static const struct drm_display_mode auo_b116xw03_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) .clock = 70589,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) .hsync_start = 1366 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) .hsync_end = 1366 + 40 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) .htotal = 1366 + 40 + 40 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) .vsync_start = 768 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) .vsync_end = 768 + 10 + 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) .vtotal = 768 + 10 + 12 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) static const struct panel_desc auo_b116xw03 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) .modes = &auo_b116xw03_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) .width = 256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) .height = 144,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) .enable = 400,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) .bus_flags = DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) .connector_type = DRM_MODE_CONNECTOR_eDP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) static const struct drm_display_mode auo_b133xtn01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) .clock = 69500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) .hsync_start = 1366 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) .hsync_end = 1366 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) .htotal = 1366 + 48 + 32 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) .vsync_start = 768 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) .vsync_end = 768 + 3 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) .vtotal = 768 + 3 + 6 + 13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) static const struct panel_desc auo_b133xtn01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) .modes = &auo_b133xtn01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) .width = 293,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) .height = 165,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) static const struct drm_display_mode auo_b133htn01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) .clock = 150660,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) .hsync_start = 1920 + 172,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) .hsync_end = 1920 + 172 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) .htotal = 1920 + 172 + 80 + 60,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) .vdisplay = 1080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) .vsync_start = 1080 + 25,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) .vsync_end = 1080 + 25 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) .vtotal = 1080 + 25 + 10 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) static const struct panel_desc auo_b133htn01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) .modes = &auo_b133htn01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) .width = 293,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) .height = 165,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) .prepare = 105,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) .enable = 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) .unprepare = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) static const struct display_timing auo_g070vvn01_timings = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) .pixelclock = { 33300000, 34209000, 45000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) .hactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) .hfront_porch = { 20, 40, 200 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) .hback_porch = { 87, 40, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) .hsync_len = { 1, 48, 87 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) .vfront_porch = { 5, 13, 200 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) .vback_porch = { 31, 31, 29 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) .vsync_len = { 1, 1, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) static const struct panel_desc auo_g070vvn01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) .timings = &auo_g070vvn01_timings,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) .prepare = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) .enable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) .disable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) .unprepare = 1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) static const struct drm_display_mode auo_g101evn010_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) .clock = 68930,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) .hdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) .hsync_start = 1280 + 82,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) .hsync_end = 1280 + 82 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) .htotal = 1280 + 82 + 2 + 84,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) .vdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) .vsync_start = 800 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) .vsync_end = 800 + 8 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) .vtotal = 800 + 8 + 2 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) static const struct panel_desc auo_g101evn010 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) .modes = &auo_g101evn010_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272) .width = 216,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) .height = 135,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) static const struct drm_display_mode auo_g104sn02_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) .clock = 40000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) .hsync_start = 800 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) .hsync_end = 800 + 40 + 216,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) .htotal = 800 + 40 + 216 + 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) .vdisplay = 600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) .vsync_start = 600 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) .vsync_end = 600 + 10 + 35,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) .vtotal = 600 + 10 + 35 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) static const struct panel_desc auo_g104sn02 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) .modes = &auo_g104sn02_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) .width = 211,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) .height = 158,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) static const struct drm_display_mode auo_g121ean01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) .clock = 66700,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) .hdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) .hsync_start = 1280 + 58,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) .hsync_end = 1280 + 58 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) .htotal = 1280 + 58 + 8 + 70,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) .vdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) .vsync_start = 800 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) .vsync_end = 800 + 6 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) .vtotal = 800 + 6 + 4 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) static const struct panel_desc auo_g121ean01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) .modes = &auo_g121ean01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) .width = 261,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) .height = 163,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) static const struct display_timing auo_g133han01_timings = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326) .pixelclock = { 134000000, 141200000, 149000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) .hactive = { 1920, 1920, 1920 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) .hfront_porch = { 39, 58, 77 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) .hback_porch = { 59, 88, 117 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) .hsync_len = { 28, 42, 56 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) .vactive = { 1080, 1080, 1080 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) .vfront_porch = { 3, 8, 11 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) .vback_porch = { 5, 14, 19 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) .vsync_len = { 4, 14, 19 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) static const struct panel_desc auo_g133han01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338) .timings = &auo_g133han01_timings,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) .width = 293,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) .height = 165,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) .prepare = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) .enable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) .disable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) .unprepare = 1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355) static const struct drm_display_mode auo_g156xtn01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) .clock = 76000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) .hsync_start = 1366 + 33,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) .hsync_end = 1366 + 33 + 67,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) .htotal = 1560,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362) .vsync_start = 768 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) .vsync_end = 768 + 4 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364) .vtotal = 806,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367) static const struct panel_desc auo_g156xtn01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368) .modes = &auo_g156xtn01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372) .width = 344,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) .height = 194,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) static const struct display_timing auo_g185han01_timings = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) .pixelclock = { 120000000, 144000000, 175000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) .hactive = { 1920, 1920, 1920 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) .hfront_porch = { 36, 120, 148 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) .hback_porch = { 24, 88, 108 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384) .hsync_len = { 20, 48, 64 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385) .vactive = { 1080, 1080, 1080 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) .vfront_porch = { 6, 10, 40 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) .vback_porch = { 2, 5, 20 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) .vsync_len = { 2, 5, 20 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) static const struct panel_desc auo_g185han01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) .timings = &auo_g185han01_timings,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) .width = 409,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) .height = 230,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400) .prepare = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) .disable = 110,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) .unprepare = 1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) static const struct display_timing auo_g190ean01_timings = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) .pixelclock = { 90000000, 108000000, 135000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) .hfront_porch = { 126, 184, 1266 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) .hback_porch = { 84, 122, 844 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) .hsync_len = { 70, 102, 704 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) .vactive = { 1024, 1024, 1024 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) .vfront_porch = { 4, 26, 76 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) .vback_porch = { 2, 8, 25 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418) .vsync_len = { 2, 8, 25 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) static const struct panel_desc auo_g190ean01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) .timings = &auo_g190ean01_timings,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) .width = 376,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427) .height = 301,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) .prepare = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) .disable = 110,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) .unprepare = 1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) static const struct display_timing auo_p320hvn03_timings = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) .pixelclock = { 106000000, 148500000, 164000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441) .hactive = { 1920, 1920, 1920 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) .hfront_porch = { 25, 50, 130 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) .hback_porch = { 25, 50, 130 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) .hsync_len = { 20, 40, 105 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) .vactive = { 1080, 1080, 1080 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) .vfront_porch = { 8, 17, 150 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) .vback_porch = { 8, 17, 150 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) .vsync_len = { 4, 11, 100 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451) static const struct panel_desc auo_p320hvn03 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452) .timings = &auo_p320hvn03_timings,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456) .width = 698,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457) .height = 393,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460) .prepare = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461) .enable = 450,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462) .unprepare = 500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468) static const struct drm_display_mode auo_t215hvn01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469) .clock = 148800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) .hsync_start = 1920 + 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) .hsync_end = 1920 + 88 + 44,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) .htotal = 1920 + 88 + 44 + 148,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) .vdisplay = 1080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) .vsync_start = 1080 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) .vsync_end = 1080 + 4 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) .vtotal = 1080 + 4 + 5 + 36,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480) static const struct panel_desc auo_t215hvn01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481) .modes = &auo_t215hvn01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485) .width = 430,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486) .height = 270,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) .disable = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) .unprepare = 1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) static const struct drm_display_mode avic_tm070ddh03_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) .clock = 51200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) .hsync_start = 1024 + 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) .hsync_end = 1024 + 160 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) .htotal = 1024 + 160 + 4 + 156,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) .vdisplay = 600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) .vsync_start = 600 + 17,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) .vsync_end = 600 + 17 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) .vtotal = 600 + 17 + 1 + 17,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506) static const struct panel_desc avic_tm070ddh03 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507) .modes = &avic_tm070ddh03_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) .height = 90,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) .prepare = 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) .disable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) static const struct drm_display_mode bananapi_s070wv20_ct16_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) .clock = 30000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) .hsync_start = 800 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) .hsync_end = 800 + 40 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) .htotal = 800 + 40 + 48 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) .vsync_start = 480 + 13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) .vsync_end = 480 + 13 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1530) .vtotal = 480 + 13 + 3 + 29,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1531) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1532)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1533) static const struct panel_desc bananapi_s070wv20_ct16 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1534) .modes = &bananapi_s070wv20_ct16_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1535) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1536) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1537) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1538) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1539) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1540) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1541) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1542)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1543) static const struct drm_display_mode boe_hv070wsa_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1544) .clock = 42105,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1545) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1546) .hsync_start = 1024 + 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1547) .hsync_end = 1024 + 30 + 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1548) .htotal = 1024 + 30 + 30 + 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1549) .vdisplay = 600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1550) .vsync_start = 600 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1551) .vsync_end = 600 + 10 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1552) .vtotal = 600 + 10 + 10 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1553) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1554)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1555) static const struct panel_desc boe_hv070wsa = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1556) .modes = &boe_hv070wsa_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1557) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1558) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1559) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1560) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1561) .height = 90,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1562) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1563) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1564) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1565) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1566) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1567)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1568) static const struct drm_display_mode boe_nv101wxmn51_modes[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1569) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1570) .clock = 71900,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1571) .hdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1572) .hsync_start = 1280 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1573) .hsync_end = 1280 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1574) .htotal = 1280 + 48 + 32 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1575) .vdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1576) .vsync_start = 800 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1577) .vsync_end = 800 + 3 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1578) .vtotal = 800 + 3 + 5 + 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1579) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1580) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1581) .clock = 57500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1582) .hdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1583) .hsync_start = 1280 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1584) .hsync_end = 1280 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1585) .htotal = 1280 + 48 + 32 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1586) .vdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1587) .vsync_start = 800 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1588) .vsync_end = 800 + 3 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1589) .vtotal = 800 + 3 + 5 + 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1590) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1591) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1592)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1593) static const struct panel_desc boe_nv101wxmn51 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1594) .modes = boe_nv101wxmn51_modes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1595) .num_modes = ARRAY_SIZE(boe_nv101wxmn51_modes),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1596) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1597) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1598) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1599) .height = 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1600) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1601) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1602) .prepare = 210,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1603) .enable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1604) .unprepare = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1605) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1606) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1607)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1608) /* Also used for boe_nv133fhm_n62 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1609) static const struct drm_display_mode boe_nv133fhm_n61_modes = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1610) .clock = 147840,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1611) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1612) .hsync_start = 1920 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1613) .hsync_end = 1920 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1614) .htotal = 1920 + 48 + 32 + 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1615) .vdisplay = 1080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1616) .vsync_start = 1080 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1617) .vsync_end = 1080 + 3 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1618) .vtotal = 1080 + 3 + 6 + 31,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1619) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1620) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1621)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1622) /* Also used for boe_nv133fhm_n62 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1623) static const struct panel_desc boe_nv133fhm_n61 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1624) .modes = &boe_nv133fhm_n61_modes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1625) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1626) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1627) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1628) .width = 294,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1629) .height = 165,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1630) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1631) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1632) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1633) * When power is first given to the panel there's a short
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1634) * spike on the HPD line. It was explained that this spike
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1635) * was until the TCON data download was complete. On
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1636) * one system this was measured at 8 ms. We'll put 15 ms
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1637) * in the prepare delay just to be safe and take it away
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1638) * from the hpd_absent_delay (which would otherwise be 200 ms)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1639) * to handle this. That means:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1640) * - If HPD isn't hooked up you still have 200 ms delay.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1641) * - If HPD is hooked up we won't try to look at it for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1642) * first 15 ms.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1643) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1644) .prepare = 15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1645) .hpd_absent_delay = 185,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1646)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1647) .unprepare = 500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1648) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1649) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1650) .bus_flags = DRM_BUS_FLAG_DATA_MSB_TO_LSB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1651) .connector_type = DRM_MODE_CONNECTOR_eDP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1652) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1653)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1654) static const struct drm_display_mode boe_nv140fhmn49_modes[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1655) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1656) .clock = 148500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1657) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1658) .hsync_start = 1920 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1659) .hsync_end = 1920 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1660) .htotal = 2200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1661) .vdisplay = 1080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1662) .vsync_start = 1080 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1663) .vsync_end = 1080 + 3 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1664) .vtotal = 1125,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1665) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1666) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1667)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1668) static const struct panel_desc boe_nv140fhmn49 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1669) .modes = boe_nv140fhmn49_modes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1670) .num_modes = ARRAY_SIZE(boe_nv140fhmn49_modes),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1671) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1672) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1673) .width = 309,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1674) .height = 174,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1675) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1676) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1677) .prepare = 210,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1678) .enable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1679) .unprepare = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1680) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1681) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1682) .connector_type = DRM_MODE_CONNECTOR_eDP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1683) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1684)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1685) static const struct drm_display_mode cdtech_s043wq26h_ct7_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1686) .clock = 9000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1687) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1688) .hsync_start = 480 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1689) .hsync_end = 480 + 5 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1690) .htotal = 480 + 5 + 5 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1691) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1692) .vsync_start = 272 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1693) .vsync_end = 272 + 8 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1694) .vtotal = 272 + 8 + 8 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1695) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1696) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1697)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1698) static const struct panel_desc cdtech_s043wq26h_ct7 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1699) .modes = &cdtech_s043wq26h_ct7_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1700) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1701) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1702) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1703) .width = 95,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1704) .height = 54,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1705) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1706) .bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1707) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1708)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1709) /* S070PWS19HP-FC21 2017/04/22 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1710) static const struct drm_display_mode cdtech_s070pws19hp_fc21_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1711) .clock = 51200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1712) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1713) .hsync_start = 1024 + 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1714) .hsync_end = 1024 + 160 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1715) .htotal = 1024 + 160 + 20 + 140,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1716) .vdisplay = 600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1717) .vsync_start = 600 + 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1718) .vsync_end = 600 + 12 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1719) .vtotal = 600 + 12 + 3 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1720) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1721) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1722)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1723) static const struct panel_desc cdtech_s070pws19hp_fc21 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1724) .modes = &cdtech_s070pws19hp_fc21_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1725) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1726) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1727) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1728) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1729) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1730) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1731) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1732) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1733) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1734) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1735)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1736) /* S070SWV29HG-DC44 2017/09/21 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1737) static const struct drm_display_mode cdtech_s070swv29hg_dc44_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1738) .clock = 33300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1739) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1740) .hsync_start = 800 + 210,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1741) .hsync_end = 800 + 210 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1742) .htotal = 800 + 210 + 2 + 44,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1743) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1744) .vsync_start = 480 + 22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1745) .vsync_end = 480 + 22 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1746) .vtotal = 480 + 22 + 2 + 21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1747) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1748) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1749)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1750) static const struct panel_desc cdtech_s070swv29hg_dc44 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1751) .modes = &cdtech_s070swv29hg_dc44_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1752) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1753) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1754) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1755) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1756) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1757) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1758) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1759) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1760) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1761) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1762)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1763) static const struct drm_display_mode cdtech_s070wv95_ct16_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1764) .clock = 35000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1765) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1766) .hsync_start = 800 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1767) .hsync_end = 800 + 40 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1768) .htotal = 800 + 40 + 40 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1769) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1770) .vsync_start = 480 + 29,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1771) .vsync_end = 480 + 29 + 13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1772) .vtotal = 480 + 29 + 13 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1773) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1774) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1775)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1776) static const struct panel_desc cdtech_s070wv95_ct16 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1777) .modes = &cdtech_s070wv95_ct16_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1778) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1779) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1780) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1781) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1782) .height = 85,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1783) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1784) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1785)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1786) static const struct display_timing chefree_ch101olhlwh_002_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1787) .pixelclock = { 68900000, 71100000, 73400000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1788) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1789) .hfront_porch = { 65, 80, 95 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1790) .hback_porch = { 64, 79, 94 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1791) .hsync_len = { 1, 1, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1792) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1793) .vfront_porch = { 7, 11, 14 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1794) .vback_porch = { 7, 11, 14 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1795) .vsync_len = { 1, 1, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1796) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1797) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1798)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1799) static const struct panel_desc chefree_ch101olhlwh_002 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1800) .timings = &chefree_ch101olhlwh_002_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1801) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1802) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1803) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1804) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1805) .height = 135,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1806) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1807) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1808) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1809) .disable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1810) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1811) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1812) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1813) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1814) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1815)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1816) static const struct drm_display_mode chunghwa_claa070wp03xg_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1817) .clock = 66770,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1818) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1819) .hsync_start = 800 + 49,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1820) .hsync_end = 800 + 49 + 33,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1821) .htotal = 800 + 49 + 33 + 17,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1822) .vdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1823) .vsync_start = 1280 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1824) .vsync_end = 1280 + 1 + 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1825) .vtotal = 1280 + 1 + 7 + 15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1826) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1827) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1828)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1829) static const struct panel_desc chunghwa_claa070wp03xg = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1830) .modes = &chunghwa_claa070wp03xg_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1831) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1832) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1833) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1834) .width = 94,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1835) .height = 150,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1836) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1837) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1838) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1839) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1840) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1841)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1842) static const struct drm_display_mode chunghwa_claa101wa01a_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1843) .clock = 72070,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1844) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1845) .hsync_start = 1366 + 58,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1846) .hsync_end = 1366 + 58 + 58,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1847) .htotal = 1366 + 58 + 58 + 58,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1848) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1849) .vsync_start = 768 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1850) .vsync_end = 768 + 4 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1851) .vtotal = 768 + 4 + 4 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1852) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1853)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1854) static const struct panel_desc chunghwa_claa101wa01a = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1855) .modes = &chunghwa_claa101wa01a_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1856) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1857) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1858) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1859) .width = 220,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1860) .height = 120,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1861) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1862) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1863) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1864) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1865) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1866)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1867) static const struct drm_display_mode chunghwa_claa101wb01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1868) .clock = 69300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1869) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1870) .hsync_start = 1366 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1871) .hsync_end = 1366 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1872) .htotal = 1366 + 48 + 32 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1873) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1874) .vsync_start = 768 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1875) .vsync_end = 768 + 16 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1876) .vtotal = 768 + 16 + 8 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1877) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1878)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1879) static const struct panel_desc chunghwa_claa101wb01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1880) .modes = &chunghwa_claa101wb01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1881) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1882) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1883) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1884) .width = 223,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1885) .height = 125,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1886) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1887) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1888) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1889) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1890) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1891)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1892) static const struct drm_display_mode dataimage_scf0700c48ggu18_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1893) .clock = 33260,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1894) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1895) .hsync_start = 800 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1896) .hsync_end = 800 + 40 + 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1897) .htotal = 800 + 40 + 128 + 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1898) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1899) .vsync_start = 480 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1900) .vsync_end = 480 + 10 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1901) .vtotal = 480 + 10 + 2 + 33,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1902) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1903) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1904)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1905) static const struct panel_desc dataimage_scf0700c48ggu18 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1906) .modes = &dataimage_scf0700c48ggu18_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1907) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1908) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1909) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1910) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1911) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1912) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1913) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1914) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1915) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1916)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1917) static const struct display_timing dlc_dlc0700yzg_1_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1918) .pixelclock = { 45000000, 51200000, 57000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1919) .hactive = { 1024, 1024, 1024 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1920) .hfront_porch = { 100, 106, 113 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1921) .hback_porch = { 100, 106, 113 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1922) .hsync_len = { 100, 108, 114 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1923) .vactive = { 600, 600, 600 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1924) .vfront_porch = { 8, 11, 15 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1925) .vback_porch = { 8, 11, 15 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1926) .vsync_len = { 9, 13, 15 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1927) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1928) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1929)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1930) static const struct panel_desc dlc_dlc0700yzg_1 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1931) .timings = &dlc_dlc0700yzg_1_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1932) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1933) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1934) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1935) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1936) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1937) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1938) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1939) .prepare = 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1940) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1941) .disable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1942) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1943) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1944) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1945) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1946)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1947) static const struct display_timing dlc_dlc1010gig_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1948) .pixelclock = { 68900000, 71100000, 73400000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1949) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1950) .hfront_porch = { 43, 53, 63 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1951) .hback_porch = { 43, 53, 63 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1952) .hsync_len = { 44, 54, 64 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1953) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1954) .vfront_porch = { 5, 8, 11 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1955) .vback_porch = { 5, 8, 11 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1956) .vsync_len = { 5, 7, 11 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1957) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1958) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1959)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1960) static const struct panel_desc dlc_dlc1010gig = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1961) .timings = &dlc_dlc1010gig_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1962) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1963) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1964) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1965) .width = 216,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1966) .height = 135,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1967) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1968) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1969) .prepare = 60,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1970) .enable = 150,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1971) .disable = 100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1972) .unprepare = 60,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1973) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1974) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1975) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1976) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1977)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1978) static const struct drm_display_mode edt_et035012dm6_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1979) .clock = 6500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1980) .hdisplay = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1981) .hsync_start = 320 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1982) .hsync_end = 320 + 20 + 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1983) .htotal = 320 + 20 + 68,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1984) .vdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1985) .vsync_start = 240 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1986) .vsync_end = 240 + 4 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1987) .vtotal = 240 + 4 + 4 + 14,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1988) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1989) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1990)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1991) static const struct panel_desc edt_et035012dm6 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1992) .modes = &edt_et035012dm6_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1993) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1994) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1995) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1996) .width = 70,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1997) .height = 52,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1998) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1999) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2000) .bus_flags = DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2001) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2002)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2003) static const struct drm_display_mode edt_etm043080dh6gp_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2004) .clock = 10870,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2005) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2006) .hsync_start = 480 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2007) .hsync_end = 480 + 8 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2008) .htotal = 480 + 8 + 4 + 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2009)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2010) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2011) * IWG22M: Y resolution changed for "dc_linuxfb" module crashing while
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2012) * fb_align
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2013) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2014)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2015) .vdisplay = 288,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2016) .vsync_start = 288 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2017) .vsync_end = 288 + 2 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2018) .vtotal = 288 + 2 + 4 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2019) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2020)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2021) static const struct panel_desc edt_etm043080dh6gp = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2022) .modes = &edt_etm043080dh6gp_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2023) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2024) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2025) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2026) .width = 100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2027) .height = 65,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2028) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2029) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2030) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2031) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2032)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2033) static const struct drm_display_mode edt_etm0430g0dh6_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2034) .clock = 9000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2035) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2036) .hsync_start = 480 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2037) .hsync_end = 480 + 2 + 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2038) .htotal = 480 + 2 + 41 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2039) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2040) .vsync_start = 272 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2041) .vsync_end = 272 + 2 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2042) .vtotal = 272 + 2 + 10 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2043) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2044) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2045)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2046) static const struct panel_desc edt_etm0430g0dh6 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2047) .modes = &edt_etm0430g0dh6_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2048) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2049) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2050) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2051) .width = 95,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2052) .height = 54,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2053) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2054) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2055)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2056) static const struct drm_display_mode edt_et057090dhu_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2057) .clock = 25175,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2058) .hdisplay = 640,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2059) .hsync_start = 640 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2060) .hsync_end = 640 + 16 + 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2061) .htotal = 640 + 16 + 30 + 114,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2062) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2063) .vsync_start = 480 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2064) .vsync_end = 480 + 10 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2065) .vtotal = 480 + 10 + 3 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2066) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2067) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2068)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2069) static const struct panel_desc edt_et057090dhu = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2070) .modes = &edt_et057090dhu_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2071) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2072) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2073) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2074) .width = 115,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2075) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2076) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2077) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2078) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2079) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2080) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2081)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2082) static const struct drm_display_mode edt_etm0700g0dh6_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2083) .clock = 33260,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2084) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2085) .hsync_start = 800 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2086) .hsync_end = 800 + 40 + 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2087) .htotal = 800 + 40 + 128 + 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2088) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2089) .vsync_start = 480 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2090) .vsync_end = 480 + 10 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2091) .vtotal = 480 + 10 + 2 + 33,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2092) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2093) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2094)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2095) static const struct panel_desc edt_etm0700g0dh6 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2096) .modes = &edt_etm0700g0dh6_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2097) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2098) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2099) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2100) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2101) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2102) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2103) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2104) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2105) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2107) static const struct panel_desc edt_etm0700g0bdh6 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2108) .modes = &edt_etm0700g0dh6_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2109) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2110) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2111) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2112) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2113) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2114) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2115) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2116) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2117) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2118)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2119) static const struct display_timing evervision_vgg804821_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2120) .pixelclock = { 27600000, 33300000, 50000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2121) .hactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2122) .hfront_porch = { 40, 66, 70 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2123) .hback_porch = { 40, 67, 70 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2124) .hsync_len = { 40, 67, 70 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2125) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2126) .vfront_porch = { 6, 10, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2127) .vback_porch = { 7, 11, 11 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2128) .vsync_len = { 7, 11, 11 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2129) .flags = DISPLAY_FLAGS_HSYNC_HIGH | DISPLAY_FLAGS_VSYNC_HIGH |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2130) DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_NEGEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2131) DISPLAY_FLAGS_SYNC_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2132) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2134) static const struct panel_desc evervision_vgg804821 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2135) .timings = &evervision_vgg804821_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2136) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2137) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2138) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2139) .width = 108,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2140) .height = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2141) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2142) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2143) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2144) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2146) static const struct drm_display_mode foxlink_fl500wvr00_a0t_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2147) .clock = 32260,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2148) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2149) .hsync_start = 800 + 168,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2150) .hsync_end = 800 + 168 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2151) .htotal = 800 + 168 + 64 + 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2152) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2153) .vsync_start = 480 + 37,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2154) .vsync_end = 480 + 37 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2155) .vtotal = 480 + 37 + 2 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2156) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2158) static const struct panel_desc foxlink_fl500wvr00_a0t = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2159) .modes = &foxlink_fl500wvr00_a0t_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2160) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2161) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2162) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2163) .width = 108,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2164) .height = 65,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2165) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2166) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2167) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2169) static const struct drm_display_mode frida_frd350h54004_modes[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2170) { /* 60 Hz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2171) .clock = 6000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2172) .hdisplay = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2173) .hsync_start = 320 + 44,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2174) .hsync_end = 320 + 44 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2175) .htotal = 320 + 44 + 16 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2176) .vdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2177) .vsync_start = 240 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2178) .vsync_end = 240 + 2 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2179) .vtotal = 240 + 2 + 6 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2180) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2181) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2182) { /* 50 Hz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2183) .clock = 5400,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2184) .hdisplay = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2185) .hsync_start = 320 + 56,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2186) .hsync_end = 320 + 56 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2187) .htotal = 320 + 56 + 16 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2188) .vdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2189) .vsync_start = 240 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2190) .vsync_end = 240 + 2 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2191) .vtotal = 240 + 2 + 6 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2192) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2193) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2194) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2196) static const struct panel_desc frida_frd350h54004 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2197) .modes = frida_frd350h54004_modes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2198) .num_modes = ARRAY_SIZE(frida_frd350h54004_modes),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2199) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2200) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2201) .width = 77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2202) .height = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2203) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2204) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2205) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2206) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2207) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2208)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2209) static const struct drm_display_mode friendlyarm_hd702e_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2210) .clock = 67185,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2211) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2212) .hsync_start = 800 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2213) .hsync_end = 800 + 20 + 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2214) .htotal = 800 + 20 + 24 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2215) .vdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2216) .vsync_start = 1280 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2217) .vsync_end = 1280 + 4 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2218) .vtotal = 1280 + 4 + 8 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2219) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2220) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2221)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2222) static const struct panel_desc friendlyarm_hd702e = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2223) .modes = &friendlyarm_hd702e_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2224) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2225) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2226) .width = 94,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2227) .height = 151,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2228) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2229) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2231) static const struct drm_display_mode giantplus_gpg482739qs5_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2232) .clock = 9000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2233) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2234) .hsync_start = 480 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2235) .hsync_end = 480 + 5 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2236) .htotal = 480 + 5 + 1 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2237) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2238) .vsync_start = 272 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2239) .vsync_end = 272 + 8 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2240) .vtotal = 272 + 8 + 1 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2241) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2243) static const struct panel_desc giantplus_gpg482739qs5 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2244) .modes = &giantplus_gpg482739qs5_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2245) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2246) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2247) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2248) .width = 95,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2249) .height = 54,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2250) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2251) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2252) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2253)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2254) static const struct display_timing giantplus_gpm940b0_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2255) .pixelclock = { 13500000, 27000000, 27500000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2256) .hactive = { 320, 320, 320 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2257) .hfront_porch = { 14, 686, 718 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2258) .hback_porch = { 50, 70, 255 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2259) .hsync_len = { 1, 1, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2260) .vactive = { 240, 240, 240 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2261) .vfront_porch = { 1, 1, 179 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2262) .vback_porch = { 1, 21, 31 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2263) .vsync_len = { 1, 1, 6 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2264) .flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2265) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2266)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2267) static const struct panel_desc giantplus_gpm940b0 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2268) .timings = &giantplus_gpm940b0_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2269) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2270) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2271) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2272) .width = 60,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2273) .height = 45,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2274) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2275) .bus_format = MEDIA_BUS_FMT_RGB888_3X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2276) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2277) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2278)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2279) static const struct display_timing hannstar_hsd070pww1_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2280) .pixelclock = { 64300000, 71100000, 82000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2281) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2282) .hfront_porch = { 1, 1, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2283) .hback_porch = { 1, 1, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2284) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2285) * According to the data sheet, the minimum horizontal blanking interval
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2286) * is 54 clocks (1 + 52 + 1), but tests with a Nitrogen6X have shown the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2287) * minimum working horizontal blanking interval to be 60 clocks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2288) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2289) .hsync_len = { 58, 158, 661 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2290) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2291) .vfront_porch = { 1, 1, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2292) .vback_porch = { 1, 1, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2293) .vsync_len = { 1, 21, 203 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2294) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2295) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2296)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2297) static const struct panel_desc hannstar_hsd070pww1 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2298) .timings = &hannstar_hsd070pww1_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2299) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2300) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2301) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2302) .width = 151,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2303) .height = 94,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2304) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2305) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2306) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2307) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2308)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2309) static const struct display_timing hannstar_hsd100pxn1_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2310) .pixelclock = { 55000000, 65000000, 75000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2311) .hactive = { 1024, 1024, 1024 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2312) .hfront_porch = { 40, 40, 40 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2313) .hback_porch = { 220, 220, 220 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2314) .hsync_len = { 20, 60, 100 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2315) .vactive = { 768, 768, 768 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2316) .vfront_porch = { 7, 7, 7 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2317) .vback_porch = { 21, 21, 21 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2318) .vsync_len = { 10, 10, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2319) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2320) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2321)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2322) static const struct panel_desc hannstar_hsd100pxn1 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2323) .timings = &hannstar_hsd100pxn1_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2324) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2325) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2326) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2327) .width = 203,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2328) .height = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2329) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2330) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2331) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2332) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2333)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2334) static const struct drm_display_mode hitachi_tx23d38vm0caa_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2335) .clock = 33333,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2336) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2337) .hsync_start = 800 + 85,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2338) .hsync_end = 800 + 85 + 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2339) .htotal = 800 + 85 + 86 + 85,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2340) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2341) .vsync_start = 480 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2342) .vsync_end = 480 + 16 + 13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2343) .vtotal = 480 + 16 + 13 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2344) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2346) static const struct panel_desc hitachi_tx23d38vm0caa = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2347) .modes = &hitachi_tx23d38vm0caa_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2348) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2349) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2350) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2351) .width = 195,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2352) .height = 117,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2353) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2354) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2355) .enable = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2356) .disable = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2357) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2358) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2359)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2360) static const struct drm_display_mode innolux_at043tn24_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2361) .clock = 9000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2362) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2363) .hsync_start = 480 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2364) .hsync_end = 480 + 2 + 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2365) .htotal = 480 + 2 + 41 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2366) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2367) .vsync_start = 272 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2368) .vsync_end = 272 + 2 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2369) .vtotal = 272 + 2 + 10 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2370) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2371) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2372)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2373) static const struct panel_desc innolux_at043tn24 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2374) .modes = &innolux_at043tn24_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2375) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2376) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2377) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2378) .width = 95,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2379) .height = 54,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2380) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2381) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2382) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2383) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2384)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2385) static const struct drm_display_mode innolux_at070tn92_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2386) .clock = 33333,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2387) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2388) .hsync_start = 800 + 210,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2389) .hsync_end = 800 + 210 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2390) .htotal = 800 + 210 + 20 + 46,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2391) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2392) .vsync_start = 480 + 22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2393) .vsync_end = 480 + 22 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2394) .vtotal = 480 + 22 + 23 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2395) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2396)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2397) static const struct panel_desc innolux_at070tn92 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2398) .modes = &innolux_at070tn92_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2399) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2400) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2401) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2402) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2403) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2404) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2405) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2406)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2407) static const struct display_timing innolux_g070y2_l01_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2408) .pixelclock = { 28000000, 29500000, 32000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2409) .hactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2410) .hfront_porch = { 61, 91, 141 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2411) .hback_porch = { 60, 90, 140 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2412) .hsync_len = { 12, 12, 12 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2413) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2414) .vfront_porch = { 4, 9, 30 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2415) .vback_porch = { 4, 8, 28 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2416) .vsync_len = { 2, 2, 2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2417) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2418) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2420) static const struct panel_desc innolux_g070y2_l01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2421) .timings = &innolux_g070y2_l01_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2422) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2423) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2424) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2425) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2426) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2427) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2428) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2429) .prepare = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2430) .enable = 100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2431) .disable = 100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2432) .unprepare = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2433) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2434) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2435) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2436) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2437)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2438) static const struct display_timing innolux_g101ice_l01_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2439) .pixelclock = { 60400000, 71100000, 74700000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2440) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2441) .hfront_porch = { 41, 80, 100 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2442) .hback_porch = { 40, 79, 99 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2443) .hsync_len = { 1, 1, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2444) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2445) .vfront_porch = { 5, 11, 14 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2446) .vback_porch = { 4, 11, 14 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2447) .vsync_len = { 1, 1, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2448) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2449) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2450)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2451) static const struct panel_desc innolux_g101ice_l01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2452) .timings = &innolux_g101ice_l01_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2453) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2454) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2455) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2456) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2457) .height = 135,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2458) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2459) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2460) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2461) .disable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2462) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2463) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2464) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2465) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2466)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2467) static const struct display_timing innolux_g121i1_l01_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2468) .pixelclock = { 67450000, 71000000, 74550000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2469) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2470) .hfront_porch = { 40, 80, 160 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2471) .hback_porch = { 39, 79, 159 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2472) .hsync_len = { 1, 1, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2473) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2474) .vfront_porch = { 5, 11, 100 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2475) .vback_porch = { 4, 11, 99 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2476) .vsync_len = { 1, 1, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2477) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2478)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2479) static const struct panel_desc innolux_g121i1_l01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2480) .timings = &innolux_g121i1_l01_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2481) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2482) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2483) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2484) .width = 261,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2485) .height = 163,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2486) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2487) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2488) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2489) .disable = 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2490) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2491) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2492) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2493) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2494)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2495) static const struct drm_display_mode innolux_g121x1_l03_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2496) .clock = 65000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2497) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2498) .hsync_start = 1024 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2499) .hsync_end = 1024 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2500) .htotal = 1024 + 0 + 1 + 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2501) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2502) .vsync_start = 768 + 38,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2503) .vsync_end = 768 + 38 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2504) .vtotal = 768 + 38 + 1 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2505) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2506) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2507)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2508) static const struct panel_desc innolux_g121x1_l03 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2509) .modes = &innolux_g121x1_l03_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2510) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2511) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2512) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2513) .width = 246,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2514) .height = 185,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2515) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2516) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2517) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2518) .unprepare = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2519) .disable = 400,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2520) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2521) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2522)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2523) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2524) * Datasheet specifies that at 60 Hz refresh rate:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2525) * - total horizontal time: { 1506, 1592, 1716 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2526) * - total vertical time: { 788, 800, 868 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2527) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2528) * ...but doesn't go into exactly how that should be split into a front
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2529) * porch, back porch, or sync length. For now we'll leave a single setting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2530) * here which allows a bit of tweaking of the pixel clock at the expense of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2531) * refresh rate.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2532) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2533) static const struct display_timing innolux_n116bge_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2534) .pixelclock = { 72600000, 76420000, 80240000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2535) .hactive = { 1366, 1366, 1366 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2536) .hfront_porch = { 136, 136, 136 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2537) .hback_porch = { 60, 60, 60 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2538) .hsync_len = { 30, 30, 30 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2539) .vactive = { 768, 768, 768 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2540) .vfront_porch = { 8, 8, 8 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2541) .vback_porch = { 12, 12, 12 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2542) .vsync_len = { 12, 12, 12 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2543) .flags = DISPLAY_FLAGS_VSYNC_LOW | DISPLAY_FLAGS_HSYNC_LOW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2544) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2545)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2546) static const struct panel_desc innolux_n116bge = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2547) .timings = &innolux_n116bge_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2548) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2549) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2550) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2551) .width = 256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2552) .height = 144,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2553) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2554) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2555)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2556) static const struct drm_display_mode innolux_n156bge_l21_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2557) .clock = 69300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2558) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2559) .hsync_start = 1366 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2560) .hsync_end = 1366 + 16 + 34,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2561) .htotal = 1366 + 16 + 34 + 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2562) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2563) .vsync_start = 768 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2564) .vsync_end = 768 + 2 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2565) .vtotal = 768 + 2 + 6 + 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2566) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2567)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2568) static const struct panel_desc innolux_n156bge_l21 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2569) .modes = &innolux_n156bge_l21_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2570) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2571) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2572) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2573) .width = 344,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2574) .height = 193,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2575) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2576) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2577) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2578) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2579) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2580)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2581) static const struct drm_display_mode innolux_p120zdg_bf1_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2582) .clock = 206016,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2583) .hdisplay = 2160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2584) .hsync_start = 2160 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2585) .hsync_end = 2160 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2586) .htotal = 2160 + 48 + 32 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2587) .vdisplay = 1440,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2588) .vsync_start = 1440 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2589) .vsync_end = 1440 + 3 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2590) .vtotal = 1440 + 3 + 10 + 27,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2591) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2592) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2593)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2594) static const struct panel_desc innolux_p120zdg_bf1 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2595) .modes = &innolux_p120zdg_bf1_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2596) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2597) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2598) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2599) .width = 254,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2600) .height = 169,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2601) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2602) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2603) .hpd_absent_delay = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2604) .unprepare = 500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2605) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2606) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2607)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2608) static const struct drm_display_mode innolux_zj070na_01p_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2609) .clock = 51501,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2610) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2611) .hsync_start = 1024 + 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2612) .hsync_end = 1024 + 128 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2613) .htotal = 1024 + 128 + 64 + 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2614) .vdisplay = 600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2615) .vsync_start = 600 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2616) .vsync_end = 600 + 16 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2617) .vtotal = 600 + 16 + 4 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2618) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2619)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2620) static const struct panel_desc innolux_zj070na_01p = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2621) .modes = &innolux_zj070na_01p_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2622) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2623) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2624) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2625) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2626) .height = 90,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2627) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2628) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2629)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2630) static const struct drm_display_mode ivo_m133nwf4_r0_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2631) .clock = 138778,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2632) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2633) .hsync_start = 1920 + 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2634) .hsync_end = 1920 + 24 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2635) .htotal = 1920 + 24 + 48 + 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2636) .vdisplay = 1080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2637) .vsync_start = 1080 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2638) .vsync_end = 1080 + 3 + 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2639) .vtotal = 1080 + 3 + 12 + 17,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2640) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2641) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2642)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2643) static const struct panel_desc ivo_m133nwf4_r0 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2644) .modes = &ivo_m133nwf4_r0_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2645) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2646) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2647) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2648) .width = 294,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2649) .height = 165,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2650) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2651) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2652) .hpd_absent_delay = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2653) .unprepare = 500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2654) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2655) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2656) .bus_flags = DRM_BUS_FLAG_DATA_MSB_TO_LSB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2657) .connector_type = DRM_MODE_CONNECTOR_eDP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2658) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2659)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2660) static const struct drm_display_mode kingdisplay_kd116n21_30nv_a010_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2661) .clock = 81000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2662) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2663) .hsync_start = 1366 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2664) .hsync_end = 1366 + 40 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2665) .htotal = 1366 + 40 + 32 + 62,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2666) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2667) .vsync_start = 768 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2668) .vsync_end = 768 + 5 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2669) .vtotal = 768 + 5 + 5 + 122,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2670) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2671) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2672)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2673) static const struct panel_desc kingdisplay_kd116n21_30nv_a010 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2674) .modes = &kingdisplay_kd116n21_30nv_a010_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2675) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2676) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2677) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2678) .width = 256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2679) .height = 144,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2680) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2681) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2682) .hpd_absent_delay = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2683) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2684) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2685) .connector_type = DRM_MODE_CONNECTOR_eDP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2686) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2687)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2688) static const struct display_timing koe_tx14d24vm1bpa_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2689) .pixelclock = { 5580000, 5850000, 6200000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2690) .hactive = { 320, 320, 320 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2691) .hfront_porch = { 30, 30, 30 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2692) .hback_porch = { 30, 30, 30 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2693) .hsync_len = { 1, 5, 17 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2694) .vactive = { 240, 240, 240 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2695) .vfront_porch = { 6, 6, 6 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2696) .vback_porch = { 5, 5, 5 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2697) .vsync_len = { 1, 2, 11 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2698) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2699) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2700)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2701) static const struct panel_desc koe_tx14d24vm1bpa = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2702) .timings = &koe_tx14d24vm1bpa_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2703) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2704) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2705) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2706) .width = 115,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2707) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2708) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2709) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2710)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2711) static const struct display_timing koe_tx26d202vm0bwa_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2712) .pixelclock = { 151820000, 156720000, 159780000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2713) .hactive = { 1920, 1920, 1920 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2714) .hfront_porch = { 105, 130, 142 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2715) .hback_porch = { 45, 70, 82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2716) .hsync_len = { 30, 30, 30 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2717) .vactive = { 1200, 1200, 1200},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2718) .vfront_porch = { 3, 5, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2719) .vback_porch = { 2, 5, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2720) .vsync_len = { 5, 5, 5 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2721) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2722)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2723) static const struct panel_desc koe_tx26d202vm0bwa = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2724) .timings = &koe_tx26d202vm0bwa_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2725) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2726) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2727) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2728) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2729) .height = 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2730) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2731) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2732) .prepare = 1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2733) .enable = 1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2734) .unprepare = 1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2735) .disable = 1000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2736) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2737) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2738) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2739) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2740) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2741)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2742) static const struct display_timing koe_tx31d200vm0baa_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2743) .pixelclock = { 39600000, 43200000, 48000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2744) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2745) .hfront_porch = { 16, 36, 56 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2746) .hback_porch = { 16, 36, 56 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2747) .hsync_len = { 8, 8, 8 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2748) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2749) .vfront_porch = { 6, 21, 33 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2750) .vback_porch = { 6, 21, 33 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2751) .vsync_len = { 8, 8, 8 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2752) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2753) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2754)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2755) static const struct panel_desc koe_tx31d200vm0baa = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2756) .timings = &koe_tx31d200vm0baa_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2757) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2758) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2759) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2760) .width = 292,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2761) .height = 109,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2762) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2763) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2764) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2765) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2766)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2767) static const struct display_timing kyo_tcg121xglp_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2768) .pixelclock = { 52000000, 65000000, 71000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2769) .hactive = { 1024, 1024, 1024 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2770) .hfront_porch = { 2, 2, 2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2771) .hback_porch = { 2, 2, 2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2772) .hsync_len = { 86, 124, 244 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2773) .vactive = { 768, 768, 768 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2774) .vfront_porch = { 2, 2, 2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2775) .vback_porch = { 2, 2, 2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2776) .vsync_len = { 6, 34, 73 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2777) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2778) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2779)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2780) static const struct panel_desc kyo_tcg121xglp = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2781) .timings = &kyo_tcg121xglp_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2782) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2783) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2784) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2785) .width = 246,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2786) .height = 184,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2787) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2788) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2789) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2790) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2791)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2792) static const struct drm_display_mode lemaker_bl035_rgb_002_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2793) .clock = 7000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2794) .hdisplay = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2795) .hsync_start = 320 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2796) .hsync_end = 320 + 20 + 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2797) .htotal = 320 + 20 + 30 + 38,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2798) .vdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2799) .vsync_start = 240 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2800) .vsync_end = 240 + 4 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2801) .vtotal = 240 + 4 + 3 + 15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2802) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2803)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2804) static const struct panel_desc lemaker_bl035_rgb_002 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2805) .modes = &lemaker_bl035_rgb_002_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2806) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2807) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2808) .width = 70,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2809) .height = 52,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2810) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2811) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2812) .bus_flags = DRM_BUS_FLAG_DE_LOW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2813) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2814)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2815) static const struct drm_display_mode lg_lb070wv8_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2816) .clock = 33246,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2817) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2818) .hsync_start = 800 + 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2819) .hsync_end = 800 + 88 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2820) .htotal = 800 + 88 + 80 + 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2821) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2822) .vsync_start = 480 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2823) .vsync_end = 480 + 10 + 25,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2824) .vtotal = 480 + 10 + 25 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2825) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2826)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2827) static const struct panel_desc lg_lb070wv8 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2828) .modes = &lg_lb070wv8_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2829) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2830) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2831) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2832) .width = 151,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2833) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2834) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2835) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2836) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2837) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2838)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2839) static const struct drm_display_mode lg_lp079qx1_sp0v_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2840) .clock = 200000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2841) .hdisplay = 1536,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2842) .hsync_start = 1536 + 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2843) .hsync_end = 1536 + 12 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2844) .htotal = 1536 + 12 + 16 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2845) .vdisplay = 2048,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2846) .vsync_start = 2048 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2847) .vsync_end = 2048 + 8 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2848) .vtotal = 2048 + 8 + 4 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2849) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2850) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2851)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2852) static const struct panel_desc lg_lp079qx1_sp0v = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2853) .modes = &lg_lp079qx1_sp0v_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2854) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2855) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2856) .width = 129,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2857) .height = 171,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2858) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2859) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2860)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2861) static const struct drm_display_mode lg_lp097qx1_spa1_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2862) .clock = 205210,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2863) .hdisplay = 2048,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2864) .hsync_start = 2048 + 150,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2865) .hsync_end = 2048 + 150 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2866) .htotal = 2048 + 150 + 5 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2867) .vdisplay = 1536,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2868) .vsync_start = 1536 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2869) .vsync_end = 1536 + 3 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2870) .vtotal = 1536 + 3 + 1 + 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2871) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2872)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2873) static const struct panel_desc lg_lp097qx1_spa1 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2874) .modes = &lg_lp097qx1_spa1_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2875) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2876) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2877) .width = 208,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2878) .height = 147,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2879) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2880) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2881)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2882) static const struct drm_display_mode lg_lp120up1_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2883) .clock = 162300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2884) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2885) .hsync_start = 1920 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2886) .hsync_end = 1920 + 40 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2887) .htotal = 1920 + 40 + 40+ 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2888) .vdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2889) .vsync_start = 1280 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2890) .vsync_end = 1280 + 4 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2891) .vtotal = 1280 + 4 + 4 + 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2892) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2893)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2894) static const struct panel_desc lg_lp120up1 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2895) .modes = &lg_lp120up1_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2896) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2897) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2898) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2899) .width = 267,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2900) .height = 183,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2901) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2902) .connector_type = DRM_MODE_CONNECTOR_eDP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2903) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2904)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2905) static const struct drm_display_mode lg_lp129qe_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2906) .clock = 285250,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2907) .hdisplay = 2560,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2908) .hsync_start = 2560 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2909) .hsync_end = 2560 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2910) .htotal = 2560 + 48 + 32 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2911) .vdisplay = 1700,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2912) .vsync_start = 1700 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2913) .vsync_end = 1700 + 3 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2914) .vtotal = 1700 + 3 + 10 + 36,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2915) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2916)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2917) static const struct panel_desc lg_lp129qe = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2918) .modes = &lg_lp129qe_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2919) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2920) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2921) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2922) .width = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2923) .height = 181,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2924) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2925) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2926)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2927) static const struct display_timing logictechno_lt161010_2nh_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2928) .pixelclock = { 26400000, 33300000, 46800000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2929) .hactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2930) .hfront_porch = { 16, 210, 354 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2931) .hback_porch = { 46, 46, 46 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2932) .hsync_len = { 1, 20, 40 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2933) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2934) .vfront_porch = { 7, 22, 147 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2935) .vback_porch = { 23, 23, 23 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2936) .vsync_len = { 1, 10, 20 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2937) .flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2938) DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2939) DISPLAY_FLAGS_SYNC_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2940) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2941)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2942) static const struct panel_desc logictechno_lt161010_2nh = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2943) .timings = &logictechno_lt161010_2nh_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2944) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2945) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2946) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2947) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2948) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2949) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2950) .bus_flags = DRM_BUS_FLAG_DE_HIGH |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2951) DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2952) DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2953) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2954) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2955)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2956) static const struct display_timing logictechno_lt170410_2whc_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2957) .pixelclock = { 68900000, 71100000, 73400000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2958) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2959) .hfront_porch = { 23, 60, 71 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2960) .hback_porch = { 23, 60, 71 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2961) .hsync_len = { 15, 40, 47 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2962) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2963) .vfront_porch = { 5, 7, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2964) .vback_porch = { 5, 7, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2965) .vsync_len = { 6, 9, 12 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2966) .flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2967) DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2968) DISPLAY_FLAGS_SYNC_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2969) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2970)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2971) static const struct panel_desc logictechno_lt170410_2whc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2972) .timings = &logictechno_lt170410_2whc_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2973) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2974) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2975) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2976) .height = 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2977) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2978) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2979) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2980) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2981) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2982)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2983) static const struct drm_display_mode mitsubishi_aa070mc01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2984) .clock = 30400,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2985) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2986) .hsync_start = 800 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2987) .hsync_end = 800 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2988) .htotal = 800 + 0 + 1 + 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2989) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2990) .vsync_start = 480 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2991) .vsync_end = 480 + 48 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2992) .vtotal = 480 + 48 + 1 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2993) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2994) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2995)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2996) static const struct drm_display_mode logicpd_type_28_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2997) .clock = 9107,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2998) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2999) .hsync_start = 480 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3000) .hsync_end = 480 + 3 + 42,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3001) .htotal = 480 + 3 + 42 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3002)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3003) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3004) .vsync_start = 272 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3005) .vsync_end = 272 + 2 + 11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3006) .vtotal = 272 + 2 + 11 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3007) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3008) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3009)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3010) static const struct panel_desc logicpd_type_28 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3011) .modes = &logicpd_type_28_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3012) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3013) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3014) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3015) .width = 105,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3016) .height = 67,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3017) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3018) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3019) .prepare = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3020) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3021) .unprepare = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3022) .disable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3023) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3024) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3025) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3026) DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3027) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3028) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3029)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3030) static const struct panel_desc mitsubishi_aa070mc01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3031) .modes = &mitsubishi_aa070mc01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3032) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3033) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3034) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3035) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3036) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3037) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3038)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3039) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3040) .enable = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3041) .unprepare = 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3042) .disable = 400,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3043) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3044) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3045) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3046) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3047) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3048)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3049) static const struct display_timing nec_nl12880bc20_05_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3050) .pixelclock = { 67000000, 71000000, 75000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3051) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3052) .hfront_porch = { 2, 30, 30 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3053) .hback_porch = { 6, 100, 100 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3054) .hsync_len = { 2, 30, 30 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3055) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3056) .vfront_porch = { 5, 5, 5 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3057) .vback_porch = { 11, 11, 11 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3058) .vsync_len = { 7, 7, 7 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3059) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3060)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3061) static const struct panel_desc nec_nl12880bc20_05 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3062) .timings = &nec_nl12880bc20_05_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3063) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3064) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3065) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3066) .width = 261,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3067) .height = 163,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3068) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3069) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3070) .enable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3071) .disable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3072) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3073) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3074) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3075) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3076)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3077) static const struct drm_display_mode nec_nl4827hc19_05b_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3078) .clock = 10870,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3079) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3080) .hsync_start = 480 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3081) .hsync_end = 480 + 2 + 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3082) .htotal = 480 + 2 + 41 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3083) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3084) .vsync_start = 272 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3085) .vsync_end = 272 + 2 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3086) .vtotal = 272 + 2 + 4 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3087) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3088) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3089)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3090) static const struct panel_desc nec_nl4827hc19_05b = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3091) .modes = &nec_nl4827hc19_05b_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3092) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3093) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3094) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3095) .width = 95,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3096) .height = 54,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3097) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3098) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3099) .bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3100) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3102) static const struct drm_display_mode netron_dy_e231732_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3103) .clock = 66000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3104) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3105) .hsync_start = 1024 + 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3106) .hsync_end = 1024 + 160 + 70,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3107) .htotal = 1024 + 160 + 70 + 90,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3108) .vdisplay = 600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3109) .vsync_start = 600 + 127,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3110) .vsync_end = 600 + 127 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3111) .vtotal = 600 + 127 + 20 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3112) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3113)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3114) static const struct panel_desc netron_dy_e231732 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3115) .modes = &netron_dy_e231732_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3116) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3117) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3118) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3119) .height = 87,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3120) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3121) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3122) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3124) static const struct drm_display_mode neweast_wjfh116008a_modes[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3125) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3126) .clock = 138500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3127) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3128) .hsync_start = 1920 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3129) .hsync_end = 1920 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3130) .htotal = 1920 + 48 + 32 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3131) .vdisplay = 1080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3132) .vsync_start = 1080 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3133) .vsync_end = 1080 + 3 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3134) .vtotal = 1080 + 3 + 5 + 23,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3135) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3136) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3137) .clock = 110920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3138) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3139) .hsync_start = 1920 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3140) .hsync_end = 1920 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3141) .htotal = 1920 + 48 + 32 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3142) .vdisplay = 1080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3143) .vsync_start = 1080 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3144) .vsync_end = 1080 + 3 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3145) .vtotal = 1080 + 3 + 5 + 23,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3146) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3147) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3148) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3150) static const struct panel_desc neweast_wjfh116008a = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3151) .modes = neweast_wjfh116008a_modes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3152) .num_modes = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3153) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3154) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3155) .width = 260,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3156) .height = 150,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3157) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3158) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3159) .prepare = 110,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3160) .enable = 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3161) .unprepare = 500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3162) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3163) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3164) .connector_type = DRM_MODE_CONNECTOR_eDP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3165) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3167) static const struct drm_display_mode newhaven_nhd_43_480272ef_atxl_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3168) .clock = 9000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3169) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3170) .hsync_start = 480 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3171) .hsync_end = 480 + 2 + 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3172) .htotal = 480 + 2 + 41 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3173) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3174) .vsync_start = 272 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3175) .vsync_end = 272 + 2 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3176) .vtotal = 272 + 2 + 10 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3177) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3178) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3180) static const struct panel_desc newhaven_nhd_43_480272ef_atxl = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3181) .modes = &newhaven_nhd_43_480272ef_atxl_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3182) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3183) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3184) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3185) .width = 95,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3186) .height = 54,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3187) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3188) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3189) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3190) DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3191) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3192) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3194) static const struct display_timing nlt_nl192108ac18_02d_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3195) .pixelclock = { 130000000, 148350000, 163000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3196) .hactive = { 1920, 1920, 1920 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3197) .hfront_porch = { 80, 100, 100 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3198) .hback_porch = { 100, 120, 120 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3199) .hsync_len = { 50, 60, 60 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3200) .vactive = { 1080, 1080, 1080 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3201) .vfront_porch = { 12, 30, 30 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3202) .vback_porch = { 4, 10, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3203) .vsync_len = { 4, 5, 5 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3204) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3206) static const struct panel_desc nlt_nl192108ac18_02d = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3207) .timings = &nlt_nl192108ac18_02d_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3208) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3209) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3210) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3211) .width = 344,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3212) .height = 194,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3213) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3214) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3215) .unprepare = 500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3216) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3217) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3218) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3219) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3221) static const struct drm_display_mode nvd_9128_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3222) .clock = 29500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3223) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3224) .hsync_start = 800 + 130,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3225) .hsync_end = 800 + 130 + 98,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3226) .htotal = 800 + 0 + 130 + 98,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3227) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3228) .vsync_start = 480 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3229) .vsync_end = 480 + 10 + 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3230) .vtotal = 480 + 0 + 10 + 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3231) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3233) static const struct panel_desc nvd_9128 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3234) .modes = &nvd_9128_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3235) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3236) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3237) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3238) .width = 156,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3239) .height = 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3240) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3241) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3242) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3243) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3245) static const struct display_timing okaya_rs800480t_7x0gp_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3246) .pixelclock = { 30000000, 30000000, 40000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3247) .hactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3248) .hfront_porch = { 40, 40, 40 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3249) .hback_porch = { 40, 40, 40 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3250) .hsync_len = { 1, 48, 48 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3251) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3252) .vfront_porch = { 13, 13, 13 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3253) .vback_porch = { 29, 29, 29 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3254) .vsync_len = { 3, 3, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3255) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3256) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3258) static const struct panel_desc okaya_rs800480t_7x0gp = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3259) .timings = &okaya_rs800480t_7x0gp_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3260) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3261) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3262) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3263) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3264) .height = 87,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3265) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3266) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3267) .prepare = 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3268) .enable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3269) .unprepare = 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3270) .disable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3271) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3272) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3273) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3275) static const struct drm_display_mode olimex_lcd_olinuxino_43ts_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3276) .clock = 9000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3277) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3278) .hsync_start = 480 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3279) .hsync_end = 480 + 5 + 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3280) .htotal = 480 + 5 + 30 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3281) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3282) .vsync_start = 272 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3283) .vsync_end = 272 + 8 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3284) .vtotal = 272 + 8 + 5 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3285) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3286)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3287) static const struct panel_desc olimex_lcd_olinuxino_43ts = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3288) .modes = &olimex_lcd_olinuxino_43ts_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3289) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3290) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3291) .width = 95,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3292) .height = 54,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3293) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3294) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3295) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3296)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3297) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3298) * 800x480 CVT. The panel appears to be quite accepting, at least as far as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3299) * pixel clocks, but this is the timing that was being used in the Adafruit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3300) * installation instructions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3301) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3302) static const struct drm_display_mode ontat_yx700wv03_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3303) .clock = 29500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3304) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3305) .hsync_start = 824,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3306) .hsync_end = 896,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3307) .htotal = 992,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3308) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3309) .vsync_start = 483,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3310) .vsync_end = 493,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3311) .vtotal = 500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3312) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3313) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3314)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3315) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3316) * Specification at:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3317) * https://www.adafruit.com/images/product-files/2406/c3163.pdf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3318) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3319) static const struct panel_desc ontat_yx700wv03 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3320) .modes = &ontat_yx700wv03_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3321) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3322) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3323) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3324) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3325) .height = 83,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3326) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3327) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3328) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3329)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3330) static const struct drm_display_mode ortustech_com37h3m_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3331) .clock = 22230,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3332) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3333) .hsync_start = 480 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3334) .hsync_end = 480 + 40 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3335) .htotal = 480 + 40 + 10 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3336) .vdisplay = 640,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3337) .vsync_start = 640 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3338) .vsync_end = 640 + 4 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3339) .vtotal = 640 + 4 + 2 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3340) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3341) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3342)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3343) static const struct panel_desc ortustech_com37h3m = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3344) .modes = &ortustech_com37h3m_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3345) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3346) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3347) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3348) .width = 56, /* 56.16mm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3349) .height = 75, /* 74.88mm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3350) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3351) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3352) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3353) DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3354) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3355)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3356) static const struct drm_display_mode ortustech_com43h4m85ulc_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3357) .clock = 25000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3358) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3359) .hsync_start = 480 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3360) .hsync_end = 480 + 10 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3361) .htotal = 480 + 10 + 10 + 15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3362) .vdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3363) .vsync_start = 800 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3364) .vsync_end = 800 + 3 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3365) .vtotal = 800 + 3 + 3 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3366) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3367)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3368) static const struct panel_desc ortustech_com43h4m85ulc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3369) .modes = &ortustech_com43h4m85ulc_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3370) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3371) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3372) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3373) .width = 56,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3374) .height = 93,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3375) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3376) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3377) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3378) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3379) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3380)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3381) static const struct drm_display_mode osddisplays_osd070t1718_19ts_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3382) .clock = 33000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3383) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3384) .hsync_start = 800 + 210,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3385) .hsync_end = 800 + 210 + 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3386) .htotal = 800 + 210 + 30 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3387) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3388) .vsync_start = 480 + 22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3389) .vsync_end = 480 + 22 + 13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3390) .vtotal = 480 + 22 + 13 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3391) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3392) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3393)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3394) static const struct panel_desc osddisplays_osd070t1718_19ts = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3395) .modes = &osddisplays_osd070t1718_19ts_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3396) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3397) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3398) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3399) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3400) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3401) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3402) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3403) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3404) DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3405) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3406) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3407)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3408) static const struct drm_display_mode pda_91_00156_a0_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3409) .clock = 33300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3410) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3411) .hsync_start = 800 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3412) .hsync_end = 800 + 1 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3413) .htotal = 800 + 1 + 64 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3414) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3415) .vsync_start = 480 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3416) .vsync_end = 480 + 1 + 23,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3417) .vtotal = 480 + 1 + 23 + 22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3418) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3420) static const struct panel_desc pda_91_00156_a0 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3421) .modes = &pda_91_00156_a0_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3422) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3423) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3424) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3425) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3426) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3427) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3428) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3429)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3430) static const struct drm_display_mode powertip_ph800480t013_idf02_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3431) .clock = 24750,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3432) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3433) .hsync_start = 800 + 54,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3434) .hsync_end = 800 + 54 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3435) .htotal = 800 + 54 + 2 + 44,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3436) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3437) .vsync_start = 480 + 49,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3438) .vsync_end = 480 + 49 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3439) .vtotal = 480 + 49 + 2 + 22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3440) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3441)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3442) static const struct panel_desc powertip_ph800480t013_idf02 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3443) .modes = &powertip_ph800480t013_idf02_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3444) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3445) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3446) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3447) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3448) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3449) .bus_flags = DRM_BUS_FLAG_DE_HIGH |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3450) DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3451) DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3452) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3453) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3454) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3455)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3456) static const struct drm_display_mode qd43003c0_40_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3457) .clock = 9000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3458) .hdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3459) .hsync_start = 480 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3460) .hsync_end = 480 + 8 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3461) .htotal = 480 + 8 + 4 + 39,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3462) .vdisplay = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3463) .vsync_start = 272 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3464) .vsync_end = 272 + 4 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3465) .vtotal = 272 + 4 + 10 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3466) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3467)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3468) static const struct panel_desc qd43003c0_40 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3469) .modes = &qd43003c0_40_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3470) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3471) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3472) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3473) .width = 95,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3474) .height = 53,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3475) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3476) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3477) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3478)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3479) static const struct display_timing rocktech_rk070er9427_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3480) .pixelclock = { 26400000, 33300000, 46800000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3481) .hactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3482) .hfront_porch = { 16, 210, 354 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3483) .hback_porch = { 46, 46, 46 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3484) .hsync_len = { 1, 1, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3485) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3486) .vfront_porch = { 7, 22, 147 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3487) .vback_porch = { 23, 23, 23 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3488) .vsync_len = { 1, 1, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3489) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3490) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3491)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3492) static const struct panel_desc rocktech_rk070er9427 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3493) .timings = &rocktech_rk070er9427_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3494) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3495) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3496) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3497) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3498) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3499) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3500) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3501) .prepare = 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3502) .enable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3503) .unprepare = 41,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3504) .disable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3505) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3506) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3507) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3508)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3509) static const struct drm_display_mode rocktech_rk101ii01d_ct_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3510) .clock = 71100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3511) .hdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3512) .hsync_start = 1280 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3513) .hsync_end = 1280 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3514) .htotal = 1280 + 48 + 32 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3515) .vdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3516) .vsync_start = 800 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3517) .vsync_end = 800 + 2 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3518) .vtotal = 800 + 2 + 5 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3519) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3520)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3521) static const struct panel_desc rocktech_rk101ii01d_ct = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3522) .modes = &rocktech_rk101ii01d_ct_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3523) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3524) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3525) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3526) .height = 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3527) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3528) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3529) .prepare = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3530) .disable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3531) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3532) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3533) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3534) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3535) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3536)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3537) static const struct drm_display_mode samsung_lsn122dl01_c01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3538) .clock = 271560,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3539) .hdisplay = 2560,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3540) .hsync_start = 2560 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3541) .hsync_end = 2560 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3542) .htotal = 2560 + 48 + 32 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3543) .vdisplay = 1600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3544) .vsync_start = 1600 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3545) .vsync_end = 1600 + 2 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3546) .vtotal = 1600 + 2 + 5 + 57,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3547) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3548)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3549) static const struct panel_desc samsung_lsn122dl01_c01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3550) .modes = &samsung_lsn122dl01_c01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3551) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3552) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3553) .width = 263,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3554) .height = 164,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3555) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3556) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3557)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3558) static const struct drm_display_mode samsung_ltn101nt05_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3559) .clock = 54030,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3560) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3561) .hsync_start = 1024 + 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3562) .hsync_end = 1024 + 24 + 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3563) .htotal = 1024 + 24 + 136 + 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3564) .vdisplay = 600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3565) .vsync_start = 600 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3566) .vsync_end = 600 + 3 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3567) .vtotal = 600 + 3 + 6 + 61,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3568) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3569)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3570) static const struct panel_desc samsung_ltn101nt05 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3571) .modes = &samsung_ltn101nt05_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3572) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3573) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3574) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3575) .width = 223,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3576) .height = 125,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3577) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3578) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3579) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3580) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3581) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3582)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3583) static const struct drm_display_mode samsung_ltn140at29_301_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3584) .clock = 76300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3585) .hdisplay = 1366,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3586) .hsync_start = 1366 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3587) .hsync_end = 1366 + 64 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3588) .htotal = 1366 + 64 + 48 + 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3589) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3590) .vsync_start = 768 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3591) .vsync_end = 768 + 2 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3592) .vtotal = 768 + 2 + 5 + 17,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3593) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3594)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3595) static const struct panel_desc samsung_ltn140at29_301 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3596) .modes = &samsung_ltn140at29_301_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3597) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3598) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3599) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3600) .width = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3601) .height = 187,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3602) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3603) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3604)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3605) static const struct display_timing satoz_sat050at40h12r2_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3606) .pixelclock = {33300000, 33300000, 50000000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3607) .hactive = {800, 800, 800},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3608) .hfront_porch = {16, 210, 354},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3609) .hback_porch = {46, 46, 46},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3610) .hsync_len = {1, 1, 40},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3611) .vactive = {480, 480, 480},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3612) .vfront_porch = {7, 22, 147},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3613) .vback_porch = {23, 23, 23},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3614) .vsync_len = {1, 1, 20},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3615) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3616)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3617) static const struct panel_desc satoz_sat050at40h12r2 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3618) .timings = &satoz_sat050at40h12r2_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3619) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3620) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3621) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3622) .width = 108,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3623) .height = 65,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3624) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3625) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3626) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3627) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3628)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3629) static const struct drm_display_mode sharp_ld_d5116z01b_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3630) .clock = 168480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3631) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3632) .hsync_start = 1920 + 48,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3633) .hsync_end = 1920 + 48 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3634) .htotal = 1920 + 48 + 32 + 80,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3635) .vdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3636) .vsync_start = 1280 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3637) .vsync_end = 1280 + 3 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3638) .vtotal = 1280 + 3 + 10 + 57,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3639) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3640) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3641)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3642) static const struct panel_desc sharp_ld_d5116z01b = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3643) .modes = &sharp_ld_d5116z01b_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3644) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3645) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3646) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3647) .width = 260,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3648) .height = 120,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3649) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3650) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3651) .bus_flags = DRM_BUS_FLAG_DATA_MSB_TO_LSB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3652) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3653)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3654) static const struct drm_display_mode sharp_lq070y3dg3b_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3655) .clock = 33260,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3656) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3657) .hsync_start = 800 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3658) .hsync_end = 800 + 64 + 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3659) .htotal = 800 + 64 + 128 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3660) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3661) .vsync_start = 480 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3662) .vsync_end = 480 + 8 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3663) .vtotal = 480 + 8 + 2 + 35,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3664) .flags = DISPLAY_FLAGS_PIXDATA_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3665) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3666)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3667) static const struct panel_desc sharp_lq070y3dg3b = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3668) .modes = &sharp_lq070y3dg3b_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3669) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3670) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3671) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3672) .width = 152, /* 152.4mm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3673) .height = 91, /* 91.4mm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3674) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3675) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3676) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3677) DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3678) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3679)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3680) static const struct drm_display_mode sharp_lq035q7db03_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3681) .clock = 5500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3682) .hdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3683) .hsync_start = 240 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3684) .hsync_end = 240 + 16 + 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3685) .htotal = 240 + 16 + 7 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3686) .vdisplay = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3687) .vsync_start = 320 + 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3688) .vsync_end = 320 + 9 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3689) .vtotal = 320 + 9 + 1 + 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3690) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3691)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3692) static const struct panel_desc sharp_lq035q7db03 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3693) .modes = &sharp_lq035q7db03_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3694) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3695) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3696) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3697) .width = 54,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3698) .height = 72,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3699) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3700) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3701) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3702)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3703) static const struct display_timing sharp_lq101k1ly04_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3704) .pixelclock = { 60000000, 65000000, 80000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3705) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3706) .hfront_porch = { 20, 20, 20 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3707) .hback_porch = { 20, 20, 20 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3708) .hsync_len = { 10, 10, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3709) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3710) .vfront_porch = { 4, 4, 4 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3711) .vback_porch = { 4, 4, 4 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3712) .vsync_len = { 4, 4, 4 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3713) .flags = DISPLAY_FLAGS_PIXDATA_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3714) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3715)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3716) static const struct panel_desc sharp_lq101k1ly04 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3717) .timings = &sharp_lq101k1ly04_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3718) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3719) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3720) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3721) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3722) .height = 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3723) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3724) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3725) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3726) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3727)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3728) static const struct display_timing sharp_lq123p1jx31_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3729) .pixelclock = { 252750000, 252750000, 266604720 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3730) .hactive = { 2400, 2400, 2400 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3731) .hfront_porch = { 48, 48, 48 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3732) .hback_porch = { 80, 80, 84 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3733) .hsync_len = { 32, 32, 32 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3734) .vactive = { 1600, 1600, 1600 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3735) .vfront_porch = { 3, 3, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3736) .vback_porch = { 33, 33, 120 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3737) .vsync_len = { 10, 10, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3738) .flags = DISPLAY_FLAGS_VSYNC_LOW | DISPLAY_FLAGS_HSYNC_LOW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3739) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3740)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3741) static const struct panel_desc sharp_lq123p1jx31 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3742) .timings = &sharp_lq123p1jx31_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3743) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3744) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3745) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3746) .width = 259,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3747) .height = 173,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3748) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3749) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3750) .prepare = 110,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3751) .enable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3752) .unprepare = 550,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3753) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3754) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3755)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3756) static const struct drm_display_mode sharp_ls020b1dd01d_modes[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3757) { /* 50 Hz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3758) .clock = 3000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3759) .hdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3760) .hsync_start = 240 + 58,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3761) .hsync_end = 240 + 58 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3762) .htotal = 240 + 58 + 1 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3763) .vdisplay = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3764) .vsync_start = 160 + 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3765) .vsync_end = 160 + 24 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3766) .vtotal = 160 + 24 + 10 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3767) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3768) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3769) { /* 60 Hz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3770) .clock = 3000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3771) .hdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3772) .hsync_start = 240 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3773) .hsync_end = 240 + 8 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3774) .htotal = 240 + 8 + 1 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3775) .vdisplay = 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3776) .vsync_start = 160 + 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3777) .vsync_end = 160 + 24 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3778) .vtotal = 160 + 24 + 10 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3779) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3780) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3781) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3782)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3783) static const struct panel_desc sharp_ls020b1dd01d = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3784) .modes = sharp_ls020b1dd01d_modes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3785) .num_modes = ARRAY_SIZE(sharp_ls020b1dd01d_modes),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3786) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3787) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3788) .width = 42,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3789) .height = 28,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3790) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3791) .bus_format = MEDIA_BUS_FMT_RGB565_1X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3792) .bus_flags = DRM_BUS_FLAG_DE_HIGH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3793) | DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3794) | DRM_BUS_FLAG_SHARP_SIGNALS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3795) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3796)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3797) static const struct drm_display_mode shelly_sca07010_bfn_lnn_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3798) .clock = 33300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3799) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3800) .hsync_start = 800 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3801) .hsync_end = 800 + 1 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3802) .htotal = 800 + 1 + 64 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3803) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3804) .vsync_start = 480 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3805) .vsync_end = 480 + 1 + 23,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3806) .vtotal = 480 + 1 + 23 + 22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3807) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3808)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3809) static const struct panel_desc shelly_sca07010_bfn_lnn = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3810) .modes = &shelly_sca07010_bfn_lnn_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3811) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3812) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3813) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3814) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3815) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3816) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3817) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3818)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3819) static const struct drm_display_mode starry_kr070pe2t_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3820) .clock = 33000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3821) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3822) .hsync_start = 800 + 209,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3823) .hsync_end = 800 + 209 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3824) .htotal = 800 + 209 + 1 + 45,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3825) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3826) .vsync_start = 480 + 22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3827) .vsync_end = 480 + 22 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3828) .vtotal = 480 + 22 + 1 + 22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3829) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3830)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3831) static const struct panel_desc starry_kr070pe2t = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3832) .modes = &starry_kr070pe2t_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3833) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3834) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3835) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3836) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3837) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3838) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3839) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3840) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3841) .connector_type = DRM_MODE_CONNECTOR_DPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3842) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3843)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3844) static const struct drm_display_mode starry_kr122ea0sra_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3845) .clock = 147000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3846) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3847) .hsync_start = 1920 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3848) .hsync_end = 1920 + 16 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3849) .htotal = 1920 + 16 + 16 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3850) .vdisplay = 1200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3851) .vsync_start = 1200 + 15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3852) .vsync_end = 1200 + 15 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3853) .vtotal = 1200 + 15 + 2 + 18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3854) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3855) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3856)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3857) static const struct panel_desc starry_kr122ea0sra = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3858) .modes = &starry_kr122ea0sra_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3859) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3860) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3861) .width = 263,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3862) .height = 164,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3863) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3864) .delay = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3865) .prepare = 10 + 200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3866) .enable = 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3867) .unprepare = 10 + 500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3868) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3869) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3870)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3871) static const struct drm_display_mode tfc_s9700rtwv43tr_01b_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3872) .clock = 30000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3873) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3874) .hsync_start = 800 + 39,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3875) .hsync_end = 800 + 39 + 47,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3876) .htotal = 800 + 39 + 47 + 39,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3877) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3878) .vsync_start = 480 + 13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3879) .vsync_end = 480 + 13 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3880) .vtotal = 480 + 13 + 2 + 29,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3881) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3882)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3883) static const struct panel_desc tfc_s9700rtwv43tr_01b = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3884) .modes = &tfc_s9700rtwv43tr_01b_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3885) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3886) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3887) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3888) .width = 155,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3889) .height = 90,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3890) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3891) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3892) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3893) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3894)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3895) static const struct display_timing tianma_tm070jdhg30_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3896) .pixelclock = { 62600000, 68200000, 78100000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3897) .hactive = { 1280, 1280, 1280 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3898) .hfront_porch = { 15, 64, 159 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3899) .hback_porch = { 5, 5, 5 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3900) .hsync_len = { 1, 1, 256 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3901) .vactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3902) .vfront_porch = { 3, 40, 99 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3903) .vback_porch = { 2, 2, 2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3904) .vsync_len = { 1, 1, 128 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3905) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3906) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3907)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3908) static const struct panel_desc tianma_tm070jdhg30 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3909) .timings = &tianma_tm070jdhg30_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3910) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3911) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3912) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3913) .width = 151,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3914) .height = 95,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3915) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3916) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3917) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3918) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3919)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3920) static const struct panel_desc tianma_tm070jvhg33 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3921) .timings = &tianma_tm070jdhg30_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3922) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3923) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3924) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3925) .width = 150,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3926) .height = 94,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3927) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3928) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3929) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3930) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3931)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3932) static const struct display_timing tianma_tm070rvhg71_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3933) .pixelclock = { 27700000, 29200000, 39600000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3934) .hactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3935) .hfront_porch = { 12, 40, 212 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3936) .hback_porch = { 88, 88, 88 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3937) .hsync_len = { 1, 1, 40 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3938) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3939) .vfront_porch = { 1, 13, 88 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3940) .vback_porch = { 32, 32, 32 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3941) .vsync_len = { 1, 1, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3942) .flags = DISPLAY_FLAGS_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3943) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3944)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3945) static const struct panel_desc tianma_tm070rvhg71 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3946) .timings = &tianma_tm070rvhg71_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3947) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3948) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3949) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3950) .width = 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3951) .height = 86,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3952) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3953) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3954) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3955) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3956)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3957) static const struct drm_display_mode ti_nspire_cx_lcd_mode[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3958) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3959) .clock = 10000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3960) .hdisplay = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3961) .hsync_start = 320 + 50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3962) .hsync_end = 320 + 50 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3963) .htotal = 320 + 50 + 6 + 38,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3964) .vdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3965) .vsync_start = 240 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3966) .vsync_end = 240 + 3 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3967) .vtotal = 240 + 3 + 1 + 17,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3968) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3969) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3970) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3971)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3972) static const struct panel_desc ti_nspire_cx_lcd_panel = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3973) .modes = ti_nspire_cx_lcd_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3974) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3975) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3976) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3977) .width = 65,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3978) .height = 49,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3979) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3980) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3981) .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3982) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3983)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3984) static const struct drm_display_mode ti_nspire_classic_lcd_mode[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3985) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3986) .clock = 10000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3987) .hdisplay = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3988) .hsync_start = 320 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3989) .hsync_end = 320 + 6 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3990) .htotal = 320 + 6 + 6 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3991) .vdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3992) .vsync_start = 240 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3993) .vsync_end = 240 + 0 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3994) .vtotal = 240 + 0 + 1 + 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3995) .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3996) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3997) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3998)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3999) static const struct panel_desc ti_nspire_classic_lcd_panel = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4000) .modes = ti_nspire_classic_lcd_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4001) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4002) /* The grayscale panel has 8 bit for the color .. Y (black) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4003) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4004) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4005) .width = 71,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4006) .height = 53,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4007) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4008) /* This is the grayscale bus format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4009) .bus_format = MEDIA_BUS_FMT_Y8_1X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4010) .bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4011) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4012)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4013) static const struct drm_display_mode toshiba_lt089ac29000_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4014) .clock = 79500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4015) .hdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4016) .hsync_start = 1280 + 192,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4017) .hsync_end = 1280 + 192 + 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4018) .htotal = 1280 + 192 + 128 + 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4019) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4020) .vsync_start = 768 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4021) .vsync_end = 768 + 20 + 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4022) .vtotal = 768 + 20 + 7 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4023) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4024)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4025) static const struct panel_desc toshiba_lt089ac29000 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4026) .modes = &toshiba_lt089ac29000_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4027) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4028) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4029) .width = 194,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4030) .height = 116,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4031) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4032) .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4033) .bus_flags = DRM_BUS_FLAG_DE_HIGH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4034) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4035) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4036)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4037) static const struct drm_display_mode tpk_f07a_0102_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4038) .clock = 33260,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4039) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4040) .hsync_start = 800 + 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4041) .hsync_end = 800 + 40 + 128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4042) .htotal = 800 + 40 + 128 + 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4043) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4044) .vsync_start = 480 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4045) .vsync_end = 480 + 10 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4046) .vtotal = 480 + 10 + 2 + 33,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4047) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4048)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4049) static const struct panel_desc tpk_f07a_0102 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4050) .modes = &tpk_f07a_0102_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4051) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4052) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4053) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4054) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4055) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4056) .bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4057) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4058)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4059) static const struct drm_display_mode tpk_f10a_0102_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4060) .clock = 45000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4061) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4062) .hsync_start = 1024 + 176,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4063) .hsync_end = 1024 + 176 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4064) .htotal = 1024 + 176 + 5 + 88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4065) .vdisplay = 600,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4066) .vsync_start = 600 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4067) .vsync_end = 600 + 20 + 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4068) .vtotal = 600 + 20 + 5 + 25,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4069) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4070)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4071) static const struct panel_desc tpk_f10a_0102 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4072) .modes = &tpk_f10a_0102_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4073) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4074) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4075) .width = 223,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4076) .height = 125,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4077) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4078) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4079)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4080) static const struct display_timing urt_umsh_8596md_timing = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4081) .pixelclock = { 33260000, 33260000, 33260000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4082) .hactive = { 800, 800, 800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4083) .hfront_porch = { 41, 41, 41 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4084) .hback_porch = { 216 - 128, 216 - 128, 216 - 128 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4085) .hsync_len = { 71, 128, 128 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4086) .vactive = { 480, 480, 480 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4087) .vfront_porch = { 10, 10, 10 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4088) .vback_porch = { 35 - 2, 35 - 2, 35 - 2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4089) .vsync_len = { 2, 2, 2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4090) .flags = DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_NEGEDGE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4091) DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4092) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4093)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4094) static const struct panel_desc urt_umsh_8596md_lvds = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4095) .timings = &urt_umsh_8596md_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4096) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4097) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4098) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4099) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4100) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4101) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4102) .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4103) .connector_type = DRM_MODE_CONNECTOR_LVDS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4104) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4105)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4106) static const struct panel_desc urt_umsh_8596md_parallel = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4107) .timings = &urt_umsh_8596md_timing,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4108) .num_timings = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4109) .bpc = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4110) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4111) .width = 152,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4112) .height = 91,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4113) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4114) .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4115) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4117) static const struct drm_display_mode vl050_8048nt_c01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4118) .clock = 33333,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4119) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4120) .hsync_start = 800 + 210,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4121) .hsync_end = 800 + 210 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4122) .htotal = 800 + 210 + 20 + 46,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4123) .vdisplay = 480,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4124) .vsync_start = 480 + 22,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4125) .vsync_end = 480 + 22 + 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4126) .vtotal = 480 + 22 + 10 + 23,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4127) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4128) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4130) static const struct panel_desc vl050_8048nt_c01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4131) .modes = &vl050_8048nt_c01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4132) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4133) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4134) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4135) .width = 120,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4136) .height = 76,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4137) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4138) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4139) .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4140) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4142) static const struct drm_display_mode winstar_wf35ltiacd_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4143) .clock = 6410,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4144) .hdisplay = 320,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4145) .hsync_start = 320 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4146) .hsync_end = 320 + 20 + 30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4147) .htotal = 320 + 20 + 30 + 38,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4148) .vdisplay = 240,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4149) .vsync_start = 240 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4150) .vsync_end = 240 + 4 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4151) .vtotal = 240 + 4 + 3 + 15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4152) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4153) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4155) static const struct panel_desc winstar_wf35ltiacd = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4156) .modes = &winstar_wf35ltiacd_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4157) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4158) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4159) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4160) .width = 70,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4161) .height = 53,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4162) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4163) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4164) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4166) static const struct drm_display_mode arm_rtsm_mode[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4167) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4168) .clock = 65000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4169) .hdisplay = 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4170) .hsync_start = 1024 + 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4171) .hsync_end = 1024 + 24 + 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4172) .htotal = 1024 + 24 + 136 + 160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4173) .vdisplay = 768,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4174) .vsync_start = 768 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4175) .vsync_end = 768 + 3 + 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4176) .vtotal = 768 + 3 + 6 + 29,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4177) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4178) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4179) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4181) static const struct panel_desc arm_rtsm = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4182) .modes = arm_rtsm_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4183) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4184) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4185) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4186) .width = 400,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4187) .height = 300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4188) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4189) .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4190) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4192) static const struct of_device_id platform_of_match[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4193) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4194) .compatible = "simple-panel",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4195) .data = NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4196) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4197) .compatible = "ampire,am-1280800n3tzqw-t00h",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4198) .data = &ire_am_1280800n3tzqw_t00h,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4199) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4200) .compatible = "ampire,am-480272h3tmqw-t01h",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4201) .data = &ire_am_480272h3tmqw_t01h,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4202) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4203) .compatible = "ampire,am800480r3tmqwa1h",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4204) .data = &ire_am800480r3tmqwa1h,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4205) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4206) .compatible = "arm,rtsm-display",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4207) .data = &arm_rtsm,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4208) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4209) .compatible = "armadeus,st0700-adapt",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4210) .data = &armadeus_st0700_adapt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4211) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4212) .compatible = "auo,b101aw03",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4213) .data = &auo_b101aw03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4214) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4215) .compatible = "auo,b101ean01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4216) .data = &auo_b101ean01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4217) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4218) .compatible = "auo,b101xtn01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4219) .data = &auo_b101xtn01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4220) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4221) .compatible = "auo,b116xa01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4222) .data = &auo_b116xak01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4223) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4224) .compatible = "auo,b116xw03",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4225) .data = &auo_b116xw03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4226) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4227) .compatible = "auo,b133htn01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4228) .data = &auo_b133htn01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4229) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4230) .compatible = "auo,b133xtn01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4231) .data = &auo_b133xtn01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4232) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4233) .compatible = "auo,g070vvn01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4234) .data = &auo_g070vvn01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4235) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4236) .compatible = "auo,g101evn010",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4237) .data = &auo_g101evn010,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4238) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4239) .compatible = "auo,g104sn02",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4240) .data = &auo_g104sn02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4241) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4242) .compatible = "auo,g121ean01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4243) .data = &auo_g121ean01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4244) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4245) .compatible = "auo,g133han01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4246) .data = &auo_g133han01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4247) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4248) .compatible = "auo,g156xtn01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4249) .data = &auo_g156xtn01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4250) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4251) .compatible = "auo,g185han01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4252) .data = &auo_g185han01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4253) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4254) .compatible = "auo,g190ean01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4255) .data = &auo_g190ean01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4256) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4257) .compatible = "auo,p320hvn03",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4258) .data = &auo_p320hvn03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4259) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4260) .compatible = "auo,t215hvn01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4261) .data = &auo_t215hvn01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4262) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4263) .compatible = "avic,tm070ddh03",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4264) .data = &avic_tm070ddh03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4265) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4266) .compatible = "bananapi,s070wv20-ct16",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4267) .data = &bananapi_s070wv20_ct16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4268) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4269) .compatible = "boe,hv070wsa-100",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4270) .data = &boe_hv070wsa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4271) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4272) .compatible = "boe,nv101wxmn51",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4273) .data = &boe_nv101wxmn51,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4274) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4275) .compatible = "boe,nv133fhm-n61",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4276) .data = &boe_nv133fhm_n61,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4277) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4278) .compatible = "boe,nv133fhm-n62",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4279) .data = &boe_nv133fhm_n61,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4280) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4281) .compatible = "boe,nv140fhmn49",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4282) .data = &boe_nv140fhmn49,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4283) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4284) .compatible = "cdtech,s043wq26h-ct7",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4285) .data = &cdtech_s043wq26h_ct7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4286) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4287) .compatible = "cdtech,s070pws19hp-fc21",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4288) .data = &cdtech_s070pws19hp_fc21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4289) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4290) .compatible = "cdtech,s070swv29hg-dc44",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4291) .data = &cdtech_s070swv29hg_dc44,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4292) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4293) .compatible = "cdtech,s070wv95-ct16",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4294) .data = &cdtech_s070wv95_ct16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4295) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4296) .compatible = "chefree,ch101olhlwh-002",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4297) .data = &chefree_ch101olhlwh_002,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4298) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4299) .compatible = "chunghwa,claa070wp03xg",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4300) .data = &chunghwa_claa070wp03xg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4301) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4302) .compatible = "chunghwa,claa101wa01a",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4303) .data = &chunghwa_claa101wa01a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4304) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4305) .compatible = "chunghwa,claa101wb01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4306) .data = &chunghwa_claa101wb01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4307) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4308) .compatible = "dataimage,scf0700c48ggu18",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4309) .data = &dataimage_scf0700c48ggu18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4310) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4311) .compatible = "dlc,dlc0700yzg-1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4312) .data = &dlc_dlc0700yzg_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4313) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4314) .compatible = "dlc,dlc1010gig",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4315) .data = &dlc_dlc1010gig,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4316) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4317) .compatible = "edt,et035012dm6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4318) .data = &edt_et035012dm6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4319) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4320) .compatible = "edt,etm043080dh6gp",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4321) .data = &edt_etm043080dh6gp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4322) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4323) .compatible = "edt,etm0430g0dh6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4324) .data = &edt_etm0430g0dh6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4325) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4326) .compatible = "edt,et057090dhu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4327) .data = &edt_et057090dhu,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4328) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4329) .compatible = "edt,et070080dh6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4330) .data = &edt_etm0700g0dh6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4331) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4332) .compatible = "edt,etm0700g0dh6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4333) .data = &edt_etm0700g0dh6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4334) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4335) .compatible = "edt,etm0700g0bdh6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4336) .data = &edt_etm0700g0bdh6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4337) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4338) .compatible = "edt,etm0700g0edh6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4339) .data = &edt_etm0700g0bdh6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4340) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4341) .compatible = "evervision,vgg804821",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4342) .data = &evervision_vgg804821,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4343) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4344) .compatible = "foxlink,fl500wvr00-a0t",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4345) .data = &foxlink_fl500wvr00_a0t,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4346) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4347) .compatible = "frida,frd350h54004",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4348) .data = &frida_frd350h54004,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4349) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4350) .compatible = "friendlyarm,hd702e",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4351) .data = &friendlyarm_hd702e,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4352) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4353) .compatible = "giantplus,gpg482739qs5",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4354) .data = &giantplus_gpg482739qs5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4355) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4356) .compatible = "giantplus,gpm940b0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4357) .data = &giantplus_gpm940b0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4358) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4359) .compatible = "hannstar,hsd070pww1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4360) .data = &hannstar_hsd070pww1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4361) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4362) .compatible = "hannstar,hsd100pxn1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4363) .data = &hannstar_hsd100pxn1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4364) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4365) .compatible = "hit,tx23d38vm0caa",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4366) .data = &hitachi_tx23d38vm0caa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4367) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4368) .compatible = "innolux,at043tn24",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4369) .data = &innolux_at043tn24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4370) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4371) .compatible = "innolux,at070tn92",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4372) .data = &innolux_at070tn92,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4373) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4374) .compatible = "innolux,g070y2-l01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4375) .data = &innolux_g070y2_l01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4376) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4377) .compatible = "innolux,g101ice-l01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4378) .data = &innolux_g101ice_l01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4379) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4380) .compatible = "innolux,g121i1-l01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4381) .data = &innolux_g121i1_l01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4382) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4383) .compatible = "innolux,g121x1-l03",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4384) .data = &innolux_g121x1_l03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4385) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4386) .compatible = "innolux,n116bge",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4387) .data = &innolux_n116bge,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4388) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4389) .compatible = "innolux,n156bge-l21",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4390) .data = &innolux_n156bge_l21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4391) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4392) .compatible = "innolux,p120zdg-bf1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4393) .data = &innolux_p120zdg_bf1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4394) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4395) .compatible = "innolux,zj070na-01p",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4396) .data = &innolux_zj070na_01p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4397) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4398) .compatible = "ivo,m133nwf4-r0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4399) .data = &ivo_m133nwf4_r0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4400) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4401) .compatible = "kingdisplay,kd116n21-30nv-a010",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4402) .data = &kingdisplay_kd116n21_30nv_a010,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4403) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4404) .compatible = "koe,tx14d24vm1bpa",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4405) .data = &koe_tx14d24vm1bpa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4406) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4407) .compatible = "koe,tx26d202vm0bwa",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4408) .data = &koe_tx26d202vm0bwa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4409) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4410) .compatible = "koe,tx31d200vm0baa",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4411) .data = &koe_tx31d200vm0baa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4412) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4413) .compatible = "kyo,tcg121xglp",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4414) .data = &kyo_tcg121xglp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4415) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4416) .compatible = "lemaker,bl035-rgb-002",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4417) .data = &lemaker_bl035_rgb_002,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4418) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4419) .compatible = "lg,lb070wv8",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4420) .data = &lg_lb070wv8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4421) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4422) .compatible = "lg,lp079qx1-sp0v",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4423) .data = &lg_lp079qx1_sp0v,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4424) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4425) .compatible = "lg,lp097qx1-spa1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4426) .data = &lg_lp097qx1_spa1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4427) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4428) .compatible = "lg,lp120up1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4429) .data = &lg_lp120up1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4430) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4431) .compatible = "lg,lp129qe",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4432) .data = &lg_lp129qe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4433) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4434) .compatible = "logicpd,type28",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4435) .data = &logicpd_type_28,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4436) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4437) .compatible = "logictechno,lt161010-2nhc",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4438) .data = &logictechno_lt161010_2nh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4439) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4440) .compatible = "logictechno,lt161010-2nhr",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4441) .data = &logictechno_lt161010_2nh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4442) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4443) .compatible = "logictechno,lt170410-2whc",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4444) .data = &logictechno_lt170410_2whc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4445) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4446) .compatible = "mitsubishi,aa070mc01-ca1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4447) .data = &mitsubishi_aa070mc01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4448) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4449) .compatible = "nec,nl12880bc20-05",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4450) .data = &nec_nl12880bc20_05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4451) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4452) .compatible = "nec,nl4827hc19-05b",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4453) .data = &nec_nl4827hc19_05b,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4454) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4455) .compatible = "netron-dy,e231732",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4456) .data = &netron_dy_e231732,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4457) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4458) .compatible = "neweast,wjfh116008a",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4459) .data = &neweast_wjfh116008a,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4460) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4461) .compatible = "newhaven,nhd-4.3-480272ef-atxl",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4462) .data = &newhaven_nhd_43_480272ef_atxl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4463) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4464) .compatible = "nlt,nl192108ac18-02d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4465) .data = &nlt_nl192108ac18_02d,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4466) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4467) .compatible = "nvd,9128",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4468) .data = &nvd_9128,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4469) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4470) .compatible = "okaya,rs800480t-7x0gp",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4471) .data = &okaya_rs800480t_7x0gp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4472) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4473) .compatible = "olimex,lcd-olinuxino-43-ts",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4474) .data = &olimex_lcd_olinuxino_43ts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4475) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4476) .compatible = "ontat,yx700wv03",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4477) .data = &ontat_yx700wv03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4478) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4479) .compatible = "ortustech,com37h3m05dtc",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4480) .data = &ortustech_com37h3m,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4481) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4482) .compatible = "ortustech,com37h3m99dtc",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4483) .data = &ortustech_com37h3m,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4484) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4485) .compatible = "ortustech,com43h4m85ulc",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4486) .data = &ortustech_com43h4m85ulc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4487) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4488) .compatible = "osddisplays,osd070t1718-19ts",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4489) .data = &osddisplays_osd070t1718_19ts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4490) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4491) .compatible = "pda,91-00156-a0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4492) .data = &pda_91_00156_a0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4493) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4494) .compatible = "powertip,ph800480t013-idf02",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4495) .data = &powertip_ph800480t013_idf02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4496) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4497) .compatible = "qiaodian,qd43003c0-40",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4498) .data = &qd43003c0_40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4499) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4500) .compatible = "rocktech,rk070er9427",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4501) .data = &rocktech_rk070er9427,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4502) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4503) .compatible = "rocktech,rk101ii01d-ct",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4504) .data = &rocktech_rk101ii01d_ct,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4505) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4506) .compatible = "samsung,lsn122dl01-c01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4507) .data = &samsung_lsn122dl01_c01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4508) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4509) .compatible = "samsung,ltn101nt05",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4510) .data = &samsung_ltn101nt05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4511) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4512) .compatible = "samsung,ltn140at29-301",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4513) .data = &samsung_ltn140at29_301,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4514) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4515) .compatible = "satoz,sat050at40h12r2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4516) .data = &satoz_sat050at40h12r2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4517) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4518) .compatible = "sharp,ld-d5116z01b",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4519) .data = &sharp_ld_d5116z01b,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4520) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4521) .compatible = "sharp,lq035q7db03",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4522) .data = &sharp_lq035q7db03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4523) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4524) .compatible = "sharp,lq070y3dg3b",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4525) .data = &sharp_lq070y3dg3b,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4526) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4527) .compatible = "sharp,lq101k1ly04",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4528) .data = &sharp_lq101k1ly04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4529) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4530) .compatible = "sharp,lq123p1jx31",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4531) .data = &sharp_lq123p1jx31,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4532) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4533) .compatible = "sharp,ls020b1dd01d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4534) .data = &sharp_ls020b1dd01d,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4535) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4536) .compatible = "shelly,sca07010-bfn-lnn",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4537) .data = &shelly_sca07010_bfn_lnn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4538) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4539) .compatible = "starry,kr070pe2t",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4540) .data = &starry_kr070pe2t,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4541) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4542) .compatible = "starry,kr122ea0sra",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4543) .data = &starry_kr122ea0sra,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4544) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4545) .compatible = "tfc,s9700rtwv43tr-01b",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4546) .data = &tfc_s9700rtwv43tr_01b,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4547) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4548) .compatible = "tianma,tm070jdhg30",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4549) .data = &tianma_tm070jdhg30,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4550) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4551) .compatible = "tianma,tm070jvhg33",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4552) .data = &tianma_tm070jvhg33,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4553) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4554) .compatible = "tianma,tm070rvhg71",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4555) .data = &tianma_tm070rvhg71,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4556) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4557) .compatible = "ti,nspire-cx-lcd-panel",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4558) .data = &ti_nspire_cx_lcd_panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4559) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4560) .compatible = "ti,nspire-classic-lcd-panel",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4561) .data = &ti_nspire_classic_lcd_panel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4562) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4563) .compatible = "toshiba,lt089ac29000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4564) .data = &toshiba_lt089ac29000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4565) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4566) .compatible = "tpk,f07a-0102",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4567) .data = &tpk_f07a_0102,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4568) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4569) .compatible = "tpk,f10a-0102",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4570) .data = &tpk_f10a_0102,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4571) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4572) .compatible = "urt,umsh-8596md-t",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4573) .data = &urt_umsh_8596md_parallel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4574) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4575) .compatible = "urt,umsh-8596md-1t",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4576) .data = &urt_umsh_8596md_parallel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4577) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4578) .compatible = "urt,umsh-8596md-7t",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4579) .data = &urt_umsh_8596md_parallel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4580) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4581) .compatible = "urt,umsh-8596md-11t",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4582) .data = &urt_umsh_8596md_lvds,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4583) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4584) .compatible = "urt,umsh-8596md-19t",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4585) .data = &urt_umsh_8596md_lvds,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4586) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4587) .compatible = "urt,umsh-8596md-20t",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4588) .data = &urt_umsh_8596md_parallel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4589) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4590) .compatible = "vxt,vl050-8048nt-c01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4591) .data = &vl050_8048nt_c01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4592) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4593) .compatible = "winstar,wf35ltiacd",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4594) .data = &winstar_wf35ltiacd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4595) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4596) /* Must be the last entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4597) .compatible = "panel-dpi",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4598) .data = &panel_dpi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4599) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4600) /* sentinel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4601) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4602) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4603) MODULE_DEVICE_TABLE(of, platform_of_match);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4604)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4605) static bool of_child_node_is_present(const struct device_node *node,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4606) const char *name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4607) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4608) struct device_node *child;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4609)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4610) child = of_get_child_by_name(node, name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4611) of_node_put(child);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4612)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4613) return !!child;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4614) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4615)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4616) static int panel_simple_of_get_desc_data(struct device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4617) struct panel_desc *desc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4618) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4619) struct device_node *np = dev->of_node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4620) u32 bus_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4621) const void *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4622) int len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4623) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4624)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4625) if (of_child_node_is_present(np, "display-timings")) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4626) struct drm_display_mode *mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4627)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4628) mode = devm_kzalloc(dev, sizeof(*mode), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4629) if (!mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4630) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4631)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4632) if (!of_get_drm_display_mode(np, mode, &bus_flags,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4633) OF_USE_NATIVE_MODE)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4634) desc->modes = mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4635) desc->num_modes = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4636) desc->bus_flags = bus_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4637) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4638) } else if (of_child_node_is_present(np, "panel-timing")) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4639) struct display_timing *timing;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4640) struct videomode vm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4641)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4642) timing = devm_kzalloc(dev, sizeof(*timing), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4643) if (!timing)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4644) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4645)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4646) if (!of_get_display_timing(np, "panel-timing", timing)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4647) desc->timings = timing;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4648) desc->num_timings = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4649)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4650) bus_flags = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4651) vm.flags = timing->flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4652) drm_bus_flags_from_videomode(&vm, &bus_flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4653) desc->bus_flags = bus_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4654) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4655) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4656)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4657) if (desc->num_modes || desc->num_timings) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4658) of_property_read_u32(np, "bpc", &desc->bpc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4659) of_property_read_u32(np, "bus-format", &desc->bus_format);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4660) of_property_read_u32(np, "width-mm", &desc->size.width);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4661) of_property_read_u32(np, "height-mm", &desc->size.height);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4662) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4663)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4664) of_property_read_u32(np, "prepare-delay-ms", &desc->delay.prepare);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4665) of_property_read_u32(np, "enable-delay-ms", &desc->delay.enable);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4666) of_property_read_u32(np, "disable-delay-ms", &desc->delay.disable);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4667) of_property_read_u32(np, "unprepare-delay-ms", &desc->delay.unprepare);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4668) of_property_read_u32(np, "reset-delay-ms", &desc->delay.reset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4669) of_property_read_u32(np, "init-delay-ms", &desc->delay.init);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4670)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4671) data = of_get_property(np, "panel-init-sequence", &len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4672) if (data) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4673) desc->init_seq = devm_kzalloc(dev, sizeof(*desc->init_seq),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4674) GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4675) if (!desc->init_seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4676) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4677)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4678) err = panel_simple_parse_cmd_seq(dev, data, len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4679) desc->init_seq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4680) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4681) dev_err(dev, "failed to parse init sequence\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4682) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4683) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4684) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4685)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4686) data = of_get_property(np, "panel-exit-sequence", &len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4687) if (data) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4688) desc->exit_seq = devm_kzalloc(dev, sizeof(*desc->exit_seq),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4689) GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4690) if (!desc->exit_seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4691) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4692)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4693) err = panel_simple_parse_cmd_seq(dev, data, len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4694) desc->exit_seq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4695) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4696) dev_err(dev, "failed to parse exit sequence\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4697) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4698) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4699) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4700)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4701) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4702) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4703)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4704) static int panel_simple_platform_probe(struct platform_device *pdev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4705) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4706) struct device *dev = &pdev->dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4707) const struct of_device_id *id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4708) const struct panel_desc *desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4709) struct panel_desc *d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4710) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4711)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4712) id = of_match_node(platform_of_match, pdev->dev.of_node);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4713) if (!id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4714) return -ENODEV;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4715)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4716) if (!id->data) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4717) d = devm_kzalloc(dev, sizeof(*d), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4718) if (!d)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4719) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4720)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4721) err = panel_simple_of_get_desc_data(dev, d);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4722) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4723) dev_err(dev, "failed to get desc data: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4724) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4725) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4726) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4727)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4728) desc = id->data ? id->data : d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4729)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4730) return panel_simple_probe(&pdev->dev, desc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4731) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4732)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4733) static int panel_simple_platform_remove(struct platform_device *pdev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4734) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4735) return panel_simple_remove(&pdev->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4736) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4737)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4738) static void panel_simple_platform_shutdown(struct platform_device *pdev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4739) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4740) panel_simple_shutdown(&pdev->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4741) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4742)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4743) static struct platform_driver panel_simple_platform_driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4744) .driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4745) .name = "panel-simple",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4746) .of_match_table = platform_of_match,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4747) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4748) .probe = panel_simple_platform_probe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4749) .remove = panel_simple_platform_remove,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4750) .shutdown = panel_simple_platform_shutdown,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4751) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4752)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4753) struct panel_desc_dsi {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4754) struct panel_desc desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4755)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4756) unsigned long flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4757) enum mipi_dsi_pixel_format format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4758) unsigned int lanes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4759) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4760)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4761) static const struct drm_display_mode auo_b080uan01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4762) .clock = 154500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4763) .hdisplay = 1200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4764) .hsync_start = 1200 + 62,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4765) .hsync_end = 1200 + 62 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4766) .htotal = 1200 + 62 + 4 + 62,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4767) .vdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4768) .vsync_start = 1920 + 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4769) .vsync_end = 1920 + 9 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4770) .vtotal = 1920 + 9 + 2 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4771) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4772)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4773) static const struct panel_desc_dsi auo_b080uan01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4774) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4775) .modes = &auo_b080uan01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4776) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4777) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4778) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4779) .width = 108,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4780) .height = 272,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4781) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4782) .connector_type = DRM_MODE_CONNECTOR_DSI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4783) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4784) .flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_CLOCK_NON_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4785) .format = MIPI_DSI_FMT_RGB888,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4786) .lanes = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4787) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4788)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4789) static const struct drm_display_mode boe_tv080wum_nl0_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4790) .clock = 160000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4791) .hdisplay = 1200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4792) .hsync_start = 1200 + 120,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4793) .hsync_end = 1200 + 120 + 20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4794) .htotal = 1200 + 120 + 20 + 21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4795) .vdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4796) .vsync_start = 1920 + 21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4797) .vsync_end = 1920 + 21 + 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4798) .vtotal = 1920 + 21 + 3 + 18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4799) .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4800) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4801)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4802) static const struct panel_desc_dsi boe_tv080wum_nl0 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4803) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4804) .modes = &boe_tv080wum_nl0_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4805) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4806) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4807) .width = 107,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4808) .height = 172,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4809) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4810) .connector_type = DRM_MODE_CONNECTOR_DSI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4811) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4812) .flags = MIPI_DSI_MODE_VIDEO |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4813) MIPI_DSI_MODE_VIDEO_BURST |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4814) MIPI_DSI_MODE_VIDEO_SYNC_PULSE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4815) .format = MIPI_DSI_FMT_RGB888,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4816) .lanes = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4817) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4818)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4819) static const struct drm_display_mode lg_ld070wx3_sl01_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4820) .clock = 71000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4821) .hdisplay = 800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4822) .hsync_start = 800 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4823) .hsync_end = 800 + 32 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4824) .htotal = 800 + 32 + 1 + 57,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4825) .vdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4826) .vsync_start = 1280 + 28,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4827) .vsync_end = 1280 + 28 + 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4828) .vtotal = 1280 + 28 + 1 + 14,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4829) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4830)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4831) static const struct panel_desc_dsi lg_ld070wx3_sl01 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4832) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4833) .modes = &lg_ld070wx3_sl01_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4834) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4835) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4836) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4837) .width = 94,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4838) .height = 151,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4839) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4840) .connector_type = DRM_MODE_CONNECTOR_DSI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4841) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4842) .flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_CLOCK_NON_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4843) .format = MIPI_DSI_FMT_RGB888,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4844) .lanes = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4845) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4846)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4847) static const struct drm_display_mode lg_lh500wx1_sd03_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4848) .clock = 67000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4849) .hdisplay = 720,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4850) .hsync_start = 720 + 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4851) .hsync_end = 720 + 12 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4852) .htotal = 720 + 12 + 4 + 112,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4853) .vdisplay = 1280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4854) .vsync_start = 1280 + 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4855) .vsync_end = 1280 + 8 + 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4856) .vtotal = 1280 + 8 + 4 + 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4857) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4858)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4859) static const struct panel_desc_dsi lg_lh500wx1_sd03 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4860) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4861) .modes = &lg_lh500wx1_sd03_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4862) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4863) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4864) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4865) .width = 62,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4866) .height = 110,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4867) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4868) .connector_type = DRM_MODE_CONNECTOR_DSI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4869) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4870) .flags = MIPI_DSI_MODE_VIDEO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4871) .format = MIPI_DSI_FMT_RGB888,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4872) .lanes = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4873) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4874)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4875) static const struct drm_display_mode panasonic_vvx10f004b00_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4876) .clock = 157200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4877) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4878) .hsync_start = 1920 + 154,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4879) .hsync_end = 1920 + 154 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4880) .htotal = 1920 + 154 + 16 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4881) .vdisplay = 1200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4882) .vsync_start = 1200 + 17,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4883) .vsync_end = 1200 + 17 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4884) .vtotal = 1200 + 17 + 2 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4885) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4886)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4887) static const struct panel_desc_dsi panasonic_vvx10f004b00 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4888) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4889) .modes = &panasonic_vvx10f004b00_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4890) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4891) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4892) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4893) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4894) .height = 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4895) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4896) .connector_type = DRM_MODE_CONNECTOR_DSI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4897) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4898) .flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4899) MIPI_DSI_CLOCK_NON_CONTINUOUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4900) .format = MIPI_DSI_FMT_RGB888,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4901) .lanes = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4902) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4903)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4904) static const struct drm_display_mode lg_acx467akm_7_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4905) .clock = 150000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4906) .hdisplay = 1080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4907) .hsync_start = 1080 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4908) .hsync_end = 1080 + 2 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4909) .htotal = 1080 + 2 + 2 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4910) .vdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4911) .vsync_start = 1920 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4912) .vsync_end = 1920 + 2 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4913) .vtotal = 1920 + 2 + 2 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4914) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4915)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4916) static const struct panel_desc_dsi lg_acx467akm_7 = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4917) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4918) .modes = &lg_acx467akm_7_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4919) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4920) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4921) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4922) .width = 62,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4923) .height = 110,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4924) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4925) .connector_type = DRM_MODE_CONNECTOR_DSI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4926) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4927) .flags = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4928) .format = MIPI_DSI_FMT_RGB888,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4929) .lanes = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4930) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4931)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4932) static const struct drm_display_mode osd101t2045_53ts_mode = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4933) .clock = 154500,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4934) .hdisplay = 1920,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4935) .hsync_start = 1920 + 112,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4936) .hsync_end = 1920 + 112 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4937) .htotal = 1920 + 112 + 16 + 32,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4938) .vdisplay = 1200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4939) .vsync_start = 1200 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4940) .vsync_end = 1200 + 16 + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4941) .vtotal = 1200 + 16 + 2 + 16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4942) .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4943) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4944)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4945) static const struct panel_desc_dsi osd101t2045_53ts = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4946) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4947) .modes = &osd101t2045_53ts_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4948) .num_modes = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4949) .bpc = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4950) .size = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4951) .width = 217,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4952) .height = 136,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4953) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4954) .connector_type = DRM_MODE_CONNECTOR_DSI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4955) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4956) .flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4957) MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4958) MIPI_DSI_MODE_EOT_PACKET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4959) .format = MIPI_DSI_FMT_RGB888,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4960) .lanes = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4961) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4962)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4963) static const struct of_device_id dsi_of_match[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4964) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4965) .compatible = "simple-panel-dsi",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4966) .data = NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4967) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4968) .compatible = "auo,b080uan01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4969) .data = &auo_b080uan01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4970) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4971) .compatible = "boe,tv080wum-nl0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4972) .data = &boe_tv080wum_nl0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4973) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4974) .compatible = "lg,ld070wx3-sl01",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4975) .data = &lg_ld070wx3_sl01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4976) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4977) .compatible = "lg,lh500wx1-sd03",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4978) .data = &lg_lh500wx1_sd03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4979) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4980) .compatible = "panasonic,vvx10f004b00",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4981) .data = &panasonic_vvx10f004b00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4982) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4983) .compatible = "lg,acx467akm-7",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4984) .data = &lg_acx467akm_7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4985) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4986) .compatible = "osddisplays,osd101t2045-53ts",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4987) .data = &osd101t2045_53ts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4988) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4989) /* sentinel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4990) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4991) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4992) MODULE_DEVICE_TABLE(of, dsi_of_match);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4993)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4994) static int panel_simple_dsi_of_get_desc_data(struct device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4995) struct panel_desc_dsi *desc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4996) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4997) struct device_node *np = dev->of_node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4998) u32 val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4999) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5001) err = panel_simple_of_get_desc_data(dev, &desc->desc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5002) if (err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5003) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5004)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5005) if (!of_property_read_u32(np, "dsi,flags", &val))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5006) desc->flags = val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5007) if (!of_property_read_u32(np, "dsi,format", &val))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5008) desc->format = val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5009) if (!of_property_read_u32(np, "dsi,lanes", &val))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5010) desc->lanes = val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5011)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5012) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5013) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5014)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5015) static int panel_simple_dsi_probe(struct mipi_dsi_device *dsi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5016) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5017) struct panel_simple *panel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5018) struct device *dev = &dsi->dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5019) const struct panel_desc_dsi *desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5020) struct panel_desc_dsi *d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5021) const struct of_device_id *id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5022) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5023)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5024) id = of_match_node(dsi_of_match, dsi->dev.of_node);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5025) if (!id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5026) return -ENODEV;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5027)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5028) if (!id->data) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5029) d = devm_kzalloc(dev, sizeof(*d), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5030) if (!d)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5031) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5032)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5033) err = panel_simple_dsi_of_get_desc_data(dev, d);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5034) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5035) dev_err(dev, "failed to get desc data: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5036) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5037) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5038) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5039)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5040) desc = id->data ? id->data : d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5041)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5042) err = panel_simple_probe(&dsi->dev, &desc->desc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5043) if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5044) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5045)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5046) panel = dev_get_drvdata(dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5047) panel->dsi = dsi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5048)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5049) if (!panel->base.backlight) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5050) struct backlight_properties props;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5051)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5052) memset(&props, 0, sizeof(props));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5053) props.type = BACKLIGHT_RAW;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5054) props.brightness = 255;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5055) props.max_brightness = 255;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5056)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5057) panel->base.backlight =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5058) devm_backlight_device_register(dev, "dcs-backlight",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5059) dev, panel, &dcs_bl_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5060) &props);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5061) if (IS_ERR(panel->base.backlight)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5062) err = PTR_ERR(panel->base.backlight);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5063) dev_err(dev, "failed to register dcs backlight: %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5064) err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5065) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5066) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5067) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5068)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5069) dsi->mode_flags = desc->flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5070) dsi->format = desc->format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5071) dsi->lanes = desc->lanes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5072)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5073) err = mipi_dsi_attach(dsi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5074) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5075) struct panel_simple *panel = dev_get_drvdata(&dsi->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5076)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5077) drm_panel_remove(&panel->base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5078) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5079)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5080) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5081) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5082)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5083) static int panel_simple_dsi_remove(struct mipi_dsi_device *dsi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5084) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5085) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5086)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5087) err = mipi_dsi_detach(dsi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5088) if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5089) dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5090)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5091) return panel_simple_remove(&dsi->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5092) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5093)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5094) static void panel_simple_dsi_shutdown(struct mipi_dsi_device *dsi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5095) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5096) panel_simple_shutdown(&dsi->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5097) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5098)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5099) static struct mipi_dsi_driver panel_simple_dsi_driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5100) .driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5101) .name = "panel-simple-dsi",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5102) .of_match_table = dsi_of_match,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5103) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5104) .probe = panel_simple_dsi_probe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5105) .remove = panel_simple_dsi_remove,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5106) .shutdown = panel_simple_dsi_shutdown,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5107) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5109) static int __init panel_simple_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5110) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5111) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5113) err = platform_driver_register(&panel_simple_platform_driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5114) if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5115) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5117) if (IS_ENABLED(CONFIG_DRM_MIPI_DSI)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5118) err = mipi_dsi_driver_register(&panel_simple_dsi_driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5119) if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5120) return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5121) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5123) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5124) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5125) module_init(panel_simple_init);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5127) static void __exit panel_simple_exit(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5128) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5129) if (IS_ENABLED(CONFIG_DRM_MIPI_DSI))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5130) mipi_dsi_driver_unregister(&panel_simple_dsi_driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5132) platform_driver_unregister(&panel_simple_platform_driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5133) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5134) module_exit(panel_simple_exit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5136) MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5137) MODULE_DESCRIPTION("DRM Driver for Simple Panels");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5138) MODULE_LICENSE("GPL and additional rights");