You also have to suspend everything in the right order (e.g. suspend USB
devices before you suspend the USB controller). And you have to make sure
userspace processes won't be trying to wake devices up behind your back.
IIRC Matthew Garrett had a very nice explanation on his blog, but I cannot
find it at the moment.