Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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

parents b735e47f 609d5f6d
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2582,6 +2582,8 @@ static int _regulator_get_voltage(struct regulator_dev *rdev)
		ret = rdev->desc->ops->get_voltage(rdev);
	} else if (rdev->desc->ops->list_voltage) {
		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 {
		return -EINVAL;
	}
@@ -3217,7 +3219,8 @@ static int add_regulator_attributes(struct regulator_dev *rdev)
	/* some attributes need specific methods to be displayed */
	if ((ops->get_voltage && ops->get_voltage(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);
		if (status < 0)
			return status;
+6 −32
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@
struct fixed_voltage_data {
	struct regulator_desc desc;
	struct regulator_dev *dev;
	int microvolts;
};


@@ -108,30 +107,7 @@ of_get_fixed_voltage_config(struct device *dev)
	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 = {
	.get_voltage = fixed_voltage_get_voltage,
	.list_voltage = fixed_voltage_list_voltage,
};

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)
		drvdata->desc.n_voltages = 1;

	drvdata->microvolts = config->microvolts;
	drvdata->desc.fixed_uV = config->microvolts;

	if (config->gpio >= 0)
		cfg.ena_gpio = config->gpio;
	cfg.ena_gpio_invert = !config->enable_high;
	if (config->enabled_at_boot) {
		if (config->enable_high) {
		if (config->enable_high)
			cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
		} else {
		else
			cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
		}
	} else {
		if (config->enable_high) {
		if (config->enable_high)
			cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW;
		} else {
		else
			cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH;
	}
	}
	if (config->gpio_is_open_drain)
		cfg.ena_gpio_flags |= GPIOF_OPEN_DRAIN;

@@ -222,7 +196,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
	platform_set_drvdata(pdev, drvdata);

	dev_dbg(&pdev->dev, "%s supplying %duV\n", drvdata->desc.name,
		drvdata->microvolts);
		drvdata->desc.fixed_uV);

	return 0;

+2 −0
Original line number Diff line number Diff line
@@ -209,6 +209,7 @@ enum regulator_type {
 * @min_uV: Voltage given by the lowest selector (if linear mapping)
 * @uV_step: Voltage increase with each selector (if 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)
 * @volt_table: Voltage mapping table (if table based mapping)
 *
@@ -241,6 +242,7 @@ struct regulator_desc {
	unsigned int min_uV;
	unsigned int uV_step;
	unsigned int linear_min_sel;
	int fixed_uV;
	unsigned int ramp_delay;

	const struct regulator_linear_range *linear_ranges;