ブログ

Armadillo-420/440: USB電源のON/OFFを簡易的に行う方法(Linux 2.6.26の場合)

at_kazutaka.bito
2017年1月6日 19時52分

Armadillo-420/440にUSB機器を接続している状態で、意図的にUSB電源をON/OFFする簡易的な方法を紹介します。 なお、本方法は、Linux 2.6.26の場合になります。

参考)Armadillo-410の場合は、Armadillo-410: ソフトウェアからUSBの電源のON/OFFを行う(Linux 2.6.26系の場合)をご参考ください。

Armadillo-400シリーズハードウェアマニュアル 図3.2 電源回路構成図 -「Armadillo-420/440」 を見ると、USBI/Fの電源は、ACアダプタからの入力(CON12)またはPowerManagementIC(PMIC)から供給され、 GPIO(3,26)で切り替え可能であることが見て取れます。

また、標準のカーネルのデフォルトは、USBI/Fの電源はACアダプタからの入力(CON12)を選択するようになっており、 PMICの出力は無効(電源供給しない)になっています。

このことを利用して、GPIO(3,26)を使って、USB電源を
・ACアダプタからの入力(CON12)側にする = 電源ON
・PMICの出力(デフォルト:電源供給しない)側にする = 電源OFF
を切り替えるようにしてみました。

カーネルのソースコード linux-2.6.x/arch/arm/mach-mx25/armadillo400.c 内の static struct mxc_ext_gpio gpio_list_revc[] に下記★の1行を追加します。

static struct mxc_ext_gpio gpio_list_revc[] = {
 
(省略)
 
 
#if defined(CONFIG_ARMADILLO400_CON9_6_GPIO1_28)
    {"CON9_6",   GPIO(1, 28), MXC_EXT_GPIO_DIRECTION_INPUT},
#endif
 
    {"USB_PWRSEL",   GPIO(3, 26), MXC_EXT_GPIO_DIRECTION_OUTPUT}, // ★追加する行
 
/* Armadillo-410 CON2 */
#if defined(CONFIG_ARMADILLO410_CON2_73_GPIO1_8)
    {"CON2_73",  GPIO(1, 8),  MXC_EXT_GPIO_DIRECTION_INPUT}, /* EXT_GPIO0*/
#endif

上記の修正後、ビルドしたカーネルをArmadillo-420/440に書き込んで、

echo 0 > /sys/class/gpio/USB_PWRSEL/value

を実行すると、USB電源ON

echo 1 > /sys/class/gpio/USB_PWRSEL/value

を実行すると、USB電源OFF になります。