aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator
diff options
context:
space:
mode:
authorMyungJoo Ham <myungjoo.ham@samsung.com>2011-06-20 04:30:17 -0400
committerLiam Girdwood <lrg@slimlogic.co.uk>2011-07-08 14:14:57 -0400
commit6e0414a5c89c708efe67f828f3a9c12293ce326e (patch)
treea921fe8da670e0f197e7d22842579a437e45da08 /drivers/regulator
parentdbb48e7c3db4871803fc990864e37917e413ccb2 (diff)
regulator: max8997: remove dependency on platform_data pointer
The platform_data (pdata) may be pointing to __initdata section, which may be free'd from the memory. The dependency on pdata in non-init functions is removed in this patch to allow platform to declare __initdata for platform data. Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
Diffstat (limited to 'drivers/regulator')
-rw-r--r--drivers/regulator/max8997.c44
1 files changed, 23 insertions, 21 deletions
diff --git a/drivers/regulator/max8997.c b/drivers/regulator/max8997.c
index 0fc7b8c720d2..f8940c603cf0 100644
--- a/drivers/regulator/max8997.c
+++ b/drivers/regulator/max8997.c
@@ -39,25 +39,28 @@ struct max8997_data {
39 struct regulator_dev **rdev; 39 struct regulator_dev **rdev;
40 int ramp_delay; /* in mV/us */ 40 int ramp_delay; /* in mV/us */
41 41
42 bool buck1_gpiodvs;
43 bool buck2_gpiodvs;
44 bool buck5_gpiodvs;
42 u8 buck1_vol[8]; 45 u8 buck1_vol[8];
43 u8 buck2_vol[8]; 46 u8 buck2_vol[8];
44 u8 buck5_vol[8]; 47 u8 buck5_vol[8];
48 int buck125_gpios[3];
45 int buck125_gpioindex; 49 int buck125_gpioindex;
50 bool ignore_gpiodvs_side_effect;
46 51
47 u8 saved_states[MAX8997_REG_MAX]; 52 u8 saved_states[MAX8997_REG_MAX];
48}; 53};
49 54
50static inline void max8997_set_gpio(struct max8997_data *max8997) 55static inline void max8997_set_gpio(struct max8997_data *max8997)
51{ 56{
52 struct max8997_platform_data *pdata =
53 dev_get_platdata(max8997->iodev->dev);
54 int set3 = (max8997->buck125_gpioindex) & 0x1; 57 int set3 = (max8997->buck125_gpioindex) & 0x1;
55 int set2 = ((max8997->buck125_gpioindex) >> 1) & 0x1; 58 int set2 = ((max8997->buck125_gpioindex) >> 1) & 0x1;
56 int set1 = ((max8997->buck125_gpioindex) >> 2) & 0x1; 59 int set1 = ((max8997->buck125_gpioindex) >> 2) & 0x1;
57 60
58 gpio_set_value(pdata->buck125_gpios[0], set1); 61 gpio_set_value(max8997->buck125_gpios[0], set1);
59 gpio_set_value(pdata->buck125_gpios[1], set2); 62 gpio_set_value(max8997->buck125_gpios[1], set2);
60 gpio_set_value(pdata->buck125_gpios[2], set3); 63 gpio_set_value(max8997->buck125_gpios[2], set3);
61} 64}
62 65
63struct voltage_map_desc { 66struct voltage_map_desc {
@@ -380,8 +383,6 @@ static int max8997_get_voltage_register(struct regulator_dev *rdev,
380static int max8997_get_voltage(struct regulator_dev *rdev) 383static int max8997_get_voltage(struct regulator_dev *rdev)
381{ 384{
382 struct max8997_data *max8997 = rdev_get_drvdata(rdev); 385 struct max8997_data *max8997 = rdev_get_drvdata(rdev);
383 struct max8997_platform_data *pdata =
384 dev_get_platdata(max8997->iodev->dev);
385 struct i2c_client *i2c = max8997->iodev->i2c; 386 struct i2c_client *i2c = max8997->iodev->i2c;
386 int reg, shift, mask, ret; 387 int reg, shift, mask, ret;
387 int rid = max8997_get_rid(rdev); 388 int rid = max8997_get_rid(rdev);
@@ -391,9 +392,9 @@ static int max8997_get_voltage(struct regulator_dev *rdev)
391 if (ret) 392 if (ret)
392 return ret; 393 return ret;
393 394
394 if ((rid == MAX8997_BUCK1 && pdata->buck1_gpiodvs) || 395 if ((rid == MAX8997_BUCK1 && max8997->buck1_gpiodvs) ||
395 (rid == MAX8997_BUCK2 && pdata->buck2_gpiodvs) || 396 (rid == MAX8997_BUCK2 && max8997->buck2_gpiodvs) ||
396 (rid == MAX8997_BUCK5 && pdata->buck5_gpiodvs)) 397 (rid == MAX8997_BUCK5 && max8997->buck5_gpiodvs))
397 reg += max8997->buck125_gpioindex; 398 reg += max8997->buck125_gpioindex;
398 399
399 ret = max8997_read_reg(i2c, reg, &val); 400 ret = max8997_read_reg(i2c, reg, &val);
@@ -561,8 +562,6 @@ static int max8997_assess_side_effect(struct regulator_dev *rdev,
561 u8 new_val, int *best) 562 u8 new_val, int *best)
562{ 563{
563 struct max8997_data *max8997 = rdev_get_drvdata(rdev); 564 struct max8997_data *max8997 = rdev_get_drvdata(rdev);
564 struct max8997_platform_data *pdata =
565 dev_get_platdata(max8997->iodev->dev);
566 int rid = max8997_get_rid(rdev); 565 int rid = max8997_get_rid(rdev);
567 u8 *buckx_val[3]; 566 u8 *buckx_val[3];
568 bool buckx_gpiodvs[3]; 567 bool buckx_gpiodvs[3];
@@ -589,9 +588,9 @@ static int max8997_assess_side_effect(struct regulator_dev *rdev,
589 buckx_val[0] = max8997->buck1_vol; 588 buckx_val[0] = max8997->buck1_vol;
590 buckx_val[1] = max8997->buck2_vol; 589 buckx_val[1] = max8997->buck2_vol;
591 buckx_val[2] = max8997->buck5_vol; 590 buckx_val[2] = max8997->buck5_vol;
592 buckx_gpiodvs[0] = pdata->buck1_gpiodvs; 591 buckx_gpiodvs[0] = max8997->buck1_gpiodvs;
593 buckx_gpiodvs[1] = pdata->buck2_gpiodvs; 592 buckx_gpiodvs[1] = max8997->buck2_gpiodvs;
594 buckx_gpiodvs[2] = pdata->buck5_gpiodvs; 593 buckx_gpiodvs[2] = max8997->buck5_gpiodvs;
595 594
596 for (i = 0; i < 8; i++) { 595 for (i = 0; i < 8; i++) {
597 int others; 596 int others;
@@ -640,8 +639,6 @@ static int max8997_set_voltage_buck(struct regulator_dev *rdev,
640 int min_uV, int max_uV, unsigned *selector) 639 int min_uV, int max_uV, unsigned *selector)
641{ 640{
642 struct max8997_data *max8997 = rdev_get_drvdata(rdev); 641 struct max8997_data *max8997 = rdev_get_drvdata(rdev);
643 struct max8997_platform_data *pdata =
644 dev_get_platdata(max8997->iodev->dev);
645 int rid = max8997_get_rid(rdev); 642 int rid = max8997_get_rid(rdev);
646 const struct voltage_map_desc *desc; 643 const struct voltage_map_desc *desc;
647 int new_val, new_idx, damage, tmp_val, tmp_idx, tmp_dmg; 644 int new_val, new_idx, damage, tmp_val, tmp_idx, tmp_dmg;
@@ -653,15 +650,15 @@ static int max8997_set_voltage_buck(struct regulator_dev *rdev,
653 650
654 switch (rid) { 651 switch (rid) {
655 case MAX8997_BUCK1: 652 case MAX8997_BUCK1:
656 if (pdata->buck1_gpiodvs) 653 if (max8997->buck1_gpiodvs)
657 gpio_dvs_mode = true; 654 gpio_dvs_mode = true;
658 break; 655 break;
659 case MAX8997_BUCK2: 656 case MAX8997_BUCK2:
660 if (pdata->buck2_gpiodvs) 657 if (max8997->buck2_gpiodvs)
661 gpio_dvs_mode = true; 658 gpio_dvs_mode = true;
662 break; 659 break;
663 case MAX8997_BUCK5: 660 case MAX8997_BUCK5:
664 if (pdata->buck5_gpiodvs) 661 if (max8997->buck5_gpiodvs)
665 gpio_dvs_mode = true; 662 gpio_dvs_mode = true;
666 break; 663 break;
667 } 664 }
@@ -695,7 +692,7 @@ static int max8997_set_voltage_buck(struct regulator_dev *rdev,
695 new_idx = tmp_idx; 692 new_idx = tmp_idx;
696 new_val = tmp_val; 693 new_val = tmp_val;
697 694
698 if (pdata->ignore_gpiodvs_side_effect == false) 695 if (max8997->ignore_gpiodvs_side_effect == false)
699 return -EINVAL; 696 return -EINVAL;
700 697
701 dev_warn(&rdev->dev, "MAX8997 GPIO-DVS Side Effect Warning: GPIO SET:" 698 dev_warn(&rdev->dev, "MAX8997 GPIO-DVS Side Effect Warning: GPIO SET:"
@@ -993,6 +990,11 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
993 i2c = max8997->iodev->i2c; 990 i2c = max8997->iodev->i2c;
994 991
995 max8997->buck125_gpioindex = pdata->buck125_default_idx; 992 max8997->buck125_gpioindex = pdata->buck125_default_idx;
993 max8997->buck1_gpiodvs = pdata->buck1_gpiodvs;
994 max8997->buck2_gpiodvs = pdata->buck2_gpiodvs;
995 max8997->buck5_gpiodvs = pdata->buck5_gpiodvs;
996 memcpy(max8997->buck125_gpios, pdata->buck125_gpios, sizeof(int) * 3);
997 max8997->ignore_gpiodvs_side_effect = pdata->ignore_gpiodvs_side_effect;
996 998
997 for (i = 0; i < 8; i++) { 999 for (i = 0; i < 8; i++) {
998 max8997->buck1_vol[i] = ret = 1000 max8997->buck1_vol[i] = ret =