Armadilloフォーラム

Armadillo-840 USBの電源制御について

n.ki

2017年6月30日 16時17分

消費電力を抑えるため、USBの電源制御を考えております。

Armadillo-840製品マニュアル
18.2.5. CON5 USBインターフェース
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…
の説明に、

> USB0(上段)に供給する電源はR-Mobile A1のPPON_0/PORT85ピン、
> USB1(下段)に供給する電源はR-Mobile A1のPPON_1/PORT87ピンを用いてON/OFF制御が可能です。
> GPIOモードに設定後、Low出力で電源切断、High出力で電源供給されます。

とあったので、
make menuconfigを見直しましたが、それらしい設定項目が見当たりませんでした。

そこで、
atmark-dist-20160927/linux-3.x/arch/arm/mach-shmobile/board-armadillo840.c
に以下の変更を加えました。

+ static struct gpio usb_pwr_gpios[] = {
+ { GPIO_PORT85,>->->-0,>-"PPON_0" },
+ { GPIO_PORT87,>->->-0,>-"PPON_1" },
+ };

static void a840_usb_init(void)
{
gpio_request_array_simple(usb_gpios, ARRAY_SIZE(usb_gpios));

+ gpio_request_array_simple(usb_pwr_gpios, ARRAY_SIZE(usb_pwr_gpios));
+ gpio_export(GPIO_PORT85, 1);
+ gpio_export(GPIO_PORT87, 1);

writel(readl(USBCKCR) | 0x40, USBCKCR); /* USB div output */

しかし、イメージ作成後起動したArmadillo-840には、
/sys/class/gpio/gpio85
/sys/class/gpio/gpio87
は見当たりませんでした。

製品マニュアルにある「GPIOモードに設定」とは、どのように行えばいいのかお教え願えませんか。
よろしくお願いいたします。

コメント

n.ki

2017年7月17日 22時15分

自己レスです。
USBの電源制御はできませんでしたが、unbindすることで接続されているデバイス分の消費電力は抑えることができました。
kernel : linux-3.4-at21
例)
(上段)
unbind : # echo -n "1-1" > /sys/bus/usb/drivers/usb/unbind
bind : # echo -n "1-1" > /sys/bus/usb/drivers/usb/bind
(下段)
unbind : # echo -n "1-2" > /sys/bus/usb/drivers/usb/unbind
bind : # echo -n "1-2" > /sys/bus/usb/drivers/usb/bind

また、上記"1-1"や"1-2"の箇所を
# udevinfo --query=path --name=[デバイス] (ex. /dev/sda)
の結果から、sed等のコマンドで抽出したバスを指定すれば、USBハブ経由で接続されたデバイスのみのunbind/bindも可能なようです。

改めて、PPON_0/PORT85ピンとPPON_1/PORT87ピンによるUSBの電源制御について情報がありましたらお教えいただければと思います。
よろしくお願いします。

at_yashi

2017年8月18日 18時17分

ごめんなさい。マニュアルの修正漏れです。

at10 から GPIO は使わず、PPON信号を使って制御するように変更しています。
そのため、 gpio からは操作できず、 libusb を使う必要があります。

https://github.com/codazoda/hub-ctrl.c

などが参考になると思います。

n.ki

2017年8月19日 10時53分

at_yashi 様
返信ありがとうございます。
現在実機が手元にないため、確認し次第改めて結果を報告致します。
取り急ぎ、御礼まで。