1. 程式人生 > >linux下移植電容屏驅動gt9xx 筆記

linux下移植電容屏驅動gt9xx 筆記

#  evtest  /dev/event0
或者
# hexdump /dev/event0

//////////////////////////////////////////////
分析:
\drivers\i2c\busses\I2c-digicolor.c
static struct platform_driver i2c_dc_driver = {
 .probe  = i2c_dc_probe,
 .remove  = __exit_p(i2c_dc_remove),
 .driver  = {
  .name = "i2c-digicolor",
  .owner = THIS_MODULE,
 },
};

static int i2c_dc_probe(struct platform_device *dev)
 --->i2c->adap.algo = &i2c_dc_algorithm;
 

static const struct i2c_algorithm i2c_dc_algorithm = {
 .master_xfer = i2c_dc_xfer,
 .functionality = i2c_dc_functionality,
};
 
static int i2c_dc_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
  --->i2c_dc_fatal_error(i2c, "excess retries");
 
 
在檔案
\drivers\input\dc\Gt9xx.c
static int __devinit goodix_ts_init(void)
 ---> ret = i2c_add_driver(&goodix_ts_driver);
 
static struct i2c_driver goodix_ts_driver = {
    .probe      = goodix_ts_probe,
    .remove     = goodix_ts_remove,
#ifdef CONFIG_HAS_EARLYSUSPEND
    .suspend    = goodix_ts_early_suspend,
    .resume     = goodix_ts_late_resume,
#endif
    .id_table   = goodix_ts_id,
    .driver = {
        .name     = GTP_I2C_NAME,
        .owner    = THIS_MODULE,
    },
};

static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id *id)
 --->INIT_WORK(&ts->work, goodix_ts_work_func);
    static void goodix_ts_work_func(struct work_struct *work)
        --->ret = gtp_i2c_read(ts->client, point_data, 12);
         --->ret = i2c_transfer(client->adapter, &msg, 1); 
                --->ret = adap->algo->master_xfer(adap, msgs, num);
                     最終呼叫i2c_dc_xfer 
 

//---------------------------------------------------------------------
//溫度感測器Rtc-pcf8563
static int i2c_dc_probe(struct platform_device *dev)
 --->i2c_new_probed_device(&i2c->adap, &(i2c_dc_board_list[i].dc_board_info),i2c_dc_board_list[i].dc_board_addr_list);
 
 

static struct i2c_dc_board i2c_dc_board_list[] = 
 
 
--->
 //新增i2c子裝置
 //ljh 
 #if defined 1
     {
         {I2C_BOARD_INFO("pcf8563", 0x51)},
         {0x51,I2C_CLIENT_END},
     },
 #endif
 
 
 
 
\drivers\rtc\Rtc-pcf8563.c
匹配name pcf8563
static struct i2c_driver pcf8563_driver = {
 .driver  = {
  //.name = "rtc-pcf8563",
  .name = "pcf8563", 
 },
 .probe  = pcf8563_probe,
 .remove  = pcf8563_remove,
 .id_table = pcf8563_id,
};
//-----------------------------------------------------------------------
 
 
2015-04-02
問1:核心啟動的時候,載入i2c匯流排驅動,載入pcf8563裝置和Goodix-TS裝置出錯

i2c /dev entries driver
i2c_dc_enable: RA_CSR_GP_MNOP_CTRL = 0x1f1f101f
i2c-digicolor: i2c-1: I2C adapter
i2c-digicolor: registering device dc_maui which has slave addr 0x4a
DigiColor MAUI registered with bus id (1) with slave address 0x4a
Forcing PLL3 to 960 MHz!
Forcing AUD_TX to 24.62 MHz!
dc_maui: read reg_id: ANALOG_TEST_26 addr: 0xbe result: 0x0d (13)
dc_maui: read reg_id: ANALOG_TEST_22 addr: 0xba result: 0x00 (0)
dc_maui: read reg_id: ANALOG_TEST_18 addr: 0xb6 result: 0x00 (0)
i2c-digicolor: registering device pcf8563 which has slave addr 0x51
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: registering device Goodix-TS which has slave addr 0x5d
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a

