On Thu, Nov 21, 2013 at 07:50:22PM +0530, Balaji T K wrote:

> +static int pbias_regulator_set_voltage(struct regulator_dev *dev,
> +                     int min_uV, int max_uV, unsigned *selector)
> +{
> +     struct pbias_regulator_data *data = rdev_get_drvdata(dev);
> +     const struct pbias_bit_map *bmap = data->bmap;
> +     int ret, vmode;
> +
> +     if (min_uV <= 1800000)
> +             vmode = 0;
> +     else if (min_uV > 1800000)
> +             vmode = bmap->vmode;
> +
> +     ret = regmap_update_bits(data->syscon, data->pbias_reg,
> +                                             bmap->vmode, vmode);
> +     data->voltage = min_uV;

> +static int pbias_regulator_get_voltage(struct regulator_dev *rdev)
> +{
> +     struct pbias_regulator_data *data = rdev_get_drvdata(rdev);
> +
> +     return data->voltage;
> +}

These don't match up with each other - the get and set voltage calls
should reflect what the hardware state is, not what was requested by the
caller.  You should be able to use the regmap helpers I think.

> +static int pbias_regulator_enable(struct regulator_dev *rdev)
> +{
> +     struct pbias_regulator_data *data = rdev_get_drvdata(rdev);
> +     const struct pbias_bit_map *bmap = data->bmap;
> +     int ret;
> +
> +     ret = regmap_update_bits(data->syscon, data->pbias_reg,
> +                                     bmap->enable_mask, bmap->enable);

regulator_enable_regmap() and similarly for disable() and is_enabled().

> +     supply_name = initdata->constraints.name;
> +
> +     of_property_read_u32(np, "startup-delay-us", &startup_delay);
> +     ret = of_property_read_u32(np, "pbias-reg-offset",
> +                                &drvdata->pbias_reg);
> +     if (ret) {
> +             dev_err(&pdev->dev, "no pbias-reg-offset property set\n");
> +             return ret;
> +     }

This looks like it should be added as a standard property for overridig
the regulator delay if it can't be set based on the compatible string
alone due to board dependencies.  Do something like what's done for
regulator-ramp-delay.

> +err_regulator:
> +     kfree(drvdata->desc.name);
> +     return ret;

devm_kzalloc().

> +static int __init pbias_regulator_init(void)
> +{
> +     return platform_driver_register(&pbias_regulator_driver);
> +}
> +subsys_initcall(pbias_regulator_init);

module_platform_driver().

Attachment: signature.asc
Description: Digital signature

Reply via email to