尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LVDS屏幕输出桌面—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】

LVDS屏幕输出桌面—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】 HDMI 会了。今天换 LVDS工控屏常用玻璃自己不报分辨率时序要写进设备树。HDMI 那路插上显示器就有 EDID分辨率是对方告诉你的。LVDS 这块玻璃什么都不告诉你。没有 HPD没有 DDC没有一串 modes 供你挑。时序必须写在设备树里1024×600像素时钟 51.2 MHzJEIDA 24 bit。写错一个 porch屏要么花要么彻底不认。另一件和 HDMI 相反的事simple-panel永远上报connected。排线拔了也是 connected。所以 LVDS-1 的 sysfs status 不能当验收。验收看 debugfs 的时钟看 U-Boot 那行type: LVDS0 for VP2。这块底板上 LVDS 走 VOP2 的 VP2PHY 是video_phy0。触摸是 GT911地址 0x5d挂 I2C2走 HDF Input内核主线那颗 gt911 节点保持disabled。没有 DCS——那是 MIPI 的语言LVDS 不讲。产品名rk3568_evb。改的文件device/board/rk/rk3568_evb/kernel/rk3568-evb-linux.dts四选一的原则在显示总论那篇。这里当已经成立开 LVDSHDMI / MIPI / RGB / eDP 全部关掉。只写lvds { status okay; }一行等于没写。现象HDMI 有桌面这块屏只有背光背光亮着玻璃上停着 U-Boot 的 logo或者什么都没有。旁边 HDMI 口若还插着显示器桌面在那台显示器上跑。原因hdmi和lvds同时okay。HDMI 是真热插拔插着线就是connected。LVDS 是 simple-panel节点 okay 的瞬间也是connected。composer 只认一个主显示。谁先注册、谁被看成 connected桌面就跟谁走。真屏的 panel 驱动照样 probeenable-gpio 照样拉高PWM 背光照样转只是没人往 VP2 提交桌面帧。第二种变体你没插 HDMI但 dts 里 LVDS 的 panel 是disabledHDMI 是okay。物理上接的是 LVDS 玻璃。内核去扫一根没有显示器的 HDMILVDS 控制器没开。U-Boot 若还按自己的 dtb 在这块玻璃上画过 logo你会看见「有过画面内核起来之后没了」。第三种dts 改对了刷的是boot_linux的 p5。U-Boot 从 resource 的 p4 取出旧rk-kernel.dtb里面 LVDS 还是 disabled。/proc/device-tree对不上你刚改的那份。代码四件套加 PHY一次写齐/* LVDSVP21024×600 51.2 MHzJEIDA 24bit */ video_phy0 { status okay; }; lvds_in_vp2 { status okay; }; lvds { status okay; ports { port1 { reg 1; lvds_out_panel: endpoint { remote-endpoint panel_in_lvds; }; }; }; }; route_lvds { connect vp2_out_lvds; status okay; };connect必须指向vp2_out_lvds和lvds_in_vp2一致。写成 VP0 的出口扫描在一边连接器在另一边黑屏dmesg 不一定骂你。PHY 不是可选项。LVDS 差分从video_phy0出去。关 PHY 开控制器连接器也许还在屏收不到差分。切到 RGB 并行时要把video_phy0关掉否则 PHY 和 RGB 管脚打架。开 LVDS 时它必须 okay。HDMI 必须成组关掉只关控制器不够hdmi { status disabled; }; hdmi_in_vp0 { status disabled; }; hdmi_in_vp1 { status disabled; }; route_hdmi { status disabled; };RGB、eDP、DSI 同样成组关。DSI 的 panel 还要把 compatible 改成驱动不认的名字防止 HDFof_find_compatible_node(simple-panel-dsi)抓到一份 disabled 的屏把/dev/dri/card0搞没rgb_in_vp2 { status disabled; }; rgb { status disabled; }; route_rgb { status disabled; }; tft_lcd_panel { status disabled; }; edp_in_vp0 { status disabled; }; edp { status disabled; }; edp_panel { status disabled; }; dsi1 { status disabled; }; dsi1_in_vp0 { status disabled; }; dsi1_in_vp1 { status disabled; }; route_dsi1 { status disabled; }; dsi0 { status disabled; }; dsi0_panel { compatible simple-panel-dsi-disabled; }; dsi0_in_vp0 { status disabled; }; dsi0_in_vp1 { status disabled; }; route_dsi0 { status disabled; };节点不能删。endpoint 互相引用删了 dtc 报 unresolved reference。status 和 compatible 一起改。现象时序写了 1024×600屏花或者不亮你从 HDMI 那篇抄了「不要写死 timing」。LVDS 上这条建议是错的。原因LVDS 玻璃没有 EDID。DRM 不能问它要 modes。simple-panel的display-timings就是这份玻璃的身份证。像素时钟、porch、同步极性、bus-format任何一项和屏参对不上TCON 对不齐表现为花屏、偏色、完全无信号。这块板默认那块 1024×600 的数字是项值写错会怎样clock-frequency51200000时钟偏了屏不锁或滚动hactive / vactive1024 / 600桌面几何全错hback-porch160左右缺一块或错位hfront-porch160同上hsync-len70同步丢花vback-porch23上下滚vfront-porch12同上vsync-len20同步丢hsync-active0极性反了可能不亮vsync-active0同上de-active0DE 反了pixelclk-active0沿反了bus-formatRGB888_1X7X4_JEIDA写成 VESA颜色通道错位JEIDA 和 VESA 是两种 LVDS 通道映射。这块玻璃按 JEIDA 接。写成 VESA桌面能出来颜色是错的红蓝对调或者某一通道缺。不要「先用 VESA 试试」。屏参写 JEIDA 就写 JEIDA。RGB 那路的同步极性是高有效。LVDS 这组是低有效上面四个*-active 0。两套数字不要混抄。从 RGB 节点 copy porch 过来时钟还是 51.2 MHz屏也会花——porch 和极性不是同一份。代码panel 节点lvds_panel: lvds-panel { status okay; compatible simple-panel; backlight backlight; reset-delay-ms 20; enable-delay-ms 20; prepare-delay-ms 20; unprepare-delay-ms 20; disable-delay-ms 20; bus-format MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA; pinctrl-names default; pinctrl-0 lvds_panel_enable; enable-gpios gpio3 RK_PC3 GPIO_ACTIVE_HIGH; /* GPIO3_C3 */ width-mm 210; height-mm 157; lvds_disp_timings0: display-timings { native-mode lvds_timing0; lvds_timing0: lvds-timing0 { clock-frequency 51200000; hactive 1024; vactive 600; hback-porch 160; hfront-porch 160; hsync-len 70; vback-porch 23; vfront-porch 12; vsync-len 20; hsync-active 0; vsync-active 0; de-active 0; pixelclk-active 0; }; }; ports { #address-cells 1; #size-cells 0; port0 { reg 0; panel_in_lvds: endpoint { remote-endpoint lvds_out_panel; }; }; }; };enable-gpios拉高屏的电源/使能脚才通。没有这根脚PHY 在跳玻璃没上电看起来像时序错。GPIO3_C3 在 dts 里写成RK_PC3。debugfs 里这只脚应当out hi。背光走 PWM4 那个backlight。panel 节点必须引用它。只开 PWM 不引用内核不知道这路 panel 要背光亮度和 enable 对不上。backlight { status okay; }; pwm4 { status okay; pinctrl-names active; pinctrl-0 pwm4_pins; };pwm5在这块板上必须disabled。它默认占 GPIO0_C4那是 MIPI 相机的 PWDN。跟显示无关但你为了「多开一个 PWM 试试背光」把它打开相机会一起死。背光只走 pwm4。现象桌面起来大约 37 秒背光灭hdc 还在不是电源管理那种 22 秒 timeout。串口没有blank4没有display off。有一行非常具体vcc3v3_lcd_lvds: disabling同一批可能还有vcc3v3_lcd0_n、pcie30_3v3。/sys/kernel/debug/gpio里原来拉高的那只供电脚变成out lo。原因vcc3v3_lcd_lvds是孤儿 regulator。dts 里给了regulator-boot-on开机时打开。全树没有任何节点写power-supply vcc3v3_lcd_lvds。LVDS 屏走enable-gpios不走 power-supply。内核 regulator 框架在 late cleanup 阶段把「boot-on 但没有 consumer」的电源批量关掉。大约 37 秒。GPIO 拉低屏断电。桌面进程还在hdc 还在玻璃是黑的。power-shell wakeup救不了。那条命令唤醒的是 DRM blank不是被关掉的 3.3 V。HDMI 遇不到这件事。HDMI 显示器自带电源。LVDS、部分 RGB 会遇。代码给这路电源加上regulator-always-on锁住late cleanup 不敢关vcc3v3_lcd_lvds: vcc3v3-lcd-lvds { compatible regulator-fixed; regulator-name vcc3v3_lcd_lvds; regulator-min-microvolt 3300000; regulator-max-microvolt 3300000; gpio gpio3 RK_PC3 GPIO_ACTIVE_HIGH; /* 以你树里实际脚为准 */ enable-active-high; regulator-boot-on; regulator-always-on; };注意有的树把 GPIO3_PC3 既当enable-gpios又当 regulator 的 gpio两处抢同一只脚。以你这份 dts 的实际定义为准。原则是这路电必须有 always-on或者必须有一个真正的 consumer 引用它。只有 boot-on、没有人用37 秒必关。改完刷 resource 和 boot_linux。验收hdc shell dmesg | grep -i vcc3v3_lcd_lvds hdc shell mount -t debugfs none /sys/kernel/debug hdc shell cat /sys/kernel/debug/gpio | grep -i lcd期望再也看不到disabling。供电脚保持out hi。等一分钟屏还亮着。公版 dtsi 还可能给vcc3v3_lcd0_n配一只gpio gpio0 RK_PC7。GPIO0_C7 在这块板上是 GT911 的 INT不是 LCD 电源。开机把 INT 拉高cleanup 再拉低触摸中断锁死。显示看起来「能亮不能点」。删掉这两属性vcc3v3_lcd0_n { /delete-property/ enable-active-high; /delete-property/ gpio; };这和 37 秒掉电是两件事。一个关屏电一个占触摸脚。一起改少走一天。现象画面在手指划不动或划到别处去原因LVDS 这块玻璃上的触摸是GT9110x5dI2C2。不是 FT5406。开源鸿蒙桌面走 HDF Input不走内核主线那颗 gt911 驱动。内核节点必须disabled否则两边抢总线HDF 读寄存器全是 NACK。分辨率写在 HCS 的solutionX/solutionY不是 DTS 的touchscreen-size-x。只改 dtsHDF 仍按某份公版 720×1280 报点驱动当 1024×600 去减纵坐标出负数上半屏点不中。代码i2c2 { status okay; clock-frequency 100000; pinctrl-names default; pinctrl-0 i2c2m1_xfer gt911_int_pin gt911_rst_pin; gt911_lvds: gt9115d { compatible goodix,gt911; pinctrl-names default; pinctrl-0 gt911_int_pin gt911_rst_pin; reg 0x5d; interrupt-parent gpio0; interrupts RK_PC7 IRQ_TYPE_LEVEL_LOW; reset-gpios gpio2 RK_PD0 GPIO_ACTIVE_HIGH; status disabled; }; ft5406_rgb: touchscreen38 { compatible edt,edt-ft5406; reg 0x38; status disabled; }; };INT GPIO0_C723RST GPIO2_D088。HCS 里busNum 2intGpio 23rstGpio 88solutionX 1024solutionY 600moduleName HDF_TOUCH_GT911。细节在 GT911 那篇。这里只要记住开 LVDS 就把触摸配成 GT911 这一套不要留着 RGB 的 FT5406 脚。验收hdc shell i2cdetect -y -r 2 hdc shell i2ctransfer -y 2 w20x5d 0x81 0x40 r4 hdc shell ls /sys/bus/i2c/devices/2-005d/driver # 期望没有内核主线驱动绑在这 hdc shell cat /proc/bus/input/devices0x39 0x31 0x31 0x00是芯片 ID911。扫不到 0x5d先查排线、I2C2 有没有 okay、INT 有没有被 regulator 占着。真正生效的 DTB 仍在 resource显示总论和 HDMI 那篇把分区讲过。LVDS 这条路上它换了个妆再来你从 HDMI 切到 LVDS只刷了 p5U-Boot 仍加载 p4 的旧树summary 仍是HDMI-A-1。你会以为 LVDS PHY 坏了。hdc shell cat /proc/partitions hdc shell ls -l /dev/block/mmcblk0p4 /dev/block/mmcblk1p4 hdc file send resource.img /data/resource.img hdc file send boot_linux.img /data/boot_linux.img hdc shell dd if/data/resource.img of/dev/block/mmcblk1p4 bs4M convfsync hdc shell dd if/data/resource.img of/dev/block/mmcblk0p4 bs4M convfsync hdc shell dd if/data/boot_linux.img of/dev/block/mmcblk1p5 bs4M convfsync路径必须带/dev/block/。少了blockdd 建普通文件md5 对画面不变。主机上先确认 dtb 真带了 51.2 MHzdtc -I dtb -O dts -o /tmp/now.dts 那份.dtb grep -n 51200000\|JEIDA\|lvds-panel /tmp/now.dts没有这串数字编的是旧树或 dts 没被拷进 src_tmp。最小重建那篇的档 2先cpboard 的 dts 到arch/arm64/boot/dts/rockchip/再make rockchip/rk3568-evb-linux.dtb。目标不带rockchip/前缀make 报没有规则。GN 经常不盯 board 目录。改 dts 之后rm -rf out/kernel/checkpoint rm -f out/rk3568_evb/packages/phone/images/resource.img ./build.sh --product-name rk3568_evb --ccache只换显示、system / vendor 已经能进桌面时刷 resource boot_linux 就够不必等 31 分钟的用户态。验收先认盘再认 VP2再认 51.2 MHz# 1. 介质 hdc shell cat /proc/partitions hdc shell mount | grep on / # 2. 内核 DRM hdc shell dmesg | grep -iE \\[drm\\] Initialized|lvds|simple-panel|vop hdc shell ls -l /dev/dri/ # 3. 连接器。LVDS-1 的 connected 只能当「驱动认为有屏」 hdc shell ls /sys/class/drm/ hdc shell cat /sys/class/drm/card0-LVDS-1/status hdc shell cat /sys/class/drm/card0-LVDS-1/enabled hdc shell cat /sys/class/drm/card0-HDMI-A-1/status 2/dev/null # 4. 真正扫的是哪一路、时钟多少 hdc shell mount -t debugfs none /sys/kernel/debug hdc shell cat /sys/kernel/debug/dri/0/summary # 5. 设备树 hdc shell cat /proc/device-tree/lvds-panel/status; echo hdc shell find /proc/device-tree -name compatible | xargs grep -a simple-panel # 6. 37 秒那一刀 hdc shell dmesg | grep -i disabling # 7. 用户态 hdc shell pidof render_service composer_host合格大致是U-Boot / 内核VOP update mode to: 1024x600p0, type: LVDS0 for VP2 summaryVP2 ACTIVEconnector LVDS-1clk 约 51200 lvds-panel/statusokay card0-HDMI-A-1没有或 disconnected 且 enableddisabled dmesg没有 vcc3v3_lcd_lvds: disabling pidof render_service有号时钟是 65000你开成 RGB 了。时钟是 HDMI 那档148500 一类主显示还在 HDMI。时钟对了才算扫的是这条 LVDS。failed to init overlay plane Cluster0-win0能出桌面的镜像里也有。不是判据。plane 分给 disabled 的 VP才要回头看 route。没有 DCS不要往 LVDS 节点里塞 init sequenceMIPI 屏上电要一组 DCS 包11退出休眠29开显示再加上厂商私有的 gamma。LVDS 没有这套。simple-panel加上 timing、bus-format、enable-gpio、backlight就是它的「初始化」。你把 MIPI 的panel-init-sequence抄进lvds-paneldtc 也许能过驱动不认屏仍然按 timing 去扫。不要制造一份没人读的字节。反过来切到 MIPI 时不要指望只改时钟就能出画。没有 DCS玻璃停在休眠。那是下一篇的事。和 HDMI 对打一次同一份内核换 dts 开关就能在两路之间切。建议真的切一次。切到 LVDS四件套 PHY panel timing 打开HDMI / RGB / DSI / eDP 全关DSI panel 改 compatible。刷 p4 和 p5eMMC 的 p4 也刷。串口应打出type: LVDS0 for VP2。插不插 HDMI 线summary 的 ACTIVE 都必须是 LVDS-1。若 HDMI 又把桌面抢走就是hdmi没关干净。再切回 HDMI按 HDMI 那篇打开 VP0把 LVDS 四件套和 PHY 关掉。刷同一对分区。拔线card0-HDMI-A-1/status必须变成disconnected。LVDS 做不到这件事——它没有 HPD。谁先学会不信 simple-panel 的 connected谁就少在 LVDS 上误判。窗口取向跟 1024×600 横屏走。HCS 的solutionX/Y同步改。只换屏不改触摸划起来整块玻璃是歪的。黑屏对照表现象先查常见原因真屏只有背光旁边 HDMI 有桌面dri/0/summary 的 connectorhdmi 没关真屏只有背光没插 HDMI是否还有 RGB/DSI/eDP 的 simple-panel okay另一路抢主显示改了 dts仍是 HDMI 时钟/proc/device-treep4 刷了没没刷 resourcedd 成功画面不变ls -l /dev/block/mmcblkXp4路径少了 /block/[drm] Initialized 没有四件套、PHY、endpoint内核显示没起来有 Initialized无 LVDS-1lvds / panel statusHDF 误抓 DSI控制器没 probe花屏、偏色bus-format、极性、porchJEIDA 写成 VESA或抄了 RGB 的高有效约 37 秒后黑hdc 还在dmesg 的 disabling孤儿 regulator 被 late cleanuppower-shell wakeup 能醒hilog 的 blank电源超时不是 LVDS 时序能亮不能点i2cdetect 0x5dGPIO0_C7内核主线 gt911 抢总线或 INT 被 lcd0_n 占用点上半屏失灵HCS solutionX/Y仍按 720×1280 报点Cluster plane init failed旧包是否也有这行经常是红鲱鱼时序只修「DRM 起来了但屏扫错」那一小支。卡 logo 的分层在显示总论。LVDS 这篇多出来的两刀是 51.2 MHz 这一组数字和 37 秒那路电。现场一条最短路径dts 已按本文打开 LVDS、关掉其余。串口 1500000 开着。上电看有没有Linux version有没有[drm] Initialized有没有type: LVDS0 for VP2。没有这三行停不要拧背光旋钮。hdc 连上。cat /proc/partitions。resource、boot_linux 按/dev/block/写到 p4、p5eMMC 的 p4 也写。reboot。起来后读 summary。VP2、LVDS-1、clk 51200。对不上就不要进应用。对上了再看pidof render_service。空的去查 so 和 hilog。有号、屏黑先等一分钟看会不会 37 秒掉电再power-shell wakeup。触摸放到画面稳定之后。i2cdetect -y -r 2看到 0x5d再划。扫到 0x38 是另一块屏FT5406 那篇。这条路径里没有「给 LVDS 加 DCS」这一步。需要 DCS 的是 MIPI。背光和使能脚亮暗先量这两根时序对、summary 的 clk 是 51200、画面仍暗多半不是 porch是背光或使能。PWM4 在 sysfs 里常见hdc shell ls /sys/class/backlight/ hdc shell cat /sys/class/backlight/*/brightness hdc shell cat /sys/class/backlight/*/max_brightnessbrightness 是 0把数字写到中间值屏该亮起来。写了不变PWM 脚没出波形。查pwm4的 pinctrl以及 HDFlcd_config.hcs的pwmDevNum。必须是 4。写错号时序对、有影像、就是暗。示波器探 PWM4没有方波就不要再改hsync-len。pwm5在这块板上必须disabled。它默认占 GPIO0_C4那是 MIPI 相机的 PWDN。为了「多开一个 PWM 试试背光」把它打开相机会一起死。背光只走 pwm4。使能脚 GPIO3_C3 高有效。debugfs 里看电平hdc shell mount -t debugfs none /sys/kernel/debug hdc shell cat /sys/kernel/debug/gpio | grep -iE pc3|C3|lvds期望 out、高。低panel 没 enable差分对即使在扫玻璃也不上电。pinctrl 若仍是 LCDC DEN脚不归 GPIOenable-gpios 是空操作。四选一关掉 RGB就是把 DEN 还给这根脚。供电脚是vcc3v3_lcd_lvds那颗 fixed regulator。37 秒后若变低就是 late cleanup。regulator-always-on之后应保持高。两根脚都高、PWM 有波形、clk 51200还暗才轮到排线和玻璃本身。HDF 背光配置写在vendor/rk/rk3568_evb/hdf_config/khdf/lcd/lcd_config.hcsroot { backlightConfig { pwmBacklightConfig { match_attr pwm_bl_dev; pwmDevNum 4; pwmMaxPeriod 25000; backlightDevName hdf_pwm; minBrightness 0; defBrightness 127; maxBrightness 255; } } }pwmDevNum和 dts 的pwm4必须是同一颗。改 HCS 要清 khdf 的 hcb 再编内核刷 boot_linux。显示几何在 resource 的 dtb背光号在内核 Image 里的 HCS 数组两张镜像都要新。JEIDA 24bit 在差分上长什么样MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA这个宏拆开读RGB888每通道 8 bit1X7X4 表示 LVDS 四对差分、每对串 7 bit 的那一种打包。JEIDA 和 VESA/SPWG 的差别是这 7 bit 里 RGB 谁在前。写错宏像素时钟仍是 51.2 MHz桌面能出来颜色是错的红蓝对调或者某一通道缺。不要「先用 VESA 试试」。屏参写 JEIDA 就写 JEIDA。你用 HDMI 转 LVDS 盒子去看可能会「正常」因为盒子按自己的映射解。直接接玻璃就必须和玻璃一致。改宏比改 porch 更对症。极性全是 0hsync、vsync、DE、pixelclk 低有效。RGB 那块 7 寸常见反过来高有效时钟 65 MHz。两套 timing 不能混。把 RGB 的hsync-active 1抄进 LVDS同步会漂。像素时钟不要按 60 Hz 反推。水平一行 1414垂直一帧 6551414 × 655 × 60 ≈ 55.6 MHz。datasheet 是 51.2 MHz刷新率大约 55 Hz。改成 55570200PLL 和屏都可能不认。钉死51200000。横屏 1024×600竖条不是 porch 错了桌面只占一块竖条左右黑summary 明明是 1024x600。第一反应是改 hback-porch。别改。窗口服务若按竖屏申请合成器会把 600×1024 的内容画进 1024×600 的扫描。看起来像时序其实是取向。板级显示策略把内置取向写成横屏Launcher 才按宽边铺。触摸 HCS 的solutionX/Y必须还是 1024/600和取向一起改。只改窗口不改触摸划线是歪的只改触摸不改窗口点得准但画面竖着。hdc shell hidumper -s RenderService | grep -iE 1024|600|720|1280|orient hdc shell cat /proc/bus/input/devicesRenderService 里看到 1024×600 的层窗口对了。仍是竖条再查策略文件不要回头改 51.2 MHz。GT911 的 INT 是 GPIO0_C7复位是 GPIO2_D0。HCSinputAttr { inputType 0; solutionX 1024; solutionY 600; devName main_touch; }; busConfig { busType 0; busNum 2; }; pinConfig { rstGpio 88; intGpio 23; };rstGpio 88是 GPIO2_D02×32240。intGpio 23是 GPIO0_C70×32167。脚对了、分辨率错了照样点不准。改 HCS 清 hcb刷 boot_linux。显示几何刷 p4。两张镜像都要新。公版 dtsi 可能给vcc3v3_lcd0_n配gpio GPIO0_C7。开机把 INT 拉高cleanup 再拉低触摸中断锁死。显示看起来「能亮不能点」。板级删掉那根 gpio 属性。脚是触摸的不是屏电源的。一整段能对照的 LVDS 开关调试时容易漏一行。下面按「只开 LVDS」收成一份。panel 时序不要改数字。power-supply和regulator-always-on同时写是双保险。不要只留 boot-on。video_phy0 { status okay; }; lvds_in_vp2 { status okay; }; lvds { status okay; }; route_lvds { status okay; connect vp2_out_lvds; }; lvds_panel { status okay; }; backlight { status okay; }; pwm4 { status okay; }; hdmi { status disabled; }; hdmi_in_vp0 { status disabled; }; hdmi_in_vp1 { status disabled; }; route_hdmi { status disabled; }; rgb { status disabled; }; rgb_in_vp2 { status disabled; }; route_rgb { status disabled; }; edp { status disabled; }; edp_in_vp0 { status disabled; }; dsi1 { status disabled; }; dsi0 { status disabled; }; dsi0_panel { compatible simple-panel-dsi-disabled; };video_phy0在/sys里应当是 bound。disabled 的时候lvds即使 okay 也扫不出差分。RGB 镜像里它必须 disabled。切来切去时看这一行。hdc shell ls /sys/bus/platform/drivers/*/fdc60000.syscon:lvds 2/dev/null hdc shell dmesg | grep -i video_phy0\\|lvdsU-Boot 日志特征再钉一次VOP update mode to: 1024x600p0, type: LVDS0 for VP2内核 summary 的 clk 约 51200。两行对上才是这路屏。clk 是 65000刷成 RGB 了。clk 是 148500 一类主显示还在 HDMI。pinctrlGPIO3_C3 必须是 GPIO不能是 DENLVDS 的使能脚和 RGB 的 DEN 经常是同一根。开 LVDS 时 pinctrl 必须把它做成 GPIOlvds_panel_enable: lvds-panel-enable { rockchip,pins 3 RK_PC3 RK_FUNC_GPIO pcfg_pull_none; };lvds_panel的pinctrl-0引用这个。RGB 那路的lcdc_ctl若仍把这根脚编进 DEN后 probe 的 pinctrl 会把 GPIO 抢走。enable-gpios 变成空操作PHY 在跳玻璃没上电。所以四选一不只是 DRM 连接器的事也是管脚所有权的事。开 LVDS 必须关rgb和route_rgb。debugfs 里这只脚应当显示为 GPIO、输出、高电平名字里能看到 panel enable 或 lvds而不是 lcdc。系列第 18 篇 · 芯片瑞芯微 RK3568 · OpenHarmony 4.1API 11 · Linux 5.10
返回列表