scsi: ufs: ufs-mediatek: Prevent device regulators setting LPM incorrectly
authorPo-Wen Kao <powen.kao@mediatek.com>
Thu, 16 Jun 2022 05:37:19 +0000 (13:37 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 17 Jun 2022 02:08:43 +0000 (22:08 -0400)
Device regulatrs are allowed to enter low-power mode if neither device is
not in active mode, nor VCC does not keep on.

Fix this by adding conditions before LPM decision.

Link: https://lore.kernel.org/r/20220616053725.5681-6-stanley.chu@mediatek.com
Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Po-Wen Kao <powen.kao@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/host/ufs-mediatek.c

index 817d957..03762ec 100644 (file)
@@ -1034,10 +1034,18 @@ static void ufs_mtk_vreg_set_lpm(struct ufs_hba *hba, bool lpm)
        if (!hba->vreg_info.vccq2 || !hba->vreg_info.vcc)
                return;
 
-       if (lpm && !hba->vreg_info.vcc->enabled)
+       /* Bypass LPM when device is still active */
+       if (lpm && ufshcd_is_ufs_dev_active(hba))
+               return;
+
+       /* Bypass LPM if VCC is enabled */
+       if (lpm && hba->vreg_info.vcc->enabled)
+               return;
+
+       if (lpm)
                regulator_set_mode(hba->vreg_info.vccq2->reg,
                                   REGULATOR_MODE_IDLE);
-       else if (!lpm)
+       else
                regulator_set_mode(hba->vreg_info.vccq2->reg,
                                   REGULATOR_MODE_NORMAL);
 }