問題背景:
移植完uboot2014.04和linux3.10內核後,編寫電阻觸摸屏驅動,驅動程序不響應中斷,剛開始以爲是移植的內核對s5pv210中斷管理的初始化有問題,經過痛苦的內核瀏覽過程發現中斷向量和中斷管理都初始化正確。後來用TQ210自帶的uboot和內核加載觸摸屏驅動後發現能正常觸發中斷,自帶的kernel和uboot,移植的kernel和uboot,那麼有四種組合去嘗試定位錯誤。用出廠自帶的uboot+自己移植的kernel發現也能觸發中斷,那麼就定位到uboot出錯了,通過比較移植的uboot和出廠自帶的uboot,發現在出廠uboot的lowlevel_init.S中帶有一個函數PMIC_InitIp(),這個函數用來初始化核心板裏面的電源管理芯片max8698,後來查閱s5pv210發現觸摸屏恰好被電源管理芯片所管理,那麼當電源管理芯片未初始化時,電阻觸摸屏是無法採樣並觸發中斷的。如下圖所示:
lowlevel_init.S初始化中添加如下代碼:
/*初始化電源管理芯片*/
/* PS_HOLD(GPJ2_5) set to output high */
ldr r0, =ELFIN_GPIO_BASE
ldr r1, =0x00100000
str r1, [r0, #GPJ2CON_OFFSET]
ldr r1, =0x0400
str r1, [r0, #GPJ2PUD_OFFSET]
ldr r1, =0x20
str r1, [r0, #GPJ2DAT_OFFSET]
/* IO