Perhaps this works for a camera, too:
Following revived a starved
USB 3.0 HDD on a
3.4.42 (kernel.org) Linux on my side.
dmesg told, that it was timing out commands after 360s (sorry, I cannot copy the syslog here, not connected networks) and the drive hung completely. Processes accessing the device were blocked in the kernel, unkillable.
After doing this, everything worked again.
dmesg told just a single line about the
USB device found.
I really have no idea what following does in detail. But it worked.
The following example output is from Debian Squeeze with
2.6.32-5-686 kernel, so I think it works for 2.6 and above:
$ ls -al /dev/sdb
brw-rw---T 1 root floppy 8, 16 Jun 3 20:24 /dev/sdb
$ ls -al /sys/dev/block/8:16/device/rescan
--w------- 1 root root 4096 Jun 6 01:46 /sys/dev/block/8:16/device/rescan
$ echo 1 > /sys/dev/block/8:16/device/rescan
If this does not work, perhaps somebody else can figure out how to send a real reset to a device.