const unsigned long *timing;
        int rc;
 
-       /* hotplug? */
-       if (ehc->i.flags & ATA_EHI_HOTPLUGGED) {
-               if (ap->flags & ATA_FLAG_HRST_TO_RESUME)
-                       ehc->i.action |= ATA_EH_HARDRESET;
-               if (ap->flags & ATA_FLAG_SKIP_D2H_BSY)
-                       ata_wait_spinup(ap);
-       }
+       /* handle link resume & hotplug spinup */
+       if ((ehc->i.flags & ATA_EHI_RESUME_LINK) &&
+           (ap->flags & ATA_FLAG_HRST_TO_RESUME))
+               ehc->i.action |= ATA_EH_HARDRESET;
+
+       if ((ehc->i.flags & ATA_EHI_HOTPLUGGED) &&
+           (ap->flags & ATA_FLAG_SKIP_D2H_BSY))
+               ata_wait_spinup(ap);
 
        /* if we're about to do hardreset, nothing more to do */
        if (ehc->i.action & ATA_EH_HARDRESET)
 
 
        /* ata_eh_info->flags */
        ATA_EHI_HOTPLUGGED      = (1 << 0),  /* could have been hotplugged */
+       ATA_EHI_RESUME_LINK     = (1 << 1),  /* need to resume link */
 
        ATA_EHI_DID_RESET       = (1 << 16), /* already reset this port */
 
        if (ehi->flags & ATA_EHI_HOTPLUGGED)
                return;
 
-       ehi->flags |= ATA_EHI_HOTPLUGGED;
+       ehi->flags |= ATA_EHI_HOTPLUGGED | ATA_EHI_RESUME_LINK;
        ehi->hotplug_timestamp = jiffies;
 
        ehi->err_mask |= AC_ERR_ATA_BUS;