經過上一篇文章,相信大家都可以在 imx 8m mini evk板子上新增一個 spi driver,並可以成功看到 driver 吐出的debug message.
這一篇文章,我們開始寫code來控制 evk板子上 expansion connector J1003上的 EXP_IO9 GPIO.
首先必須先了解一下HW 線路圖,查一下 EXP_IO9 GPIO是接到哪裡,請看文件 " \8MMINILPD4-EVK-DESIGNFILES\Base Board\SCH-31407_C2\SPF-31407_C2.pdf"
可以看到 exp_io0-14是接在pca6416上,目前線路上有用來當 EXT_PWREN pin控制AK5558 ic. 我們的目標是鎖定在 exp_io9,index 為 11 (之後會用到這個index)
我們這邊做一個 mapping table,方便日後控制參考
pca6416 exp_io control /d/GPIO mapping table
index ----------------------
0 exp_io14 p0_0 gpio-496
1 EXT_PWREN p0_1 gpio-497
2 exp_io0 p0_2 gpio-498
3 exp_io1 p0_3 gpio-499
4 exp_io2 p0_4 gpio-500
5 exp_io3 p0_5 gpio-501
6 exp_io4 p0_6 gpio-502
7 exp_io5 p0_7 gpio-503
8 exp_io6 p1_0 gpio-504
9 exp_io7 p1_1 gpio-505
10 exp_io8 p1_2 gpio-506
11 exp_io9 p1_3 gpio-507 <------ 我們目標就是控制這一根 GPIO, 從 P0_0數過來,就是 第index 11個
12 exp_io10 p1_4 gpio-508
13 exp_io11 p1_5 gpio-509
14 exp_io12 p1_6 gpio-510
15 exp_io13 p1_7 gpio-511
為了測試方便,我們可以用LED燈,將正極接到 exp cn j1003的 pin 13(EXP_IO9),負極接到 pin 9 (GND),如果成功控制exp_io9,led就會亮(output high 1.8v).
[開發前之命令列測試]
在還沒修改drvier source code前,我們可利用以下指令先測試看看,是否能控制 EXP_IO9
.adb root
.adb shell
.cd /sys/class/gpio
.echo 507 > export
.cd gpio507
.echo out > direction
.echo 1 > value //可以點亮 led
.echo 0 > value //可以關閉led
.cat /d/gpio // 檢查gpio 使用情形
經過以上測試,exp_io9使可以順利被sw控制的,接著我們就要開始修改 driver source code來控制 exp_io9
[軟體實作]
我們的環境是延續上一篇文章,需要再修改兩個檔案
\kernel_imx\drivers\gpu\drm\panel\panel-epson-s1d13c00.c
\kernel_imx\arch\arm64\boot\dts\freescale\fsl-imx8mm-evk-s1d13c00.dts
[panel-epson-s1d13c00.c]
解說:
.因為會使用到of的相關函數 of_get_named_gpio,所以要加上 #include <linux/of_gpio.h>
.因為要使用到gpio控制,所以在 s1d13c00 結構中新增int pwr_gpio; 成員
解說:
.利用 of 相關函數去存取 dts的s1d13c00,pwr-gpio ,並去設定output high or low.
[fsl-imx8mm-evk-s1d13c00.dts]
解說:
新增這一行 s1d13c00,pwr-gpio = <&pca6416 11 GPIO_ACTIVE_HIGH>; // add for gpio control
的意思是我們將使用 pca6426上面的 index 11的 gpio(exp_io9)來當 pwr-gpio使用,並且是 high active.
[build image]
.source build/envsetup.sh
.lunch 28
.make -j8 bootimage
.make -j8 dtboimage
[update image]
.adb reboot bootloader
.fastboot flash dtbo_a dtbo-imx8mm-epson.img
.fastboot flash boot_a boot.img
.fastboot reboot
更新為修改後的 image後,你就可以發現led 會亮暗一次,經由 cat /d/gpio 也可以發現 gpio-507已經被 driver request了,名稱為 pwr-gpio.
實際在板子上看起來,就會像下面這張圖
將過這篇文章教學後,我們已經可以去控制 expansion connector 上的 exp_io9,大家可以舉一反三,去控制其他根 exp_ioX.