diff options
Diffstat (limited to 'drivers/regulator/max8998.c')
-rw-r--r-- | drivers/regulator/max8998.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/drivers/regulator/max8998.c b/drivers/regulator/max8998.c index ae3f0656feb0..961091b46557 100644 --- a/drivers/regulator/max8998.c +++ b/drivers/regulator/max8998.c | |||
@@ -40,7 +40,6 @@ struct max8998_data { | |||
40 | struct device *dev; | 40 | struct device *dev; |
41 | struct max8998_dev *iodev; | 41 | struct max8998_dev *iodev; |
42 | int num_regulators; | 42 | int num_regulators; |
43 | struct regulator_dev **rdev; | ||
44 | u8 buck1_vol[4]; /* voltages for selection */ | 43 | u8 buck1_vol[4]; /* voltages for selection */ |
45 | u8 buck2_vol[2]; | 44 | u8 buck2_vol[2]; |
46 | unsigned int buck1_idx; /* index to last changed voltage */ | 45 | unsigned int buck1_idx; /* index to last changed voltage */ |
@@ -674,8 +673,10 @@ static int max8998_pmic_dt_parse_pdata(struct max8998_dev *iodev, | |||
674 | 673 | ||
675 | rdata = devm_kzalloc(iodev->dev, sizeof(*rdata) * | 674 | rdata = devm_kzalloc(iodev->dev, sizeof(*rdata) * |
676 | pdata->num_regulators, GFP_KERNEL); | 675 | pdata->num_regulators, GFP_KERNEL); |
677 | if (!rdata) | 676 | if (!rdata) { |
677 | of_node_put(regulators_np); | ||
678 | return -ENOMEM; | 678 | return -ENOMEM; |
679 | } | ||
679 | 680 | ||
680 | pdata->regulators = rdata; | 681 | pdata->regulators = rdata; |
681 | for (i = 0; i < ARRAY_SIZE(regulators); ++i) { | 682 | for (i = 0; i < ARRAY_SIZE(regulators); ++i) { |
@@ -692,6 +693,9 @@ static int max8998_pmic_dt_parse_pdata(struct max8998_dev *iodev, | |||
692 | } | 693 | } |
693 | pdata->num_regulators = rdata - pdata->regulators; | 694 | pdata->num_regulators = rdata - pdata->regulators; |
694 | 695 | ||
696 | of_node_put(reg_np); | ||
697 | of_node_put(regulators_np); | ||
698 | |||
695 | ret = max8998_pmic_dt_parse_dvs_gpio(iodev, pdata, pmic_np); | 699 | ret = max8998_pmic_dt_parse_dvs_gpio(iodev, pdata, pmic_np); |
696 | if (ret) | 700 | if (ret) |
697 | return -EINVAL; | 701 | return -EINVAL; |
@@ -741,10 +745,10 @@ static int max8998_pmic_probe(struct platform_device *pdev) | |||
741 | struct max8998_dev *iodev = dev_get_drvdata(pdev->dev.parent); | 745 | struct max8998_dev *iodev = dev_get_drvdata(pdev->dev.parent); |
742 | struct max8998_platform_data *pdata = iodev->pdata; | 746 | struct max8998_platform_data *pdata = iodev->pdata; |
743 | struct regulator_config config = { }; | 747 | struct regulator_config config = { }; |
744 | struct regulator_dev **rdev; | 748 | struct regulator_dev *rdev; |
745 | struct max8998_data *max8998; | 749 | struct max8998_data *max8998; |
746 | struct i2c_client *i2c; | 750 | struct i2c_client *i2c; |
747 | int i, ret, size; | 751 | int i, ret; |
748 | unsigned int v; | 752 | unsigned int v; |
749 | 753 | ||
750 | if (!pdata) { | 754 | if (!pdata) { |
@@ -763,12 +767,6 @@ static int max8998_pmic_probe(struct platform_device *pdev) | |||
763 | if (!max8998) | 767 | if (!max8998) |
764 | return -ENOMEM; | 768 | return -ENOMEM; |
765 | 769 | ||
766 | size = sizeof(struct regulator_dev *) * pdata->num_regulators; | ||
767 | max8998->rdev = devm_kzalloc(&pdev->dev, size, GFP_KERNEL); | ||
768 | if (!max8998->rdev) | ||
769 | return -ENOMEM; | ||
770 | |||
771 | rdev = max8998->rdev; | ||
772 | max8998->dev = &pdev->dev; | 770 | max8998->dev = &pdev->dev; |
773 | max8998->iodev = iodev; | 771 | max8998->iodev = iodev; |
774 | max8998->num_regulators = pdata->num_regulators; | 772 | max8998->num_regulators = pdata->num_regulators; |
@@ -872,13 +870,12 @@ static int max8998_pmic_probe(struct platform_device *pdev) | |||
872 | config.init_data = pdata->regulators[i].initdata; | 870 | config.init_data = pdata->regulators[i].initdata; |
873 | config.driver_data = max8998; | 871 | config.driver_data = max8998; |
874 | 872 | ||
875 | rdev[i] = devm_regulator_register(&pdev->dev, | 873 | rdev = devm_regulator_register(&pdev->dev, ®ulators[index], |
876 | ®ulators[index], &config); | 874 | &config); |
877 | if (IS_ERR(rdev[i])) { | 875 | if (IS_ERR(rdev)) { |
878 | ret = PTR_ERR(rdev[i]); | 876 | ret = PTR_ERR(rdev); |
879 | dev_err(max8998->dev, "regulator %s init failed (%d)\n", | 877 | dev_err(max8998->dev, "regulator %s init failed (%d)\n", |
880 | regulators[index].name, ret); | 878 | regulators[index].name, ret); |
881 | rdev[i] = NULL; | ||
882 | return ret; | 879 | return ret; |
883 | } | 880 | } |
884 | } | 881 | } |