0x00 環境說明:
所使用的開發板為銳爾威視的插針版A33_Vstar
觸摸屏驅動IC為GT911
接線參照開發板的TP線路
0x01 修改系統配置文件:
筆者所使用的A33開發板的系統配置文件路徑為:
/root/a33_linux/dragonboard/tools/pack/chips/sun8iw5p1/configs/vstar/sys_config.fex
在配置文件中搜索 [twi0] 以及 [twi_para] 確保IIC0是開啟的:
然后搜索 [ctp_para] ,修改TP配置:(注意屏幕分辨率按實際屏幕設置)
[ctp_para]
ctp_used = 1
ctp_name = "gt9xx_ts"
ctp_twi_id = 0
ctp_twi_addr = 0x5d
ctp_screen_max_x = 480
ctp_screen_max_y = 854
ctp_revert_x_flag = 0
ctp_revert_y_flag = 0
ctp_exchange_x_y_flag = 0ctp_int_port = port:PB05<0><0><default><default>
ctp_wakeup = port:PH01<1><default><default><1>
ctp_power_ldo = "axp22_eldo1"
ctp_power_ldo_vol = 3000
ctp_power_io =
0x02 修改初始化腳本:
初始化腳本路徑為:
/root/a33_linux/dragonboard/buildroot/target/dragonboard/extra/autorun.sh
在文件中找到安裝TP驅動的位置,將:
insmod "$tp_module_path"
修改為:
insmod /system/vendor/modules/gt9xx_ts.ko
找到 tslib config:
將其中的 ft5x_ts 修改為 gt9xx_ts :
修改完畢之后保存退出
0x03 修改驅動代碼:
驅動代碼路徑為:
/root/a33_linux/dragonboard/linux-3.4/drivers/input/touchscreen/gt9xx/
修改 gt9xx_ts.h :
修改相關配置選項:
//***************************PART1:ON/OFF define*******************************
#define GTP_CUSTOM_CFG 1
#define GTP_DRIVER_SEND_CFG 1
#define GTP_HAVE_TOUCH_KEY 0
#define GTP_POWER_CTRL_SLEEP 0
#define GTP_AUTO_UPDATE 0
#define GTP_CHANGE_X2Y 0
#define GTP_ESD_PROTECT 0
#define GTP_CREATE_WR_NODE 0
#define GTP_ICS_SLOT_REPORT 0#define GTP_HEADER_FW_UPDATE 0
#define GTP_SLIDING_WAKEUP 0
//TP的調試輸出控制(調試完畢之后建議關閉)
#define GTP_DEBUG_ON 1
#define GTP_DEBUG_ARRAY_ON 1
#define GTP_DEBUG_FUNC_ON 1
修改寄存器配置:(數據一般由屏廠直接給出)
#define CTP_CFG_GROUP1 {\
0x00,0xE0,0x01,0x56,0x03,0x0A,0x05,0x00,0x01,0x08,0x28,\
0x05,0x50,0x32,0x03,0x05,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x87,0x28,0x09,0x17,0x15,0x31,\
0x0D,0x00,0x00,0x02,0x9B,0x03,0x25,0x00,0x00,0x00,0x00,\
0x00,0x03,0x64,0x32,0x00,0x00,0x00,0x0F,0x36,0x94,0xC5,\
0x02,0x07,0x00,0x00,0x04,0x9B,0x11,0x00,0x7B,0x16,0x00,\
0x64,0x1C,0x00,0x50,0x25,0x00,0x42,0x2F,0x00,0x42,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x12,0x10,0x0E,0x0C,0x0A,0x08,0x06,0x04,0x02,\
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,\
0x24,0x22,0x21,0x20,0x1F,0x1E,0x1D,0x00,0x02,0x04,0x06,\
0x08,0x0A,0x0C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x01}
只用CTP_CFG_GROUP1,其他組全部清空
修改分辨率設置:(按實際情況調整)
//STEP_3(optional):Custom set some config by themself,if need.
#if GTP_CUSTOM_CFG
#define GTP_MAX_WIDTH 480
#define GTP_MAX_HEIGHT 854
#define GTP_INT_TRIGGER 1 //0:Rising 1:Falling
#else
#define GTP_MAX_HEIGHT 4096
#define GTP_MAX_WIDTH 4096
#define GTP_INT_TRIGGER 1
#endif
修改 gt9xx.c :
參考《GT911編程指南》,修改初始化代碼:
void gtp_io_init(int ms)
{
// ctp_wakeup(0, 0);
// msleep(ms);
//
// gtp_set_int_value(0);
// msleep(2);
//
// ctp_wakeup(1, 0);
// msleep(6);ctp_wakeup(0, 0);
gtp_set_int_value(0);
msleep(1);
ctp_wakeup(1, 0);
msleep(6);
gtp_set_int_value(0);
msleep(50);
#if GTP_ESD_PROTECT
// gtp_init_ext_watchdog(client);
#endif
}
保存修改之后重新編譯系統
0x04 重新編譯系統:
切換到系統源碼頂層目錄:
cd ~/a33_linux/dragonboard
重新編譯系統:
./clean.sh
./build.sh config
cd linux-3.4/
cp a33_vstar_defconfig .config
cd ..
./build.sh
./build.sh pack
最終打包生成的系統鏡像路徑為:
~/a33_linux/dragonboard/tools/pack/sun8iw5p1_dragonboard_vstar.img
0x05 驗證:
將打包生成的系統鏡像燒錄至板子,上電啟動之后進入觸摸屏校准:
點擊屏幕,串口打印坐標數據: