diff options
author | Sujit Reddy Thumma <sthumma@codeaurora.org> | 2013-07-30 00:36:00 +0530 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2013-08-26 12:51:26 +0400 |
commit | 62694735ca95c74dac4eb9068d59801ac0ddebaf (patch) | |
tree | 513e9886fe0edb36b7c4722d3657bd8da85ff11b /drivers/scsi/ufs/ufshcd.c | |
parent | 66ec6d59407baf7c7a1f99c79d632403c1064266 (diff) | |
download | blackbird-op-linux-62694735ca95c74dac4eb9068d59801ac0ddebaf.tar.gz blackbird-op-linux-62694735ca95c74dac4eb9068d59801ac0ddebaf.zip |
[SCSI] ufs: Add runtime PM support for UFS host controller driver
Add runtime PM helpers to suspend/resume UFS controller at runtime.
Enable runtime PM by default for pci and platform drivers as the
initialized hardware can suspend if it is not used after bootup.
Signed-off-by: Sujit Reddy Thumma <sthumma@codeaurora.org>
Signed-off-by: Santosh Y <santoshsy@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/ufs/ufshcd.c')
-rw-r--r-- | drivers/scsi/ufs/ufshcd.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 4267246df516..1f2caa01ec92 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -2169,6 +2169,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work) u32 status = 0; hba = container_of(work, struct ufs_hba, eeh_work); + pm_runtime_get_sync(hba->dev); err = ufshcd_get_ee_status(hba, &status); if (err) { dev_err(hba->dev, "%s: failed to get exception status %d\n", @@ -2184,6 +2185,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work) __func__, err); } out: + pm_runtime_put_sync(hba->dev); return; } @@ -2196,9 +2198,11 @@ static void ufshcd_fatal_err_handler(struct work_struct *work) struct ufs_hba *hba; hba = container_of(work, struct ufs_hba, feh_workq); + pm_runtime_get_sync(hba->dev); /* check if reset is already in progress */ if (hba->ufshcd_state != UFSHCD_STATE_RESET) ufshcd_do_reset(hba); + pm_runtime_put_sync(hba->dev); } /** @@ -2500,6 +2504,7 @@ static void ufshcd_async_scan(void *data, async_cookie_t cookie) ufshcd_force_reset_auto_bkops(hba); scsi_scan_host(hba->host); + pm_runtime_put_sync(hba->dev); out: return; } @@ -2721,6 +2726,9 @@ int ufshcd_init(struct device *dev, struct ufs_hba **hba_handle, *hba_handle = hba; + /* Hold auto suspend until async scan completes */ + pm_runtime_get_sync(dev); + async_schedule(ufshcd_async_scan, hba); return 0; |