答1:入口跟蹤分析
 static int i2c_dc_probe(struct platform_device *dev)
  ---> printk(KERN_INFO "i2c-digicolor: registering device %s which has slave addr 0x%x\n", i2c_dc_board_list[i].dc_board_info.type, i2c_dc_board_list[i].dc_board_addr_list[0]);
          i2c_new_probed_device(&i2c->adap, &(i2c_dc_board_list[i].dc_board_info),i2c_dc_board_list[i].dc_board_addr_list);
 
 
 
問2:載入gt9xx 驅動後錯誤資訊:
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
<<-GTP-ERROR->> I2C retry timeout, reset chip.
<<-GTP-INFO->> I2C write end_cmd  error!
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
<<-GTP-ERROR->> I2C retry timeout, reset chip.
<<-GTP-ERROR->> I2C transfer error. errno:-121
 
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
<<-GTP-ERROR->> I2C retry timeout, reset chip.
<<-GTP-INFO->> I2C write end_cmd  error!
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
i2c-digicolor: error: excess retries
i2c_dc: msg_num: 0 msg_idx: -11 msg_ptr: 0, bus: 0f cmd: 0a
<<-GTP-ERROR->> I2C retry timeout, reset chip.
<<-GTP-ERROR->> I2C transfer error. errno:-121
一直迴圈打印出來
答2:i2c匯流排掛載了3個i2c從裝置,上拉電阻改小,由4.7k改成1k左右就可以了,電阻小的話驅動能力加強了!
 
 

問3: i2c_client和i2c_driver結構體在裝置驅動層如何填充?
答3: i2c驅動由3個部分組成,匯流排驅動層,核心驅動層,裝置驅動層,
   平時我們移植驅動的話主要是移植裝置驅動層, i2c_client和i2c_driver結構體都是裝置驅動層相關的結構體
 
 
 
 
 

問4:定時36ms重新整理觸控電容ic的資料,這些資料如何定義?
point_data[0]=129
point_data[1]=78
point_data[2]=0
point_data[3]=129
point_data[4]=11
point_data[5]=99
point_data[6]=31
point_data[7]=217
point_data[8]=29
point_data[9]=242
point_data[10]=194
point_data[11]=250
point_data[12]=0
point_data[13]=0
finger = 0
point_data[0]=129
point_data[1]=78
point_data[2]=0
point_data[3]=129
point_data[4]=11
point_data[5]=99
point_data[6]=31
point_data[7]=217
point_data[8]=29
point_data[9]=242
point_data[10]=194
point_data[11]=250
point_data[12]=0
point_data[13]=0
finger = 0
答4:
 這些都是電容屏gt9xx的座標資料
 
 
問5:讀取version出錯?自己寫入i2c,再去取i2c資料,有時候出錯,不穩定?拔掉i2c螢幕,還是同樣的現象,
     如何判定cpu和i2c晶片通訊正常?

81,40, b9, 13, fa, 59, 72, c4
        185 s   250 y   114 196 
        
