Linux Audio

Check our new training course

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