Merge remote-tracking branches 'regulator/topic/bcm590xx', 'regulator/topic/da9052...
[cascardo/linux.git] / drivers / regulator / da9063-regulator.c
index 56727eb..7c9461d 100644 (file)
@@ -1,3 +1,4 @@
+
 /*
  * Regulator driver for DA9063 PMIC series
  *
@@ -60,7 +61,8 @@ struct da9063_regulator_info {
        .desc.ops = &da9063_ldo_ops, \
        .desc.min_uV = (min_mV) * 1000, \
        .desc.uV_step = (step_mV) * 1000, \
-       .desc.n_voltages = (((max_mV) - (min_mV))/(step_mV) + 1), \
+       .desc.n_voltages = (((max_mV) - (min_mV))/(step_mV) + 1 \
+               + (DA9063_V##regl_name##_BIAS)), \
        .desc.enable_reg = DA9063_REG_##regl_name##_CONT, \
        .desc.enable_mask = DA9063_LDO_EN, \
        .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)
 
        sel = regulator_map_voltage_linear(rdev, uV, uV);
        if (sel < 0)
-               return -EINVAL;
+               return sel;
 
        sel <<= ffs(rdev->desc->vsel_mask) - 1;
 
@@ -664,7 +666,7 @@ static struct da9063_regulators_pdata *da9063_parse_regulators_dt(
        struct device_node *node;
        int i, n, num;
 
-       node = of_find_node_by_name(pdev->dev.parent->of_node, "regulators");
+       node = of_get_child_by_name(pdev->dev.parent->of_node, "regulators");
        if (!node) {
                dev_err(&pdev->dev, "Regulators device node not found\n");
                return ERR_PTR(-ENODEV);
@@ -672,6 +674,7 @@ static struct da9063_regulators_pdata *da9063_parse_regulators_dt(
 
        num = of_regulator_match(&pdev->dev, node, da9063_matches,
                                 ARRAY_SIZE(da9063_matches));
+       of_node_put(node);
        if (num < 0) {
                dev_err(&pdev->dev, "Failed to match regulators\n");
                return ERR_PTR(-EINVAL);
@@ -708,7 +711,7 @@ static struct da9063_regulators_pdata *da9063_parse_regulators_dt(
                struct platform_device *pdev,
                struct of_regulator_match **da9063_reg_matches)
 {
-       da9063_reg_matches = NULL;
+       *da9063_reg_matches = NULL;
        return ERR_PTR(-ENODEV);
 }
 #endif
@@ -754,7 +757,7 @@ static int da9063_regulator_probe(struct platform_device *pdev)
        if (ret < 0) {
                dev_err(&pdev->dev,
                        "Error while reading BUCKs configuration\n");
-               return -EIO;
+               return ret;
        }
        bcores_merged = val & DA9063_BCORE_MERGE;
        bmem_bio_merged = val & DA9063_BUCK_MERGE;
@@ -773,10 +776,8 @@ static int da9063_regulator_probe(struct platform_device *pdev)
        size = sizeof(struct da9063_regulators) +
                n_regulators * sizeof(struct da9063_regulator);
        regulators = devm_kzalloc(&pdev->dev, size, GFP_KERNEL);
-       if (!regulators) {
-               dev_err(&pdev->dev, "No memory for regulators\n");
+       if (!regulators)
                return -ENOMEM;
-       }
 
        regulators->n_regulators = n_regulators;
        platform_set_drvdata(pdev, regulators);