Armadillo-IoT(G3)で、USB(CON7)の電源(CON7_USB_VBUS)をGPIOで制御する方法です。
(2019.5.23:電源ON時にUSBデバイスを認識するように修正)
参考)
Armadillo-IoT ゲートウェイ G3製品マニュアル
17.6. CON7 USBホストインターフェース
1.デバイスツリーの変更
カーネルのソースコード
Linux 3.14版:linux-3.14-x1-at[version]
Linux 4.9版:linux-4.9-x1-at[version]
の
arch/arm/boot/dts
ディレクトリにあるデバイスツリー
armadillo_iotg_g3.dts
armadillo_iotg_g3_m1.dts
の、下記のpinctrl_hog、reg_usb_otg1_vbus、usbotg1の記述を変更します。
pinctrl_hog(/* 追加 */の2行を追加)
pinctrl_hog: hoggrp {
fsl,pins = <
/* USDHC1 */
MX7D_PAD_GPIO1_IO08__SD1_VSELECT 0x59 /* VSELECT */
/* PDS6-J */
MX7D_PAD_ECSPI1_MOSI__GPIO4_IO17 0x00 /* GPIO_3G_IGT_3.3 */
MX7D_PAD_ECSPI1_MISO__GPIO4_IO18 0x00 /* GPIO_3G_EMERG_OFF_3.3 */
MX7D_PAD_LCD_DATA16__GPIO3_IO21 0x00 /* GPIO_3G_VUSB_IN */
/* USB3503 */
MX7D_PAD_EPDC_DATA13__GPIO2_IO13 0x00 /* GPIO_USB_HUB_RESET_N */
MX7D_PAD_EPDC_DATA14__GPIO2_IO14 0x04 /* GPIO_USB_HUB_INT_N */
MX7D_PAD_EPDC_DATA15__GPIO2_IO15 0x00 /* GPIO_USB_HUB_CON */
/* MCU */
MX7D_PAD_GPIO1_IO13__GPIO1_IO13 0x40000000 /* MCU_INTB */
/* USB OTG1 VBUS EN */ /* 追加 */
MX7D_PAD_I2C4_SDA__GPIO4_IO15 0x00 /* 追加 */
>;
};
reg_usb_otg1_vbus(下記のreg_usb_otg1_vbusの記述をすべて削除)
reg_usb_otg1_vbus: regulator@0 {
compatible = "regulator-fixed";
reg = <0>;
regulator-name = "USB_OTG1_VBUS";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpio = <&gpio4 15 GPIO_ACTIVE_HIGH>;
enable-active-high;
};
usbotg1(下記のように修正)
&usbotg1 {
pinctrl-names = "default";
dr_mode = "host";
status = "okay";
};
上記修正を施したカーネルをビルドして、Armadillo-IoT(G3)のデバイスツリーを変更します。
参考)デバイスツリーの変更方法
Armadillo-IoT ゲートウェイ G3製品マニュアル
11.2.3. DTBの書き換え
2.USB(CON7)の電源(CON7_USB_VBUS)をGPIOで制御
上記1の修正を施したデバイスツリーを使用すると、
USB(CON7)の電源(CON7_USB_VBUS)のON/OFFは、GPIO4_IO15(gpio番号は111)で制御可能になります。
当該のGPIOをエクスポートします。
root@armadillo:~# cd /sys/class/gpio
root@armadillo:/sys/class/gpio# echo 111 > export
root@armadillo:/sys/class/gpio# cd gpio111
上記1で作成したデバイスツリーの場合、デフォルトは入力端子になっています。
root@armadillo:/sys/class/gpio/gpio111# cat direction
in
root@armadillo:/sys/class/gpio/gpio111# cat value
0
GPIO4_IO15(gpio番号は111)を出力に設定します。
root@armadillo:/sys/class/gpio/gpio111# echo out > direction
電源(CON7_USB_VBUS)をONにするには、
root@armadillo:/sys/class/gpio/gpio111# echo 1 > value
電源(CON7_USB_VBUS)をOFFにするには、
root@armadillo:/sys/class/gpio/gpio111# echo 0 > value
で制御できます。