From 6517fb12c80d02089f757f8177632bfa3211f99b Mon Sep 17 00:00:00 2001 From: Subhash Jadavani Date: Wed, 27 May 2015 16:26:00 -0700 Subject: [PATCH] scsi: ufs: add delay before putting UFS rails in low power modes We put the UFS device in sleep state & UFS link in hibern8 state during runtime suspaned. After this we put all the UFS rails in low power modes immediately but it seems some devices may still draw more than sleep current from UFS rails (especially from VCCQ rail) atleast for 500us. To avoid this situation, this change adds 2ms delay before putting these UFS rails in LPM mode. Change-Id: Ifd8d3ef9e059f527613af0fcaa25ec2a282ad6c4 Signed-off-by: Subhash Jadavani --- drivers/scsi/ufs/ufshcd.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 6780a36d7714..eed086a90118 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -7559,6 +7559,15 @@ out: static void ufshcd_vreg_set_lpm(struct ufs_hba *hba) { + /* + * It seems some UFS devices may keep drawing more than sleep current + * (atleast for 500us) from UFS rails (especially from VCCQ rail). + * To avoid this situation, add 2ms delay before putting these UFS + * rails in LPM mode. + */ + if (!ufshcd_is_link_active(hba)) + usleep_range(2000, 2100); + /* * If UFS device is either in UFS_Sleep turn off VCC rail to save some * power.