diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index a3c9e41..96bf846 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -43,6 +43,49 @@ struct device_d *dev; }; +static int regulator_enable_internal(struct regulator_internal *ri) +{ + int ret; + + if (ri->enable_count) { + ri->enable_count++; + return 0; + } + + if (!ri->rdev->ops->enable) + return -ENOSYS; + + ret = ri->rdev->ops->enable(ri->rdev); + if (ret) + return ret; + + if (ri->enable_time_us) + udelay(ri->enable_time_us); + + ri->enable_count++; + + return 0; +} + +static int regulator_disable_internal(struct regulator_internal *ri) +{ + int ret; + + if (!ri->enable_count) + return -EINVAL; + + if (!ri->rdev->ops->disable) + return -ENOSYS; + + ret = ri->rdev->ops->disable(ri->rdev); + if (ret) + return ret; + + ri->enable_count--; + + return 0; +} + static struct regulator_internal * __regulator_register(struct regulator_dev *rd, const char *name) { struct regulator_internal *ri; @@ -239,32 +282,10 @@ */ int regulator_enable(struct regulator *r) { - struct regulator_internal *ri; - int ret; - if (!r) return 0; - ri = r->ri; - - if (ri->enable_count) { - ri->enable_count++; - return 0; - } - - if (!ri->rdev->ops->enable) - return -ENOSYS; - - ret = ri->rdev->ops->enable(ri->rdev); - if (ret) - return ret; - - if (ri->enable_time_us) - udelay(ri->enable_time_us); - - ri->enable_count++; - - return 0; + return regulator_enable_internal(r->ri); } /* @@ -278,27 +299,10 @@ */ int regulator_disable(struct regulator *r) { - struct regulator_internal *ri; - int ret; - if (!r) return 0; - ri = r->ri; - - if (!ri->enable_count) - return -EINVAL; - - if (!ri->rdev->ops->disable) - return -ENOSYS; - - ret = ri->rdev->ops->disable(ri->rdev); - if (ret) - return ret; - - ri->enable_count--; - - return 0; + return regulator_disable_internal(r->ri); } static void regulator_print_one(struct regulator_internal *ri)