2011年8月5日 星期五

Devkit8500 Touch Screen on Android

研究了一下如何把rowboat android gingerbread

放在devkit8500這塊板子上,主要參考

http://processors.wiki.ti.com/index.php/TI-Android-GingerBread-2.3-DevKit-1.0_ReleaseNotes

去git rowboat的TI-Android-GingerBread-2.3-DevKit-1.0.xml分支

載下來後,編譯android

$make TARGET_PRODUCT=omap3evm OMAPES=5.x

然後用光碟附的kernel用NFS去掛android filesystem, 順利進入畫面!

一進去發現觸控有反應但位置好像偏掉了

谷哥大俠說這是跟tscalibration有關的議題

於是把0xdroid的TScalibration2.apk拿來跑,結果雖然開機有出現五點校正

但校正完情況還是沒變......

在想apk是不是0xdroid基於tslib所設計的

所以因為這filesystem沒有ts_calibrate才無法校正





之後參考這個網站

http://hi.baidu.com/sanitywolf/blog/item/32071fbf3146211218d81f24.html/cmtid/32071fbfefe5fb0519d81fb0


1.修改kernel_src/arch/arm/mach-omap2/board-omap3devkit8500.c
struct ads7846_platform_data ads7846_config = {
#ifdef CONFIG_ADS_SCALED_EV
        .x_max                  = 800,
        .y_max                  = 480,
#else
        .x_max                  = 0x0fff,
        .y_max                  = 0x0fff,
#endif
//      .x_plate_ohms           = 180,
//      .pressure_max           = 255,
        .debounce_max           = 10,
        .debounce_tol           = 5,
        .debounce_rep           = 1,
        .get_pendown_state      = ads7846_get_pendown_state,
        .keep_vref_on           = 1,
        .settle_delay_usecs     = 150,
        .wakeup                 = true,
//        .swap_xy                = 1,
};
//把.swap_xy mark掉

2.到kernel_src/drivers/input/touchscreen/

修改ads7846.c這個觸控板controller

主要修改如下

//diousk calibrate

static void ads7846_rx(void *ads)
{
...
...
#define OMAP3EVM_XMIN           0x06d
#define OMAP3EVM_XMAX           0x7b4
#define OMAP3EVM_YMIN           0x0a6
#define OMAP3EVM_YMAX           0x760
//diousk calibrate
printk("before x=%4d y=%4d\n",x,y);
x = pdata->x_max-((pdata->x_max * (x - OMAP3EVM_XMIN)) / (OMAP3EVM_XMAX-OMAP3EVM_XMIN));
y = pdata->y_max-((pdata->y_max * (y - OMAP3EVM_YMIN)) / (OMAP3EVM_YMAX-OMAP3EVM_YMIN));
printk("after x=%4d y=%4d\n",x,y);
//
...
...
}

至於XMIN XMAX YMIN YMAX是在沒改之前先在這function埋printk

觸摸面板看座標變化的情況得到觸控板回傳的的X,Y最小值和最大值

之後重編kernel再boot一次就OK了~~

總算開啟了順暢的Gingerbread大門了!ㄎㄎ

p.s. 這裡用的是480x272的LCD,所以要修改bootargs 參數:omapfb.mode=lcd:480x272
      有必要話也可以改omapfb.rotate=1, 這樣android才能正常大小的顯示

1 則留言:

Siang 提到...

可否詢問你升級2.3的步驟細節?!