A20 触摸屏配置
来源:互联网 发布:反洗钱系统数据抓取 编辑:程序博客网 时间:2024/05/16 17:31
A20 源码里现在支持的触摸屏应该是三种,ft5x, gt82x, gslX680
源码分别是 ft5x_ts.c, gt82x.c gslX680.c。
在这三个文件头部都有触摸屏配置结构体的引用。
extern struct ctp_config_info config_info;
搜索源码可以看到用到了以下几处。
ctp_get_system_config里(被ft5x_ts_init调用)
twi_id = config_info.twi_id;
screen_max_x = config_info.screen_max_x;
screen_max_y = config_info.screen_max_y;
revert_x_flag = config_info.revert_x_flag;
revert_y_flag = config_info.revert_y_flag;
exchange_x_y_flag = config_info.exchange_x_y_flag;
ft5x_ts_init函数里
config_info.ctp_used
很明显触摸屏几个关键参数是从外部的config_info这个结构体得到了。搜寻这个结构体。
在include/linux/ctp.h里找到他的定义
struct ctp_config_info{
int ctp_used;
__u32 twi_id;
int screen_max_x;
int screen_max_y;
int revert_x_flag;
int revert_y_flag;
int exchange_x_y_flag;
u32 irq_gpio_number;
u32 wakeup_gpio_number;
#ifdef TOUCH_KEY_LIGHT_SUPPORT
u32 key_light_gpio_number;
#endif
};
在/drivers/input/init_ctp.c里找到变量的定义。
struct ctp_config_info config_info;
并且在ctp_fetch_sysconfig_para这个函数中给config_info赋值。
都是通过script_get_item从配置文件里取出值来给config_info赋值。
script_get_item("ctp_para", "ctp_used", &val)
config_info.ctp_used = val.val;
script_get_item("ctp_para", "ctp_twi_id", &val)
config_info.twi_id = val.val;
script_get_item("ctp_para", "ctp_screen_max_x", &val)
config_info.screen_max_x = val.val;
script_get_item("ctp_para", "ctp_screen_max_y", &val)
config_info.screen_max_y = val.val;
script_get_item("ctp_para", "ctp_revert_x_flag", &val)
config_info.revert_x_flag = val.val;
script_get_item("ctp_para", "ctp_revert_y_flag", &val)
config_info.revert_y_flag = val.val;
script_get_item("ctp_para", "ctp_exchange_x_y_flag", &val)
config_info.exchange_x_y_flag = val.val;
但是,从上面的代码可以看到,ctp_name没有用到,那内核是如何知道我们用的是哪种触摸屏呢。
搜索了内核源码发现这个文件,drivers/input/device.c
发现这个结构体定义和赋值
struct base_info{
char name[NAME_LENGTH];
unsigned short i2c_address[ADDRESS_NUMBER];
unsigned short chip_id_reg;
unsigned short chip_id_reg_value[REG_VALUE_NUMBER];
};
static struct base_info ctps[] = {
{ "ft5x_ts", { 0x38}, 0xa3, {0x55,0x08,0x02,0x06,0xa3}},
{ "gt82x", { 0x5d}, 0xf7d, {0x13,0x27,0x28 }},
{ "gslX680", { 0x40}, 0x00, {0x00 }},
{"gt9xx_ts", {0x14, 0x5d}, 0x8140, {0x39 }},
{ "gt811", { 0x5d}, 0x715, {0x11 }},
};
从这里基本可以判端出,内核是从这个表里取得触摸芯片的信息的。但是不用配置文件,如何知道是哪个,
可以基本推测,内核是在i2c总线上去根据上面表中的芯片i2c地址通信来测试其是否存在。
好,现在我看来验证这个事情。
i2c_detect_device
i2c_device_i2c_test 用ctps里的每一个i2c地址来尝试通信,最终找到一个能用的i2c地址
chip_id_detect 用ctps里的chip_id_reg找到芯片里的id,并且和chip_id_reg_value里的值进行
匹配,实际就是找到芯片后,再确认一下芯片的id
i2c_update_device_name 将找到的ctps项中的name,就是芯片名称,拷贝到全局变量ctp_name中。
通过以上分析,发现全志的配置文件中关于触摸屏这块的配置,ctp_name, ctp_twi_addr这两个键实际是没有用的。ctp_twi_id应该配置成chip_id_reg_value里面的一个。
- A20 触摸屏配置
- A20 配置
- A20成功驱动FT5206触摸屏
- sunxi3.3-a20 配置
- A20,SPI配置
- A20-AT070TNA2配置
- A20,SPI配置
- allwinner A20 SPI配置
- A20 输出显示配置
- 全志A20 配置串口
- 微雪A20 配置 红外遥控器
- 全志A20配置使用spi 功能
- usb4-配置usb触摸屏
- Android触摸屏配置调试
- 基于全职A20平台的gsl1680控制芯片的触摸屏移植
- Mstar6A628 配置调试CVT触摸屏
- 全志A20方案双USB的host配置
- marsboard-a20-ubuntu的配置V1.0(分色排版)
- Mysql新手遇到的首要问题(使用xampp集成搭建环境)
- hibernate中的三种状态的详细分析:
- 黑马程序员- 使用LikedList模拟一个堆栈或者队列数据结构学习日记
- Linux学习笔记-系统无法启动
- Eclipse快捷键大全
- A20 触摸屏配置
- [hdu 2031] 进制转换
- 《决胜移动终端》读后感
- ..........构造函数2
- Flex 实现登录时记住用户名和密码
- POJ 2774 Long Long Message
- 【FCL】托管与非托管
- iOS多线程编程(二)NSOperationQueue
- 黑马程序员 多线程同步