[xhr4412][extension 8] LCD-4.3 & touchscreen & tslib

一、lcd

   看着这个 4.3 寸的屏幕一直没有亮过感觉莫名伤感,还是想让他可以发光发热。

   RGB lcd 硬件原理也就不讲了,网上有很多文章都有介绍。kernel 里是有 4412 lcd 的驱动,所以只要配置好设备树就可以使用了。

&pinctrl_0 {
	lcd_backlight: lcd_backlight {
		samsung,pins = "gpd0-1";
		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
		samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
		samsung,pin-val = <1>;
	};
};

&pinctrl_1 {
	lcd_power: lcd_power{
		samsung,pins = "gpl0-4";
		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
		samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
		samsung,pin-val = <1>;
	};
};

&fimd {
	pinctrl-0 = <&lcd_clk &lcd_data24 &lcd_power &lcd_backlight>;
	pinctrl-names = "default";
	status = "okay";
	samsung,invert-vclk;   // 翻转
	display-timings {
		native-mode = <&timing0>;
		timing0: timing {
			hsync-active = <1>;   // 行同步信号开始位高
			vsync-active = <1>;
			de-active = <0>;									
			clock-frequency = <24000000>;
			hactive = <480>;
			vactive = <272>;
			hfront-porch = <40>;
			hback-porch = <220>;
			hsync-len = <60>;
			vback-porch = <7>;
			vfront-porch = <21>;
			vsync-len = <10>;
		};
	};
};

   不过刚配置好 dts 启动板子后会发现 lcd 白屏,再结合启动 log,可以确定应该是时钟过低。

[    2.284053] exynos4-fb 11c00000.fimd: [drm:fimd_atomic_check] *ERROR* sclk_fimd clock too low(1500000) for requested pixel clock(24000000)

如果把上面设备树中的 clock-frequency 修改为 600000 , 就会变成这样:

在这里插入图片描述

   肉眼可见的刷新率,说明时钟过低,需要提高时钟,不过很奇怪的是从 lcd driver 源码中 (似乎) 没有看到通过 dts 配置来设置时钟,只好修改 kernel 代码来修改这个时钟了。

  • vim vim drivers/clk/samsung/clk-exynos4.c 中的 exynos4_clk_init() 函数的最后添加如下代码:
	struct clk *sclk_fimd0;

	sclk_fimd0 = __clk_lookup("sclk_fimd0");
	if (IS_ERR(sclk_fimd0)) {
		pr_info("failed to get sclk_fimd0 clock\n");
		return ;
	}
	
	if (clk_set_rate(sclk_fimd0, 800000000)) {
		pr_info("failed to clock set rate\n");
		return ;
	}
	
	pr_info("[xhr4412] sclk_fimd0 clk rate = %ld\n", clk_get_rate(sclk_fimd0));

   再次烧写启动板子,就可以正常显示了。

二、touchscreen

   触摸屏就更简单了,kernel 中仍然是有触摸屏驱动的,所以配置好 dts,将驱动编译进 kernel 即可。

在这里插入图片描述

&pinctrl_1 {
	tsc2007_irq: tsc2007_irq{
		samsung,pins = "gpx0-0";
		samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
		samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
	};
};

&i2c_7 {
	samsung,i2c-sda-delay = <100>;
	samsung,i2c-slave-addr = <0x10>;
	samsung,i2c-max-bus-freq = <40000>;
	pinctrl-0 = <&i2c7_bus>;
	pinctrl-names = "default";
	status = "okay";

	tsc2007: tsc2007@48 {
		compatible = "ti,tsc2007";
		reg = <0x48>;
		pinctrl-names = "default";
		pinctrl-0 = <&tsc2007_irq>;
		interrupt-parent = <&gpx0>;
		interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
		gpios = <&gpx0 0 0>;
		ti,x-plate-ohms = <660>;
		status = "okay";
	};
};

三、tslib

  • 官方网站:http://www.tslib.org/
  • The latest release is version 1.21 including libts library version 0.10.3, released on the 22nd of October 2019

获得源码包后:

tar Jxvf tslib-1.22.tar.xz
cd tslib-1.22/
./autogen.sh
mkdir out
./configure --host=arm-none-linux-gnueabihf --prefix=$(pwd)/out
make
make install
cd out/
cp -rdp * $ROOTFS_DIR  # 复制到跟文件系统

在开发板上设置环境变量:

export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none  # 终端控制台设为 NULL
export TSLIB_FBDEVICE=/dev/fb0 

   拷贝到 xhr4412 后,使用命令 ts_calibrate ,然后在屏幕上点击,进行校准。

   校准成功后,再使用命令 ts_test 进行测试。

xhr4412测试成功

参考

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值