TouchPanel在MSM7X27上的移植

來源:互聯網
上載者:User

       調試TouchPanel也有一段時間了,今天總結一下,平台是MSM7x27,android2.2,TP主要就是I2C了,這裡不介紹I2C,不清楚的自己search,主要介紹TP在這個平台上的移植內容。需要注意的是平台採用的是硬體I2C而非GPIO類比。

一.裝置和驅動的檔案節點

在目錄/sys/bus/i2c/devices下的裝置就是這個i2c_board_info結構體裡所描述的I2C裝置,

而/sys/bus/i2c/devices下的裝置名稱字就是根據i2c_board_info結構體中定義的I2CAddress來命名的。

# ls

i2c-0

0-0038 //I2C_BOARD_INFO("ft5xxx",0x70>>1),/*這個是I2C裝置的從機地址*/

0-005c //I2C_BOARD_INFO("ssd2531",0x53),/*這個是I2C裝置的從機地址*/

0-000a //I2C_BOARD_INFO("bma200",0x0A),/*這個是I2C裝置的從機地址*/

0-001e //I2C_BOARD_INFO("hmc5883",0x3c>>1),/*這個是I2C裝置的從機地址*/

0-003c //I2C_BOARD_INFO("ov2655",0x60>>1)

0-0030

0-0010 //I2C_BOARD_INFO("rda5802",0x20>>1),

0-001c //I2C_BOARD_INFO("ltr600",0x38>>1),/*這個是I2C裝置的從機地址*/

i2c-1

<6>[ 1.107875] input: ft5xxxas /devices/i2c-0/0-0038/input/input3

# cd sys/devices/i2c-0

# ls

uevent

name

new_device

delete_device

subsystem

power

0-0038

0-005c

0-000a

0-001e

0-003c

0-0030

0-0010

0-001c

i2c-dev

# cd 0-005c

# ls

uevent

name

modalias

subsystem

power

#

# cd 0-0038

# ls

uevent

name

modalias

subsystem

power

driver

input

# cat name

ft5xxx

#

二.調試方法

adb shell dmesg>dmesg.log;

或者可以即時查看cat /proc/kmsg,如觸摸時返回座標是否正確;

對input裝置即時查看還可以進入shell後:getevent,會列出所有的event裝置,進行相應的操作會輸出資訊。貼寫log,如下

<3>[ 1.095116] [FT5XXX]entermutitouch_init

<3>[ 1.095168] [FT5XXX]entermutitouch_probe

<3>[ 1.095183][FT5XXX]mutitouch_chip->pdata->gpio_rst =41

<3>[ 1.107221] [FT5XXX]entermutitouch_read_devid

<3>[ 1.107238] [FT5XXX]entermutitouch_write

<3>[ 1.107356] [FT5XXX]entermutitouch_read

<6>[ 1.107440] read Ft5302 ID= 0x79

<3>[ 1.107451] [FT5XXX]entermutitouch_write

<3>[ 1.107558] [FT5XXX]entermutitouch_write

<6>[ 1.107638] select ctpFt5302

<6>[ 1.108021]input: ft5xxx as /devices/i2c-0/0-0038/input/input3

<3>[ 1.108341] [FT5XXX]leavemutitouch_probe

三、修改的檔案:

1.kernel/arch/arm/mach-msm/board-msm7x27-qrd.c

msm7x2x_init開機初始化,配置INT、RSTPin 對應的GPIO,I2C裝置的地址等

#ifdef CONFIG_TOUCHSCREEN_FT5XXX

i2c_register_board_info(0,ft5xxx_i2c_board_info, ARRAY_SIZE(ft5xxx_i2c_board_info));

ts_ft5xxx_config_gpio( );

#endif

其中關鍵I2C地址是在ft5xxx_i2c_board_info

static struct i2c_board_infoft5xxx_i2c_board_info[] = {

{

I2C_BOARD_INFO("ft5xxx",0x70 >> 1),

.irq=MSM_GPIO_TO_INT(TS_FT5XXX_GPIO_INT),

.platform_data = &ft5xxx_ts_data,

},

};

這個地址是7bit形式,不包括讀寫位,通常從datasheet得到的地址要右移1位,讀寫時系統會自己再做處理,從檔案系統中讀到driver名字是移位後的,就是從這裡傳入的值,但波形圖裝置地址仍然是沒有移過位的。當host和slave無法通訊時,可以嘗試左移一位操作。

2.kernel/drivers/input/touchscreen/ft5xxx.c

這個就是驅動檔案了,兩個主要的函數是mutitouch_probe和mutitouch_ts_work,

mutitouch_probe完成讀取裝置ID,設定裝置屬性參數(可以接受的事件類型,xy座標範圍,裝置名稱字(必須和driverName一致),匯流排類型等),註冊input裝置建立裝置節點/dev/input/eventX,建立相應的work及註冊休眠函數

mutitouch_ts_work就是中斷觸發調用相應的work後的關聯函數了,主要就是讀取座標資訊並上報給上層,完成這個函數要對IC很熟悉,包括讀寫命令,資料包的格式等。

3.kernel/arch/arm/configs/msm7627-perf-qrd_defconfig

就是配置一下宏了CONFIG_TOUCHSCREEN_FT5XXX=y

4.kernel/drivers/input/touchscreen/Makefile

根據宏來編譯相關的driver檔案

obj-$(CONFIG_TOUCHSCREEN_FT5XXX) += ft5xxx.o

5.kernel/drivers/input/touchscreen/Kconfig

config TOUCHSCREEN_FT5XXX

tristate "FT5XXX Capacitive TouchPanel"

depends on I2C

四、補充

1.SDA SCL 在哪裡設定的?

board-msm7x27-qrd.c:msm_i2c_gpio_config()

gpio_scl = 60;

gpio_sda = 61;

2.複位期間為低電平期間

gpio_set_value(tc_chip->pdata->gpio_rst , IO_LOW);

mdelay( 200 );

gpio_set_value(tc_chip->pdata->gpio_rst,IO_HIGHT);

mdelay( 2 );

3.其他涉及的相關檔案

i2c-msm.c

4.針對一款TP除了熟悉datasheet外,就是要知道linux提供的系統介面了

比如如何申請中斷,如何建立work queue。

5.參考 

linux子系統分析及觸控螢幕驅動淺析:有加input裝置的最簡單例子


http://blog.csdn.net/Ralph_sqd/article/details/5933388

Linux裝置驅動的分層設計思想:inputdev

http://www.linuxidc.com/Linux/2010-06/26812p2.htm

基於I2C的嵌入式多點觸控螢幕幕驅動設計:對driver流程的說明

http://www.dzsc.com/data/html/2011-3-11/89104.html

   linux多點觸摸介面:對input裝置各個參數有詳細的說明

 http://tanatseng.blog.163.com/blog/static/174991629201132561941518/

Android多點觸摸:從driver到framework到應用有說明

http://wenku.baidu.com/view/a6a0ee0b79563c1ec5da7119.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.