Damien Le Moal <dlemoal@xxxxxxxxxx> writes: > That is because the PM operations are defined for the *port*, not the *device* > (struct ata_device). With the missing PM ops for the device, PM core simply > sets the device as active. The ata device appears to be entirely internal and not exposed as part of the sysfs device tree. It is the generic block device that seems to be the one that actually implements runtime pm for the disk. I think the problem is that the ata port is resumed first, then later the block device. Thus, setting the block device to suspended in the port resume is later overruled by the system resume of the block device. I'm thinking what is needed is for sd.c to query libata in its system resume callback and then set the runtime pm status depending on whether the drive is active or not. By the way, I have noticed my system logs showing that the ata port that my dvd+rw is on is "Activating" twice, back to back. Any idea why it would be trying to power up the optial drive twice?