diff options
Diffstat (limited to 'drivers/regulator/lp3971.c')
-rw-r--r-- | drivers/regulator/lp3971.c | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/drivers/regulator/lp3971.c b/drivers/regulator/lp3971.c index 4f33a0f4a179..f5532ed79272 100644 --- a/drivers/regulator/lp3971.c +++ b/drivers/regulator/lp3971.c | |||
@@ -54,7 +54,7 @@ static int lp3971_set_bits(struct lp3971 *lp3971, u8 reg, u16 mask, u16 val); | |||
54 | #define LP3971_BUCK2_BASE 0x29 | 54 | #define LP3971_BUCK2_BASE 0x29 |
55 | #define LP3971_BUCK3_BASE 0x32 | 55 | #define LP3971_BUCK3_BASE 0x32 |
56 | 56 | ||
57 | const static int buck_base_addr[] = { | 57 | static const int buck_base_addr[] = { |
58 | LP3971_BUCK1_BASE, | 58 | LP3971_BUCK1_BASE, |
59 | LP3971_BUCK2_BASE, | 59 | LP3971_BUCK2_BASE, |
60 | LP3971_BUCK3_BASE, | 60 | LP3971_BUCK3_BASE, |
@@ -63,7 +63,7 @@ const static int buck_base_addr[] = { | |||
63 | #define LP3971_BUCK_TARGET_VOL1_REG(x) (buck_base_addr[x]) | 63 | #define LP3971_BUCK_TARGET_VOL1_REG(x) (buck_base_addr[x]) |
64 | #define LP3971_BUCK_TARGET_VOL2_REG(x) (buck_base_addr[x]+1) | 64 | #define LP3971_BUCK_TARGET_VOL2_REG(x) (buck_base_addr[x]+1) |
65 | 65 | ||
66 | const static int buck_voltage_map[] = { | 66 | static const int buck_voltage_map[] = { |
67 | 0, 800, 850, 900, 950, 1000, 1050, 1100, | 67 | 0, 800, 850, 900, 950, 1000, 1050, 1100, |
68 | 1150, 1200, 1250, 1300, 1350, 1400, 1450, 1500, | 68 | 1150, 1200, 1250, 1300, 1350, 1400, 1450, 1500, |
69 | 1550, 1600, 1650, 1700, 1800, 1900, 2500, 2800, | 69 | 1550, 1600, 1650, 1700, 1800, 1900, 2500, 2800, |
@@ -96,17 +96,17 @@ const static int buck_voltage_map[] = { | |||
96 | #define LDO_VOL_CONTR_SHIFT(x) ((x & 1) << 2) | 96 | #define LDO_VOL_CONTR_SHIFT(x) ((x & 1) << 2) |
97 | #define LDO_VOL_CONTR_MASK 0x0f | 97 | #define LDO_VOL_CONTR_MASK 0x0f |
98 | 98 | ||
99 | const static int ldo45_voltage_map[] = { | 99 | static const int ldo45_voltage_map[] = { |
100 | 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, | 100 | 1000, 1050, 1100, 1150, 1200, 1250, 1300, 1350, |
101 | 1400, 1500, 1800, 1900, 2500, 2800, 3000, 3300, | 101 | 1400, 1500, 1800, 1900, 2500, 2800, 3000, 3300, |
102 | }; | 102 | }; |
103 | 103 | ||
104 | const static int ldo123_voltage_map[] = { | 104 | static const int ldo123_voltage_map[] = { |
105 | 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, | 105 | 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, |
106 | 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, | 106 | 2600, 2700, 2800, 2900, 3000, 3100, 3200, 3300, |
107 | }; | 107 | }; |
108 | 108 | ||
109 | const static int *ldo_voltage_map[] = { | 109 | static const int *ldo_voltage_map[] = { |
110 | ldo123_voltage_map, /* LDO1 */ | 110 | ldo123_voltage_map, /* LDO1 */ |
111 | ldo123_voltage_map, /* LDO2 */ | 111 | ldo123_voltage_map, /* LDO2 */ |
112 | ldo123_voltage_map, /* LDO3 */ | 112 | ldo123_voltage_map, /* LDO3 */ |
@@ -431,20 +431,20 @@ static int lp3971_set_bits(struct lp3971 *lp3971, u8 reg, u16 mask, u16 val) | |||
431 | return ret; | 431 | return ret; |
432 | } | 432 | } |
433 | 433 | ||
434 | static int setup_regulators(struct lp3971 *lp3971, | 434 | static int __devinit setup_regulators(struct lp3971 *lp3971, |
435 | struct lp3971_platform_data *pdata) | 435 | struct lp3971_platform_data *pdata) |
436 | { | 436 | { |
437 | int i, err; | 437 | int i, err; |
438 | int num_regulators = pdata->num_regulators; | 438 | |
439 | lp3971->num_regulators = num_regulators; | 439 | lp3971->num_regulators = pdata->num_regulators; |
440 | lp3971->rdev = kzalloc(sizeof(struct regulator_dev *) * num_regulators, | 440 | lp3971->rdev = kcalloc(pdata->num_regulators, |
441 | GFP_KERNEL); | 441 | sizeof(struct regulator_dev *), GFP_KERNEL); |
442 | 442 | ||
443 | /* Instantiate the regulators */ | 443 | /* Instantiate the regulators */ |
444 | for (i = 0; i < num_regulators; i++) { | 444 | for (i = 0; i < pdata->num_regulators; i++) { |
445 | int id = pdata->regulators[i].id; | 445 | struct lp3971_regulator_subdev *reg = &pdata->regulators[i]; |
446 | lp3971->rdev[i] = regulator_register(®ulators[id], | 446 | lp3971->rdev[i] = regulator_register(®ulators[reg->id], |
447 | lp3971->dev, pdata->regulators[i].initdata, lp3971); | 447 | lp3971->dev, reg->initdata, lp3971); |
448 | 448 | ||
449 | if (IS_ERR(lp3971->rdev[i])) { | 449 | if (IS_ERR(lp3971->rdev[i])) { |
450 | err = PTR_ERR(lp3971->rdev[i]); | 450 | err = PTR_ERR(lp3971->rdev[i]); |
@@ -455,10 +455,10 @@ static int setup_regulators(struct lp3971 *lp3971, | |||
455 | } | 455 | } |
456 | 456 | ||
457 | return 0; | 457 | return 0; |
458 | |||
458 | error: | 459 | error: |
459 | for (i = 0; i < num_regulators; i++) | 460 | while (--i >= 0) |
460 | if (lp3971->rdev[i]) | 461 | regulator_unregister(lp3971->rdev[i]); |
461 | regulator_unregister(lp3971->rdev[i]); | ||
462 | kfree(lp3971->rdev); | 462 | kfree(lp3971->rdev); |
463 | lp3971->rdev = NULL; | 463 | lp3971->rdev = NULL; |
464 | return err; | 464 | return err; |
@@ -472,15 +472,17 @@ static int __devinit lp3971_i2c_probe(struct i2c_client *i2c, | |||
472 | int ret; | 472 | int ret; |
473 | u16 val; | 473 | u16 val; |
474 | 474 | ||
475 | lp3971 = kzalloc(sizeof(struct lp3971), GFP_KERNEL); | 475 | if (!pdata) { |
476 | if (lp3971 == NULL) { | 476 | dev_dbg(&i2c->dev, "No platform init data supplied\n"); |
477 | ret = -ENOMEM; | 477 | return -ENODEV; |
478 | goto err; | ||
479 | } | 478 | } |
480 | 479 | ||
480 | lp3971 = kzalloc(sizeof(struct lp3971), GFP_KERNEL); | ||
481 | if (lp3971 == NULL) | ||
482 | return -ENOMEM; | ||
483 | |||
481 | lp3971->i2c = i2c; | 484 | lp3971->i2c = i2c; |
482 | lp3971->dev = &i2c->dev; | 485 | lp3971->dev = &i2c->dev; |
483 | i2c_set_clientdata(i2c, lp3971); | ||
484 | 486 | ||
485 | mutex_init(&lp3971->io_lock); | 487 | mutex_init(&lp3971->io_lock); |
486 | 488 | ||
@@ -493,19 +495,15 @@ static int __devinit lp3971_i2c_probe(struct i2c_client *i2c, | |||
493 | goto err_detect; | 495 | goto err_detect; |
494 | } | 496 | } |
495 | 497 | ||
496 | if (pdata) { | 498 | ret = setup_regulators(lp3971, pdata); |
497 | ret = setup_regulators(lp3971, pdata); | 499 | if (ret < 0) |
498 | if (ret < 0) | 500 | goto err_detect; |
499 | goto err_detect; | ||
500 | } else | ||
501 | dev_warn(lp3971->dev, "No platform init data supplied\n"); | ||
502 | 501 | ||
502 | i2c_set_clientdata(i2c, lp3971); | ||
503 | return 0; | 503 | return 0; |
504 | 504 | ||
505 | err_detect: | 505 | err_detect: |
506 | i2c_set_clientdata(i2c, NULL); | ||
507 | kfree(lp3971); | 506 | kfree(lp3971); |
508 | err: | ||
509 | return ret; | 507 | return ret; |
510 | } | 508 | } |
511 | 509 | ||
@@ -513,11 +511,13 @@ static int __devexit lp3971_i2c_remove(struct i2c_client *i2c) | |||
513 | { | 511 | { |
514 | struct lp3971 *lp3971 = i2c_get_clientdata(i2c); | 512 | struct lp3971 *lp3971 = i2c_get_clientdata(i2c); |
515 | int i; | 513 | int i; |
514 | |||
515 | i2c_set_clientdata(i2c, NULL); | ||
516 | |||
516 | for (i = 0; i < lp3971->num_regulators; i++) | 517 | for (i = 0; i < lp3971->num_regulators; i++) |
517 | if (lp3971->rdev[i]) | 518 | regulator_unregister(lp3971->rdev[i]); |
518 | regulator_unregister(lp3971->rdev[i]); | 519 | |
519 | kfree(lp3971->rdev); | 520 | kfree(lp3971->rdev); |
520 | i2c_set_clientdata(i2c, NULL); | ||
521 | kfree(lp3971); | 521 | kfree(lp3971); |
522 | 522 | ||
523 | return 0; | 523 | return 0; |