diff mbox series

[RESEND,v3,2/5] scsi: ufs: Avoid configuring regulator with undefined voltage range

Message ID 1553680707-28579-3-git-send-email-stanley.chu@mediatek.com (mailing list archive)
State New, archived
Headers show
Series scsi: ufs: Fix regulator operations and remove "<name>-fixed-regulator" device tree property | expand

Commit Message

Stanley Chu March 27, 2019, 9:58 a.m. UTC
For regulators used by UFS, vcc, vccq and vccq2 will have voltage range
initialized by ufshcd_populate_vreg(), however other regulators may
have undefined voltage range if dt-bindings have no such definition.

In above undefined case, both "min_uV" and "max_uV" fields in ufs_vreg
struct will be zero values and these values will be configured on
regulators in different power modes.

Currently this may have no harm if both "min_uV" and "max_uV"
always keep "zero values" because regulator_set_voltage() will always
bypass such invalid values and return "good" results.

However improper values shall be fixed to avoid potential bugs.
Simply bypass voltage configuration if voltage range is not defined.

Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/scsi/ufs/ufshcd.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

Comments

Avri Altman March 27, 2019, 10:35 a.m. UTC | #1
> 
> For regulators used by UFS, vcc, vccq and vccq2 will have voltage range
> initialized by ufshcd_populate_vreg(), however other regulators may
> have undefined voltage range if dt-bindings have no such definition.
> 
> In above undefined case, both "min_uV" and "max_uV" fields in ufs_vreg
> struct will be zero values and these values will be configured on
> regulators in different power modes.
> 
> Currently this may have no harm if both "min_uV" and "max_uV"
> always keep "zero values" because regulator_set_voltage() will always
> bypass such invalid values and return "good" results.
> 
> However improper values shall be fixed to avoid potential bugs.
> Simply bypass voltage configuration if voltage range is not defined.
> 
> Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
diff mbox series

Patch

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index e040f9dd9ff3..81d99aebb867 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -7039,12 +7039,15 @@  static int ufshcd_config_vreg(struct device *dev,
 	name = vreg->name;
 
 	if (regulator_count_voltages(reg) > 0) {
-		min_uV = on ? vreg->min_uV : 0;
-		ret = regulator_set_voltage(reg, min_uV, vreg->max_uV);
-		if (ret) {
-			dev_err(dev, "%s: %s set voltage failed, err=%d\n",
+		if (vreg->min_uV && vreg->max_uV) {
+			min_uV = on ? vreg->min_uV : 0;
+			ret = regulator_set_voltage(reg, min_uV, vreg->max_uV);
+			if (ret) {
+				dev_err(dev,
+					"%s: %s set voltage failed, err=%d\n",
 					__func__, name, ret);
-			goto out;
+				goto out;
+			}
 		}
 
 		uA_load = on ? vreg->max_uA : 0;