image

經過上一篇文章,相信大家都可以在 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)

image

我們這邊做一個 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]

image

解說:

.因為會使用到of的相關函數 of_get_named_gpio,所以要加上 #include <linux/of_gpio.h> 

.因為要使用到gpio控制,所以在 s1d13c00 結構中新增int pwr_gpio; 成員

image

解說:

.利用 of 相關函數去存取 dts的s1d13c00,pwr-gpio ,並去設定output high or low.

 

[fsl-imx8mm-evk-s1d13c00.dts]

image

解說:

新增這一行 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.

image

 

實際在板子上看起來,就會像下面這張圖

image

 

將過這篇文章教學後,我們已經可以去控制 expansion connector 上的 exp_io9,大家可以舉一反三,去控制其他根 exp_ioX.

 

arrow
arrow

    CuteParrot 發表在 痞客邦 留言(0) 人氣()