Alrighty, here's the script I whipped up to unload/load ohci on suspend/resume.
#!/bin/sh
# Unloads/loads the ohci driver on suspend/resume due to
# it's lack of power management support. This is a temporary
# hack until the ohci driver is improved.
case "$1" in
suspend)
rm /var/run/ohci-was-loaded
if [ "`/sbin/lsmod | grep ohci_hcd`" != "" ]; then
rmmod ohci_hcd
echo true > /var/run/ohci-was-loaded
fi
;;
resume)
if [ "`cat /var/run/ohci-was-loaded`" = "true" ]; then
modprobe ohci_hcd
rm /var/run/ohci-was-loaded
fi
;;
esac
I placed that at /etc/apm/scripts.d/ohci-apm-hack and simlinked it to /etc/apm/suspend.d/06ohci-apm-hack (so it will run right after 05ifupdown) and to /etc/apm/resume.d/31ohci-apm-hack (again, so it will run right after 30fiupdown). I figured it'd be a good idea to run it *after* ifupdown because if wlan is up, ohci will be loaded. Since ifupdown will unload/load modules according to the rmmod/modprobe commands in the post-down/pre-up lines of /etc/network/interfaces, it will handle the unloading/loading of ohci. So this script only really does anything if ohci is loaded, but the wlan interface isn't considered up by ifupdown.
Anyway, this does the trick for me. While I highly doubt anyone's tosa will burst into flames when this runs, I warn: Use at own risk.
As a side note: are the names "ohci_hcd" and "ohci-hcd" interchangeable? Doing a "modprobe -l | grep ohci" shows "ohci-hcd" but when it's loaded, lsmod shows it as "ohci_hcd". Both seem to work when loading/unloading it via modprobe and rmmod. What's up with that?