分类: LINUX
2009-02-10 20:56:05
|
2410移植触摸屏驱动
by hipboi ee team
主机:ubuntu 8.10 x86_64
交叉编译器:/usr/local/arm/3.3.2/bin/arm-linux-
内核版本:2.6.22
触摸屏的驱动patch来自openmoko,而openmoko wiki上说触摸屏驱动来自IPAQ-H1940 Project。
我是以前用mokomakefile编译neo 1973的rootfs时保留的那些patch,可以从openmoko的svn得到。
我传到这里下载。
直接打这个patch就能工作,不过记得选上 System Type ---> S3C2410 Machines ---> IPAQ H1940。
我没有直接打patch,而是根据patch修改而来。
改动的文件有
arch/arm/plat-s3c24xx/devs.c 修改
include/asm-arm/plat-s3c24xx/devs.h 修改
arch/arm/mach-s3c2410/mach-smdk2410.c 修改
drivers/input/touchscreen/Kconfig 修改
drivers/input/touchscreen/Makefile 修改
drivers/input/touchscreen/s3c2410_ts.c 新增
下面是修改过程
arch/arm/plat-s3c24xx/devs.c 里加上头文件
#include
在合适的地方加上
/* Touchscreen */
struct platform_device s3c_device_ts = {
.name = "s3c2410-ts",
.id = -1,
};
EXPORT_SYMBOL(s3c_device_ts);
static struct s3c2410_ts_mach_info s3c2410ts_info;
void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info)
{
memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info));
s3c_device_ts.dev.platform_data = &s3c2410ts_info;
}
EXPORT_SYMBOL(set_s3c2410ts_info);
====================
include/asm-arm/plat-s3c24xx/devs.h里加上
extern struct platform_device s3c_device_ts;
=====================
arch/arm/mach-s3c2410/mach-smdk2410.c
加上头文件
#include
在合适的地方加上
/*Config for TouchScreen*/
static struct s3c2410_ts_mach_info MY2410_ts_cfg __initdata = {
.delay = 10000,
.presc = 49,
.oversampling_shift = 2,
};
在static struct platform_device *smdk2410_devices[] __initdata结构体里
加上&s3c_device_ts,像这样
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_ts,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
};
在static void __init smdk2410_init(void)函数里加上
set_s3c2410ts_info(&MY2410_ts_cfg);
================================
只剩下drivers/input/touchscreen/s3c2410_ts.c这个真正的驱动文件了,
它的内容如下。
编译,下载,运行
测试触摸屏
内核启动信息里有
s3c2410 TouchScreen successfully loaded
input: s3c2410 TouchScreen as /class/input/input0
dev 目录下多了一个主设备号为13的ts0设备
cat /sys/class/input/input0/name结果为
s3c2410 TouchScreen
我cat /dev/ts0 然后触摸屏幕,打印出来的是乱码。
改变printk 打印级别
echo 8 > /proc/sys/kernel/printk
打印所有内核信息,再触摸,有坐标显示了。:)