scsi: core: Move autosuspend timer delay to Scsi_Host
[linux-2.6-microblaze.git] / drivers / ufs / core / ufshcd.c
index 10b0c9c..e519695 100644 (file)
@@ -8031,11 +8031,13 @@ out:
 
 static inline void ufshcd_blk_pm_runtime_init(struct scsi_device *sdev)
 {
+       struct Scsi_Host *shost = sdev->host;
+
        scsi_autopm_get_device(sdev);
        blk_pm_runtime_init(sdev->request_queue, &sdev->sdev_gendev);
        if (sdev->rpm_autosuspend)
                pm_runtime_set_autosuspend_delay(&sdev->sdev_gendev,
-                                                RPM_AUTOSUSPEND_DELAY_MS);
+                                                shost->rpm_autosuspend_delay);
        scsi_autopm_put_device(sdev);
 }
 
@@ -9109,7 +9111,6 @@ static const struct scsi_host_template ufshcd_driver_template = {
        .track_queue_depth      = 1,
        .skip_settle_delay      = 1,
        .sdev_groups            = ufshcd_driver_groups,
-       .rpm_autosuspend_delay  = RPM_AUTOSUSPEND_DELAY_MS,
 };
 
 static int ufshcd_config_vreg_load(struct device *dev, struct ufs_vreg *vreg,
@@ -10568,6 +10569,10 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
        host->max_cmd_len = UFS_CDB_SIZE;
        host->queuecommand_may_block = !!(hba->caps & UFSHCD_CAP_CLK_GATING);
 
+       /* Use default RPM delay if host not set */
+       if (host->rpm_autosuspend_delay == 0)
+               host->rpm_autosuspend_delay = RPM_AUTOSUSPEND_DELAY_MS;
+
        hba->max_pwr_info.is_valid = false;
 
        /* Initialize work queues */