⑧tiny4412 Linux驱动开发之触摸屏(TouchScreen)驱动程序

本文详细介绍了在Linux环境下,针对Tiny4412平台如何开发触摸屏驱动,特别是针对CTP_ITE7260型号的触摸屏。通过分析电路图和已有的驱动代码,实现了中断响应的驱动程序,并在内核编译及加载过程中遇到的问题和解决方法进行了分享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节主要是说一下触摸屏驱动的编写. 触摸屏输入输入设备,所以我们本次通过输入子系统的方式来实现,输入子系统的框架图如下:

然后,我们看一线电路图的触摸屏部分:

可以看到触摸屏是通过I2C接口进行数据和命令的传输,接在了i2c1上面,然后,同时接了一个中断引脚,这个中断引脚主要是在初始化和有数据时使用,比如当用户按下触摸屏产生信息后,首先会产生一个中断,告诉soc有数据来了,这个我们就可以把相关驱动设置为中断响应方式,而不必用轮询的方式来做,这样可以大大提高代码质量和为CPU减负,当然,其实还有一种途径就是直接通过i2c产生中断,这种方式在STM32用的是比较平常的,这里则没有这么用,接下来,我们需要在mach-tiny4412.c里配置i2c1数组,实际上,友善之臂已经移植好了,然后,我们重点关注驱动本身的实现,通过查看友善之臂提供的文档,发现,其实相关的触摸屏驱动已经给我们写好了,我用的是X710的屏幕,此屏幕友善之臂没有资料,所以,还是按照老套路来,直接查看源代码,来猜测相关信息是什么.

通过查看tiny4412-lcds.c发现如下数组:

static struct {
	char *name;
	struct s3cfb_lcd *lcd;
	int ctp;
} tiny4412_lcd_config[] = {
	{ "HD700",	&wxga_hd700, 1 },
	{ "HD701",	&wxga_hd700, 1 },
	{ "S70",	&wvga_s70,   1 },
	{ "S702",	&wvga_s70,   1 },
	{ "S70D",	&wvga_s70d,  1 },
	{ "W50",	&wvga_w50,   0 },
	{ "W101",	&wsvga_w101, 1 },
	{ "X710",	&wsvga_x710, CTP_ITE7260 },
	{ "A97",	&xga_a97,    0 },
	{ "LQ150",	&xga_lq150,  1 },
	{ "L80",	&vga_l80,    1 },
	{ "HD101",	&wxga_hd101, 1 },
	{ "BP101",	&wxga_bp101, 1 },
	{ "HDM",	&hdmi_def,   0 },	/* Pls keep it at last */
};

我们用的是X710,所以,数组中的第7项的第3个成员是CTP_ITE7260,那对应的触摸屏驱动应该是和CTP_ITE7260有关的驱动了,通过查看源代码的驱动目录:\drivers\input\touchscreen在这个目录下发现了it7260_mts.c这个文件,这个就是X710对应的触摸屏的驱动程序了,我们make menuconfig,然后在Device Drivers  --->Input device support  --->Touchscreens  --->选中里面的ITE it7260 TouchScreen driver.

之后,为了尽快看到演示效果,本此不写测试程序了,直接让触摸屏驱动打印log,直接查看log对不对就好了,所以,我们需要修改it7260_mts.c这个程序,主要是如下两个地方,如下:

it7260_ts_poscheck() @ it7260_mts.c
(1)
printk(KERN_DEBUG "it7260: key number %d\n", buf[1]);
改为:
printk("it7260: key number %d\n", buf[1]);

(2)
#if 0
			printk("finger %d >  (%4d, %4d),  event = %d\n",
					i, ypos[i], xpos[i], event[i]);
#endif
改为:
if 1
	...
#endif

之后再把tiny4412-lcds.c文件里做如下修改:

unsigned int tiny4412_get_ctp(void)
{
+++	lcd_idx = 7;
	if (tiny4412_lcd_config[lcd_idx].ctp)
		return ctp_type;
	else
		return CTP_NONE;
}

然后make -j4重新编译新的内核,然后把内核放入T卡启动它,就可以看到如下效果:

当然,如果这么简单,就不用写这篇博客了,接下来,让我们自己去实现触摸屏的驱动,因为没有资料,有一些关于寄存器的操作都是参考原来的it7260_mts.c中的内容.相关驱动程序如下(关键地方都给出了注释,所以程序就不讲了):

/**
 * 本例程是it7260触摸屏驱动程序
 * 物理器件这边引出的是i2c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值