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
で制御できます。