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

Commit 6a244cad authored by Mark Brown's avatar Mark Brown
Browse files

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

parents 1fe23017 b79ca051
Loading
Loading
Loading
Loading
+20 −61
Original line number Diff line number Diff line
@@ -54,6 +54,13 @@ struct max8997_data {
	u8 saved_states[MAX8997_REG_MAX];
};

static const unsigned int safeoutvolt[] = {
	4850000,
	4900000,
	4950000,
	3300000,
};

static inline void max8997_set_gpio(struct max8997_data *max8997)
{
	int set3 = (max8997->buck125_gpioindex) & 0x1;
@@ -130,29 +137,6 @@ static const struct voltage_map_desc *reg_voltage_map[] = {
	[MAX8997_CHARGER_TOPOFF] = &topoff_current_map_desc,
};

static int max8997_list_voltage_safeout(struct regulator_dev *rdev,
		unsigned int selector)
{
	int rid = rdev_get_id(rdev);

	if (rid == MAX8997_ESAFEOUT1 || rid == MAX8997_ESAFEOUT2) {
		switch (selector) {
		case 0:
			return 4850000;
		case 1:
			return 4900000;
		case 2:
			return 4950000;
		case 3:
			return 3300000;
		default:
			return -EINVAL;
		}
	}

	return -EINVAL;
}

static int max8997_list_voltage_charger_cv(struct regulator_dev *rdev,
		unsigned int selector)
{
@@ -522,7 +506,7 @@ static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev,
	return ret;
}

static int max8997_set_voltage_ldobuck_time_sel(struct regulator_dev *rdev,
static int max8997_set_voltage_buck_time_sel(struct regulator_dev *rdev,
						unsigned int old_selector,
						unsigned int new_selector)
{
@@ -720,49 +704,23 @@ out:
	return 0;
}

static const int safeoutvolt[] = {
	3300000,
	4850000,
	4900000,
	4950000,
};

/* For SAFEOUT1 and SAFEOUT2 */
static int max8997_set_voltage_safeout(struct regulator_dev *rdev,
		int min_uV, int max_uV, unsigned *selector)
static int max8997_set_voltage_safeout_sel(struct regulator_dev *rdev,
					   unsigned selector)
{
	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
	struct i2c_client *i2c = max8997->iodev->i2c;
	int rid = rdev_get_id(rdev);
	int reg, shift = 0, mask, ret;
	int i = 0;
	u8 val;

	if (rid != MAX8997_ESAFEOUT1 && rid != MAX8997_ESAFEOUT2)
		return -EINVAL;

	for (i = 0; i < ARRAY_SIZE(safeoutvolt); i++) {
		if (min_uV <= safeoutvolt[i] &&
				max_uV >= safeoutvolt[i])
			break;
	}

	if (i >= ARRAY_SIZE(safeoutvolt))
		return -EINVAL;

	if (i == 0)
		val = 0x3;
	else
		val = i - 1;

	ret = max8997_get_voltage_register(rdev, &reg, &shift, &mask);
	if (ret)
		return ret;

	ret = max8997_update_reg(i2c, reg, val << shift, mask << shift);
	*selector = val;

	return ret;
	return max8997_update_reg(i2c, reg, selector << shift, mask << shift);
}

static int max8997_reg_disable_suspend(struct regulator_dev *rdev)
@@ -799,7 +757,6 @@ static struct regulator_ops max8997_ldo_ops = {
	.disable		= max8997_reg_disable,
	.get_voltage_sel	= max8997_get_voltage_sel,
	.set_voltage		= max8997_set_voltage_ldobuck,
	.set_voltage_time_sel	= max8997_set_voltage_ldobuck_time_sel,
	.set_suspend_disable	= max8997_reg_disable_suspend,
};

@@ -810,7 +767,7 @@ static struct regulator_ops max8997_buck_ops = {
	.disable		= max8997_reg_disable,
	.get_voltage_sel	= max8997_get_voltage_sel,
	.set_voltage		= max8997_set_voltage_buck,
	.set_voltage_time_sel	= max8997_set_voltage_ldobuck_time_sel,
	.set_voltage_time_sel	= max8997_set_voltage_buck_time_sel,
	.set_suspend_disable	= max8997_reg_disable_suspend,
};

@@ -823,12 +780,12 @@ static struct regulator_ops max8997_fixedvolt_ops = {
};

static struct regulator_ops max8997_safeout_ops = {
	.list_voltage		= max8997_list_voltage_safeout,
	.list_voltage		= regulator_list_voltage_table,
	.is_enabled		= max8997_reg_is_enabled,
	.enable			= max8997_reg_enable,
	.disable		= max8997_reg_disable,
	.get_voltage_sel	= max8997_get_voltage_sel,
	.set_voltage		= max8997_set_voltage_safeout,
	.set_voltage_sel	= max8997_set_voltage_safeout_sel,
	.set_suspend_disable	= max8997_reg_disable_suspend,
};

@@ -1233,13 +1190,15 @@ static int max8997_pmic_probe(struct platform_device *pdev)
		int id = pdata->regulators[i].id;

		desc = reg_voltage_map[id];
		if (desc)
		if (desc) {
			regulators[id].n_voltages =
				(desc->max - desc->min) / desc->step + 1;
		else if (id == MAX8997_ESAFEOUT1 || id == MAX8997_ESAFEOUT2)
			regulators[id].n_voltages = 4;
		else if (id == MAX8997_CHARGER_CV)
		} else if (id == MAX8997_ESAFEOUT1 || id == MAX8997_ESAFEOUT2) {
			regulators[id].volt_table = safeoutvolt;
			regulators[id].n_voltages = ARRAY_SIZE(safeoutvolt);
		} else if (id == MAX8997_CHARGER_CV) {
			regulators[id].n_voltages = 16;
		}

		config.dev = max8997->dev;
		config.init_data = pdata->regulators[i].initdata;