# insmod  gt9xx.ko 
<<-GTP-FUNC->> Func:
[email protected]
:1621 <<-GTP-FUNC->> Func:[email protected]:1182 <<-GTP-INFO->> ************************************** <<-GTP-INFO->> GTP Driver Version:V1.5<2013/08/05> <<-GTP-INFO->> GTP Driver [email protected]:22:34,Apr 11 2015 <<-GTP-INFO->> GTP I2C Address:0x14 <<-GTP-INFO->> ************************************** <<-GTP-INFO->> <<-GTP-FUNC->> Func:
[email protected]
:958 <<-GTP-FUNC->> Func:[email protected]:87 ret=2 test[0]=80 test[1]=47 test[2]=12 <<-GTP-DEBUG->> [806]len1=228,len2=0,len3=0,send_len:228 <<-GTP-DEBUG->> [823]SENSOR ID:0 ljh debug gt9xx <<-GTP-FUNC->> Func:[email protected]:868 <<-GTP-FUNC->> Func:
[email protected]
:132 <<-GTP-DEBUG->> [887]X_MAX = 1280,Y_MAX = 800,TRIGGER = 0x00 <<-GTP-FUNC->> Func:[email protected]:1097 input: Goodix Capacitive TouchScreen as /class/input/input1 <<-GTP-DEBUG->> [1048]INT trigger type:0 <<-GTP-ERROR->> Request IRQ failed!ERRNO:1. <<-GTP-INFO->> GTP works in polling mode. <<-GTP-FUNC->> Func:[email protected]:911 <<-GTP-FUNC->> Func:[email protected]:87 <<-GTP-INFO->> IC VERSION:14 IC VERSION:81,40,b9,01,fa,49,f2,d4 <<-GTP-FUNC->> Func:[email protected]:222 # <<-GTP-FUNC->> Func:[email protected]:575 <<-GTP-FUNC->> Func:[email protected]:328 goodix_ts_work_func <<-GTP-FUNC->> Func:[email protected]:87 point_data[0]=81 point_data[1]=4e point_data[2]=fb point_data[3]=81 point_data[4]=10 point_data[5]=e3 point_data[6]=9e point_data[7]=fa point_data[8]=1d point_data[9]=f2 point_data[10]=8a point_data[11]=fb point_data[12]=0 point_data[13]=0 finger = 251 <<-GTP-FUNC->> Func:[email protected]:132 <<-GTP-FUNC->> Func:[email protected]:87 test_buf[0]=80 test_buf[1]=9d test_buf[2]=5a test_buf[3]=5b test_buf[4]=57 test_buf[5]=65 test_buf[6]=6a test_buf[7]=6c test_buf[8]=6d test_buf[9]=0 test_buf[10]=0 touch_num = 11 <<-GTP-FUNC->> Func:[email protected]:132 <<-GTP-FUNC->> Func:[email protected]:575 <<-GTP-FUNC->> Func:[email protected]:328 goodix_ts_work_func <<-GTP-FUNC->> Func:[email protected]:87 point_data[0]=81 point_data[1]=4e point_data[2]=0 point_data[3]=81 point_data[4]=10 point_data[5]=e3 point_data[6]=9e point_data[7]=fa point_data[8]=1d point_data[9]=f2 point_data[10]=8a point_data[11]=fb point_data[12]=0 point_data[13]=0 finger = 0 <<-GTP-FUNC->> Func:[email protected]:132 <<-GTP-FUNC->> Func:[email protected]:87 test_buf[0]=80 test_buf[1]=9d test_buf[2]=59 test_buf[3]=5b test_buf[4]=57 test_buf[5]=66 test_buf[6]=6a test_buf[7]=6b test_buf[8]=6d test_buf[9]=0 test_buf[10]=0 <<-GTP-FUNC->> Func:[email protected]:132 <<-GTP-FUNC->> Func:[email protected]:575 <<-GTP-FUNC->> Func:[email protected]:328 goodix_ts_work_func <<-GTP-FUNC->> Func:[email protected]:87 point_data[0]=81 point_data[1]=4e point_data[2]=0 point_data[3]=81 point_data[4]=10 point_data[5]=e3 point_data[6]=9e point_data[7]=fa point_data[8]=1d point_data[9]=f2 point_data[10]=8a point_data[11]=fb point_data[12]=0 point_data[13]=0 finger = 0 <<-GTP-FUNC->> Func:[email protected]:132 <<-GTP-FUNC->> Func:[email protected]:87 test_buf[0]=80 test_buf[1]=9d test_buf[2]=59 test_buf[3]=5b test_buf[4]=57 test_buf[5]=65 test_buf[6]=6a test_buf[7]=6b test_buf[8]=6d test_buf[9]=0 test_buf[10]=0 <<-GTP-FUNC->> Func:[email protected]:132 <<-GTP-FUNC->> Func:[email protected]:575 <<-GTP-FUNC->> Func:[email protected]:328 goodix_ts_work_func <<-GTP-FUNC->> Func:[email protected]:87 point_data[0]=81 point_data[1]=4e point_data[2]=0 point_data[3]=81 point_data[4]=10 point_data[5]=e3 point_data[6]=9e point_data[7]=fa point_data[8]=1d point_data[9]=f2 point_data[10]=8a point_data[11]=fb point_data[12]=0 point_data[13]=0 finger = 0 答5:寫入暫存器資料,再讀出暫存器的資料,如果一樣就證明通訊正常。最好的辦法是讀只讀暫存器的資料,如果讀出的值 符合手冊要求,就證明cpu與外設通訊正常了。 問6:中斷方式下無法進入goodix_ts_work_func函式,但是定時查詢方式可以進入中斷子函式goodix_ts_work_func? 答6:目前把io配置成查詢方式 問7:hexdump /dev/event1 分析 地址 秒 微秒 類 code value 按下列印 0000120 1341 0000 4ff0 0001 0003 0000 0211 0000 x座標0x211 =529 0000130 1341 0000 4ff0 0001 0003 0001 000d 0000 y座標0x0d =13 0000140 1341 0000 4ff0 0001 0003 0018 00ff 0000 0000150 1341 0000 4ff0 0001 0001 014a 0001 0000 0000160 1341 0000 4ff0 0001 0000 0000 0000 0000 釋放列印 0000170 1345 0000 b3b0 0000 0003 0018 0000 0000 0000180 1345 0000 b3b0 0000 0001 014a 0000 0000 0000190 1345 0000 b3b0 0000 0000 0000 0000 0000


