Skip to content

Commit

Permalink
Merge remote-tracking branches 'regulator/fix/88pm800', 'regulator/fi…
Browse files Browse the repository at this point in the history
…x/max8973', 'regulator/fix/s2mps11' and 'regulator/fix/supply' into regulator-linus
  • Loading branch information
Mark Brown committed Jul 24, 2015
5 parents 7055a31 + 322dfa6 + 127e106 + 32c848e + 36a1f1b commit 4c7d83e
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 7 deletions.
2 changes: 1 addition & 1 deletion drivers/regulator/88pm800.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ struct pm800_regulators {
.owner = THIS_MODULE, \
.n_voltages = ARRAY_SIZE(ldo_volt_table), \
.vsel_reg = PM800_##vreg##_VOUT, \
.vsel_mask = 0x1f, \
.vsel_mask = 0xf, \
.enable_reg = PM800_##ereg, \
.enable_mask = 1 << (ebit), \
.volt_table = ldo_volt_table, \
Expand Down
9 changes: 8 additions & 1 deletion drivers/regulator/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ static int _regulator_do_set_voltage(struct regulator_dev *rdev,
static struct regulator *create_regulator(struct regulator_dev *rdev,
struct device *dev,
const char *supply_name);
static void _regulator_put(struct regulator *regulator);

static const char *rdev_get_name(struct regulator_dev *rdev)
{
Expand Down Expand Up @@ -1105,6 +1106,9 @@ static int set_supply(struct regulator_dev *rdev,

rdev_info(rdev, "supplied by %s\n", rdev_get_name(supply_rdev));

if (!try_module_get(supply_rdev->owner))
return -ENODEV;

rdev->supply = create_regulator(supply_rdev, &rdev->dev, "SUPPLY");
if (rdev->supply == NULL) {
err = -ENOMEM;
Expand Down Expand Up @@ -1402,8 +1406,11 @@ static int regulator_resolve_supply(struct regulator_dev *rdev)
/* Cascade always-on state to supply */
if (_regulator_is_enabled(rdev)) {
ret = regulator_enable(rdev->supply);
if (ret < 0)
if (ret < 0) {
if (rdev->supply)
_regulator_put(rdev->supply);
return ret;
}
}

return 0;
Expand Down
2 changes: 1 addition & 1 deletion drivers/regulator/max8973-regulator.c
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ static struct max8973_regulator_platform_data *max8973_parse_dt(
pdata->control_flags |= MAX8973_CONTROL_FREQ_SHIFT_9PER_ENABLE;

if (of_property_read_bool(np, "maxim,enable-bias-control"))
pdata->control_flags |= MAX8973_BIAS_ENABLE;
pdata->control_flags |= MAX8973_CONTROL_BIAS_ENABLE;

return pdata;
}
Expand Down
14 changes: 10 additions & 4 deletions drivers/regulator/s2mps11.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
#include <linux/mfd/samsung/s2mps14.h>
#include <linux/mfd/samsung/s2mpu02.h>

/* The highest number of possible regulators for supported devices. */
#define S2MPS_REGULATOR_MAX S2MPS13_REGULATOR_MAX
struct s2mps11_info {
unsigned int rdev_num;
int ramp_delay2;
Expand All @@ -49,7 +51,7 @@ struct s2mps11_info {
* One bit for each S2MPS13/S2MPS14/S2MPU02 regulator whether
* the suspend mode was enabled.
*/
unsigned long long s2mps14_suspend_state:50;
DECLARE_BITMAP(suspend_state, S2MPS_REGULATOR_MAX);

/* Array of size rdev_num with GPIO-s for external sleep control */
int *ext_control_gpio;
Expand Down Expand Up @@ -500,15 +502,15 @@ static int s2mps14_regulator_enable(struct regulator_dev *rdev)
switch (s2mps11->dev_type) {
case S2MPS13X:
case S2MPS14X:
if (s2mps11->s2mps14_suspend_state & (1 << rdev_get_id(rdev)))
if (test_bit(rdev_get_id(rdev), s2mps11->suspend_state))
val = S2MPS14_ENABLE_SUSPEND;
else if (gpio_is_valid(s2mps11->ext_control_gpio[rdev_get_id(rdev)]))
val = S2MPS14_ENABLE_EXT_CONTROL;
else
val = rdev->desc->enable_mask;
break;
case S2MPU02:
if (s2mps11->s2mps14_suspend_state & (1 << rdev_get_id(rdev)))
if (test_bit(rdev_get_id(rdev), s2mps11->suspend_state))
val = S2MPU02_ENABLE_SUSPEND;
else
val = rdev->desc->enable_mask;
Expand Down Expand Up @@ -562,7 +564,7 @@ static int s2mps14_regulator_set_suspend_disable(struct regulator_dev *rdev)
if (ret < 0)
return ret;

s2mps11->s2mps14_suspend_state |= (1 << rdev_get_id(rdev));
set_bit(rdev_get_id(rdev), s2mps11->suspend_state);
/*
* Don't enable suspend mode if regulator is already disabled because
* this would effectively for a short time turn on the regulator after
Expand Down Expand Up @@ -960,18 +962,22 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
case S2MPS11X:
s2mps11->rdev_num = ARRAY_SIZE(s2mps11_regulators);
regulators = s2mps11_regulators;
BUILD_BUG_ON(S2MPS_REGULATOR_MAX < s2mps11->rdev_num);
break;
case S2MPS13X:
s2mps11->rdev_num = ARRAY_SIZE(s2mps13_regulators);
regulators = s2mps13_regulators;
BUILD_BUG_ON(S2MPS_REGULATOR_MAX < s2mps11->rdev_num);
break;
case S2MPS14X:
s2mps11->rdev_num = ARRAY_SIZE(s2mps14_regulators);
regulators = s2mps14_regulators;
BUILD_BUG_ON(S2MPS_REGULATOR_MAX < s2mps11->rdev_num);
break;
case S2MPU02:
s2mps11->rdev_num = ARRAY_SIZE(s2mpu02_regulators);
regulators = s2mpu02_regulators;
BUILD_BUG_ON(S2MPS_REGULATOR_MAX < s2mps11->rdev_num);
break;
default:
dev_err(&pdev->dev, "Invalid device type: %u\n",
Expand Down

0 comments on commit 4c7d83e

Please sign in to comment.