|
@@ -5418,6 +5418,7 @@ static int ata_host_request_pm(struct ata_host *host, pm_message_t mesg,
|
|
|
*/
|
|
|
int ata_host_suspend(struct ata_host *host, pm_message_t mesg)
|
|
|
{
|
|
|
+ unsigned int ehi_flags = ATA_EHI_QUIET;
|
|
|
int rc;
|
|
|
|
|
|
/*
|
|
@@ -5426,7 +5427,18 @@ int ata_host_suspend(struct ata_host *host, pm_message_t mesg)
|
|
|
*/
|
|
|
ata_lpm_enable(host);
|
|
|
|
|
|
- rc = ata_host_request_pm(host, mesg, 0, ATA_EHI_QUIET, 1);
|
|
|
+ /*
|
|
|
+ * On some hardware, device fails to respond after spun down
|
|
|
+ * for suspend. As the device won't be used before being
|
|
|
+ * resumed, we don't need to touch the device. Ask EH to skip
|
|
|
+ * the usual stuff and proceed directly to suspend.
|
|
|
+ *
|
|
|
+ * http://thread.gmane.org/gmane.linux.ide/46764
|
|
|
+ */
|
|
|
+ if (mesg.event == PM_EVENT_SUSPEND)
|
|
|
+ ehi_flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_NO_RECOVERY;
|
|
|
+
|
|
|
+ rc = ata_host_request_pm(host, mesg, 0, ehi_flags, 1);
|
|
|
if (rc == 0)
|
|
|
host->dev->power.power_state = mesg;
|
|
|
return rc;
|