日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

A20 触摸屏配置

發布時間:2023/12/10 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 A20 触摸屏配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 触摸屏配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。