相關推薦

linux移植電容驅動gt9xx 筆記

# evtest /dev/event0 或者 # hexdump /dev/event0 ////////////////////////////////////////////// 分析: \drivers\i2c\busses\I2c-digicolor.c s

Linux移植LCD驅動

 使用Linux3.2.81核心 4.3寸LCD 修改arch/arm/mach-s3c2440/mach-smdk2440.c staticstruct s3c2410fb_di

linux移植AM335的sgx驅動

準備工作1.uboot 、核心、檔案系統、編譯器,開發板都已經提供,測試可以執行。2.在TI官網下載Graphics_SDK_setuplinux_4_10_00_01.bin開始移植移植步驟在ti官網有詳細說明,步驟如下:1../Graphics_SDK_setuplin

LinuxPCI設備驅動程序開發 --- PCI驅動程序實現(三)

傳輸 char rep roc register case 負責 ava b- 三、PCI驅動程序實現 1. 關鍵數據結構 PCI設備上有三種地址空間:PCI的I/O空間、PCI的存儲空間和PCI的配置空間。CPU可以訪問PCI設備上的所有地址空間,其中I/O空間和存儲空間

linux gpio ma63xx_wdt.c驅動

  專案中需要實現watchdog功能,研究了下系統中的watchdog。硬體watchdog使用晶片max6371,看晶片資料,結合硬體設計,發現需要控制的訊號有兩個,是系統的GPIO,GPIO1是使能watchdog的訊號,連線到max6371的set2引腳 ,GPIO2是喂狗的訊號,

Linux的platform匯流排驅動

一.Platform裝置驅動概念 主要講解平臺裝置驅動的模型和基本概念,同時因為驅動載入的方式有動態載入和靜態載入兩種方式,這裡我們分別對動態載入和靜態載入兩種情況下,如何使用平臺裝置和驅動加以敘述。最後使用mini2440開發板,運用Platform和device_att

LinuxSPI和IIC驅動免在裝置樹上新增裝置資訊的編寫方法

      編寫i2c或spi驅動時,一般需要往裝置樹上(或者板級檔案)新增節點資訊,這裡提供一種直接在驅動中新增裝置資訊的方法,使驅動更方便移植。 i2c的驅動模板如下 #include <linux/module.h> #include <linux

linux的藍芽驅動程式詳解

1、首先要做Bluez協議棧的移植,這樣在開發板上才可以用hciconfig, hcitool等命令。關於bluez協議棧的移植步驟網上很多。 2、該驅動是USB藍芽裝置驅動,分析根據藍芽驅動的寫的順序進行。因為只是要做資料的傳輸,所以講用於語音的等時傳輸部分去掉了。 首先

