|
@@ -392,9 +392,8 @@ static int ab8500_regulator_set_mode(struct regulator_dev *rdev,
|
|
|
val = info->mode_val_idle;
|
|
|
break;
|
|
|
default:
|
|
|
- if (info->shared_mode)
|
|
|
- mutex_unlock(&shared_mode_mutex);
|
|
|
- return -EINVAL;
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out_unlock;
|
|
|
}
|
|
|
|
|
|
bank = info->mode_bank;
|
|
@@ -405,17 +404,14 @@ static int ab8500_regulator_set_mode(struct regulator_dev *rdev,
|
|
|
|
|
|
switch (mode) {
|
|
|
case REGULATOR_MODE_NORMAL:
|
|
|
- info->update_val = info->update_val_normal;
|
|
|
val = info->update_val_normal;
|
|
|
break;
|
|
|
case REGULATOR_MODE_IDLE:
|
|
|
- info->update_val = info->update_val_idle;
|
|
|
val = info->update_val_idle;
|
|
|
break;
|
|
|
default:
|
|
|
- if (info->shared_mode)
|
|
|
- mutex_unlock(&shared_mode_mutex);
|
|
|
- return -EINVAL;
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out_unlock;
|
|
|
}
|
|
|
|
|
|
bank = info->update_bank;
|
|
@@ -426,9 +422,11 @@ static int ab8500_regulator_set_mode(struct regulator_dev *rdev,
|
|
|
if (dmr || ab8500_regulator_is_enabled(rdev)) {
|
|
|
ret = abx500_mask_and_set_register_interruptible(info->dev,
|
|
|
bank, reg, mask, val);
|
|
|
- if (ret < 0)
|
|
|
+ if (ret < 0) {
|
|
|
dev_err(rdev_get_dev(rdev),
|
|
|
"couldn't set regulator mode\n");
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
|
|
|
dev_vdbg(rdev_get_dev(rdev),
|
|
|
"%s-set_mode (bank, reg, mask, value): "
|
|
@@ -437,6 +435,10 @@ static int ab8500_regulator_set_mode(struct regulator_dev *rdev,
|
|
|
mask, val);
|
|
|
}
|
|
|
|
|
|
+ if (!dmr)
|
|
|
+ info->update_val = val;
|
|
|
+
|
|
|
+out_unlock:
|
|
|
if (info->shared_mode)
|
|
|
mutex_unlock(&shared_mode_mutex);
|
|
|
|