$ source build/envsetup.sh$ lunch$ 7$ make$ mboot$ pack打包好的地址为:/Tina-Linux/out/t113-mq_r/tina_t113-mq_r_uart0.img
使用phoenixcard4.2.8.zip烧录启动卡到SD卡里面去
注意需要重新适配两个设备树
修改Linux Kernel的设备树:Tina-Linux/device/config/chips/t113/configs/mq_r/board.dts
修改Uboot的设备树:Tina-Linux/device/config/chips/t113/configs/mq_r/uboot-board.dts
原版的:我的五寸屏幕会闪屏,需要修改适配!
当我们配置并行 RGB 接口时,在配置里面并不需要区分是 24 位,18 位和 16 位,最大位宽是哪种是参考 pin mux 表格,如果 LCD 屏本身支持的位宽比 SoC 支持的位宽少,当然只能选择少的一方。
因为不需要初始化,RGB 接口极少出现问题,重点关注 lcd 的 timing 的合理性,也就是lcd_ht,lcd_hspw,lcd_hbp,lcd_vt,lcd_vspw和lcd_vbp这个属性的合理性。
&lcd0 {
/* part 1 */
lcd_used = <1>;
lcd_driver_name = "default_lcd";
/* part 2 */
lcd_if = <0>;
lcd_hv_if = <0>;
/* part 3 */
lcd_width = <150>;
lcd_height = <94>;
lcd_x = <800>;
lcd_y = <480>;
lcd_dclk_freq = <33>;
lcd_hbp = <46>;
lcd_ht = <1055>;
lcd_hspw = <0>;
lcd_vbp = <23>;
lcd_vt = <525>;
lcd_vspw = <0>;
/* part 4 */
lcd_backlight = <50>;
lcd_pwm_used = <1>;
lcd_pwm_ch = <8>;
lcd_pwm_freq = <10000>;
lcd_pwm_pol = <1>;
lcd_bl_en = <&pio PD 27 1 0 3 1>;
lcd_bright_curve_en = <0>;
/* part 5 */
lcd_frm = <0>;
lcd_io_phase = <0x0000>;
lcd_gamma_en = <0>;
lcd_cmap_en = <0>;
lcd_hv_clk_phase = <0>;
lcd_hv_sync_polarity= <0>;
/* part 6 */
lcd_power = "vcc-lcd";
lcd_pin_power = "vcc-pd";
pinctrl-0 = <&rgb24_pins_a>;
pinctrl-1 = <&rgb24_pins_b>;
};
上面是典型并行 RGB 接口 board.dts 配置示例,其中用空行把配置分成几个部分
屏幕参数:


