版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
調(diào)試信息的使用方 查看驅(qū)動(dòng)是否加載成 I2C通信是否成 是否有中 讀取數(shù)據(jù)分 CTP使用配 sys_config.fex配 驅(qū)動(dòng)的加 IDC文 gslX680使用說(shuō) gt系列驅(qū)動(dòng)介 增加新tp參數(shù)的步 增加新tp參數(shù)的例 ft5x系列使用說(shuō) ft5x02系列使用說(shuō) ft5x06系列使用說(shuō) 性能測(cè) 可靠性測(cè) 現(xiàn)象分 用與測(cè)試作簡(jiǎn)要的講解,為達(dá)到能快速移植驅(qū)動(dòng)與使用CTP的目的。徑以及模塊的相關(guān)配置。第三章主要講解CTP中平臺(tái)相關(guān)接口以及硬件資源的申請(qǐng)。第四章對(duì)驅(qū)動(dòng)移植中為適應(yīng)平臺(tái)需要修改的地方進(jìn)行說(shuō)明。第五章主要講解CTP的調(diào)CTPCTPCTPCTPINPUTCTPINPUT應(yīng)符合相關(guān)通信接口的設(shè)計(jì)規(guī)范。目前使用的CTP均為使用i2c通信接口。1CTPI2CLinuxInput子系統(tǒng)中CTPDriver提供對(duì)硬件各寄存器的讀寫(xiě)訪問(wèn)和將底層硬件對(duì)用戶(hù)輸入訪問(wèn)的響應(yīng)轉(zhuǎn)CTPDriver的編程接口,對(duì)上又提供了事件處理層的編程接口;而事件處理層(inputCTPHOST的連接主要有6pinVCCGNDINTSerialSerial2ctp、CTP配置文件sys_config.fex中關(guān)于CTP的配置項(xiàng)如下: = = = = = = = = =port:PB13<1><default><default><1>I2C設(shè)備地址(7位地址 touchpanel、ctp
=== ctp_list_parasw_device.cctps的名稱(chēng)后面寫(xiě)1表示添加到自動(dòng)檢測(cè)掃描列表,寫(xiě)0表示剔除自動(dòng)檢測(cè)掃描列表。makeARmakeARCH=armDeviceDeviceDrivers\Inputdevicesupport\Touchscreensctp是編譯為模塊、編譯進(jìn)內(nèi)核、不編譯。為了便于配置以及更換設(shè)備,ctp3DeviceDrivers4Inputdevicesupport5sw_touchscreens6gslX680設(shè)設(shè) 輸腳 化始7ctpinputsys_config.fex文件中的配置信息,申請(qǐng)使用的驅(qū)動(dòng)中(CTPdriver)根據(jù)第四章中驅(qū)動(dòng)的移植進(jìn)行相關(guān)函數(shù)的修改即可完成驅(qū)動(dòng)的CTP驅(qū)動(dòng)初始化的接口以及關(guān)鍵數(shù)據(jù)結(jié)構(gòu),在第四章中將詳細(xì)介紹CTP驅(qū)動(dòng)移植的步驟。驅(qū)動(dòng)的移植中主要需要關(guān)注點(diǎn)為如何獲取sys_config.fex中的配置信息,中斷的申請(qǐng),detect函數(shù),suspendresumeft5x系列驅(qū)動(dòng)移植過(guò)程為例進(jìn)staticstaticinlinevoidinput_report_abs(structinput_dev*dev,unsignedintcode,intvaluestaticstaticinlinevoidinput_sync(structinput_dev*dev、、、I2C核心的i2c_add_driver()函數(shù)添加i2c_driver使用到的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)為 、#include#include<linux/init-這個(gè)頭文件中包含使用的structctp_config_infosysconfig.fex的相可查閱文檔“A20平臺(tái)input初始化文檔.doc”用的wakeup引腳,irq引腳等。數(shù)據(jù)結(jié)構(gòu)的定義如下:structstructctpconfigenuminput_sensor_type ctp_used;//是否使用ctp,當(dāng)該變量為0時(shí),則結(jié)束初始化過(guò)程 revert_x_flag;//X軸反轉(zhuǎn)標(biāo)志 revert_y_flag;//Y軸反轉(zhuǎn)標(biāo)志 #ifdefmodule_para_name存取sys_config.fexIRQGPIO引腳號(hào),從config_info XYXXYY軸反置時(shí)使用,用于數(shù)據(jù)X,Ysw_gpio_irq_request的返回i2c_driverChipIDdetect函數(shù)中使用硬件檢測(cè)I2CKconfigMakefileKconfigMakefile文件,使得能configconfigSWTOUCHSCREENFT5X defaultmdependsonINPUT&&I2Cft5xtouchscreenobj-$(CONFIGobj-$(CONFIGSWTOUCHSCREENFT5Xft5x_ts-objs:=ft5x02_config.oini.o+=ft5x為一個(gè)KO文件,注意格式的寫(xiě)法。KconfigconfigSW_TOUCHSCREEN_FT5X_TSMakefileCONFIG_后SW_TOUCHSCREEN_FT5X_TS名稱(chēng)必須相同。一般情況下以模組的名稱(chēng)命名,便makemakeARCH=arm進(jìn)入目錄DeviceDrivers\Inputdevicesupport\Touchscreens目錄下查看是否存在添加I2C地址以固定的形式存在于設(shè)備驅(qū)動(dòng)中。存放設(shè)備地址的數(shù)組必須以I2C_CLIENT_END標(biāo)致結(jié)束。如下所示staticconstunsignedshortnormal_i2c[2]= detectIC的chipID號(hào)或者是檢測(cè)I2CchipIDI2C通信不成功時(shí),將返回失敗,staticstaticintctpdetect(structi2cclient*client,structi2cboardinfo{structstructi2cadapter*adapter=client-intret=0,i=if(!i2ccheckfunctionality(adapter,I2CFUNCSMBUSBYTEDATA))return-ENODEV;if(twiid==adapter-ret=i2csmbusreadbytedata(client,0xA3);if(ret==-70){ret=i2csmbusreadbyte}dprintk(DEBUGINIT,"addr:0x%x,chipidvalue:0x%x\n",client->addr,ret);while(chipidvalue[i++]){if(ret==chipidvalue[i-strlcpy(info->type,CTPNAME,I2CNAMEchipid=return}}printk("%s:I2Cconnectionmightbesomethingwrong!\n", return-ENODEV;return-}}I2CgslX680.cctp_detect函數(shù)為例,i2c_test函數(shù)存放在init-input.c中。如下:staticstaticintctp_detect(structi2c_client*client,structi2c_board_info{{structi2cadapter*adapter=client->adapter;intret;if(!i2ccheckfunctionality(adapter,I2CFUNCSMBUSBYTEreturn-if(twiid==adapter-dprintk(DEBUGINIT,"%s:addr=%x\n",ret=i2ctest(client);printk("%s:I2Cconnectionmightbesomethingwrong\n", return-ENODEV;strlcpy(info->type,CTPNAME,I2CNAMEreturn}return-}}staticstaticintctpdetect(structi2cclient*client,structi2cboardinfo{structi2cadapter*adapter=client->adapter;if(twiid==adapter->nr){dprintk(DEBUGINIT,"%s:addr= strlcpy(info->type,CTP_NAME,returnreturnreturn-}}staticstaticintctpgetsystem{twiid=configinfo.twiscreenmaxx=configinfo.screenmaxx;screenmaxy=configinfo.screenmaxy;revertxflag=configinfo.revertxflag;revertyflag=configinfo.revertyflag;exchangexyflag=configinfo.exchangexyflag;if((twiid==0)||(screenmaxx==0)||(screenmaxy0)){printk("%s:readconfigerror!\n", func);return0;}return}u32sw_gpio_irq_request(u32gpio,enumgpio_eint_trigtypepeint_handlehandle,void功能:gpio中斷 gpio編號(hào). 觸發(fā)類(lèi)型Handle:中斷回調(diào)函數(shù).gpio中斷觸發(fā)時(shí)回調(diào) handle的參數(shù).必須為全局,或者在堆中,不能為棧中的局部變量.返回值:成功返回句柄,失敗返回0.linuxrequest_irq,并傳入IRQF_SHAREDu32sw_gpio_irq_free(u32handle)功能:gpio中斷.sw_gpio_irq_request對(duì)應(yīng) 返回值:成功返回0,失敗返回錯(cuò)誤行號(hào)....gpio中斷句柄.sw_gpio_irq_request返回的句柄gpio的訪問(wèn)權(quán).}}{{}superstandbySuspendearlysuspendsuspend,resumelateresumeresume。EarlysuspendlateresumeCONFIG_HAS_EARLYSUSPEND使用;suspendresumei2c_driver結(jié)構(gòu)體中。以上四個(gè)函數(shù)的接口的關(guān)系要處理好,否則可能導(dǎo)致無(wú)法喚醒等意外情況發(fā)生。在suspend與earlysuspend函數(shù)earlysusupendlaterresumeearlysuspend函數(shù)中,做了停lateresume函數(shù)中就需要做相對(duì)應(yīng)的恢復(fù)工作。Suspendresume函數(shù)當(dāng)sys_config.fex中standby_mode1時(shí)表示支持superstandbysuperstandbyAVCCDRAM_VCC電源以外的所有電源;這樣的操作有可能改變模塊superstandbysuspendresume函數(shù)需要做相應(yīng)的superstandbysuperstandby時(shí),機(jī)器喚醒之后會(huì)出現(xiàn)觸摸失效的、包含頭文件、判斷standby類(lèi)型,并進(jìn)行相應(yīng)處理;內(nèi)核導(dǎo)出了兩個(gè)符號(hào):standby_type,standby_level以利于各模塊:根據(jù)目標(biāo)區(qū)分normalstandby和superstandby。根據(jù)掉standby_type:NORMAL_STANDBY,SUPER_STANDBY;standby_level: normastandbysuperstandby進(jìn)行區(qū)分。在掉電的情況下,有的設(shè)備需要重新寫(xiě)配置參數(shù)的,需要進(jìn)行相應(yīng)的區(qū)分,以保證能快速的喚醒,且在休眠設(shè)備掉電后,重新喚醒時(shí),設(shè)備也能正常穩(wěn)定的使用。snd。如下所示:staticstatic initft5xts{))){//printk("%s:ctpfetchsysconfigparareturn}}elseif(0!=ret)printk("%s:ctpops.initplatformresourceerr. }}if(configinfo.ctpused==printk("***ctpusedsetto0printk("***ifusectp,pleaseputthesysconfig.fexctpusedsetto1.\n");return0;}if(!ctpgetsystemprintk("%s:readconfig return}ctpwakeup(configinfo.wakeupnumber,0,10);ft5xtsdriver.detect=ctpdetect;ret=i2cadddriver(&ft5xts}staticstatic exitft5xts{printk("==ft5xtsexit==\n");i2cdeldriver(&ft5xtsdriver);classdestroy(i2cdevclass);unregisterchrdev(I2CMAJOR,"awi2cinputfreeplatformresource(&(configinfo.input}probeinit函數(shù)中申請(qǐng)的資源,要依照申請(qǐng)的順序進(jìn)行釋i2c_set_clientdata(client,NULL);函數(shù)。否則驅(qū)動(dòng)自己I2CgsensorI2C通訊不成ctp_wakeupinit-input.cctpwakeup引腳的輸出電intintctp_wakeup(u32gpio,intstatus,intgpio:wakeup引腳的gpio編號(hào),存在于structctp_config_info結(jié)構(gòu)體的變量wakeup_number置為ms后,在將其設(shè)置為“-ms”。ctp_wakeup(config_info.wakeup_numberctp_wakeup(config_info.wakeup_number0,10);//將wakeup引腳輸出低10ms之后輸出高。ctp_wakeup(config_info.wakeup_number1,20);//將wakeup引腳輸出高20ms之后輸出低。ctp_wakeup(config_info.wakeup_number,0,0);//將wakeup引腳輸出低。ctp_wakeup(config_info.wakeup_number,1,0);//將wakeup引腳輸出高。3Init如下所示,默認(rèn)情況下,將DEBUG_INIT的打印信息打開(kāi):情況。因此設(shè)備驅(qū)動(dòng)中的init,probe函數(shù)中的打印信息還是使用printk進(jìn)行輸出。不但加快了模塊的加載時(shí)間,同時(shí)還能按照上電時(shí)序進(jìn)行相對(duì)應(yīng)的操作,何樂(lè)而不為以下以gslX680.c中的優(yōu)化進(jìn)行相關(guān)的說(shuō)明。隊(duì)列的定義如下所示:}}}(1)adbshell界面,使用命令:adbshell#號(hào)后面的為命令,然后鍵入回鍵即可。echo命令中,“>完成。可以通過(guò)adb工具進(jìn)行查看,一些簡(jiǎn)單的adb的命令如下所示:adbadb 登錄設(shè)備的adbpushxx.ko 將觸摸驅(qū)動(dòng)通過(guò)adb工具pushcd/system/vendor/modules進(jìn)入KO文件目錄 *.ko查看機(jī)器中已經(jīng)有了那些驅(qū)動(dòng)lsmod查看系統(tǒng)中已經(jīng)加載了那些模塊rmmod**卸載驅(qū)動(dòng)(注:不用加后綴)insmod**.ko加載驅(qū)動(dòng)getevent查看系統(tǒng)中已經(jīng)注冊(cè)了那些input(查看不能正常加載的原因,一般情況下驅(qū)動(dòng)加載不成功的原因有:一是讀取的sys_config1.fex文件中的配置信息與加載的驅(qū)動(dòng)不匹配,二是probe函數(shù)遇到某些錯(cuò)誤沒(méi)能正確的完成probe的時(shí)候返回,三是驅(qū)動(dòng)與所使用的固件不匹配。detectchipID值,以及檢測(cè)通信是否成功的方式,STARTSTART Sendout
I2C(2)、sys_config1.fex中的中斷引腳與驅(qū)動(dòng)中的中斷引腳是否匹配。將讀取到的數(shù)據(jù)包都打印出來(lái),根據(jù)觸摸IC的正確性,如果讀取的數(shù)據(jù)包不正確,首先檢查驅(qū)動(dòng)中設(shè)置的中斷觸發(fā)條件與觸摸CTPwakeup引腳號(hào)、設(shè)備地址、CTPtp的默認(rèn)值為0。ctp_name的妙用:ctp_nametptp參數(shù),目前使用的為gslX系列以及gt82x系列。原值為1則將其設(shè)置為0。原值為1則將其設(shè)置為0。xyctp_exchange_x_y_flag01;若ctp_exchange_x_y_flag原值為1則將其設(shè)置為0。#insmodtpinsmod/system/vendor/modules#insmodtpinsmod/system/vendor/modules/ft5x_ts若使用自動(dòng)檢測(cè)功能時(shí),不需要增加該語(yǔ)句,只需要在該文件中增加:/vendor/modules/sw_device.ko自動(dòng)檢測(cè)驅(qū)動(dòng),同時(shí)sysconfig.fex文件中需要增加“sunxi-ts”,“gt818_ts”,“gt811”,“gt9xx”,“sw-ts”,“zet622x”時(shí),使用的idctp.idcidc文件放置的目錄為:system/usr/idcwing_xx.mk拷貝PRODUCT_COPY_FILESPRODUCT_COPY_FILES+=.kladbshellgetevent命令得到的設(shè)備名稱(chēng)與以上的不符合,則需要增加該名稱(chēng)idcgeteventctp_name,如下:idcctp_name.idcwing_xx.mk拷貝語(yǔ)句如gslX680驅(qū)動(dòng)兼容gsl1680,gsl2680,gsl3680。為了區(qū)分下載的參數(shù),在sys_config.fexctp_name進(jìn)行區(qū)別,目前,gslX680系列sysconfig.fex中的參數(shù)如下所示:[ctppara]ctp[ctppara]ctpusedctptwiidctpctpscreenmax=====tpgsl1680.h、驅(qū)動(dòng)中的增加相關(guān)的頭文件以及gslx680_fw_grp數(shù)組中增加相對(duì)應(yīng)的描述信息#include#include"gsl1680.h" #include"gsl1680#include#include"gsl1680.h" #include"gsl16801.h" #include"gsl16802.h" #include"gsl2680.h" #include"gsl3680.h" #include"gsl16803.h" structgslX680fwarray{unsignedintconststructfwdata}gslx680fwgrp[]={"gsl1680{"gsl1680ARRAYSIZE(GSL1680GSL1680ARRAYSIZE(GSL1680FW1),GSL1680FWARRAYSIZE(GSL1680FW2),GSL1680FW2},ARRAYSIZE(GSL2680 GSL2680ARRAYSIZE(GSL3680 GSL3680[ctppara]ctp[ctppara]ctpusedctptwiidctpctpscreenmax==="gsl1680==gt系列的產(chǎn)品在驅(qū)動(dòng)端初始化時(shí)需要根據(jù)具體的tp屏下載相應(yīng)的參數(shù)之后才可以正gt系列的驅(qū)動(dòng)包括(gt811,gt82x,gt9xx)tp面板,多種分辨率,目前擇。如果驅(qū)動(dòng)中沒(méi)有找到相對(duì)應(yīng)的匹配名字,將使用第0組參數(shù)。gt9xx對(duì)應(yīng)的頭文件:lichee\linux-以及數(shù)據(jù)數(shù)組名稱(chēng)等信息。xxx_cfg_grp中的xxx分別為gt82x,gt9xx,gt811。名稱(chēng),即xxx_cfg_grp中定義的名稱(chēng)。ctp_get_system_configsysconfig.fexctp_name,通過(guò)獲得的名稱(chēng)查找gt82x_cfg_grp中是否有相匹配的名稱(chēng)。goodix_init_panel函數(shù)中通過(guò)找到的index下載相對(duì)應(yīng)的參數(shù),如果找不到匹配的名稱(chēng)將返回直接返回0,即下載第0組。為114個(gè)數(shù)據(jù),注意,前兩個(gè)數(shù)據(jù)(0x0F、0x80)為寄存器地址,不要變動(dòng)。structstructgt82xcfg{const unsigned uint8 *config}gt82xcfggrp[]={"gt813 ARRAYSIZE(gt813 gt813{"gt813ARRAYSIZE(gt813ARRAYgt813[ctppara]ctp[ctppara]ctpusedctptwiidctpctpscreenmax==="gt813==ft5x06系列使用時(shí)不需要下載參數(shù)。當(dāng)需要下載固件時(shí),可以打開(kāi)驅(qū)動(dòng)的將造成tp無(wú)法正常使用的情況。TP的使用中,主要關(guān)注點(diǎn)以及影響用戶(hù)體驗(yàn)點(diǎn)均為性能與穩(wěn)定性,性能主要關(guān)注使用工具:DevToo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高端酒店客房設(shè)施升級(jí)改造服務(wù)合同4篇
- 二零二五年度文化旅游資源抵押擔(dān)保合同2篇
- 二零二五年度北京房屋買(mǎi)賣(mài)合同自行成交版(房產(chǎn)交易全程服務(wù))
- 2025年度草坪病蟲(chóng)害防治服務(wù)合同
- 2025年度碼頭集裝箱清洗與消毒服務(wù)合同4篇
- 2025年度臨時(shí)客服人員派遣服務(wù)合同4篇
- 2025年度辦公樓裝修監(jiān)理與消防安全合同
- 2025年度旅游行業(yè)循環(huán)額度借款合同書(shū)4篇
- 二零二五年度房屋貸款房屋買(mǎi)賣(mài)合同范本(含貸款期限延長(zhǎng))
- 二零二五年度度假酒店退房合同
- NGS二代測(cè)序培訓(xùn)
- 《材料合成與制備技術(shù)》課程教學(xué)大綱(材料化學(xué)專(zhuān)業(yè))
- 小紅書(shū)食用農(nóng)產(chǎn)品承諾書(shū)示例
- 釘釘OA辦公系統(tǒng)操作流程培訓(xùn)
- 新生兒科年度護(hù)理質(zhì)控總結(jié)
- GB/T 15934-2024電器附件電線組件和互連電線組件
- 《工貿(mào)企業(yè)有限空間作業(yè)安全規(guī)定》知識(shí)培訓(xùn)
- 高層次人才座談會(huì)發(fā)言稿
- 垃圾清運(yùn)公司管理制度(人員、車(chē)輛、質(zhì)量監(jiān)督、會(huì)計(jì)管理制度)
- 《建筑工程設(shè)計(jì)文件編制深度規(guī)定》(2022年版)
- 營(yíng)銷(xiāo)人員薪酬考核方案
評(píng)論
0/150
提交評(píng)論