基于tiny210的四线触摸屏驱动修改(一)

来源:互联网 发布:淘宝怎么开通客服 编辑:程序博客网 时间:2024/05/21 17:03

开发板: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驱动程序。由于代码太长,因此另起一章。


原创粉丝点击