Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Mar 2008 17:56:00 +0100
From:      Hans Petter Selasky <hselasky@c2i.net>
To:        freebsd-usb@freebsd.org
Cc:        Anish Mistry <amistry@am-productions.biz>, Andriy Gapon <avg@icyb.net.ua>
Subject:   Re: Utility to Suspend/Disable/Enable Power Off USB ports
Message-ID:  <200803061756.01227.hselasky@c2i.net>
In-Reply-To: <200803050411.17074.amistry@am-productions.biz>
References:  <200803050411.17074.amistry@am-productions.biz>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi,

I think that we should have this functionality in the USB kernel like a 
separate IOCTL, that only takes an USB address like argument, hence every USB 
device in the kernel knows which is its parent HUB.

There is a problem when you do a port reset, and that is that the USB device 
goes into the unaddressed state, and starts responding to address 0. If 
another device is being enumerated at the same time, this might cause 
problems.

BTW: What are the main purposes of your program?

--HPS

On Wednesday 05 March 2008, Anish Mistry wrote:
> I've written the upower utility allows you to selectively suspend usb
> ports.  It acts similar to the Windows "Stop Removable Device"
> process.  It has only been tested on 7.0-RELEASE.
>
> WARNING: This program may eat your lunch and kick your dog.  You've
> been warned.
>
> Download and compile.
>
> fetch http://am-productions.biz/docs/upower.c
> gcc -o upower upower.c
>
> You will need to be root or have rw access to the uhub devices.
> eg. /dev/usbX
>
> Use "usbdevs -v" to find the port/device to suspend.
> # usbdevs -v
> Controller /dev/usb0:
> addr 1: full speed, self powered, config 1, UHCI root hub(0x0000),
> Intel(0x0000), rev 1.00
>  port 1 powered
>  port 2 powered
> Controller /dev/usb1:
> addr 1: full speed, self powered, config 1, UHCI root hub(0x0000),
> Intel(0x0000), rev 1.00
>  port 1 powered
>  port 2 addr 2: low speed, power 100 mA, config 1, product 0x0009
> (0x0009), vendor 0x045e(0x045e), rev 1.05
> Controller /dev/usb2:
> addr 1: full speed, self powered, config 1, UHCI root hub(0x0000),
> Intel(0x0000), rev 1.00
>  port 1 powered
>  port 2 addr 2: full speed, power 100 mA, config 1, Fingerprint
> Sensor(0x2580), vendor 0x08ff(0x08ff), rev 6.23
> Controller /dev/usb3:
> addr 1: full speed, self powered, config 1, UHCI root hub(0x0000),
> Intel(0x0000), rev 1.00
>  port 1 powered
>  port 2 powered
> Controller /dev/usb4:
> addr 1: high speed, self powered, config 1, EHCI root hub(0x0000),
> Intel(0x0000), rev 1.00
>  port 1 powered
>  port 2 powered
>  port 3 addr 2: high speed, self powered, config 1, product
> 0x005a(0x005a), vendor 0x0409(0x0409), rev 1.00
>   port 1 powered
>   port 2 powered
>   port 3 powered
>   port 4 powered
>  port 4 powered
> Controller /dev/usb5:
> addr 1: high speed, self powered, config 1, EHCI root hub(0x0000),
> Intel(0x0000), rev 1.00
>  port 1 powered
>  port 2 powered
>  port 3 powered
>  port 4 addr 2: high speed, power 320 mA, config 1, Sirius USB2.0
> Camera(0x3343), Vimicro Corp.(0x0ac8), rev 1.00
>
>
> Since my built-in USB camera draws power when not in use, I'll suspend
> it to save battery time.
>
> # ./upower /dev/usb5 4 suspend



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803061756.01227.hselasky>