1贱除、硬件原理
TP 相關(guān)的引腳有 SCL咳促、SDA、VREG_L10勘伺、INT跪腹、RST,SCL飞醉、SDA用于I2C通訊冲茸,VREG_L10用于芯片供電,INT用于產(chǎn)生外部中斷缅帘,RST是復(fù)位引腳轴术。
2、涉及到的知識(shí)點(diǎn)
I2C子系統(tǒng):(https://www.cnblogs.com/deng-tao/p/6130080.html)
INPUT輸入子系統(tǒng):(https://www.cnblogs.com/deng-tao/p/6094049.html)
工作隊(duì)列:(http://bgutech.blog.163.com/blog/static/18261124320116181119889/)
中斷:(http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=21977330&id=3755609)
在linux里钦无,中斷處理分為頂半(top half)逗栽,底半(bottom half),在頂半里處理優(yōu)先級(jí)比較高的事情失暂,要求占用中斷時(shí)間盡量的短彼宠,在處理完成后,就激活底半弟塞,有底半處理其余任務(wù)凭峡。底半的處理方式主要有soft_irq, tasklet, workqueue三種,他們?cè)谑褂梅绞胶瓦m用情況上各有不同决记。soft_irq用在對(duì)底半執(zhí)行時(shí)間要求比較緊急或者非常重要的場(chǎng)合摧冀,主要為一些subsystem用,一般driver基本上用不上系宫。 tasklet和work queue在普通的driver里用的相對(duì)較多索昂,主要區(qū)別是tasklet是在中斷上下文執(zhí)行,而work queue是在process上下文,因此可以執(zhí)行可能sleep的操作扩借。
3椒惨、功能的調(diào)試
a、工模信息的導(dǎo)入
為了方便查看 手機(jī)內(nèi)部信息往枷,項(xiàng)目一般會(huì)定制工模框产,TP正常工作后一般下一步是導(dǎo)入工模,A306的工模通過(guò)撥號(hào)可以查看错洁,步驟如下。
在makefile下包含wind_device_info下的文件
要在common.c中包含相應(yīng)的頭文件戒突,及定義一個(gè)wind_device_info 結(jié)構(gòu)體屯碴。
在來(lái)prob函數(shù)的末尾處把TP名稱和版本信息放到wind_device_info結(jié)構(gòu)體中,將就會(huì)顯示到工模中膊存。
b导而、手勢(shì)功能的調(diào)試
手勢(shì)的作用是為了在熄屏狀態(tài)下快速喚醒手機(jī)或應(yīng)用忱叭,流程是當(dāng)處于熄屏狀態(tài)下,在屏幕上畫(huà)相應(yīng)的手勢(shì)后今艺,觸摸ic處理相應(yīng)的數(shù)據(jù)后產(chǎn)生中斷韵丑,驅(qū)動(dòng)程序根據(jù)數(shù)據(jù)上報(bào)相應(yīng)的鍵值,然后上層根據(jù)鍵值就會(huì)打開(kāi)相應(yīng)的手勢(shì)功能虚缎。
-
中斷中如何獲取TP捕捉到的手勢(shì)信息
鍵值的上報(bào): hx83102_ts_register_interrupt(ts->client); himax_int_register_trigger(client); request_threaded_irq(client->irq, NULL, himax_ts_thread,...); himax_ts_thread(int irq, void *ptr) himax_ts_isr_func((struct hx_83102_ts_data *)ptr); hx83102_ts_work(ts); //主要的工作在這個(gè)環(huán)節(jié) himax_wake_check_func(); ret_event = himax_parse_wake_event(hx83102_ts); //解析手勢(shì)鍵值 input_report_key(hx83102_ts->input_dev, KEY_EVENT, 1);//上報(bào)鍵值撵彻,上層解析到鍵值會(huì)做相應(yīng)動(dòng)作。 input_sync(hx83102_ts->input_dev);//事件結(jié)束
c实牡、TP固件升級(jí)
-
固件升級(jí)是為了當(dāng)TP中的IC固件升級(jí)后陌僵,可以在開(kāi)機(jī)后自動(dòng)加載目錄中更新版的固件進(jìn)行升級(jí)。
1创坞、讀取 TP IC 中的固件版本號(hào)碗短。
2、讀取代碼(*.i文件)中TP固件版本號(hào)题涨。
3偎谁、將上述兩個(gè)版本號(hào)比較,判斷是否進(jìn)行TP固件升級(jí)
4纲堵、如何進(jìn)行固件升級(jí)://申請(qǐng)更新搭盾,創(chuàng)建工作隊(duì)列, 可以把工作推后婉支,交由一個(gè)內(nèi)核線程去執(zhí)行鸯隅,因?yàn)楣? 件升級(jí)比較耗時(shí)。 ts->himax_update_wq = create_singlethread_workqueue("HMX_update_reuqest"); //準(zhǔn)備更新TP的固件 INIT_DELAYED_WORK(&ts->work_update, himax_update_register); himax_update_register()向挖; i_update_FW()蝌以; fts_ctpm_fw_upgrade_with_sys_fs_32k(private_ts->client,\ ImageBuffer,fullFileLength,false); i2c_himax_write(client, HX_CMD_TSSLPOUT,&cmd[0], 0, DEFAULT_RETRY_CNT)