9
0
Fork 0

regulator: Factor out functions to work with regulator_internal

Internally we only have a struct regulator_internal, so factor
out regulator_enable_internal and regulator_disable_internal
functions which can be called from regulator internal code.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2015-07-15 07:49:56 +02:00
parent 7dd0345b1a
commit e47bfe803b
1 changed files with 45 additions and 41 deletions

View File

@ -43,6 +43,49 @@ struct regulator {
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 @@ struct regulator *regulator_get(struct device_d *dev, const char *supply)
*/
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_enable(struct regulator *r)
*/
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)