Александр,насчет лички.
У мну руки дошли до USB и я ответил Вам, но через 2 дня приехал боунс...
Вобщем, вот мой ответ:
-----------------------------CUT------------------------
Все оказалось достаточно просто.
Есть такая штука как usbfs (обычно примонтированная к /proc/bus/usb)
и там есть диры - номера USB контроллеров:
# l /proc/bus/usb
total 0
dr-xr-xr-x 2 root root 0 Aug 10 15:25 001
dr-xr-xr-x 2 root root 0 Aug 10 15:25 002
dr-xr-xr-x 2 root root 0 Aug 10 15:25 003
dr-xr-xr-x 2 root root 0 Aug 10 15:25 004
dr-xr-xr-x 2 root root 0 Aug 10 15:25 005
-r--r--r-- 1 root root 0 Aug 15 01:52 devices
ну а там: первый девайс - сам контроллер, а остальные номера - подключенные
девайсы. Вот тут у мну флешка (008)
# l /proc/bus/usb/001/
total 0
-rw-rw-r-- 1 root usb 43 Aug 10 15:25 001
-rw-rw-r-- 1 root usb 57 Aug 15 01:52 008
собсно, для того чтоб отресетить 1-й контроллер
нуна открыть его файлик "/proc/bus/usb/001/001"
и сказать ему через ioctl() USBDEVFS_RESET
Вот это вот оно:
--------CUT-----------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <asm/ioctl.h>
#include <linux/usbdevice_fs.h>
void main() {
int fd = open("/proc/bus/usb/001/001", O_RDWR);
ioctl(fd, USBDEVFS_RESET, NULL);
close(fd);
}
--------/CUT-----------
можно позвать такое дело для всех контроллеров и будет полное счастье :)
Кста, все это может быть изобретением велосипеда,
потому как - щас проверил - у мну все ресетиццо после саспенда (саспенд родной, ядреный, медленный).
Есть такая незаметная опция CONFIG_USB_SUSPEND.
Попробуйте собрать с нею для начала. Думаю, все будет спать и просыпаться как положено.
-------------------------------/CUT------------------