照着屏幕规格书写的设备树:
&lcd0 {
lcd_used = <1>; // 启用lcd
lcd_driver_name = "default_lcd"; // 使用 default_lcd 驱动
lcd_backlight = <50>;
lcd_if = <0>; // 0:rgb 4:dsi
// Part 1
lcd_x = <800>; // 宽度
lcd_y = <480>; // 高度
lcd_width = <108>; // 屏幕物理宽度,单位 mm
lcd_height = <65>; // 屏幕物理高度,单位 mm
// Part 2
lcd_pwm_used = <1>; // 启用背光 PWM
lcd_pwm_ch = <7>; // 使用 PWM 通道 7
lcd_pwm_freq = <50000>; // PWM 频率,单位 Hz
lcd_pwm_pol = <0>; // 背光 PWM 的极性
lcd_pwm_max_limit = <255>; // 背光 PWM 的最大值(<=255)
// Part 3
lcd_dclk_freq = <29>; // 屏幕时钟,单位 MHz
lcd_ht = <928>; // hsync total cycle(pixel)
lcd_hbp = <88>; // hsync back porch(pixel) + hsync plus width(pixel);
lcd_hspw = <48>; // hsync plus width(pixel)
lcd_vt = <525>; // vsync total cycle(line)
lcd_vbp = <32>; // vsync back porch(line) + vysnc plus width(line)
lcd_vspw = <1>; // vsync plus width(pixel)
// Part 4
lcd_lvds_if = <0>;
lcd_lvds_colordepth = <1>;
lcd_lvds_mode = <0>;
lcd_frm = <0>; // 0:关闭; 1:启用rgb666抖动; 2:启用rgb656抖动
lcd_io_phase = <0x0000>;
lcd_gamma_en = <0>;
lcd_bright_curve_en = <0>;
lcd_cmap_en = <0>;
deu_mode = <0>;
lcdgamma4iep = <22>;
smart_color = <90>;
// Part 5
pinctrl-0 = <&rgb18_pins_a>;
pinctrl-1 = <&rgb18_pins_b>;
};
/Tina-Linux/lichee/linux-5.4/arch/arm/boot/dts/sun8iw20p1.dtsi
rgb18_pins_a: rgb18@0 {
pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", \
"PD6", "PD7", "PD8", "PD9", "PD10", "PD11", \
"PD12", "PD13", "PD14", "PD15", "PD16", "PD17", \
"PD18", "PD19", "PD20", "PD21";
function = "lcd0";
drive-strength = <30>;
bias-disable;
};
rgb18_pins_b: rgb18@1 {
pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", \
"PD6", "PD7", "PD8", "PD9", "PD10", "PD11", \
"PD12", "PD13", "PD14", "PD15", "PD16", "PD17", \
"PD18", "PD19", "PD20", "PD21";
function = "io_disabled";
bias-disable;
};
cat /dev/urandom > /dev/fb0
cat /dev/zero > /dev/fb0

echo 8 > /sys/class/disp/disp/attr/colorbar

我的屏幕的电容屏芯片是汇顶:GT911
make kernel_menuconfig
Device Drivers --->
Input device support --->
[*] Touchscreens --->
<*> Goodix I2C touchscreen
<*> gt9xxnew touchscreen driver

根据原理图修改一下中断引脚和复位引脚如下:
&twi2 {
clock-frequency = <400000>;
pinctrl-0 = <&twi2_pins_a>;
pinctrl-1 = <&twi2_pins_b>;
pinctrl-names = "default", "sleep";
dmas = <&dma 45>, <&dma 45>;
dma-names = "tx", "rx";
status = "okay";
/* pcf8574-usage:
* only use gpio0~7, 0 means PP0.
* pin set:
* gpios = <&pcf8574 0 GPIO_ACTIVE_LOW>;
* interrupt set:
* interrupt-parent = <&pcf8574>;
* interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
*/
pcf8574: gpio@38 {
compatible = "nxp,pcf8574";
reg = <0x38>;
gpio_base = <2020>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&pio>;
interrupts = <PB 2 IRQ_TYPE_EDGE_FALLING>;
status = "disabled";
};
ctp@14 {
compatible = "allwinner,goodix";
device_type = "ctp";
reg = <0x14>;
status = "okay";
ctp_name = "gt9xxnew_ts";
ctp_twi_id = <0x2>;
ctp_twi_addr = <0x14>;
ctp_screen_max_x = <0x320>;
ctp_screen_max_y = <0x1e0>;
ctp_revert_x_flag = <0x0>;
ctp_revert_y_flag = <0x0>;
ctp_exchange_x_y_flag = <0x0>;
ctp_int_port = <&pio PB 3 GPIO_ACTIVE_HIGH>; // 中断
ctp_wakeup = <&pio PB 2 GPIO_ACTIVE_HIGH>; // 复位
};
};
make menuconfig
Libraries --->
<*> tslib......... tslib is an abstraction layer for touchscreen panel events
上电信息
[ 3.190476] get ctp_power is fail, -22
[ 3.194658] get ctp_power_ldo_vol is fail, -22
[ 3.199665] sunxi_ctp_startup: ctp_power_io is invalid.
[ 3.205523] get ctp_gesture_wakeup fail, no gesture wakeup
[ 3.211672] gt9xxnew_ts 2-0014: 2-0014 supply ctp not found, using dummy regulator
[ 3.409439] input: gt9xxnew_ts as /devices/virtual/input/input1
设备节点
$ ls /dev/input/
event0 event1 event2 mice