diff options
| -rw-r--r-- | drivers/regulator/lp3972.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/regulator/lp3972.c b/drivers/regulator/lp3972.c index 0d9b47569c1b..e07062fd0b42 100644 --- a/drivers/regulator/lp3972.c +++ b/drivers/regulator/lp3972.c | |||
| @@ -192,7 +192,7 @@ static int lp3972_i2c_read(struct i2c_client *i2c, char reg, int count, | |||
| 192 | return -EIO; | 192 | return -EIO; |
| 193 | ret = i2c_smbus_read_byte_data(i2c, reg); | 193 | ret = i2c_smbus_read_byte_data(i2c, reg); |
| 194 | if (ret < 0) | 194 | if (ret < 0) |
| 195 | return -EIO; | 195 | return ret; |
| 196 | 196 | ||
| 197 | *dest = ret; | 197 | *dest = ret; |
| 198 | return 0; | 198 | return 0; |
| @@ -215,7 +215,7 @@ static u8 lp3972_reg_read(struct lp3972 *lp3972, u8 reg) | |||
| 215 | lp3972_i2c_read(lp3972->i2c, reg, 1, &val); | 215 | lp3972_i2c_read(lp3972->i2c, reg, 1, &val); |
| 216 | 216 | ||
| 217 | dev_dbg(lp3972->dev, "reg read 0x%02x -> 0x%02x\n", (int)reg, | 217 | dev_dbg(lp3972->dev, "reg read 0x%02x -> 0x%02x\n", (int)reg, |
| 218 | (unsigned)val&0xff); | 218 | (unsigned)val & 0xff); |
| 219 | 219 | ||
| 220 | mutex_unlock(&lp3972->io_lock); | 220 | mutex_unlock(&lp3972->io_lock); |
| 221 | 221 | ||
| @@ -234,7 +234,7 @@ static int lp3972_set_bits(struct lp3972 *lp3972, u8 reg, u16 mask, u16 val) | |||
| 234 | if (ret == 0) { | 234 | if (ret == 0) { |
| 235 | ret = lp3972_i2c_write(lp3972->i2c, reg, 1, &tmp); | 235 | ret = lp3972_i2c_write(lp3972->i2c, reg, 1, &tmp); |
| 236 | dev_dbg(lp3972->dev, "reg write 0x%02x -> 0x%02x\n", (int)reg, | 236 | dev_dbg(lp3972->dev, "reg write 0x%02x -> 0x%02x\n", (int)reg, |
| 237 | (unsigned)val&0xff); | 237 | (unsigned)val & 0xff); |
| 238 | } | 238 | } |
| 239 | mutex_unlock(&lp3972->io_lock); | 239 | mutex_unlock(&lp3972->io_lock); |
| 240 | 240 | ||
| @@ -320,6 +320,13 @@ static int lp3972_ldo_set_voltage(struct regulator_dev *dev, | |||
| 320 | if (ret) | 320 | if (ret) |
| 321 | return ret; | 321 | return ret; |
| 322 | 322 | ||
| 323 | /* | ||
| 324 | * LDO1 and LDO5 support voltage control by either target voltage1 | ||
| 325 | * or target voltage2 register. | ||
| 326 | * We use target voltage1 register for LDO1 and LDO5 in this driver. | ||
| 327 | * We need to update voltage change control register(0x20) to enable | ||
| 328 | * LDO1 and LDO5 to change to their programmed target values. | ||
| 329 | */ | ||
| 323 | switch (ldo) { | 330 | switch (ldo) { |
| 324 | case LP3972_LDO1: | 331 | case LP3972_LDO1: |
| 325 | case LP3972_LDO5: | 332 | case LP3972_LDO5: |
| @@ -401,7 +408,8 @@ static int lp3972_dcdc_get_voltage(struct regulator_dev *dev) | |||
| 401 | val = 1000 * buck_voltage_map[buck][reg]; | 408 | val = 1000 * buck_voltage_map[buck][reg]; |
| 402 | else { | 409 | else { |
| 403 | val = 0; | 410 | val = 0; |
| 404 | dev_warn(&dev->dev, "chip reported incorrect voltage value.\n"); | 411 | dev_warn(&dev->dev, "chip reported incorrect voltage value." |
| 412 | " reg = %d\n", reg); | ||
| 405 | } | 413 | } |
| 406 | 414 | ||
| 407 | return val; | 415 | return val; |
| @@ -523,7 +531,7 @@ static struct regulator_desc regulators[] = { | |||
| 523 | }, | 531 | }, |
| 524 | }; | 532 | }; |
| 525 | 533 | ||
| 526 | static int setup_regulators(struct lp3972 *lp3972, | 534 | static int __devinit setup_regulators(struct lp3972 *lp3972, |
| 527 | struct lp3972_platform_data *pdata) | 535 | struct lp3972_platform_data *pdata) |
| 528 | { | 536 | { |
| 529 | int i, err; | 537 | int i, err; |
| @@ -584,10 +592,13 @@ static int __devinit lp3972_i2c_probe(struct i2c_client *i2c, | |||
| 584 | 592 | ||
| 585 | /* Detect LP3972 */ | 593 | /* Detect LP3972 */ |
| 586 | ret = lp3972_i2c_read(i2c, LP3972_SYS_CONTROL1_REG, 1, &val); | 594 | ret = lp3972_i2c_read(i2c, LP3972_SYS_CONTROL1_REG, 1, &val); |
| 587 | if (ret == 0 && (val & SYS_CONTROL1_INIT_MASK) != SYS_CONTROL1_INIT_VAL) | 595 | if (ret == 0 && |
| 596 | (val & SYS_CONTROL1_INIT_MASK) != SYS_CONTROL1_INIT_VAL) { | ||
| 588 | ret = -ENODEV; | 597 | ret = -ENODEV; |
| 598 | dev_err(&i2c->dev, "chip reported: val = 0x%x\n", val); | ||
| 599 | } | ||
| 589 | if (ret < 0) { | 600 | if (ret < 0) { |
| 590 | dev_err(&i2c->dev, "failed to detect device\n"); | 601 | dev_err(&i2c->dev, "failed to detect device. ret = %d\n", ret); |
| 591 | goto err_detect; | 602 | goto err_detect; |
| 592 | } | 603 | } |
| 593 | 604 | ||
