關於mtk GPIO口的定製

如果需要定製GPIO口呢,需要使用mediatek/dct/DrvGen.exe工具,點擊Open,選擇mediatek/custom/project_dir/kernel/dct/dct/codegen.dws文件,點擊Edit,將出現如圖所示的一個窗口:
EintMode: 指示是否當作中斷引腳來使用,例如GPIO0就可以當作ENTI0,如果選中了該模式,其它模式是不可見的。
Def.Mode: GPIO默認的模式,什麼意思呢,就是在系統啓動過程中GPIO口的模式,GPIO口啓動模式是定義在文件cust_gpio_boot.h文件中的,例如,GPIO3的啓動模式就是作爲普通的GPIO口來使用,即模式爲GPIO_MODE_00,稍後會爲大家講解cust_gpio_boot.h文件是怎麼生成的。
M0~M7: 由於GPIO口是複用的,也就說除了作爲普通的GPIO口使用之外,還有其它用途,所以這裏會在cust_gpio_usage.h文件中產生一些宏定義,可能某些驅動中會用到這些宏定義。
InPull En: 是指GPIO是否使能上拉或下拉。
InPull SelHigh: 上面只是只是指示是否使能上拉或下拉,但是並沒有指出到底是上拉還是下拉,那麼就由這裏來指定,如果勾選了那麼就表示上拉,否則就是下拉。
Def.Dir: 指示GPIO默認的數據傳輸方向,是輸入還是輸出,都需要設置的。
In、Out: In和Out這兩個選項暫時不知道有何用處,根據字面意思呢,應該是允許輸入或輸出的。
OutHigh: 指示GPIO口作爲普通IO時輸出電平高低。
VarName1: 變量的名字,有些驅動中可能會使用到一些GPIO口,那麼這裏就是爲GPIO口定義一個別名,那麼在驅動中只需要這個別名就可以了,而這個GPIO口是可以換的,所以這裏也是爲了可移植性。

在GPIO口配置完成之後,首先是需要點擊Save來保存這個配置,可以點擊Gen Code去生成新的代碼,新的代碼就生成在和codegen.dws同一個目錄下,但是在Android 4.4版本上我都不是這樣做的,在保存以後,直接運行./mk n k也會生成新的代碼,生成目錄在:
out/target/product/project_dir/obj/CUSTGEN/custom/kernel/dct/,如果是其他版本,可能會不相同。

前面說了在系統啓動過程中會初始化這些GPIO口,那麼什麼地方在做初始化呢,有兩個地方preloader和lk,preloader初始化代碼流程如下:
mt_gpio_set_default()->mt_gpio_set_default_chip()
而該部分代碼在mediatek/platform/mt6582/preloader/src/drivers/gpio_init.c中,在該文件中首先就是包含文件cust_gpio_boot.h。

而lk部分初始化流程都是差不多的,流程如下:
mt_gpio_set_default()->mt_gpio_set_default_chip()

lk部分代碼在mediatek/platform/mt6582/lk/mt_gpio_init.c中。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章