屏幕配置
RGB
配置 Uboot
Device Drivers
Graphics support
ArtInChip Graphics --->
[*] Enable ArtInChip Video Support
[*] ArtInChip display rgb support
[ ] ArtInChip display lvds support
[ ] ArtInChip display mipi-dsi support
<*> ArtInChip Panel Drivers (ArtInChip general RGB panel) --->
配置 Kernel
在 Luban 根目录下执行 make km,进入 Kernel 的功能配置界面,使能显示模块驱动:
Device Drivers
Graphics support
ArtInChip Graphics --->
<*> ArtInChip Framebuffer support
[*] ArtInChip display rgb support
[ ] ArtInChip display lvds support
[ ] ArtInChip display mipi-dsi support
<*> ArtInChip Panel Drivers (ArtInChip general RGB panel) --->
uboot dts
Uboot 如果要进行显示,则声明相应的配置为预加载,以 demo88_nand 工程为例,文件为 target/d211/demo88_nand/board-u-boot.dtsi
声明通路&disp {
u-boot,dm-pre-reloc;
fb0: fb@0 {
u-boot,dm-pre-reloc;
port {
fb0_out: endpoint {
u-boot,dm-pre-reloc;
}
};
};
};
&de0 {
u-boot,dm-pre-reloc;
port@0 {
de0_in: endpoint {
u-boot,dm-pre-reloc;
};
};
port@1 {
de0_out: endpoint {
u-boot,dm-pre-reloc;
};
};
};
&rgb0 { //RGB
u-boot,dm-pre-reloc;
port@0 {
rgb0_in: endpoint {
u-boot,dm-pre-reloc;
};
};
port@1 {
rgb0_out: endpoint {
u-boot,dm-pre-reloc;
};
};
};
声明屏幕参数panel_rgb {
u-boot,dm-pre-reloc;
port {
panel_rgb_in: endpoint {
u-boot,dm-pre-reloc;
};
};
display-timings {
u-boot,dm-pre-reloc;
timing0: 1024x600 {
u-boot,dm-pre-reloc;
};
};
};
声明屏幕引脚lcd_rgb565_ld_pins: lcd-1 {
u-boot,dm-pre-reloc;
pins {
u-boot,dm-pre-reloc;
};
};
系统 dts
- 配置通路通过 port 和 status 结点,定义一条数据通道:
fb | de | | rgb | panel port --> port0 port1 --> port0 port1 --> port &fb0 { port { fb0_out: endpoint { remote-endpoint = <&de0_in>; }; }; }; &de0 { status = "okay"; port@0 { reg = <0>; de0_in: endpoint { remote-endpoint = <&fb0_out>; }; port@1 { reg = <1>; de0_out: endpoint { remote-endpoint = <&rgb0_in>; //RGB } }; }; &rgb0 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&lcd_rgb565_ld_pins>; //RGB pinctrl-1 = <&lcd_rgb565_ld_sleep_pins>; status = "okay"; port@0 { reg = <0>; rgb0_in: endpoint { remote-endpoint = <&de0_out>; } }; port@1 { reg = <1>; rgb0_out: endpoint { remote-endpoint = <&panel_rgb_in>; //RGB }; }; }
- 配置屏幕参数
其中类似 enable-gpios 控制引脚需要根据实际显示屏的需要增加或减少,驱动中做相应修改, rgb-mode 和 interface-format 需要从规格书中获取, data-order data-mirror 需要根据板级走线的顺序设置相关参数。 clock-phase 需要根据最终实际的显示效果做相应调整。 关于参数详细的解析,参考 Panel_RGB 的配置说明。
panel_rgb { compatible = "artinchip,aic-general-rgb-panel"; status = "okay"; enable-gpios = <&gpio_e 19 GPIO_ACTIVE_HIGH>; sleep-gpios = <&gpio_e 15 GPIO_ACTIVE_HIGH>; rgb-mode = <PRGB>; interface-format = <PRGB_16BIT_LD>; clock-phase = <DEGREE_0>; data-order = <RGB>; disp-dither = <DITHER_RGB565>; port { panel_rgb_in: endpoint { remote-endpoint = <&rgb0_out>; }; }; display-timings { native-mode = <&timing0>; timing0: 1024x600 { lock-frequency = <52000000>; hactive = <1024>; vactive = <600>; hback-porch = <160>; hfront-porch = <160>; hsync-len = <20>; vback-porch = <12>; vfront-porch = <20>; vsync-len = <3>; de-active = <1>; pixelclk-active = <1>; }; };
- 配置引脚
引脚的配置统一在 d211-pinctrl.dtsi 中完成,在 rgb0 节点中直接进行了引用:
&rgb0 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&lcd_rgb565_ld_pins>; pinctrl-1 = <&lcd_rgb565_ld_sleep_pins>; status = "okay"; ...... };
LVDS
LVDS 屏的调试和 RGB 类似,只需要把规格书中所描述的时序和规格参数加入相应的配置文件即可,也不需要额外的驱动程序。
uboot 配置
在 Luban 根目录下执行 make um,进入 uboot 的功能配置界面,使能显示模块驱动:
Device Drivers
Graphics support
ArtInChip Graphics --->
[*] Enable ArtInChip Video Support
[ ] ArtInChip display rgb support
[*] ArtInChip display lvds support
[ ] ArtInChip display mipi-dsi support
<*> ArtInChip Panel Drivers (ArtInChip general LVDS panel) --->
kernel 配置
在 Luban 根目录下执行 make km,进入 kernel 的功能配置界面,使能显示模块驱动:
Device Drivers
Graphics support
ArtInChip Graphics --->
<*> ArtInChip Framebuffer support
[ ] ArtInChip display rgb support
[*] ArtInChip display lvds support
[ ] ArtInChip display mipi-dsi support
<*> ArtInChip Panel Drivers (ArtInChip general LVDS panel) --->
uboot dts
uboot 如果要进行显示,则声明相应的配置为预加载,以 demo128_nand 工程为例,文件为 target/d211/demo128_nand/board-u-boot.dtsi
声明通路&disp {
u-boot,dm-pre-reloc;
fb0: fb@0 {
u-boot,dm-pre-reloc;
port {
fb0_out: endpoint {
u-boot,dm-pre-reloc;
}
};
};
};
&de0 {
u-boot,dm-pre-reloc;
port@0 {
de0_in: endpoint {
u-boot,dm-pre-reloc;
};
};
port@1 {
de0_out: endpoint {
u-boot,dm-pre-reloc;
};
};
};
&lvds0 { //lvds
u-boot,dm-pre-reloc;
port@0 {
lvds0_in: endpoint {
u-boot,dm-pre-reloc;
};
};
port@1 {
lvds0_out: endpoint {
u-boot,dm-pre-reloc;
};
};
};
声明屏幕参数panel_lvds {
u-boot,dm-pre-reloc;
port {
panel_lvds_in: endpoint {
u-boot,dm-pre-reloc;
};
};
display-timings {
u-boot,dm-pre-reloc;
timing1: 1024x600 {
u-boot,dm-pre-reloc;
};
};
};
lvds1_pins: lvds1-0 {
u-boot,dm-pre-reloc;
pins {
u-boot,dm-pre-reloc;
};
};
系统 DTS 参数
- 配置通路通过 port 和 status 结点,定义一条数据通道:
fb | de | | lvds | panel port --> port0 port1 --> port0 port1 --> port
- 配置屏幕参数
panel_lvds { compatible = "artinchip,aic-general-lvds-panel"; data-mapping = "vesa-24"; data-channel = "single-link1"; status = "okay"; enable-gpios = <&gpio_c 7 GPIO_ACTIVE_HIGH>; port { panel_lvds_in: endpoint { remote-endpoint = <&lvds0_out>; }; }; display-timings { native-mode = <&timing1>; timing1: 1024x600 { clock-frequency = <52000000>; hactive = <1024>; vactive = <600>; hback-porch = <160>; hfront-porch = <160>; hsync-len = <20>; vback-porch = <20>; vfront-porch = <12>; vsync-len = <3>; de-active = <1>; pixelclk-active = <1>; }; }; };
- 配置引脚
引脚的配置统一在 d211-pinctrl.dtsi 中完成,在 rgb0 节点中直接进行了引用
&lvds0 { pinctrl-names = "default"; pinctrl-0 = <&lvds1_pins>; status = "okay"; ...... }
MIPI
每一款 MIPI 屏都需要一个独立的驱动程序,因此调试 MIPI 屏时,不仅需要在 DTS 中设置参数,还需要在 kernel 和 uboot 中添加屏幕所对应的驱动:
uboot 配置
Device Drivers
Graphics support
ArtInChip Graphics --->
[*] Enable ArtInChip Video Support
[ ] ArtInChip display rgb support
[ ] ArtInChip display lvds support
[ ] ArtInChip display mipi-dsi support
<*> ArtInChip Panel Drivers (ArtInChip panel driver for B080XAN) --->
kernel 配置
在 Luban 根目录下执行 make km,进入 kernel 的功能配置界面,使能显示模块驱动:
Device Drivers
Graphics support
ArtInChip Graphics --->
<*> ArtInChip Framebuffer support
[ ] ArtInChip display rgb support
[ ] ArtInChip display lvds support
[*] ArtInChip display mipi-dsi support
<*> ArtInChip Panel Drivers (ArtInChip panel driver for B080XAN) --->
uboot dts
uboot 如果要进行显示,则声明相应的配置为预加载,以 demo88_nand 工程为例,文件为 target/d211/demo88_nand/board-u-boot.dtsi
声明通路&disp {
u-boot,dm-pre-reloc;
fb0: fb@0 {
u-boot,dm-pre-reloc;
port {
fb0_out: endpoint {
u-boot,dm-pre-reloc;
};
};
};
};
&de0 {
u-boot,dm-pre-reloc;
port@0 {
de0_in: endpoint {
u-boot,dm-pre-reloc;
};
};
port@1 {
de0_out: endpoint {
u-boot,dm-pre-reloc;
};
};
};
&dsi0 { //mipi dsi
u-boot,dm-pre-reloc;
port@0 {
dsi0_in: endpoint {
u-boot,dm-pre-reloc;
};
};
port@1 {
dsi0_out: endpoint {
u-boot,dm-pre-reloc;
};
};
};
声明屏幕参数panel_dsi {
u-boot,dm-pre-reloc;
port {
panel_dsi_in: endpoint {
u-boot,dm-pre-reloc;
};
};
};
声明屏幕引脚dsi_pins: dsi-0 {
u-boot,dm-pre-reloc;
pins {
u-boot,dm-pre-reloc;
};
};
系统 dts
- 配置通路通过 port 和 status 结点,定义了一条数据通道
fb | de | | mipi | panel port --> port0 port1 --> port0 port1 --> port
&fb0 { port { fb0_out: endpoint { remote-endpoint = <&de0_in>; }; }; }; &de0 { status = "okay"; port@0 { reg = <0>; de0_in: endpoint { remote-endpoint = <&fb0_out>; }; }; port@1 { reg = <1>; de0_out: endpoint { remote-endpoint = <&dsi0_in>; //mipi dsi }; }; }; &dsi0 { pinctrl-names = "default"; pinctrl-0 = <&dsi_pins>; status = "okay"; data-clk-inverse; port@0 { reg = <0>; dsi0_in: endpoint { remote-endpoint = <&de0_out>; }; }; port@1 { reg = <1>; dsi0_out: endpoint { remote-endpoint = <&panel_dsi_in>; }; }; };
- 配置屏幕参数
panel_dsi { compatible = "artinchip,aic-dsi-panel-simple"; status = "okay"; enable-gpios = <&gpio_c 6 GPIO_ACTIVE_HIGH>; port { panel_dsi_in: endpoint { remote-endpoint = <&dsi0_out>; }; }; };
- 配置引脚
引脚的配置统一在 d211-pinctrl.dtsi 中完成,在 rgb0 节点中直接进行了引用
&dsi0 { pinctrl-names = "default"; pinctrl-0 = <&dsi_pins>; status = "okay"; ...... }
背光配置
panel_xxx {
compatible = "artinchip,aic-general-lvds-panel";
status = "okay";
enable-gpios = <&gpio_c 7 GPIO_ACTIVE_HIGH>; //背光控制引脚,须和原理图一致
port {
panel_lvds_in: endpoint {
remote-endpoint = <&lvds0_out>;
};
};
PWM 控制背光
- 在 board.dts 的 panel 节点,添加 backlight
节点:
panel_xxx { compatible = "artinchip,aic-general-lvds-panel"; status = "okay"; //enable-gpios = <&gpio_c 7 GPIO_ACTIVE_HIGH>; backlight = <&backlight>;//添加 backlight port { panel_lvds_in: endpoint { remote-endpoint = <&lvds0_out>; }; };
- 在 board.dts 中,使能 backlight
节点:
backlight: backlight { compatible = "pwm-backlight"; /* pwm node name; pwm device No.; period_ns; pwm_polarity */ pwms = <&pwm 0 1000000 0>; //硬件对应的哪一路 PWM 接口,需要和原理图确认 brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>; //每一级对应的占空百分比 default-brightness-level = <6>; status = "okay"; };
- 在 board.dts 中,使能对应的
PWM:
&pwm { status = "okay"; //PWM 节点总开关 pinctrl-names = "default"; pinctrl-0 = <&pwm0_pins_d>; //添加背光控制 pinmux 引脚 /* mode: up-count, down-count, up-down-count action: none, low, high, inverse */ pwm0 { aic,mode = "up-count"; aic,tb-clk-rate = <24000000>; aic,rise-edge-delay = <10>; aic,fall-edge-delay = <10>; /* CBD, CBU, CAD, CAU, PRD, ZRO */ aic,action0 = "none", "none", "none", "low", "none", "high"; aic,action1 = "none", "none", "none", "high", "none", "low"; status = "okay"; //使能硬件对应那一路的 PWM 子节点 }; ...... };
- 在 board-u-boot.dtsi 中,添加对应的 PWM
节点:
/ { ...... backlight: backlight { u-boot,dm-pre-reloc; }; }; &pwm { u-boot,dm-pre-reloc; pwm0 { u-boot,dm-pre-reloc; }; ...... }; &pinctrl { ...... pwm0_pins_d: pwm0-3 { u-boot,dm-pre-reloc; pins { u-boot,dm-pre-reloc; }; }; ...... };
- 确认内核中,打开如下配置
CONFIG_PWM=y CONFIG_PWM_ARTINCHIP=y CONFIG_BACKLIGHT_PWM=y
- 确认 uboot
中,打开如下配置
CONFIG_PWM_ARTINCHIP=y CONFIG_BACKLIGHT_PWM=y
PWM 背光测试调试
-
确认硬件信号的连通性。
-
查看启动 log 是否有异常。
-
查看如下命令节点是否存在,并通过命令调节背光或测试 PWM 输出信号:
echo 5 > /sys/class/backlight/backlight/brightness //设置 brightness 级数, 对应到 backlight 节点设置的占空百分比。
屏幕调试
屏幕的调试尽量在 kernel 中完成,然后再移植到 uboot 中。