LinuxSPI從裝置驅動的編寫

 SPI(Serial Peripheral Interface) 是一個同步的四線制序列線,用於連線微控制器和感測器、儲存器及外圍裝置。三條訊號線持有時鐘訊號(SCLK,經常在10MHz左右)和並行資

linux platform裝置和驅動註冊的先後順序

我明白了,你說的是另一種情況,象USB 的hcd驅動一樣,先註冊驅動,後註冊裝置。 在註冊裝置時,遍歷裝置所在匯流排,找到與裝置匹配的驅動,再呼叫device_attach()--> driver_probe_device()時的情況。 這時,會呼叫裝置所在匯流排的probe()函式,如果沒有

Linux的網路裝置驅動(一)

網路裝置介面層主要是為變化多端的網路定義了一個統一且抽象的net_device,實現了多種硬體在軟體層次上的統一。網路裝置驅動主要是填充net_device的成員並註冊net_device來實現硬體操作函式和核心的掛接。通常情況下,網路裝置驅動以中斷方式接受資料,而net_device中則定義了poll_co

linux移植libcurl記錄

移植過程主要參考部落格: https://blog.csdn.net/wuzhiwuweisun/article/details/79129838 也借鑑了部落格:https://blog.csdn.net/zhouzhenhe2008/article/details/53768854

linux的塊裝置驅動(二)

上一章主要講了請求佇列的一系列問題。下面主要說一下請求函式。首先來說一下硬碟類塊裝置的請求函式。 請求函式可以在沒有完成請求佇列的中的所有請求的情況下就返回,也可以在一個請求都不完成的情況下就返回。 下面貼出請求函式的例程: static int simp_blkdev_m

linux的串列埠驅動程式

串列埠驅動確實不簡單,不過多花費心思整體思路還是容易理清的。原文如下:一、核心資料結構 串列埠驅動有3個核心資料結構,它們都定義在<#include linux/serial_core.h> 1、uart_driver uart_driver包含了串列埠裝置名、

linux移植wifi之安裝hostapd及其操作(八)

安裝 hostapd 1.  下載,解壓     下載原始碼: http://w1.fi/hostapd/     tar -xvf hostapd-2.6.tar.gz     cd hostapd-2.6/hostapd      2.     編譯、安裝     cp

嵌入式linux復位音效卡驅動

最近在做一個對講系統,平臺是tiny6410搭載的linux.遇到的問題是對講一段時間後音效卡會掛掉,報出的錯誤是s3c64xx_dma_stop: channel still active.經過長

web叢集之一 linuxapache+tomcat負載均衡配置-筆記

負載均衡叢集配置(7):Apache配置——建立workers.properties    httpd.conf的最後新增的配置中workers.properties檔案是不存在的,需要我們自己在apache/conf路徑下建立。workers.properties檔案用於對負載均衡的負載器worker (

linux 開機自動載入驅動模組

呼呼,好久不見 前一段時間開發了一個linux下的PCI資料採集板卡的驅動,在驅動除錯時,一直使用insmod 動態的載入驅動模組(ko檔案). 現在驅動基本開發結束,要提交給客戶,使用insmod載入時,對客戶來說不太好,比較麻煩,所以不能採用這種方法。由於 剛開始做驅

基於arm平臺linuxUSB音效卡驅動安裝和使用

核心配置 <*> Advanced Linux Sound Architecture —> usb音效卡安裝 1.apt-get install alsa-base 2

[嵌入式資料] Linux移植OpenCV + Qt 到ARM(Tiny6410)總結 轉

Linux下移植OpenCV + Qt 到ARM(Tiny6410)總結 轉CSDN 下面的文字比較多啊,主要是加入了很多自己的感慨啊,感嘆啊啥的,其實我覺得已經是罪簡單的方法了,我基本上把我遇到的問題全部羅列了,大家可以參考一下~其實很多問題都是在走彎路,我希望後面