需求和目的
原来的平台已经支持了800x1280的竖屏,现在要让它支持1024x600的横屏,而且触摸也变了。
步骤
1.编译
按对方给的文档先制作一个编译脚本
export LC_ALL=C
source build/envsetup.sh
lunch rk3562_t-userdebug
./build.sh -UCKAu -d ido-evb3562-v1b-dsi-mipi -J32
测试编译ok,下载ok,启动ok。有一个问题是usb的adb需要开机时候接着usb才能识别到。
2.修改lcd设备树
原来平台已经支持了mipi的lcd,正好需要修改的只是换个lcd,利用原来的设备树进行修改
sdk/kernel-5.10/arch/arm64/boot/dts/rockchip/ido-evb3562j-v1b-dsi-mipi.dts
&dsi {
status = "okay";
//rockchip,lane-rate = <1000>;
dsi_panel: panel@0 {
status = "okay";
compatible = "simple-panel-dsi";
reg = <0>;
power-supply = <&vcc3v3_lcd_n>;
pinctrl-names = "default";
pinctrl-0 = <&lcd_rst_gpio>;
+ enable-gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;
- enable-delay-ms = <60>;
- prepare-delay-ms = <60>;
- unprepare-delay-ms = <60>;
- disable-delay-ms = <60>;
+ enable-delay-ms = <35>;
+ prepare-delay-ms = <6>;
+ unprepare-delay-ms = <0>;
+ disable-delay-ms = <20>;
panel-init-sequence = [
+ 15 00 02 80 58
+ 15 00 02 81 47
+ 15 00 02 82 D4
+ 15 00 02 83 88
+ 15 00 02 84 A9
+ 15 00 02 85 C3
+ 15 00 02 86 82
];
panel-exit-sequence = [
- 05 00 01 28
- 05 00 01 10
+ 05 05 01 28
+ 05 78 01 10
];
disp_timings0: display-timings {
native-mode = <&dsi_timing0>;
dsi_timing0: timing0 {
- clock-frequency = <73400000>;
- hactive = <800>;
- vactive = <1280>;
- hfront-porch = <52>;
- hsync-len = <4>;
- hback-porch = <12>;
- vfront-porch = <60>;
+ clock-frequency = <56000000>;
+ hactive = <1024>;
+ vactive = <600>;
+ hfront-porch = <160>;
+ hsync-len = <10>;
+ hback-porch = <160>;
+ vfront-porch = <12>;
vsync-len = <18>;
- vback-porch = <50>;
- hsync-active = <0>;
- vsync-active = <0>;
+ vback-porch = <23>;
+ hsync-active = <10>;
+ vsync-active = <1>;
de-active = <0>;
- pixelclk-active = <1>;
+ pixelclk-active = <0>;
};
同样的路径,同样的驱动,仅仅修改参数改成新的屏幕
3.修改设备树,触摸部分
&i2c3 {
status = "okay";
/*
gt911@14 {
compatible = "goodix,gt9xx";
reg = <0x14>;
pinctrl-names = "default";
pinctrl-0 = <&touch_gpio>;
goodix_irq_gpio = <&gpio0 RK_PB6 IRQ_TYPE_LEVEL_LOW>;
goodix_rst_gpio = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;
// touchscreen-inverted-y;
// touchscreen-swapped-x-y;
status = "okay";
};
};
*/
+*/
+
+
+ focaltech: ft5206@38 {
+ compatible = "focaltech,fts";
+ reg = <0x38>;
+ interrupts = <&gpio0 RK_PB6 IRQ_TYPE_LEVEL_LOW>;
+ focaltech,irq-gpio = <&gpio0 RK_PB6 IRQ_TYPE_LEVEL_LOW>; // GPIO4 D4(3X8+4=28)
+ focaltech,reset-gpio = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; // GPIO1 C7(2X8+7=23)
+ focaltech,max-touch-number = <5>;
+ //focaltech,display-coords = <0 0 1024 600>;
+ //focaltech,keys = <256 1068 64 64 128 1068 64 64 192 1068 64 64>;
+ focaltech,key-x-coord = <1024>;
+ focaltech,key-y-coord = <600>;
+ status = "okay";
+ };
+};
+
注释掉原来的gt911的触摸,改成敦泰的focaltech的触摸驱动。
4. 再次编译后下载测试
enable-gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;
试图用enable-gpios来控制io拉高开启lcd的供电,没有起作用(在rk3588的驱动里面是支持的),先用手工拉高这一路供电,现象是,背光亮了但是花屏,屏幕top上面有一些貌似android界面的内容,触摸没有反应。是否是因为分辨率从竖屏改成了横屏,造成的问题,以前早期的android版本里面对横屏竖屏是有单独的设置的。而且增量编译是否没有选择正确的资源文件?索性删除out目录重新编译一次。
还是花瓶
5. 结果
用命令dmesg查询日志发现怎么触摸还是gtp。感觉修改完全无效。
仔细检查,我改的设备树和编译脚本./build.sh -UCKAu -d ido-evb3562-v1b-dsi-mipi -J32使用的设备树有一字之差ido-evb3562j-v1b-dsi-mipi。 多了一个j后缀,j代表工业级。重新修改正确的设备树文件。
6.补充触摸
需要在config文件里面增加CONFIG_TOUCHSCREEN_FTS=y触摸就可以使用了,但是分别率还是不对,修改对应的驱动文件focaltech_touch/focaltech_core.c里面的函数fts_get_dt_coords()
找到
pdata->x_min = FTS_X_MIN_DISPLAY_DEFAULT;
pdata->y_min = FTS_Y_MIN_DISPLAY_DEFAULT;
pdata->x_max = FTS_X_MAX_DISPLAY_DEFAULT;
pdata->y_max = FTS_Y_MAX_DISPLAY_DEFAULT;
在其下面增加下面4行覆盖原来值
pdata->x_min = 0;
pdata->y_min = 0;
pdata->x_max = 1024;
pdata->y_max = 600;