diff options
Diffstat (limited to 'drivers/regulator/da9063-regulator.c')
-rw-r--r-- | drivers/regulator/da9063-regulator.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/regulator/da9063-regulator.c b/drivers/regulator/da9063-regulator.c index 56727eb745df..7c9461d13313 100644 --- a/drivers/regulator/da9063-regulator.c +++ b/drivers/regulator/da9063-regulator.c | |||
@@ -1,3 +1,4 @@ | |||
1 | |||
1 | /* | 2 | /* |
2 | * Regulator driver for DA9063 PMIC series | 3 | * Regulator driver for DA9063 PMIC series |
3 | * | 4 | * |
@@ -60,7 +61,8 @@ struct da9063_regulator_info { | |||
60 | .desc.ops = &da9063_ldo_ops, \ | 61 | .desc.ops = &da9063_ldo_ops, \ |
61 | .desc.min_uV = (min_mV) * 1000, \ | 62 | .desc.min_uV = (min_mV) * 1000, \ |
62 | .desc.uV_step = (step_mV) * 1000, \ | 63 | .desc.uV_step = (step_mV) * 1000, \ |
63 | .desc.n_voltages = (((max_mV) - (min_mV))/(step_mV) + 1), \ | 64 | .desc.n_voltages = (((max_mV) - (min_mV))/(step_mV) + 1 \ |
65 | + (DA9063_V##regl_name##_BIAS)), \ | ||
64 | .desc.enable_reg = DA9063_REG_##regl_name##_CONT, \ | 66 | .desc.enable_reg = DA9063_REG_##regl_name##_CONT, \ |
65 | .desc.enable_mask = DA9063_LDO_EN, \ | 67 | .desc.enable_mask = DA9063_LDO_EN, \ |
66 | .desc.vsel_reg = DA9063_REG_V##regl_name##_A, \ | 68 | .desc.vsel_reg = DA9063_REG_V##regl_name##_A, \ |
@@ -363,7 +365,7 @@ static int da9063_set_suspend_voltage(struct regulator_dev *rdev, int uV) | |||
363 | 365 | ||
364 | sel = regulator_map_voltage_linear(rdev, uV, uV); | 366 | sel = regulator_map_voltage_linear(rdev, uV, uV); |
365 | if (sel < 0) | 367 | if (sel < 0) |
366 | return -EINVAL; | 368 | return sel; |
367 | 369 | ||
368 | sel <<= ffs(rdev->desc->vsel_mask) - 1; | 370 | sel <<= ffs(rdev->desc->vsel_mask) - 1; |
369 | 371 | ||
@@ -664,7 +666,7 @@ static struct da9063_regulators_pdata *da9063_parse_regulators_dt( | |||
664 | struct device_node *node; | 666 | struct device_node *node; |
665 | int i, n, num; | 667 | int i, n, num; |
666 | 668 | ||
667 | node = of_find_node_by_name(pdev->dev.parent->of_node, "regulators"); | 669 | node = of_get_child_by_name(pdev->dev.parent->of_node, "regulators"); |
668 | if (!node) { | 670 | if (!node) { |
669 | dev_err(&pdev->dev, "Regulators device node not found\n"); | 671 | dev_err(&pdev->dev, "Regulators device node not found\n"); |
670 | return ERR_PTR(-ENODEV); | 672 | return ERR_PTR(-ENODEV); |
@@ -672,6 +674,7 @@ static struct da9063_regulators_pdata *da9063_parse_regulators_dt( | |||
672 | 674 | ||
673 | num = of_regulator_match(&pdev->dev, node, da9063_matches, | 675 | num = of_regulator_match(&pdev->dev, node, da9063_matches, |
674 | ARRAY_SIZE(da9063_matches)); | 676 | ARRAY_SIZE(da9063_matches)); |
677 | of_node_put(node); | ||
675 | if (num < 0) { | 678 | if (num < 0) { |
676 | dev_err(&pdev->dev, "Failed to match regulators\n"); | 679 | dev_err(&pdev->dev, "Failed to match regulators\n"); |
677 | return ERR_PTR(-EINVAL); | 680 | return ERR_PTR(-EINVAL); |
@@ -708,7 +711,7 @@ static struct da9063_regulators_pdata *da9063_parse_regulators_dt( | |||
708 | struct platform_device *pdev, | 711 | struct platform_device *pdev, |
709 | struct of_regulator_match **da9063_reg_matches) | 712 | struct of_regulator_match **da9063_reg_matches) |
710 | { | 713 | { |
711 | da9063_reg_matches = NULL; | 714 | *da9063_reg_matches = NULL; |
712 | return ERR_PTR(-ENODEV); | 715 | return ERR_PTR(-ENODEV); |
713 | } | 716 | } |
714 | #endif | 717 | #endif |
@@ -754,7 +757,7 @@ static int da9063_regulator_probe(struct platform_device *pdev) | |||
754 | if (ret < 0) { | 757 | if (ret < 0) { |
755 | dev_err(&pdev->dev, | 758 | dev_err(&pdev->dev, |
756 | "Error while reading BUCKs configuration\n"); | 759 | "Error while reading BUCKs configuration\n"); |
757 | return -EIO; | 760 | return ret; |
758 | } | 761 | } |
759 | bcores_merged = val & DA9063_BCORE_MERGE; | 762 | bcores_merged = val & DA9063_BCORE_MERGE; |
760 | bmem_bio_merged = val & DA9063_BUCK_MERGE; | 763 | bmem_bio_merged = val & DA9063_BUCK_MERGE; |
@@ -773,10 +776,8 @@ static int da9063_regulator_probe(struct platform_device *pdev) | |||
773 | size = sizeof(struct da9063_regulators) + | 776 | size = sizeof(struct da9063_regulators) + |
774 | n_regulators * sizeof(struct da9063_regulator); | 777 | n_regulators * sizeof(struct da9063_regulator); |
775 | regulators = devm_kzalloc(&pdev->dev, size, GFP_KERNEL); | 778 | regulators = devm_kzalloc(&pdev->dev, size, GFP_KERNEL); |
776 | if (!regulators) { | 779 | if (!regulators) |
777 | dev_err(&pdev->dev, "No memory for regulators\n"); | ||
778 | return -ENOMEM; | 780 | return -ENOMEM; |
779 | } | ||
780 | 781 | ||
781 | regulators->n_regulators = n_regulators; | 782 | regulators->n_regulators = n_regulators; |
782 | platform_set_drvdata(pdev, regulators); | 783 | platform_set_drvdata(pdev, regulators); |