2410移植触摸屏驱动

来源:互联网 发布:c语言break语句 编辑:程序博客网 时间:2024/04/27 15:37

主机: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 <asm/arch/ts.h>

在合适的地方加上

/* 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 <asm/arch/ts.h>

在合适的地方加上

/*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

打印所有内核信息,再触摸,有坐标显示了。:)