Commit 706664c2 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branch 'regulator/topic/fixed' into regulator-next

parents b735e47f 609d5f6d
...@@ -2582,6 +2582,8 @@ static int _regulator_get_voltage(struct regulator_dev *rdev) ...@@ -2582,6 +2582,8 @@ static int _regulator_get_voltage(struct regulator_dev *rdev)
ret = rdev->desc->ops->get_voltage(rdev); ret = rdev->desc->ops->get_voltage(rdev);
} else if (rdev->desc->ops->list_voltage) { } else if (rdev->desc->ops->list_voltage) {
ret = rdev->desc->ops->list_voltage(rdev, 0); ret = rdev->desc->ops->list_voltage(rdev, 0);
} else if (rdev->desc->fixed_uV && (rdev->desc->n_voltages == 1)) {
ret = rdev->desc->fixed_uV;
} else { } else {
return -EINVAL; return -EINVAL;
} }
...@@ -3217,7 +3219,8 @@ static int add_regulator_attributes(struct regulator_dev *rdev) ...@@ -3217,7 +3219,8 @@ static int add_regulator_attributes(struct regulator_dev *rdev)
/* some attributes need specific methods to be displayed */ /* some attributes need specific methods to be displayed */
if ((ops->get_voltage && ops->get_voltage(rdev) >= 0) || if ((ops->get_voltage && ops->get_voltage(rdev) >= 0) ||
(ops->get_voltage_sel && ops->get_voltage_sel(rdev) >= 0) || (ops->get_voltage_sel && ops->get_voltage_sel(rdev) >= 0) ||
(ops->list_voltage && ops->list_voltage(rdev, 0) >= 0)) { (ops->list_voltage && ops->list_voltage(rdev, 0) >= 0) ||
(rdev->desc->fixed_uV && (rdev->desc->n_voltages == 1))) {
status = device_create_file(dev, &dev_attr_microvolts); status = device_create_file(dev, &dev_attr_microvolts);
if (status < 0) if (status < 0)
return status; return status;
......
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
struct fixed_voltage_data { struct fixed_voltage_data {
struct regulator_desc desc; struct regulator_desc desc;
struct regulator_dev *dev; struct regulator_dev *dev;
int microvolts;
}; };
...@@ -108,30 +107,7 @@ of_get_fixed_voltage_config(struct device *dev) ...@@ -108,30 +107,7 @@ of_get_fixed_voltage_config(struct device *dev)
return config; return config;
} }
static int fixed_voltage_get_voltage(struct regulator_dev *dev)
{
struct fixed_voltage_data *data = rdev_get_drvdata(dev);
if (data->microvolts)
return data->microvolts;
else
return -EINVAL;
}
static int fixed_voltage_list_voltage(struct regulator_dev *dev,
unsigned selector)
{
struct fixed_voltage_data *data = rdev_get_drvdata(dev);
if (selector != 0)
return -EINVAL;
return data->microvolts;
}
static struct regulator_ops fixed_voltage_ops = { static struct regulator_ops fixed_voltage_ops = {
.get_voltage = fixed_voltage_get_voltage,
.list_voltage = fixed_voltage_list_voltage,
}; };
static int reg_fixed_voltage_probe(struct platform_device *pdev) static int reg_fixed_voltage_probe(struct platform_device *pdev)
...@@ -186,24 +162,22 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev) ...@@ -186,24 +162,22 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
if (config->microvolts) if (config->microvolts)
drvdata->desc.n_voltages = 1; drvdata->desc.n_voltages = 1;
drvdata->microvolts = config->microvolts; drvdata->desc.fixed_uV = config->microvolts;
if (config->gpio >= 0) if (config->gpio >= 0)
cfg.ena_gpio = config->gpio; cfg.ena_gpio = config->gpio;
cfg.ena_gpio_invert = !config->enable_high; cfg.ena_gpio_invert = !config->enable_high;
if (config->enabled_at_boot) { if (config->enabled_at_boot) {
if (config->enable_high) { if (config->enable_high)
cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
} else { else
cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW; cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
}
} else { } else {
if (config->enable_high) { if (config->enable_high)
cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW; cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
} else { else
cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
} }
}
if (config->gpio_is_open_drain) if (config->gpio_is_open_drain)
cfg.ena_gpio_flags |= GPIOF_OPEN_DRAIN; cfg.ena_gpio_flags |= GPIOF_OPEN_DRAIN;
...@@ -222,7 +196,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev) ...@@ -222,7 +196,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, drvdata); platform_set_drvdata(pdev, drvdata);
dev_dbg(&pdev->dev, "%s supplying %duV\n", drvdata->desc.name, dev_dbg(&pdev->dev, "%s supplying %duV\n", drvdata->desc.name,
drvdata->microvolts); drvdata->desc.fixed_uV);
return 0; return 0;
......
...@@ -209,6 +209,7 @@ enum regulator_type { ...@@ -209,6 +209,7 @@ enum regulator_type {
* @min_uV: Voltage given by the lowest selector (if linear mapping) * @min_uV: Voltage given by the lowest selector (if linear mapping)
* @uV_step: Voltage increase with each selector (if linear mapping) * @uV_step: Voltage increase with each selector (if linear mapping)
* @linear_min_sel: Minimal selector for starting linear mapping * @linear_min_sel: Minimal selector for starting linear mapping
* @fixed_uV: Fixed voltage of rails.
* @ramp_delay: Time to settle down after voltage change (unit: uV/us) * @ramp_delay: Time to settle down after voltage change (unit: uV/us)
* @volt_table: Voltage mapping table (if table based mapping) * @volt_table: Voltage mapping table (if table based mapping)
* *
...@@ -241,6 +242,7 @@ struct regulator_desc { ...@@ -241,6 +242,7 @@ struct regulator_desc {
unsigned int min_uV; unsigned int min_uV;
unsigned int uV_step; unsigned int uV_step;
unsigned int linear_min_sel; unsigned int linear_min_sel;
int fixed_uV;
unsigned int ramp_delay; unsigned int ramp_delay;
const struct regulator_linear_range *linear_ranges; const struct regulator_linear_range *linear_ranges;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment