Thread 中讨论的其他器件:AM62P、 AM625
工具/软件:
尊敬的团队:
我们有用于显示800x480的 OLDI 端口0输出定制板。
当我使用800x480定时我得到半显示器. 高度似乎正常。 宽度有问题
static const struct drm_display_mode custom_mode = { .clock = 24750, .hdisplay = 800, .hsync_start = 800 + 54, .hsync_end = 800 + 54 + 2, .htotal = 800 + 54 + 2 + 44, .vdisplay = 480, .vsync_start = 480 + 49, .vsync_end = 480 + 49 + 2, .vtotal = 480 + 49 + 2 + 22, }; static const struct panel_desc custom = { .modes = &custom_mode, .num_modes = 1, .bpc = 8, .size = { .width = 152, .height = 91, }, .delay = { .prepare = 50, .disable = 50, }, .bus_flags = DRM_BUS_FLAG_DE_HIGH, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, .connector_type = DRM_MODE_CONNECTOR_LVDS, };
但当我使用1600x480时,它显示完整的800x480但不幸的是 modetest 得到1600x480所以,我们为800x480所做的 GUI 崩溃了。
static const struct drm_display_mode custom_mode = { .clock = 49500, .hdisplay = 1600, .hsync_start = 1600 + 54, .hsync_end = 1600 + 54 + 2, .htotal = 1600 + 54 + 2 + 44, .vdisplay = 480, .vsync_start = 480 + 49, .vsync_end = 480 + 49 + 2, .vtotal = 480 + 49 + 2 + 22, }; static const struct panel_desc custom = { .modes = &custom_mode, .num_modes = 1, .bpc = 8, .size = { .width = 152, .height = 91, }, .delay = { .prepare = 50, .disable = 50, }, .bus_flags = DRM_BUS_FLAG_DE_HIGH, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA, .connector_type = DRM_MODE_CONNECTOR_LVDS, };
有什么想法为什么会发生?
这是我们使用 FYR 的叠加
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT /** * Microtips integrated OLDI panel (MF-101HIEBCAF0) and touch DT overlay for AM625 - SK * * Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com/ */ /dts-v1/; /plugin/; #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/interrupt-controller/irq.h> #include "k3-pinctrl.h" &{/} { display { compatible ="custom"; port@0 { dual-lvds-odd-pixels; lcd_in0: endpoint { remote-endpoint = <&oldi_out0>; }; }; }; hdmi0: connector { status = "disabled"; }; }; &dss { status = "okay"; }; &main_pmx0 { main_oldi0_pins_default: main-oldi0-pins-default { pinctrl-single,pins = < AM62X_IOPAD(0x0260, PIN_OUTPUT, 0) /* (AA5) OLDI0_A0N */ AM62X_IOPAD(0x025c, PIN_OUTPUT, 0) /* (Y6) OLDI0_A0P */ AM62X_IOPAD(0x0268, PIN_OUTPUT, 0) /* (AD3) OLDI0_A1N */ AM62X_IOPAD(0x0264, PIN_OUTPUT, 0) /* (AB4) OLDI0_A1P */ AM62X_IOPAD(0x0270, PIN_OUTPUT, 0) /* (Y8) OLDI0_A2N */ AM62X_IOPAD(0x026c, PIN_OUTPUT, 0) /* (AA8) OLDI0_A2P */ AM62X_IOPAD(0x0278, PIN_OUTPUT, 0) /* (AB6) OLDI0_A3N */ AM62X_IOPAD(0x0274, PIN_OUTPUT, 0) /* (AA7) OLDI0_A3P */ AM62X_IOPAD(0x0280, PIN_OUTPUT, 0) /* (AC6) OLDI0_A4N */ AM62X_IOPAD(0x027c, PIN_OUTPUT, 0) /* (AC5) OLDI0_A4P */ AM62X_IOPAD(0x0288, PIN_OUTPUT, 0) /* (AE5) OLDI0_A5N */ AM62X_IOPAD(0x0284, PIN_OUTPUT, 0) /* (AD6) OLDI0_A5P */ AM62X_IOPAD(0x0290, PIN_OUTPUT, 0) /* (AE6) OLDI0_A6N */ AM62X_IOPAD(0x028c, PIN_OUTPUT, 0) /* (AD7) OLDI0_A6P */ AM62X_IOPAD(0x0298, PIN_OUTPUT, 0) /* (AD8) OLDI0_A7N */ AM62X_IOPAD(0x0294, PIN_OUTPUT, 0) /* (AE7) OLDI0_A7P */ AM62X_IOPAD(0x02a0, PIN_OUTPUT, 0) /* (AD4) OLDI0_CLK0N */ AM62X_IOPAD(0x029c, PIN_OUTPUT, 0) /* (AE3) OLDI0_CLK0P */ AM62X_IOPAD(0x02a8, PIN_OUTPUT, 0) /* (AE4) OLDI0_CLK1N */ AM62X_IOPAD(0x02a4, PIN_OUTPUT, 0) /* (AD5) OLDI0_CLK1P */ >; }; }; &dss { pinctrl-names = "default"; pinctrl-0 = <&main_oldi0_pins_default &main_dss0_pins_default>; }; &dss_ports { #address-cells = <1>; #size-cells = <0>; /* VP1: Output to OLDI */ port@0 { reg = <0>; oldi_out0: endpoint { remote-endpoint = <&lcd_in0>; }; }; port@1 { status = "disabled"; }; }; &main_i2c1 { sii9022: sii9022@3b { status = "disabled"; }; };