1// SPDX-License-Identifier: GPL-2.0+
2//
3// max8997.c - Regulator driver for the Maxim 8997/8966
4//
5// Copyright (C) 2011 Samsung Electronics
6// MyungJoo Ham <myungjoo.ham@samsung.com>
7//
8// This driver is based on max8998.c
9
10#include <linux/bug.h>
11#include <linux/err.h>
12#include <linux/gpio.h>
13#include <linux/of_gpio.h>
14#include <linux/slab.h>
15#include <linux/module.h>
16#include <linux/platform_device.h>
17#include <linux/regulator/driver.h>
18#include <linux/regulator/machine.h>
19#include <linux/mfd/max8997.h>
20#include <linux/mfd/max8997-private.h>
21#include <linux/regulator/of_regulator.h>
22
23struct max8997_data {
24	struct device *dev;
25	struct max8997_dev *iodev;
26	int num_regulators;
27	int ramp_delay; /* in mV/us */
28
29	bool buck1_gpiodvs;
30	bool buck2_gpiodvs;
31	bool buck5_gpiodvs;
32	u8 buck1_vol[8];
33	u8 buck2_vol[8];
34	u8 buck5_vol[8];
35	int buck125_gpios[3];
36	int buck125_gpioindex;
37	bool ignore_gpiodvs_side_effect;
38
39	u8 saved_states[MAX8997_REG_MAX];
40};
41
42static const unsigned int safeoutvolt[] = {
43	4850000,
44	4900000,
45	4950000,
46	3300000,
47};
48
49static inline void max8997_set_gpio(struct max8997_data *max8997)
50{
51	int set3 = (max8997->buck125_gpioindex) & 0x1;
52	int set2 = ((max8997->buck125_gpioindex) >> 1) & 0x1;
53	int set1 = ((max8997->buck125_gpioindex) >> 2) & 0x1;
54
55	gpio_set_value(max8997->buck125_gpios[0], set1);
56	gpio_set_value(max8997->buck125_gpios[1], set2);
57	gpio_set_value(max8997->buck125_gpios[2], set3);
58}
59
60struct voltage_map_desc {
61	int min;
62	int max;
63	int step;
64};
65
66/* Voltage maps in uV */
67static const struct voltage_map_desc ldo_voltage_map_desc = {
68	.min = 800000,	.max = 3950000,	.step = 50000,
69}; /* LDO1 ~ 18, 21 all */
70
71static const struct voltage_map_desc buck1245_voltage_map_desc = {
72	.min = 650000,	.max = 2225000,	.step = 25000,
73}; /* Buck1, 2, 4, 5 */
74
75static const struct voltage_map_desc buck37_voltage_map_desc = {
76	.min = 750000,	.max = 3900000,	.step = 50000,
77}; /* Buck3, 7 */
78
79/* current map in uA */
80static const struct voltage_map_desc charger_current_map_desc = {
81	.min = 200000,	.max = 950000,	.step = 50000,
82};
83
84static const struct voltage_map_desc topoff_current_map_desc = {
85	.min = 50000,	.max = 200000,	.step = 10000,
86};
87
88static const struct voltage_map_desc *reg_voltage_map[] = {
89	[MAX8997_LDO1] = &ldo_voltage_map_desc,
90	[MAX8997_LDO2] = &ldo_voltage_map_desc,
91	[MAX8997_LDO3] = &ldo_voltage_map_desc,
92	[MAX8997_LDO4] = &ldo_voltage_map_desc,
93	[MAX8997_LDO5] = &ldo_voltage_map_desc,
94	[MAX8997_LDO6] = &ldo_voltage_map_desc,
95	[MAX8997_LDO7] = &ldo_voltage_map_desc,
96	[MAX8997_LDO8] = &ldo_voltage_map_desc,
97	[MAX8997_LDO9] = &ldo_voltage_map_desc,
98	[MAX8997_LDO10] = &ldo_voltage_map_desc,
99	[MAX8997_LDO11] = &ldo_voltage_map_desc,
100	[MAX8997_LDO12] = &ldo_voltage_map_desc,
101	[MAX8997_LDO13] = &ldo_voltage_map_desc,
102	[MAX8997_LDO14] = &ldo_voltage_map_desc,
103	[MAX8997_LDO15] = &ldo_voltage_map_desc,
104	[MAX8997_LDO16] = &ldo_voltage_map_desc,
105	[MAX8997_LDO17] = &ldo_voltage_map_desc,
106	[MAX8997_LDO18] = &ldo_voltage_map_desc,
107	[MAX8997_LDO21] = &ldo_voltage_map_desc,
108	[MAX8997_BUCK1] = &buck1245_voltage_map_desc,
109	[MAX8997_BUCK2] = &buck1245_voltage_map_desc,
110	[MAX8997_BUCK3] = &buck37_voltage_map_desc,
111	[MAX8997_BUCK4] = &buck1245_voltage_map_desc,
112	[MAX8997_BUCK5] = &buck1245_voltage_map_desc,
113	[MAX8997_BUCK6] = NULL,
114	[MAX8997_BUCK7] = &buck37_voltage_map_desc,
115	[MAX8997_EN32KHZ_AP] = NULL,
116	[MAX8997_EN32KHZ_CP] = NULL,
117	[MAX8997_ENVICHG] = NULL,
118	[MAX8997_ESAFEOUT1] = NULL,
119	[MAX8997_ESAFEOUT2] = NULL,
120	[MAX8997_CHARGER_CV] = NULL,
121	[MAX8997_CHARGER] = &charger_current_map_desc,
122	[MAX8997_CHARGER_TOPOFF] = &topoff_current_map_desc,
123};
124
125static int max8997_list_voltage_charger_cv(struct regulator_dev *rdev,
126		unsigned int selector)
127{
128	int rid = rdev_get_id(rdev);
129
130	if (rid != MAX8997_CHARGER_CV)
131		goto err;
132
133	switch (selector) {
134	case 0x00:
135		return 4200000;
136	case 0x01 ... 0x0E:
137		return 4000000 + 20000 * (selector - 0x01);
138	case 0x0F:
139		return 4350000;
140	default:
141		return -EINVAL;
142	}
143err:
144	return -EINVAL;
145}
146
147static int max8997_list_voltage(struct regulator_dev *rdev,
148		unsigned int selector)
149{
150	const struct voltage_map_desc *desc;
151	int rid = rdev_get_id(rdev);
152	int val;
153
154	if (rid < 0 || rid >= ARRAY_SIZE(reg_voltage_map))
155		return -EINVAL;
156
157	desc = reg_voltage_map[rid];
158	if (desc == NULL)
159		return -EINVAL;
160
161	val = desc->min + desc->step * selector;
162	if (val > desc->max)
163		return -EINVAL;
164
165	return val;
166}
167
168static int max8997_get_enable_register(struct regulator_dev *rdev,
169		int *reg, int *mask, int *pattern)
170{
171	int rid = rdev_get_id(rdev);
172
173	switch (rid) {
174	case MAX8997_LDO1 ... MAX8997_LDO21:
175		*reg = MAX8997_REG_LDO1CTRL + (rid - MAX8997_LDO1);
176		*mask = 0xC0;
177		*pattern = 0xC0;
178		break;
179	case MAX8997_BUCK1:
180		*reg = MAX8997_REG_BUCK1CTRL;
181		*mask = 0x01;
182		*pattern = 0x01;
183		break;
184	case MAX8997_BUCK2:
185		*reg = MAX8997_REG_BUCK2CTRL;
186		*mask = 0x01;
187		*pattern = 0x01;
188		break;
189	case MAX8997_BUCK3:
190		*reg = MAX8997_REG_BUCK3CTRL;
191		*mask = 0x01;
192		*pattern = 0x01;
193		break;
194	case MAX8997_BUCK4:
195		*reg = MAX8997_REG_BUCK4CTRL;
196		*mask = 0x01;
197		*pattern = 0x01;
198		break;
199	case MAX8997_BUCK5:
200		*reg = MAX8997_REG_BUCK5CTRL;
201		*mask = 0x01;
202		*pattern = 0x01;
203		break;
204	case MAX8997_BUCK6:
205		*reg = MAX8997_REG_BUCK6CTRL;
206		*mask = 0x01;
207		*pattern = 0x01;
208		break;
209	case MAX8997_BUCK7:
210		*reg = MAX8997_REG_BUCK7CTRL;
211		*mask = 0x01;
212		*pattern = 0x01;
213		break;
214	case MAX8997_EN32KHZ_AP ... MAX8997_EN32KHZ_CP:
215		*reg = MAX8997_REG_MAINCON1;
216		*mask = 0x01 << (rid - MAX8997_EN32KHZ_AP);
217		*pattern = 0x01 << (rid - MAX8997_EN32KHZ_AP);
218		break;
219	case MAX8997_ENVICHG:
220		*reg = MAX8997_REG_MBCCTRL1;
221		*mask = 0x80;
222		*pattern = 0x80;
223		break;
224	case MAX8997_ESAFEOUT1 ... MAX8997_ESAFEOUT2:
225		*reg = MAX8997_REG_SAFEOUTCTRL;
226		*mask = 0x40 << (rid - MAX8997_ESAFEOUT1);
227		*pattern = 0x40 << (rid - MAX8997_ESAFEOUT1);
228		break;
229	case MAX8997_CHARGER:
230		*reg = MAX8997_REG_MBCCTRL2;
231		*mask = 0x40;
232		*pattern = 0x40;
233		break;
234	default:
235		/* Not controllable or not exists */
236		return -EINVAL;
237	}
238
239	return 0;
240}
241
242static int max8997_reg_is_enabled(struct regulator_dev *rdev)
243{
244	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
245	struct i2c_client *i2c = max8997->iodev->i2c;
246	int ret, reg, mask, pattern;
247	u8 val;
248
249	ret = max8997_get_enable_register(rdev, &reg, &mask, &pattern);
250	if (ret)
251		return ret;
252
253	ret = max8997_read_reg(i2c, reg, &val);
254	if (ret)
255		return ret;
256
257	return (val & mask) == pattern;
258}
259
260static int max8997_reg_enable(struct regulator_dev *rdev)
261{
262	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
263	struct i2c_client *i2c = max8997->iodev->i2c;
264	int ret, reg, mask, pattern;
265
266	ret = max8997_get_enable_register(rdev, &reg, &mask, &pattern);
267	if (ret)
268		return ret;
269
270	return max8997_update_reg(i2c, reg, pattern, mask);
271}
272
273static int max8997_reg_disable(struct regulator_dev *rdev)
274{
275	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
276	struct i2c_client *i2c = max8997->iodev->i2c;
277	int ret, reg, mask, pattern;
278
279	ret = max8997_get_enable_register(rdev, &reg, &mask, &pattern);
280	if (ret)
281		return ret;
282
283	return max8997_update_reg(i2c, reg, ~pattern, mask);
284}
285
286static int max8997_get_voltage_register(struct regulator_dev *rdev,
287		int *_reg, int *_shift, int *_mask)
288{
289	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
290	int rid = rdev_get_id(rdev);
291	int reg, shift = 0, mask = 0x3f;
292
293	switch (rid) {
294	case MAX8997_LDO1 ... MAX8997_LDO21:
295		reg = MAX8997_REG_LDO1CTRL + (rid - MAX8997_LDO1);
296		break;
297	case MAX8997_BUCK1:
298		reg = MAX8997_REG_BUCK1DVS1;
299		if (max8997->buck1_gpiodvs)
300			reg += max8997->buck125_gpioindex;
301		break;
302	case MAX8997_BUCK2:
303		reg = MAX8997_REG_BUCK2DVS1;
304		if (max8997->buck2_gpiodvs)
305			reg += max8997->buck125_gpioindex;
306		break;
307	case MAX8997_BUCK3:
308		reg = MAX8997_REG_BUCK3DVS;
309		break;
310	case MAX8997_BUCK4:
311		reg = MAX8997_REG_BUCK4DVS;
312		break;
313	case MAX8997_BUCK5:
314		reg = MAX8997_REG_BUCK5DVS1;
315		if (max8997->buck5_gpiodvs)
316			reg += max8997->buck125_gpioindex;
317		break;
318	case MAX8997_BUCK7:
319		reg = MAX8997_REG_BUCK7DVS;
320		break;
321	case MAX8997_ESAFEOUT1 ...  MAX8997_ESAFEOUT2:
322		reg = MAX8997_REG_SAFEOUTCTRL;
323		shift = (rid == MAX8997_ESAFEOUT2) ? 2 : 0;
324		mask = 0x3;
325		break;
326	case MAX8997_CHARGER_CV:
327		reg = MAX8997_REG_MBCCTRL3;
328		shift = 0;
329		mask = 0xf;
330		break;
331	case MAX8997_CHARGER:
332		reg = MAX8997_REG_MBCCTRL4;
333		shift = 0;
334		mask = 0xf;
335		break;
336	case MAX8997_CHARGER_TOPOFF:
337		reg = MAX8997_REG_MBCCTRL5;
338		shift = 0;
339		mask = 0xf;
340		break;
341	default:
342		return -EINVAL;
343	}
344
345	*_reg = reg;
346	*_shift = shift;
347	*_mask = mask;
348
349	return 0;
350}
351
352static int max8997_get_voltage_sel(struct regulator_dev *rdev)
353{
354	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
355	struct i2c_client *i2c = max8997->iodev->i2c;
356	int reg, shift, mask, ret;
357	u8 val;
358
359	ret = max8997_get_voltage_register(rdev, &reg, &shift, &mask);
360	if (ret)
361		return ret;
362
363	ret = max8997_read_reg(i2c, reg, &val);
364	if (ret)
365		return ret;
366
367	val >>= shift;
368	val &= mask;
369
370	return val;
371}
372
373static inline int max8997_get_voltage_proper_val(
374		const struct voltage_map_desc *desc,
375		int min_vol, int max_vol)
376{
377	int i;
378
379	if (desc == NULL)
380		return -EINVAL;
381
382	if (max_vol < desc->min || min_vol > desc->max)
383		return -EINVAL;
384
385	if (min_vol < desc->min)
386		min_vol = desc->min;
387
388	i = DIV_ROUND_UP(min_vol - desc->min, desc->step);
389
390	if (desc->min + desc->step * i > max_vol)
391		return -EINVAL;
392
393	return i;
394}
395
396static int max8997_set_voltage_charger_cv(struct regulator_dev *rdev,
397		int min_uV, int max_uV, unsigned *selector)
398{
399	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
400	struct i2c_client *i2c = max8997->iodev->i2c;
401	int rid = rdev_get_id(rdev);
402	int lb, ub;
403	int reg, shift = 0, mask, ret = 0;
404	u8 val = 0x0;
405
406	if (rid != MAX8997_CHARGER_CV)
407		return -EINVAL;
408
409	ret = max8997_get_voltage_register(rdev, &reg, &shift, &mask);
410	if (ret)
411		return ret;
412
413	if (max_uV < 4000000 || min_uV > 4350000)
414		return -EINVAL;
415
416	if (min_uV <= 4000000)
417		val = 0x1;
418	else if (min_uV <= 4200000 && max_uV >= 4200000)
419		val = 0x0;
420	else {
421		lb = (min_uV - 4000001) / 20000 + 2;
422		ub = (max_uV - 4000000) / 20000 + 1;
423
424		if (lb > ub)
425			return -EINVAL;
426
427		if (lb < 0xf)
428			val = lb;
429		else {
430			if (ub >= 0xf)
431				val = 0xf;
432			else
433				return -EINVAL;
434		}
435	}
436
437	*selector = val;
438
439	ret = max8997_update_reg(i2c, reg, val << shift, mask);
440
441	return ret;
442}
443
444/*
445 * For LDO1 ~ LDO21, BUCK1~5, BUCK7, CHARGER, CHARGER_TOPOFF
446 * BUCK1, 2, and 5 are available if they are not controlled by gpio
447 */
448static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev,
449		int min_uV, int max_uV, unsigned *selector)
450{
451	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
452	struct i2c_client *i2c = max8997->iodev->i2c;
453	const struct voltage_map_desc *desc;
454	int rid = rdev_get_id(rdev);
455	int i, reg, shift, mask, ret;
456
457	switch (rid) {
458	case MAX8997_LDO1 ... MAX8997_LDO21:
459		break;
460	case MAX8997_BUCK1 ... MAX8997_BUCK5:
461		break;
462	case MAX8997_BUCK6:
463		return -EINVAL;
464	case MAX8997_BUCK7:
465		break;
466	case MAX8997_CHARGER:
467		break;
468	case MAX8997_CHARGER_TOPOFF:
469		break;
470	default:
471		return -EINVAL;
472	}
473
474	desc = reg_voltage_map[rid];
475
476	i = max8997_get_voltage_proper_val(desc, min_uV, max_uV);
477	if (i < 0)
478		return i;
479
480	ret = max8997_get_voltage_register(rdev, &reg, &shift, &mask);
481	if (ret)
482		return ret;
483
484	ret = max8997_update_reg(i2c, reg, i << shift, mask << shift);
485	*selector = i;
486
487	return ret;
488}
489
490static int max8997_set_voltage_buck_time_sel(struct regulator_dev *rdev,
491						unsigned int old_selector,
492						unsigned int new_selector)
493{
494	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
495	int rid = rdev_get_id(rdev);
496	const struct voltage_map_desc *desc = reg_voltage_map[rid];
497
498	/* Delay is required only if the voltage is increasing */
499	if (old_selector >= new_selector)
500		return 0;
501
502	/* No need to delay if gpio_dvs_mode */
503	switch (rid) {
504	case MAX8997_BUCK1:
505		if (max8997->buck1_gpiodvs)
506			return 0;
507		break;
508	case MAX8997_BUCK2:
509		if (max8997->buck2_gpiodvs)
510			return 0;
511		break;
512	case MAX8997_BUCK5:
513		if (max8997->buck5_gpiodvs)
514			return 0;
515		break;
516	}
517
518	switch (rid) {
519	case MAX8997_BUCK1:
520	case MAX8997_BUCK2:
521	case MAX8997_BUCK4:
522	case MAX8997_BUCK5:
523		return DIV_ROUND_UP(desc->step * (new_selector - old_selector),
524				    max8997->ramp_delay * 1000);
525	}
526
527	return 0;
528}
529
530/*
531 * Assess the damage on the voltage setting of BUCK1,2,5 by the change.
532 *
533 * When GPIO-DVS mode is used for multiple bucks, changing the voltage value
534 * of one of the bucks may affect that of another buck, which is the side
535 * effect of the change (set_voltage). This function examines the GPIO-DVS
536 * configurations and checks whether such side-effect exists.
537 */
538static int max8997_assess_side_effect(struct regulator_dev *rdev,
539		u8 new_val, int *best)
540{
541	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
542	int rid = rdev_get_id(rdev);
543	u8 *buckx_val[3];
544	bool buckx_gpiodvs[3];
545	int side_effect[8];
546	int min_side_effect = INT_MAX;
547	int i;
548
549	*best = -1;
550
551	switch (rid) {
552	case MAX8997_BUCK1:
553		rid = 0;
554		break;
555	case MAX8997_BUCK2:
556		rid = 1;
557		break;
558	case MAX8997_BUCK5:
559		rid = 2;
560		break;
561	default:
562		return -EINVAL;
563	}
564
565	buckx_val[0] = max8997->buck1_vol;
566	buckx_val[1] = max8997->buck2_vol;
567	buckx_val[2] = max8997->buck5_vol;
568	buckx_gpiodvs[0] = max8997->buck1_gpiodvs;
569	buckx_gpiodvs[1] = max8997->buck2_gpiodvs;
570	buckx_gpiodvs[2] = max8997->buck5_gpiodvs;
571
572	for (i = 0; i < 8; i++) {
573		int others;
574
575		if (new_val != (buckx_val[rid])[i]) {
576			side_effect[i] = -1;
577			continue;
578		}
579
580		side_effect[i] = 0;
581		for (others = 0; others < 3; others++) {
582			int diff;
583
584			if (others == rid)
585				continue;
586			if (buckx_gpiodvs[others] == false)
587				continue; /* Not affected */
588			diff = (buckx_val[others])[i] -
589				(buckx_val[others])[max8997->buck125_gpioindex];
590			if (diff > 0)
591				side_effect[i] += diff;
592			else if (diff < 0)
593				side_effect[i] -= diff;
594		}
595		if (side_effect[i] == 0) {
596			*best = i;
597			return 0; /* NO SIDE EFFECT! Use This! */
598		}
599		if (side_effect[i] < min_side_effect) {
600			min_side_effect = side_effect[i];
601			*best = i;
602		}
603	}
604
605	if (*best == -1)
606		return -EINVAL;
607
608	return side_effect[*best];
609}
610
611/*
612 * For Buck 1 ~ 5 and 7. If it is not controlled by GPIO, this calls
613 * max8997_set_voltage_ldobuck to do the job.
614 */
615static int max8997_set_voltage_buck(struct regulator_dev *rdev,
616		int min_uV, int max_uV, unsigned *selector)
617{
618	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
619	int rid = rdev_get_id(rdev);
620	const struct voltage_map_desc *desc;
621	int new_val, new_idx, damage, tmp_val, tmp_idx, tmp_dmg;
622	bool gpio_dvs_mode = false;
623
624	if (rid < MAX8997_BUCK1 || rid > MAX8997_BUCK7)
625		return -EINVAL;
626
627	switch (rid) {
628	case MAX8997_BUCK1:
629		if (max8997->buck1_gpiodvs)
630			gpio_dvs_mode = true;
631		break;
632	case MAX8997_BUCK2:
633		if (max8997->buck2_gpiodvs)
634			gpio_dvs_mode = true;
635		break;
636	case MAX8997_BUCK5:
637		if (max8997->buck5_gpiodvs)
638			gpio_dvs_mode = true;
639		break;
640	}
641
642	if (!gpio_dvs_mode)
643		return max8997_set_voltage_ldobuck(rdev, min_uV, max_uV,
644						selector);
645
646	desc = reg_voltage_map[rid];
647	new_val = max8997_get_voltage_proper_val(desc, min_uV, max_uV);
648	if (new_val < 0)
649		return new_val;
650
651	tmp_dmg = INT_MAX;
652	tmp_idx = -1;
653	tmp_val = -1;
654	do {
655		damage = max8997_assess_side_effect(rdev, new_val, &new_idx);
656		if (damage == 0)
657			goto out;
658
659		if (tmp_dmg > damage) {
660			tmp_idx = new_idx;
661			tmp_val = new_val;
662			tmp_dmg = damage;
663		}
664
665		new_val++;
666	} while (desc->min + desc->step * new_val <= desc->max);
667
668	new_idx = tmp_idx;
669	new_val = tmp_val;
670
671	if (max8997->ignore_gpiodvs_side_effect == false)
672		return -EINVAL;
673
674	dev_warn(&rdev->dev,
675		"MAX8997 GPIO-DVS Side Effect Warning: GPIO SET:  %d -> %d\n",
676		max8997->buck125_gpioindex, tmp_idx);
677
678out:
679	if (new_idx < 0 || new_val < 0)
680		return -EINVAL;
681
682	max8997->buck125_gpioindex = new_idx;
683	max8997_set_gpio(max8997);
684	*selector = new_val;
685
686	return 0;
687}
688
689/* For SAFEOUT1 and SAFEOUT2 */
690static int max8997_set_voltage_safeout_sel(struct regulator_dev *rdev,
691					   unsigned selector)
692{
693	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
694	struct i2c_client *i2c = max8997->iodev->i2c;
695	int rid = rdev_get_id(rdev);
696	int reg, shift = 0, mask, ret;
697
698	if (rid != MAX8997_ESAFEOUT1 && rid != MAX8997_ESAFEOUT2)
699		return -EINVAL;
700
701	ret = max8997_get_voltage_register(rdev, &reg, &shift, &mask);
702	if (ret)
703		return ret;
704
705	return max8997_update_reg(i2c, reg, selector << shift, mask << shift);
706}
707
708static int max8997_reg_disable_suspend(struct regulator_dev *rdev)
709{
710	struct max8997_data *max8997 = rdev_get_drvdata(rdev);
711	struct i2c_client *i2c = max8997->iodev->i2c;
712	int ret, reg, mask, pattern;
713	int rid = rdev_get_id(rdev);
714
715	ret = max8997_get_enable_register(rdev, &reg, &mask, &pattern);
716	if (ret)
717		return ret;
718
719	max8997_read_reg(i2c, reg, &max8997->saved_states[rid]);
720
721	if (rid == MAX8997_LDO1 ||
722			rid == MAX8997_LDO10 ||
723			rid == MAX8997_LDO21) {
724		dev_dbg(&rdev->dev, "Conditional Power-Off for %s\n",
725				rdev->desc->name);
726		return max8997_update_reg(i2c, reg, 0x40, mask);
727	}
728
729	dev_dbg(&rdev->dev, "Full Power-Off for %s (%xh -> %xh)\n",
730			rdev->desc->name, max8997->saved_states[rid] & mask,
731			(~pattern) & mask);
732	return max8997_update_reg(i2c, reg, ~pattern, mask);
733}
734
735static const struct regulator_ops max8997_ldo_ops = {
736	.list_voltage		= max8997_list_voltage,
737	.is_enabled		= max8997_reg_is_enabled,
738	.enable			= max8997_reg_enable,
739	.disable		= max8997_reg_disable,
740	.get_voltage_sel	= max8997_get_voltage_sel,
741	.set_voltage		= max8997_set_voltage_ldobuck,
742	.set_suspend_disable	= max8997_reg_disable_suspend,
743};
744
745static const struct regulator_ops max8997_buck_ops = {
746	.list_voltage		= max8997_list_voltage,
747	.is_enabled		= max8997_reg_is_enabled,
748	.enable			= max8997_reg_enable,
749	.disable		= max8997_reg_disable,
750	.get_voltage_sel	= max8997_get_voltage_sel,
751	.set_voltage		= max8997_set_voltage_buck,
752	.set_voltage_time_sel	= max8997_set_voltage_buck_time_sel,
753	.set_suspend_disable	= max8997_reg_disable_suspend,
754};
755
756static const struct regulator_ops max8997_fixedvolt_ops = {
757	.list_voltage		= max8997_list_voltage,
758	.is_enabled		= max8997_reg_is_enabled,
759	.enable			= max8997_reg_enable,
760	.disable		= max8997_reg_disable,
761	.set_suspend_disable	= max8997_reg_disable_suspend,
762};
763
764static const struct regulator_ops max8997_safeout_ops = {
765	.list_voltage		= regulator_list_voltage_table,
766	.is_enabled		= max8997_reg_is_enabled,
767	.enable			= max8997_reg_enable,
768	.disable		= max8997_reg_disable,
769	.get_voltage_sel	= max8997_get_voltage_sel,
770	.set_voltage_sel	= max8997_set_voltage_safeout_sel,
771	.set_suspend_disable	= max8997_reg_disable_suspend,
772};
773
774static const struct regulator_ops max8997_fixedstate_ops = {
775	.list_voltage		= max8997_list_voltage_charger_cv,
776	.get_voltage_sel	= max8997_get_voltage_sel,
777	.set_voltage		= max8997_set_voltage_charger_cv,
778};
779
780static int max8997_set_current_limit(struct regulator_dev *rdev,
781				     int min_uA, int max_uA)
782{
783	unsigned dummy;
784	int rid = rdev_get_id(rdev);
785
786	if (rid != MAX8997_CHARGER && rid != MAX8997_CHARGER_TOPOFF)
787		return -EINVAL;
788
789	/* Reuse max8997_set_voltage_ldobuck to set current_limit. */
790	return max8997_set_voltage_ldobuck(rdev, min_uA, max_uA, &dummy);
791}
792
793static int max8997_get_current_limit(struct regulator_dev *rdev)
794{
795	int sel, rid = rdev_get_id(rdev);
796
797	if (rid != MAX8997_CHARGER && rid != MAX8997_CHARGER_TOPOFF)
798		return -EINVAL;
799
800	sel = max8997_get_voltage_sel(rdev);
801	if (sel < 0)
802		return sel;
803
804	/* Reuse max8997_list_voltage to get current_limit. */
805	return max8997_list_voltage(rdev, sel);
806}
807
808static const struct regulator_ops max8997_charger_ops = {
809	.is_enabled		= max8997_reg_is_enabled,
810	.enable			= max8997_reg_enable,
811	.disable		= max8997_reg_disable,
812	.get_current_limit	= max8997_get_current_limit,
813	.set_current_limit	= max8997_set_current_limit,
814};
815
816static const struct regulator_ops max8997_charger_fixedstate_ops = {
817	.get_current_limit	= max8997_get_current_limit,
818	.set_current_limit	= max8997_set_current_limit,
819};
820
821#define MAX8997_VOLTAGE_REGULATOR(_name, _ops) {\
822	.name		= #_name,		\
823	.id		= MAX8997_##_name,	\
824	.ops		= &_ops,		\
825	.type		= REGULATOR_VOLTAGE,	\
826	.owner		= THIS_MODULE,		\
827}
828
829#define MAX8997_CURRENT_REGULATOR(_name, _ops) {\
830	.name		= #_name,		\
831	.id		= MAX8997_##_name,	\
832	.ops		= &_ops,		\
833	.type		= REGULATOR_CURRENT,	\
834	.owner		= THIS_MODULE,		\
835}
836
837static struct regulator_desc regulators[] = {
838	MAX8997_VOLTAGE_REGULATOR(LDO1, max8997_ldo_ops),
839	MAX8997_VOLTAGE_REGULATOR(LDO2, max8997_ldo_ops),
840	MAX8997_VOLTAGE_REGULATOR(LDO3, max8997_ldo_ops),
841	MAX8997_VOLTAGE_REGULATOR(LDO4, max8997_ldo_ops),
842	MAX8997_VOLTAGE_REGULATOR(LDO5, max8997_ldo_ops),
843	MAX8997_VOLTAGE_REGULATOR(LDO6, max8997_ldo_ops),
844	MAX8997_VOLTAGE_REGULATOR(LDO7, max8997_ldo_ops),
845	MAX8997_VOLTAGE_REGULATOR(LDO8, max8997_ldo_ops),
846	MAX8997_VOLTAGE_REGULATOR(LDO9, max8997_ldo_ops),
847	MAX8997_VOLTAGE_REGULATOR(LDO10, max8997_ldo_ops),
848	MAX8997_VOLTAGE_REGULATOR(LDO11, max8997_ldo_ops),
849	MAX8997_VOLTAGE_REGULATOR(LDO12, max8997_ldo_ops),
850	MAX8997_VOLTAGE_REGULATOR(LDO13, max8997_ldo_ops),
851	MAX8997_VOLTAGE_REGULATOR(LDO14, max8997_ldo_ops),
852	MAX8997_VOLTAGE_REGULATOR(LDO15, max8997_ldo_ops),
853	MAX8997_VOLTAGE_REGULATOR(LDO16, max8997_ldo_ops),
854	MAX8997_VOLTAGE_REGULATOR(LDO17, max8997_ldo_ops),
855	MAX8997_VOLTAGE_REGULATOR(LDO18, max8997_ldo_ops),
856	MAX8997_VOLTAGE_REGULATOR(LDO21, max8997_ldo_ops),
857	MAX8997_VOLTAGE_REGULATOR(BUCK1, max8997_buck_ops),
858	MAX8997_VOLTAGE_REGULATOR(BUCK2, max8997_buck_ops),
859	MAX8997_VOLTAGE_REGULATOR(BUCK3, max8997_buck_ops),
860	MAX8997_VOLTAGE_REGULATOR(BUCK4, max8997_buck_ops),
861	MAX8997_VOLTAGE_REGULATOR(BUCK5, max8997_buck_ops),
862	MAX8997_VOLTAGE_REGULATOR(BUCK6, max8997_fixedvolt_ops),
863	MAX8997_VOLTAGE_REGULATOR(BUCK7, max8997_buck_ops),
864	MAX8997_VOLTAGE_REGULATOR(EN32KHZ_AP, max8997_fixedvolt_ops),
865	MAX8997_VOLTAGE_REGULATOR(EN32KHZ_CP, max8997_fixedvolt_ops),
866	MAX8997_VOLTAGE_REGULATOR(ENVICHG, max8997_fixedvolt_ops),
867	MAX8997_VOLTAGE_REGULATOR(ESAFEOUT1, max8997_safeout_ops),
868	MAX8997_VOLTAGE_REGULATOR(ESAFEOUT2, max8997_safeout_ops),
869	MAX8997_VOLTAGE_REGULATOR(CHARGER_CV, max8997_fixedstate_ops),
870	MAX8997_CURRENT_REGULATOR(CHARGER, max8997_charger_ops),
871	MAX8997_CURRENT_REGULATOR(CHARGER_TOPOFF,
872				  max8997_charger_fixedstate_ops),
873};
874
875#ifdef CONFIG_OF
876static int max8997_pmic_dt_parse_dvs_gpio(struct platform_device *pdev,
877			struct max8997_platform_data *pdata,
878			struct device_node *pmic_np)
879{
880	int i, gpio;
881
882	for (i = 0; i < 3; i++) {
883		gpio = of_get_named_gpio(pmic_np,
884					"max8997,pmic-buck125-dvs-gpios", i);
885		if (!gpio_is_valid(gpio)) {
886			dev_err(&pdev->dev, "invalid gpio[%d]: %d\n", i, gpio);
887			return -EINVAL;
888		}
889		pdata->buck125_gpios[i] = gpio;
890	}
891	return 0;
892}
893
894static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
895					struct max8997_platform_data *pdata)
896{
897	struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent);
898	struct device_node *pmic_np, *regulators_np, *reg_np;
899	struct max8997_regulator_data *rdata;
900	unsigned int i, dvs_voltage_nr = 1, ret;
901
902	pmic_np = iodev->dev->of_node;
903	if (!pmic_np) {
904		dev_err(&pdev->dev, "could not find pmic sub-node\n");
905		return -ENODEV;
906	}
907
908	regulators_np = of_get_child_by_name(pmic_np, "regulators");
909	if (!regulators_np) {
910		dev_err(&pdev->dev, "could not find regulators sub-node\n");
911		return -EINVAL;
912	}
913
914	/* count the number of regulators to be supported in pmic */
915	pdata->num_regulators = of_get_child_count(regulators_np);
916
917	rdata = devm_kcalloc(&pdev->dev,
918			     pdata->num_regulators, sizeof(*rdata),
919			     GFP_KERNEL);
920	if (!rdata) {
921		of_node_put(regulators_np);
922		return -ENOMEM;
923	}
924
925	pdata->regulators = rdata;
926	for_each_child_of_node(regulators_np, reg_np) {
927		for (i = 0; i < ARRAY_SIZE(regulators); i++)
928			if (of_node_name_eq(reg_np, regulators[i].name))
929				break;
930
931		if (i == ARRAY_SIZE(regulators)) {
932			dev_warn(&pdev->dev, "don't know how to configure regulator %pOFn\n",
933				 reg_np);
934			continue;
935		}
936
937		rdata->id = i;
938		rdata->initdata = of_get_regulator_init_data(&pdev->dev,
939							     reg_np,
940							     &regulators[i]);
941		rdata->reg_node = reg_np;
942		rdata++;
943	}
944	of_node_put(regulators_np);
945
946	pdata->buck1_gpiodvs = of_property_read_bool(pmic_np, "max8997,pmic-buck1-uses-gpio-dvs");
947	pdata->buck2_gpiodvs = of_property_read_bool(pmic_np, "max8997,pmic-buck2-uses-gpio-dvs");
948	pdata->buck5_gpiodvs = of_property_read_bool(pmic_np, "max8997,pmic-buck5-uses-gpio-dvs");
949
950	if (pdata->buck1_gpiodvs || pdata->buck2_gpiodvs ||
951						pdata->buck5_gpiodvs) {
952		ret = max8997_pmic_dt_parse_dvs_gpio(pdev, pdata, pmic_np);
953		if (ret)
954			return -EINVAL;
955
956		if (of_property_read_u32(pmic_np,
957				"max8997,pmic-buck125-default-dvs-idx",
958				&pdata->buck125_default_idx)) {
959			pdata->buck125_default_idx = 0;
960		} else {
961			if (pdata->buck125_default_idx >= 8) {
962				pdata->buck125_default_idx = 0;
963				dev_info(&pdev->dev, "invalid value for default dvs index, using 0 instead\n");
964			}
965		}
966
967		if (of_get_property(pmic_np,
968			"max8997,pmic-ignore-gpiodvs-side-effect", NULL))
969			pdata->ignore_gpiodvs_side_effect = true;
970
971		dvs_voltage_nr = 8;
972	}
973
974	if (of_property_read_u32_array(pmic_np,
975				"max8997,pmic-buck1-dvs-voltage",
976				pdata->buck1_voltage, dvs_voltage_nr)) {
977		dev_err(&pdev->dev, "buck1 voltages not specified\n");
978		return -EINVAL;
979	}
980
981	if (of_property_read_u32_array(pmic_np,
982				"max8997,pmic-buck2-dvs-voltage",
983				pdata->buck2_voltage, dvs_voltage_nr)) {
984		dev_err(&pdev->dev, "buck2 voltages not specified\n");
985		return -EINVAL;
986	}
987
988	if (of_property_read_u32_array(pmic_np,
989				"max8997,pmic-buck5-dvs-voltage",
990				pdata->buck5_voltage, dvs_voltage_nr)) {
991		dev_err(&pdev->dev, "buck5 voltages not specified\n");
992		return -EINVAL;
993	}
994
995	return 0;
996}
997#else
998static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
999					struct max8997_platform_data *pdata)
1000{
1001	return 0;
1002}
1003#endif /* CONFIG_OF */
1004
1005static int max8997_pmic_probe(struct platform_device *pdev)
1006{
1007	struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent);
1008	struct max8997_platform_data *pdata = iodev->pdata;
1009	struct regulator_config config = { };
1010	struct regulator_dev *rdev;
1011	struct max8997_data *max8997;
1012	struct i2c_client *i2c;
1013	int i, ret, nr_dvs;
1014	u8 max_buck1 = 0, max_buck2 = 0, max_buck5 = 0;
1015
1016	if (!pdata) {
1017		dev_err(&pdev->dev, "No platform init data supplied.\n");
1018		return -ENODEV;
1019	}
1020
1021	if (iodev->dev->of_node) {
1022		ret = max8997_pmic_dt_parse_pdata(pdev, pdata);
1023		if (ret)
1024			return ret;
1025	}
1026
1027	max8997 = devm_kzalloc(&pdev->dev, sizeof(struct max8997_data),
1028			       GFP_KERNEL);
1029	if (!max8997)
1030		return -ENOMEM;
1031
1032	max8997->dev = &pdev->dev;
1033	max8997->iodev = iodev;
1034	max8997->num_regulators = pdata->num_regulators;
1035	platform_set_drvdata(pdev, max8997);
1036	i2c = max8997->iodev->i2c;
1037
1038	max8997->buck125_gpioindex = pdata->buck125_default_idx;
1039	max8997->buck1_gpiodvs = pdata->buck1_gpiodvs;
1040	max8997->buck2_gpiodvs = pdata->buck2_gpiodvs;
1041	max8997->buck5_gpiodvs = pdata->buck5_gpiodvs;
1042	memcpy(max8997->buck125_gpios, pdata->buck125_gpios, sizeof(int) * 3);
1043	max8997->ignore_gpiodvs_side_effect = pdata->ignore_gpiodvs_side_effect;
1044
1045	nr_dvs = (pdata->buck1_gpiodvs || pdata->buck2_gpiodvs ||
1046			pdata->buck5_gpiodvs) ? 8 : 1;
1047
1048	for (i = 0; i < nr_dvs; i++) {
1049		max8997->buck1_vol[i] = ret =
1050			max8997_get_voltage_proper_val(
1051					&buck1245_voltage_map_desc,
1052					pdata->buck1_voltage[i],
1053					pdata->buck1_voltage[i] +
1054					buck1245_voltage_map_desc.step);
1055		if (ret < 0)
1056			return ret;
1057
1058		max8997->buck2_vol[i] = ret =
1059			max8997_get_voltage_proper_val(
1060					&buck1245_voltage_map_desc,
1061					pdata->buck2_voltage[i],
1062					pdata->buck2_voltage[i] +
1063					buck1245_voltage_map_desc.step);
1064		if (ret < 0)
1065			return ret;
1066
1067		max8997->buck5_vol[i] = ret =
1068			max8997_get_voltage_proper_val(
1069					&buck1245_voltage_map_desc,
1070					pdata->buck5_voltage[i],
1071					pdata->buck5_voltage[i] +
1072					buck1245_voltage_map_desc.step);
1073		if (ret < 0)
1074			return ret;
1075
1076		if (max_buck1 < max8997->buck1_vol[i])
1077			max_buck1 = max8997->buck1_vol[i];
1078		if (max_buck2 < max8997->buck2_vol[i])
1079			max_buck2 = max8997->buck2_vol[i];
1080		if (max_buck5 < max8997->buck5_vol[i])
1081			max_buck5 = max8997->buck5_vol[i];
1082	}
1083
1084	/* For the safety, set max voltage before setting up */
1085	for (i = 0; i < 8; i++) {
1086		max8997_update_reg(i2c, MAX8997_REG_BUCK1DVS1 + i,
1087				max_buck1, 0x3f);
1088		max8997_update_reg(i2c, MAX8997_REG_BUCK2DVS1 + i,
1089				max_buck2, 0x3f);
1090		max8997_update_reg(i2c, MAX8997_REG_BUCK5DVS1 + i,
1091				max_buck5, 0x3f);
1092	}
1093
1094	/* Initialize all the DVS related BUCK registers */
1095	for (i = 0; i < nr_dvs; i++) {
1096		max8997_update_reg(i2c, MAX8997_REG_BUCK1DVS1 + i,
1097				max8997->buck1_vol[i],
1098				0x3f);
1099		max8997_update_reg(i2c, MAX8997_REG_BUCK2DVS1 + i,
1100				max8997->buck2_vol[i],
1101				0x3f);
1102		max8997_update_reg(i2c, MAX8997_REG_BUCK5DVS1 + i,
1103				max8997->buck5_vol[i],
1104				0x3f);
1105	}
1106
1107	/*
1108	 * If buck 1, 2, and 5 do not care DVS GPIO settings, ignore them.
1109	 * If at least one of them cares, set gpios.
1110	 */
1111	if (pdata->buck1_gpiodvs || pdata->buck2_gpiodvs ||
1112			pdata->buck5_gpiodvs) {
1113
1114		if (!gpio_is_valid(pdata->buck125_gpios[0]) ||
1115				!gpio_is_valid(pdata->buck125_gpios[1]) ||
1116				!gpio_is_valid(pdata->buck125_gpios[2])) {
1117			dev_err(&pdev->dev, "GPIO NOT VALID\n");
1118			return -EINVAL;
1119		}
1120
1121		ret = devm_gpio_request(&pdev->dev, pdata->buck125_gpios[0],
1122					"MAX8997 SET1");
1123		if (ret)
1124			return ret;
1125
1126		ret = devm_gpio_request(&pdev->dev, pdata->buck125_gpios[1],
1127					"MAX8997 SET2");
1128		if (ret)
1129			return ret;
1130
1131		ret = devm_gpio_request(&pdev->dev, pdata->buck125_gpios[2],
1132				"MAX8997 SET3");
1133		if (ret)
1134			return ret;
1135
1136		gpio_direction_output(pdata->buck125_gpios[0],
1137				(max8997->buck125_gpioindex >> 2)
1138				& 0x1); /* SET1 */
1139		gpio_direction_output(pdata->buck125_gpios[1],
1140				(max8997->buck125_gpioindex >> 1)
1141				& 0x1); /* SET2 */
1142		gpio_direction_output(pdata->buck125_gpios[2],
1143				(max8997->buck125_gpioindex >> 0)
1144				& 0x1); /* SET3 */
1145	}
1146
1147	/* DVS-GPIO disabled */
1148	max8997_update_reg(i2c, MAX8997_REG_BUCK1CTRL, (pdata->buck1_gpiodvs) ?
1149			(1 << 1) : (0 << 1), 1 << 1);
1150	max8997_update_reg(i2c, MAX8997_REG_BUCK2CTRL, (pdata->buck2_gpiodvs) ?
1151			(1 << 1) : (0 << 1), 1 << 1);
1152	max8997_update_reg(i2c, MAX8997_REG_BUCK5CTRL, (pdata->buck5_gpiodvs) ?
1153			(1 << 1) : (0 << 1), 1 << 1);
1154
1155	/* Misc Settings */
1156	max8997->ramp_delay = 10; /* set 10mV/us, which is the default */
1157	max8997_write_reg(i2c, MAX8997_REG_BUCKRAMP, (0xf << 4) | 0x9);
1158
1159	for (i = 0; i < pdata->num_regulators; i++) {
1160		const struct voltage_map_desc *desc;
1161		int id = pdata->regulators[i].id;
1162
1163		desc = reg_voltage_map[id];
1164		if (desc) {
1165			regulators[id].n_voltages =
1166				(desc->max - desc->min) / desc->step + 1;
1167		} else if (id == MAX8997_ESAFEOUT1 || id == MAX8997_ESAFEOUT2) {
1168			regulators[id].volt_table = safeoutvolt;
1169			regulators[id].n_voltages = ARRAY_SIZE(safeoutvolt);
1170		} else if (id == MAX8997_CHARGER_CV) {
1171			regulators[id].n_voltages = 16;
1172		}
1173
1174		config.dev = max8997->dev;
1175		config.init_data = pdata->regulators[i].initdata;
1176		config.driver_data = max8997;
1177		config.of_node = pdata->regulators[i].reg_node;
1178
1179		rdev = devm_regulator_register(&pdev->dev, &regulators[id],
1180					       &config);
1181		if (IS_ERR(rdev)) {
1182			dev_err(max8997->dev, "regulator init failed for %d\n",
1183					id);
1184			return PTR_ERR(rdev);
1185		}
1186	}
1187
1188	return 0;
1189}
1190
1191static const struct platform_device_id max8997_pmic_id[] = {
1192	{ "max8997-pmic", 0},
1193	{ },
1194};
1195MODULE_DEVICE_TABLE(platform, max8997_pmic_id);
1196
1197static struct platform_driver max8997_pmic_driver = {
1198	.driver = {
1199		.name = "max8997-pmic",
1200		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
1201	},
1202	.probe = max8997_pmic_probe,
1203	.id_table = max8997_pmic_id,
1204};
1205
1206static int __init max8997_pmic_init(void)
1207{
1208	return platform_driver_register(&max8997_pmic_driver);
1209}
1210subsys_initcall(max8997_pmic_init);
1211
1212static void __exit max8997_pmic_cleanup(void)
1213{
1214	platform_driver_unregister(&max8997_pmic_driver);
1215}
1216module_exit(max8997_pmic_cleanup);
1217
1218MODULE_DESCRIPTION("MAXIM 8997/8966 Regulator Driver");
1219MODULE_AUTHOR("MyungJoo Ham <myungjoo.ham@samsung.com>");
1220MODULE_LICENSE("GPL");
1221