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 になります。