diff options
| -rw-r--r-- | drivers/scsi/ufs/ufshcd.c | 16 |
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; } |
