基于tiny210的四线触摸屏驱动修改(一)
开发板:tiny210内核:linux-2.6.35.7触摸屏:3.5寸触摸屏 由于tiny210默认的触摸屏采用的是一线触摸,所使用的驱动是[*]Mini210 1-Wire host and Touch Screen Driver,而现在要使用四线触摸,因此配置内核如下: Device Drivers ---> Input device support
开发板:tiny210
内核:linux-2.6.35.7
触摸屏:3.5寸触摸屏
由于tiny210默认的触摸屏采用的是一线触摸,所使用的驱动是[*]Mini210 1-Wire host and Touch Screen Driver,而现在要使用四线触摸,因此配置内核如下:
Device Drivers --->
Input device support --->
[*] Touchscreens --->
<*> S3C touchscreen driver
< > Mini210 1-Wire host and Touch Screen Driver
在/arch/arm/mach-s5pv210/mach-mini210.c找到s3c_device_1wire,并配置如下:
#ifdef CONFIG_TOUCHSCREEN_S3C
&s3c_device_ts,
#endif
#ifdef CONFIG_TOUCHSCREEN_1WIRE
&s3c_device_1wire,
#endif
根据tiny210的datasheet,开发板是支持两个触摸屏的,分别是Touch Screen0和Touch Screen1,在此我们接的是Touch Screen1,所以我们使用的ADC Control Register(7.7.1.1章节)是TSADCCON1,它的地址是 0xE170_1000。而内核中并没有该寄存器的定义,因此我们在/arch/arm/mach-s5pv210/include/mach/map.h定义如下:
#define S5PV2XX_PA_ADC1 (0xE1701000)
#define S3C_PA_ADC1 S5PV2XX_PA_ADC1接下来我们在/arch/arm/mach-s5pv210/mach-mini210.c中根据datasheet修改其中针对触摸屏驱动的相关参数:
#if defined(CONFIG_TOUCHSCREEN_S3C) static struct s3c_ts_mach_info s3c_ts_platform __initdata = { .delay = 10000, .presc = 49, .oversampling_shift = 6,//2 .resol_bit = 10,//12 .s3c_adc_con = ADC_TYPE_2, };
/* Touch srcreen */ static struct resource s3c_ts_resource[] = { [0] = { .start = S3C_PA_ADC1, .end = S3C_PA_ADC1 + SZ_4K - 1, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ_PENDN1, .end = IRQ_PENDN1, .flags = IORESOURCE_IRQ, }, [2] = { .start = IRQ_ADC1, .end = IRQ_ADC1, .flags = IORESOURCE_IRQ, } };
struct platform_device s3c_device_ts = { .name = "s3c-ts", .id = -1, .num_resources = ARRAY_SIZE(s3c_ts_resource), .resource = s3c_ts_resource, };
void __init s3c_ts_set_platdata(struct s3c_ts_mach_info *pd) { struct s3c_ts_mach_info *npd;
npd = kmalloc(sizeof(*npd), GFP_KERNEL); if (npd) { memcpy(npd, pd, sizeof(*npd)); s3c_device_ts.dev.platform_data = npd; } else { pr_err("no memory for Touchscreen platform data\n"); } } #endif |
下来修改/drivers/input/touchscreen/ts-s3c.c驱动程序。由于代码太长,因此另起一章。
更多推荐
所有评论(0)