diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c index c91023e57194..a1c4b3d9b97f 100644 --- a/drivers/scsi/ufs/ufshcd-pltfrm.c +++ b/drivers/scsi/ufs/ufshcd-pltfrm.c @@ -158,6 +158,12 @@ static int ufshcd_populate_vreg(struct device *dev, const char *name, vreg->max_uA = 0; } +#if defined(CONFIG_SCSI_UFSHCD_QTI) + snprintf(prop_name, MAX_PROP_SIZE, "%s-min-microamp", name); + if (of_property_read_u32(np, prop_name, &vreg->min_uA)) + vreg->min_uA = UFS_VREG_LPM_LOAD_UA; +#endif + if (!strcmp(name, "vcc")) { if (of_property_read_bool(np, "vcc-supply-1p8")) { vreg->min_uV = UFS_VREG_VCC_1P8_MIN_UV; diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 42c6d6cd0b56..d6379bcabb3c 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -7822,12 +7822,24 @@ static int ufshcd_config_vreg_load(struct device *dev, struct ufs_vreg *vreg, return ret; } - +#if defined(CONFIG_SCSI_UFSHCD_QTI) static inline int ufshcd_config_vreg_lpm(struct ufs_hba *hba, struct ufs_vreg *vreg) +{ + if (!vreg) + return 0; + else if (vreg->unused) + return 0; + else + return ufshcd_config_vreg_load(hba->dev, vreg, vreg->min_uA); +} +#else +static inline int ufshcd_config_vreg_lpm(struct ufs_hba *hba, + struct ufs_vreg *vreg) { return ufshcd_config_vreg_load(hba->dev, vreg, UFS_VREG_LPM_LOAD_UA); } +#endif static inline int ufshcd_config_vreg_hpm(struct ufs_hba *hba, struct ufs_vreg *vreg)