diff options
author | MyungJoo Ham <myungjoo.ham@samsung.com> | 2011-06-20 04:30:17 -0400 |
---|---|---|
committer | Liam Girdwood <lrg@slimlogic.co.uk> | 2011-07-08 14:14:57 -0400 |
commit | 6e0414a5c89c708efe67f828f3a9c12293ce326e (patch) | |
tree | a921fe8da670e0f197e7d22842579a437e45da08 /drivers/regulator | |
parent | dbb48e7c3db4871803fc990864e37917e413ccb2 (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.c | 44 |
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 | ||
50 | static inline void max8997_set_gpio(struct max8997_data *max8997) | 55 | static 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 | ||
63 | struct voltage_map_desc { | 66 | struct voltage_map_desc { |
@@ -380,8 +383,6 @@ static int max8997_get_voltage_register(struct regulator_dev *rdev, | |||
380 | static int max8997_get_voltage(struct regulator_dev *rdev) | 383 | static 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 = |