Rockchip RK3568 is widely used in industrial SBCs, Android HMI panels, Linux gateways, smart control terminals, medical devices, EV charger displays, and embedded display products. One of the common display interfaces used with RK3568 is LVDS. LVDS is suitable for many industrial TFT LCD panels because it provides stable signal transmission, supports medium and large display sizes, and has a long history in embedded display systems.
Compared with HDMI or eDP, LVDS is often used for internal panel connections. Compared with MIPI DSI, LVDS is easier to work with in some industrial display projects because many 7-inch, 10.1-inch, 12.1-inch, and 15.6-inch TFT LCD modules provide LVDS input. For RK3568-based SBCs, LVDS is a practical choice when the product needs a reliable built-in display for HMI, control, monitoring, or data visualization.
This guide explains how to configure an LVDS display on RK3568-based Linux and Android SBC platforms. It covers panel timing, Device Tree configuration, LVDS channel setup, backlight control, power sequence, touch panel integration, and common debugging methods.
Before configuring an LVDS panel, it is important to understand the basic display path.
A typical RK3568 LVDS display system includes:
The display controller generates the image data. The LVDS interface converts the parallel display data into differential LVDS signals. The LCD panel receives these signals and displays the image. The LED backlight provides illumination so that the image can be seen.
If any part of this chain is wrong, the display may fail. For example, the panel may stay black, show white screen, flicker, display wrong colors, or show an image with incorrect resolution. A successful LVDS bring-up requires the panel datasheet, board schematic, Device Tree, and actual hardware wiring to match.
LVDS remains popular in industrial display applications because it is stable, mature, and well supported by many TFT LCD panels.
Common reasons to use LVDS on RK3568 include:
For industrial applications, LVDS is often preferred when the display is installed inside the product enclosure and connected through an internal cable. It is widely used in industrial HMI, medical equipment, machine control terminals, EV chargers, energy management systems, and smart building panels.
The LCD panel datasheet is the most important reference for LVDS configuration. Before editing Device Tree files, collect the correct display specifications.
Important panel parameters include:
Do not guess these values. Wrong timing parameters can cause no image, unstable image, flicker, wrong position, or abnormal colors. If the panel vendor provides a reference timing table, use that as the starting point.
LVDS panels may use single-channel or dual-channel LVDS.
Single-channel LVDS is common for lower-resolution panels, such as:
Dual-channel LVDS is common for higher-resolution panels, such as:
The exact requirement depends on pixel clock, color depth, and panel design.
If the panel requires dual-channel LVDS but the board only connects single-channel LVDS, the display will not work correctly. If the Device Tree configures dual-channel but the hardware only routes one channel, the display may show half image, unstable image, or no image.
Check the panel datasheet and board schematic carefully. Confirm:
LVDS panels may use different bit mapping formats. The two common formats are VESA and JEIDA.
If the format is wrong, the display may still show an image, but the colors will be incorrect. For example, red and blue may look wrong, grayscale may be abnormal, or the image may appear washed out.
The datasheet usually specifies whether the panel uses:
Your RK3568 Device Tree or panel driver must match this setting. If the hardware supports configuration of LVDS data mapping, make sure the correct format is selected.
Common symptoms of wrong LVDS data format include:
When debugging color issues, do not only check software. Always verify LVDS format and bit mapping.
Before software configuration, confirm that the hardware design is correct.
Check the schematic for:
LVDS uses differential pairs. The P and N signals must be routed correctly. If polarity is swapped, some receivers may tolerate it, but many panels will fail or show abnormal output. If lane mapping is wrong, the image may not display correctly.
Also check cable direction. Prototype display problems are often caused by wrong FPC orientation, incorrect adapter board wiring, or mismatched connector pinout.
On RK3568 Linux BSPs, the display configuration is usually described in Device Tree. The exact file path depends on the SDK version, but Rockchip DTS files are commonly located under:
arch/arm64/boot/dts/rockchip/
A board-level DTS file may include references to:
The names may differ depending on BSP version. Always check your current SDK and compare with a working reference board.
A typical LVDS configuration includes:
A panel timing block describes the LCD resolution and sync timing.
A simplified example for a 1024×600 LVDS panel may look like this:
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <51200000>;
hactive = <1024>;
vactive = <600>;
hfront-porch = <160>;
hsync-len = <20>;
hback-porch = <140>;
vfront-porch = <12>;
vsync-len = <3>;
vback-porch = <20>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
These values are only examples. You must replace them with the values from the LCD panel datasheet.
Important fields include:
If the resolution is correct but porch or sync values are wrong, the display may still fail. Some panels are tolerant, but many industrial panels require timing values close to the datasheet.
A simplified panel node may look like this:
panel_lvds: panel-lvds {
compatible = "simple-panel";
backlight = <&backlight>;
power-supply = <&vcc_lcd>;
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <51200000>;
hactive = <1024>;
vactive = <600>;
hfront-porch = <160>;
hsync-len = <20>;
hback-porch = <140>;
vfront-porch = <12>;
vsync-len = <3>;
vback-porch = <20>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
};
This example defines a simple LVDS panel with a backlight and power supply. Some BSPs may require a different compatible string or Rockchip-specific panel binding.
If your panel requires special initialization or non-standard behavior, a simple-panel binding may not be enough. In that case, a dedicated panel driver may be needed.
The LVDS output node must be enabled. The exact node name depends on the Rockchip kernel version and BSP.
A simplified example may look like:
&lvds {
status = "okay";
};
In some BSPs, there may also be route nodes:
&route_lvds {
status = "okay";
connect = <&vp0_out_lvds>;
};
Or similar display route configuration.
You need to check the reference DTS from your board vendor. RK3568 display routing can vary between SDK versions. If the LVDS node is enabled but the route is not connected, the panel may not receive any display signal.
Check all related display nodes:
grep -n "lvds" -r arch/arm64/boot/dts/rockchip/
grep -n "route_lvds" -r arch/arm64/boot/dts/rockchip/
grep -n "display-subsystem" -r arch/arm64/boot/dts/rockchip/
Then compare with a known working board.
Backlight is often the reason a display appears black even when LVDS is working. The LCD may be showing an image, but without backlight it is difficult to see.
A typical PWM backlight node looks like:
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm0 0 25000 0>;
brightness-levels = <
0 8 16 32 64 96 128 160 192 224 255
>;
default-brightness-level = <10>;
enable-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
power-supply = <&vcc_lcd>;
};
Important properties:
Common mistakes:
After booting Linux, check:
ls /sys/class/backlight/
cat /sys/class/backlight/*/brightness
cat /sys/class/backlight/*/max_brightness
echo 255 | sudo tee /sys/class/backlight/*/brightness
If the backlight does not respond, measure the PWM pin and enable pin with an oscilloscope or multimeter.
The LCD panel usually needs one or more power rails. A simple fixed regulator may be used for panel logic power.
Example:
vcc_lcd: vcc-lcd {
compatible = "regulator-fixed";
regulator-name = "vcc_lcd";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&gpio2 3 GPIO_ACTIVE_HIGH>;
enable-active-high;
regulator-boot-on;
};
Then the panel node can reference it:
power-supply = <&vcc_lcd>;
If the power rail is not enabled, the panel will not work even if LVDS signals are present.
Check regulator status:
sudo mount -t debugfs none /sys/kernel/debug
sudo cat /sys/kernel/debug/regulator/regulator_summary
Look for LCD-related regulators and confirm whether they are enabled.
Pins used for backlight PWM, reset GPIO, enable GPIO, and LCD power control must be configured correctly.
A simplified pinctrl example may look like:
lcd_panel_enable: lcd-panel-enable {
rockchip,pins =
<1 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
};
lcd_pwm_pin: lcd-pwm-pin {
rockchip,pins =
<0 RK_PA0 RK_FUNC_1 &pcfg_pull_none>;
};
If the PWM pin is still configured as GPIO, no PWM waveform will appear. If the enable pin is configured as another function, the panel or backlight may remain disabled.
Check the RK3568 pin function table and the board schematic. Confirm that each pin is assigned to the correct function.
Many LVDS display modules include a capacitive touch panel. The touch panel is usually independent of LVDS and communicates through I2C or USB.
For I2C touch, the Device Tree may include a node like:
&i2c1 {
status = "okay";
touchscreen@5d {
compatible = "goodix,gt911";
reg = <0x5d>;
interrupt-parent = <&gpio3>;
interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
reset-gpios = <&gpio3 5 GPIO_ACTIVE_LOW>;
irq-gpios = <&gpio3 4 GPIO_ACTIVE_HIGH>;
};
};
The exact compatible string and address depend on the touch controller.
Common capacitive touch controllers include:
Touch debugging commands:
dmesg | grep -i touch
dmesg | grep -i goodix
cat /proc/bus/input/devices
evtest
i2cdetect -y 1
If display works but touch does not, debug touch separately. LVDS image output and I2C touch input are different subsystems.
After modifying the DTS file, rebuild the DTB according to your BSP build system.
In a Linux kernel tree, this may be:
make ARCH=arm64 rockchip/rk3568-your-board.dtb
Or through the full SDK build command:
./build.sh kernel
The exact command depends on your Rockchip SDK.
After building, make sure the new DTB is actually used by the board. A common mistake is editing one DTS file but flashing another DTB.
Check the boot log:
dmesg | grep -i machine
cat /proc/device-tree/model
strings /proc/device-tree/compatible
You can also inspect the running device tree:
ls /proc/device-tree/
cat /proc/device-tree/model
If your changes do not appear, the system may still be using an old DTB.
On Linux systems using DRM, check display connector status:
ls /sys/class/drm/
You may see entries like:
card0
card0-LVDS-1
card0-HDMI-A-1
Check LVDS connector status:
cat /sys/class/drm/card0-LVDS-1/status
If it shows:
connected
the DRM subsystem has detected the LVDS connector.
If the LVDS connector does not appear, check display route, LVDS node, panel node, and driver binding.
Useful log commands:
dmesg | grep -i lvds
dmesg | grep -i drm
dmesg | grep -i panel
dmesg | grep -i vop
dmesg | grep -i backlight
Look for errors such as:
failed to bind
panel not found
failed to get backlight
failed to get regulator
invalid display timing
deferred probe
These logs can guide the next debugging step.
If your Linux system includes libdrm test tools, run:
modetest -M rockchip
This can show connectors, encoders, CRTCs, planes, and supported display modes.
You can check whether LVDS appears and whether the expected resolution is registered. If LVDS is missing, the display path may not be configured correctly. If the resolution is wrong, check the panel timing.
Minimal Buildroot systems may not include modetest by default. You may need to enable libdrm test tools in the build configuration.
On Android RK3568 platforms, LVDS configuration still depends on the kernel and Device Tree, but the Android framework also needs to start correctly.
Useful commands:
adb devices
adb shell
adb shell dmesg | grep -i lvds
adb shell dmesg | grep -i panel
adb shell dmesg | grep -i drm
adb shell logcat | grep -i SurfaceFlinger
adb shell dumpsys display
adb shell dumpsys SurfaceFlinger
If the kernel initializes the panel but Android shows no UI, check SurfaceFlinger, hardware composer, boot animation, and display service logs.
If display works in recovery but not in normal Android, compare boot modes, init scripts, display permissions, and framework configuration.
Common problems include:
Most LVDS bring-up issues are caused by mismatch between the LCD datasheet, board schematic, and Device Tree.
Use this checklist when debugging an RK3568 LVDS panel:
This structured process is more reliable than randomly changing timing values.
A practical debug flow may look like this:
Step 1: Boot the RK3568 board and confirm serial console works.
Step 2: Check whether Linux creates an LVDS DRM connector.
Step 3: Check whether a backlight device exists.
Step 4: Manually set brightness to maximum.
Step 5: Use a flashlight test to see whether an image exists.
Step 6: Measure LCD power rails.
Step 7: Measure PWM and backlight enable pins.
Step 8: Check LVDS timing and channel configuration.
Step 9: Confirm VESA or JEIDA data mapping.
Step 10: Rebuild and flash the correct DTB.
If the backlight works but no image appears, focus on LVDS timing, route, channel count, and data format. If an image appears under flashlight but the screen is dark, focus on backlight.
For custom RK3568 SBC products, LVDS display design should be reviewed early in the hardware stage.
Important hardware design considerations include:
A good schematic and PCB design can reduce software debugging time. Many display bring-up problems are caused by early hardware assumptions that are difficult to fix after PCB production.
After the LVDS display works, production validation is still necessary.
Recommended tests include:
A display that works during short development testing may still fail in production if power, thermal, EMI, or mechanical conditions are different.
Configuring an LVDS display on an RK3568 SBC requires careful alignment between hardware and software. The LCD datasheet, board schematic, LVDS interface type, panel timing, backlight circuit, power sequence, and Device Tree configuration must all match.
RK3568 is a strong platform for industrial HMI panels, Linux gateways, Android smart terminals, medical devices, EV chargers, and embedded display products. LVDS is a practical display interface for these applications because it is stable, mature, and widely supported by industrial TFT LCD modules.
The most important debugging principle is to separate the display problem into smaller parts. First confirm the board boots. Then check LCD power, backlight, LVDS route, panel timing, LVDS data format, Device Tree, and user-space display services. With a systematic process, RK3568 LVDS display bring-up can be completed reliably and reused across similar embedded SBC projects.