summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/ufs/ufshcd.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 740509c34b0a..b2a16e465246 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -8589,17 +8589,18 @@ static int ufshcd_devfreq_scale(struct ufs_hba *hba, bool scale_up)
{
int ret = 0;
+ /* let's not get into low power until clock scaling is completed */
+ ufshcd_hold_all(hba);
+
ret = ufshcd_clock_scaling_prepare(hba);
if (ret)
- return ret;
+ goto out;
- /* let's not get into low power until clock scaling is completed */
- ufshcd_hold_all(hba);
/* scale down the gear before scaling down clocks */
if (!scale_up) {
ret = ufshcd_scale_gear(hba, false);
if (ret)
- goto out;
+ goto clk_scaling_unprepare;
}
ret = ufshcd_scale_clks(hba, scale_up);
@@ -8611,7 +8612,7 @@ static int ufshcd_devfreq_scale(struct ufs_hba *hba, bool scale_up)
ret = ufshcd_scale_gear(hba, true);
if (ret) {
ufshcd_scale_clks(hba, false);
- goto out;
+ goto clk_scaling_unprepare;
}
}
@@ -8625,13 +8626,14 @@ static int ufshcd_devfreq_scale(struct ufs_hba *hba, bool scale_up)
hba->clk_gating.delay_ms_pwr_save;
}
- goto out;
+ goto clk_scaling_unprepare;
scale_up_gear:
if (!scale_up)
ufshcd_scale_gear(hba, true);
-out:
+clk_scaling_unprepare:
ufshcd_clock_scaling_unprepare(hba);
+out:
ufshcd_release_all(hba);
return ret;
}