max8998.c revision 676e02d7a2ed9bb02994670a07df533a29a99de6
1/* 2 * max8998.c - Voltage regulator driver for the Maxim 8998 3 * 4 * Copyright (C) 2009-2010 Samsung Electronics 5 * Kyungmin Park <kyungmin.park@samsung.com> 6 * Marek Szyprowski <m.szyprowski@samsung.com> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23#include <linux/module.h> 24#include <linux/init.h> 25#include <linux/i2c.h> 26#include <linux/err.h> 27#include <linux/gpio.h> 28#include <linux/slab.h> 29#include <linux/interrupt.h> 30#include <linux/mutex.h> 31#include <linux/delay.h> 32#include <linux/platform_device.h> 33#include <linux/regulator/driver.h> 34#include <linux/mfd/max8998.h> 35#include <linux/mfd/max8998-private.h> 36 37struct max8998_data { 38 struct device *dev; 39 struct max8998_dev *iodev; 40 int num_regulators; 41 struct regulator_dev **rdev; 42}; 43 44struct voltage_map_desc { 45 int min; 46 int max; 47 int step; 48}; 49 50/* Voltage maps */ 51static const struct voltage_map_desc ldo23_voltage_map_desc = { 52 .min = 800, .step = 50, .max = 1300, 53}; 54static const struct voltage_map_desc ldo456711_voltage_map_desc = { 55 .min = 1600, .step = 100, .max = 3600, 56}; 57static const struct voltage_map_desc ldo8_voltage_map_desc = { 58 .min = 3000, .step = 100, .max = 3600, 59}; 60static const struct voltage_map_desc ldo9_voltage_map_desc = { 61 .min = 2800, .step = 100, .max = 3100, 62}; 63static const struct voltage_map_desc ldo10_voltage_map_desc = { 64 .min = 950, .step = 50, .max = 1300, 65}; 66static const struct voltage_map_desc ldo1213_voltage_map_desc = { 67 .min = 800, .step = 100, .max = 3300, 68}; 69static const struct voltage_map_desc ldo1415_voltage_map_desc = { 70 .min = 1200, .step = 100, .max = 3300, 71}; 72static const struct voltage_map_desc ldo1617_voltage_map_desc = { 73 .min = 1600, .step = 100, .max = 3600, 74}; 75static const struct voltage_map_desc buck12_voltage_map_desc = { 76 .min = 750, .step = 25, .max = 1525, 77}; 78static const struct voltage_map_desc buck3_voltage_map_desc = { 79 .min = 1600, .step = 100, .max = 3600, 80}; 81static const struct voltage_map_desc buck4_voltage_map_desc = { 82 .min = 800, .step = 100, .max = 2300, 83}; 84 85static const struct voltage_map_desc *ldo_voltage_map[] = { 86 NULL, 87 NULL, 88 &ldo23_voltage_map_desc, /* LDO2 */ 89 &ldo23_voltage_map_desc, /* LDO3 */ 90 &ldo456711_voltage_map_desc, /* LDO4 */ 91 &ldo456711_voltage_map_desc, /* LDO5 */ 92 &ldo456711_voltage_map_desc, /* LDO6 */ 93 &ldo456711_voltage_map_desc, /* LDO7 */ 94 &ldo8_voltage_map_desc, /* LDO8 */ 95 &ldo9_voltage_map_desc, /* LDO9 */ 96 &ldo10_voltage_map_desc, /* LDO10 */ 97 &ldo456711_voltage_map_desc, /* LDO11 */ 98 &ldo1213_voltage_map_desc, /* LDO12 */ 99 &ldo1213_voltage_map_desc, /* LDO13 */ 100 &ldo1415_voltage_map_desc, /* LDO14 */ 101 &ldo1415_voltage_map_desc, /* LDO15 */ 102 &ldo1617_voltage_map_desc, /* LDO16 */ 103 &ldo1617_voltage_map_desc, /* LDO17 */ 104 &buck12_voltage_map_desc, /* BUCK1 */ 105 &buck12_voltage_map_desc, /* BUCK2 */ 106 &buck3_voltage_map_desc, /* BUCK3 */ 107 &buck4_voltage_map_desc, /* BUCK4 */ 108}; 109 110static inline int max8998_get_ldo(struct regulator_dev *rdev) 111{ 112 return rdev_get_id(rdev); 113} 114 115static int max8998_list_voltage(struct regulator_dev *rdev, 116 unsigned int selector) 117{ 118 const struct voltage_map_desc *desc; 119 int ldo = max8998_get_ldo(rdev); 120 int val; 121 122 if (ldo >= ARRAY_SIZE(ldo_voltage_map)) 123 return -EINVAL; 124 125 desc = ldo_voltage_map[ldo]; 126 if (desc == NULL) 127 return -EINVAL; 128 129 val = desc->min + desc->step * selector; 130 if (val > desc->max) 131 return -EINVAL; 132 133 return val * 1000; 134} 135 136static int max8998_get_enable_register(struct regulator_dev *rdev, 137 int *reg, int *shift) 138{ 139 int ldo = max8998_get_ldo(rdev); 140 141 switch (ldo) { 142 case MAX8998_LDO2 ... MAX8998_LDO5: 143 *reg = MAX8998_REG_ONOFF1; 144 *shift = 3 - (ldo - MAX8998_LDO2); 145 break; 146 case MAX8998_LDO6 ... MAX8998_LDO13: 147 *reg = MAX8998_REG_ONOFF2; 148 *shift = 7 - (ldo - MAX8998_LDO6); 149 break; 150 case MAX8998_LDO14 ... MAX8998_LDO17: 151 *reg = MAX8998_REG_ONOFF3; 152 *shift = 7 - (ldo - MAX8998_LDO14); 153 break; 154 case MAX8998_BUCK1 ... MAX8998_BUCK4: 155 *reg = MAX8998_REG_ONOFF1; 156 *shift = 7 - (ldo - MAX8998_BUCK1); 157 break; 158 case MAX8998_EN32KHZ_AP ... MAX8998_ENVICHG: 159 *reg = MAX8998_REG_ONOFF4; 160 *shift = 7 - (ldo - MAX8998_EN32KHZ_AP); 161 break; 162 case MAX8998_ESAFEOUT1 ... MAX8998_ESAFEOUT2: 163 *reg = MAX8998_REG_CHGR2; 164 *shift = 7 - (ldo - MAX8998_ESAFEOUT1); 165 break; 166 default: 167 return -EINVAL; 168 } 169 170 return 0; 171} 172 173static int max8998_ldo_is_enabled(struct regulator_dev *rdev) 174{ 175 struct max8998_data *max8998 = rdev_get_drvdata(rdev); 176 struct i2c_client *i2c = max8998->iodev->i2c; 177 int ret, reg, shift = 8; 178 u8 val; 179 180 ret = max8998_get_enable_register(rdev, ®, &shift); 181 if (ret) 182 return ret; 183 184 ret = max8998_read_reg(i2c, reg, &val); 185 if (ret) 186 return ret; 187 188 return val & (1 << shift); 189} 190 191static int max8998_ldo_enable(struct regulator_dev *rdev) 192{ 193 struct max8998_data *max8998 = rdev_get_drvdata(rdev); 194 struct i2c_client *i2c = max8998->iodev->i2c; 195 int reg, shift = 8, ret; 196 197 ret = max8998_get_enable_register(rdev, ®, &shift); 198 if (ret) 199 return ret; 200 201 return max8998_update_reg(i2c, reg, 1<<shift, 1<<shift); 202} 203 204static int max8998_ldo_disable(struct regulator_dev *rdev) 205{ 206 struct max8998_data *max8998 = rdev_get_drvdata(rdev); 207 struct i2c_client *i2c = max8998->iodev->i2c; 208 int reg, shift = 8, ret; 209 210 ret = max8998_get_enable_register(rdev, ®, &shift); 211 if (ret) 212 return ret; 213 214 return max8998_update_reg(i2c, reg, 0, 1<<shift); 215} 216 217static int max8998_get_voltage_register(struct regulator_dev *rdev, 218 int *_reg, int *_shift, int *_mask) 219{ 220 int ldo = max8998_get_ldo(rdev); 221 int reg, shift = 0, mask = 0xff; 222 223 switch (ldo) { 224 case MAX8998_LDO2 ... MAX8998_LDO3: 225 reg = MAX8998_REG_LDO2_LDO3; 226 mask = 0xf; 227 if (ldo == MAX8998_LDO2) 228 shift = 4; 229 else 230 shift = 0; 231 break; 232 case MAX8998_LDO4 ... MAX8998_LDO7: 233 reg = MAX8998_REG_LDO4 + (ldo - MAX8998_LDO4); 234 break; 235 case MAX8998_LDO8 ... MAX8998_LDO9: 236 reg = MAX8998_REG_LDO8_LDO9; 237 mask = 0xf; 238 if (ldo == MAX8998_LDO8) 239 shift = 4; 240 else 241 shift = 0; 242 break; 243 case MAX8998_LDO10 ... MAX8998_LDO11: 244 reg = MAX8998_REG_LDO10_LDO11; 245 if (ldo == MAX8998_LDO10) { 246 shift = 5; 247 mask = 0x7; 248 } else { 249 shift = 0; 250 mask = 0x1f; 251 } 252 break; 253 case MAX8998_LDO12 ... MAX8998_LDO17: 254 reg = MAX8998_REG_LDO12 + (ldo - MAX8998_LDO12); 255 break; 256 case MAX8998_BUCK1: 257 reg = MAX8998_REG_BUCK1_DVSARM1; 258 break; 259 case MAX8998_BUCK2: 260 reg = MAX8998_REG_BUCK2_DVSINT1; 261 break; 262 case MAX8998_BUCK3: 263 reg = MAX8998_REG_BUCK3; 264 break; 265 case MAX8998_BUCK4: 266 reg = MAX8998_REG_BUCK4; 267 break; 268 default: 269 return -EINVAL; 270 } 271 272 *_reg = reg; 273 *_shift = shift; 274 *_mask = mask; 275 276 return 0; 277} 278 279static int max8998_get_voltage(struct regulator_dev *rdev) 280{ 281 struct max8998_data *max8998 = rdev_get_drvdata(rdev); 282 struct i2c_client *i2c = max8998->iodev->i2c; 283 int reg, shift = 0, mask, ret; 284 u8 val; 285 286 ret = max8998_get_voltage_register(rdev, ®, &shift, &mask); 287 if (ret) 288 return ret; 289 290 ret = max8998_read_reg(i2c, reg, &val); 291 if (ret) 292 return ret; 293 294 val >>= shift; 295 val &= mask; 296 297 return max8998_list_voltage(rdev, val); 298} 299 300static int max8998_set_voltage(struct regulator_dev *rdev, 301 int min_uV, int max_uV) 302{ 303 struct max8998_data *max8998 = rdev_get_drvdata(rdev); 304 struct i2c_client *i2c = max8998->iodev->i2c; 305 int min_vol = min_uV / 1000, max_vol = max_uV / 1000; 306 int previous_vol = 0; 307 const struct voltage_map_desc *desc; 308 int ldo = max8998_get_ldo(rdev); 309 int reg, shift = 0, mask, ret; 310 int i = 0; 311 u8 val; 312 bool en_ramp = false; 313 314 if (ldo >= ARRAY_SIZE(ldo_voltage_map)) 315 return -EINVAL; 316 317 desc = ldo_voltage_map[ldo]; 318 if (desc == NULL) 319 return -EINVAL; 320 321 if (max_vol < desc->min || min_vol > desc->max) 322 return -EINVAL; 323 324 while (desc->min + desc->step*i < min_vol && 325 desc->min + desc->step*i < desc->max) 326 i++; 327 328 if (desc->min + desc->step*i > max_vol) 329 return -EINVAL; 330 331 ret = max8998_get_voltage_register(rdev, ®, &shift, &mask); 332 if (ret) 333 return ret; 334 335 /* wait for RAMP_UP_DELAY if rdev is BUCK1/2 and 336 * ENRAMP is ON */ 337 if (ldo == MAX8998_BUCK1 || ldo == MAX8998_BUCK2) { 338 max8998_read_reg(i2c, MAX8998_REG_ONOFF4, &val); 339 if (val & (1 << 4)) { 340 en_ramp = true; 341 previous_vol = max8998_get_voltage(rdev); 342 } 343 } 344 345 ret = max8998_update_reg(i2c, reg, i<<shift, mask<<shift); 346 347 if (en_ramp == true) { 348 int difference = desc->min + desc->step*i - previous_vol/1000; 349 if (difference > 0) 350 udelay(difference / ((val & 0x0f) + 1)); 351 } 352 353 return ret; 354} 355 356static struct regulator_ops max8998_ldo_ops = { 357 .list_voltage = max8998_list_voltage, 358 .is_enabled = max8998_ldo_is_enabled, 359 .enable = max8998_ldo_enable, 360 .disable = max8998_ldo_disable, 361 .get_voltage = max8998_get_voltage, 362 .set_voltage = max8998_set_voltage, 363 .set_suspend_enable = max8998_ldo_enable, 364 .set_suspend_disable = max8998_ldo_disable, 365}; 366 367static struct regulator_ops max8998_buck_ops = { 368 .list_voltage = max8998_list_voltage, 369 .is_enabled = max8998_ldo_is_enabled, 370 .enable = max8998_ldo_enable, 371 .disable = max8998_ldo_disable, 372 .get_voltage = max8998_get_voltage, 373 .set_voltage = max8998_set_voltage, 374 .set_suspend_enable = max8998_ldo_enable, 375 .set_suspend_disable = max8998_ldo_disable, 376}; 377 378static struct regulator_ops max8998_others_ops = { 379 .is_enabled = max8998_ldo_is_enabled, 380 .enable = max8998_ldo_enable, 381 .disable = max8998_ldo_disable, 382 .set_suspend_enable = max8998_ldo_enable, 383 .set_suspend_disable = max8998_ldo_disable, 384}; 385 386static struct regulator_desc regulators[] = { 387 { 388 .name = "LDO2", 389 .id = MAX8998_LDO2, 390 .ops = &max8998_ldo_ops, 391 .type = REGULATOR_VOLTAGE, 392 .owner = THIS_MODULE, 393 }, { 394 .name = "LDO3", 395 .id = MAX8998_LDO3, 396 .ops = &max8998_ldo_ops, 397 .type = REGULATOR_VOLTAGE, 398 .owner = THIS_MODULE, 399 }, { 400 .name = "LDO4", 401 .id = MAX8998_LDO4, 402 .ops = &max8998_ldo_ops, 403 .type = REGULATOR_VOLTAGE, 404 .owner = THIS_MODULE, 405 }, { 406 .name = "LDO5", 407 .id = MAX8998_LDO5, 408 .ops = &max8998_ldo_ops, 409 .type = REGULATOR_VOLTAGE, 410 .owner = THIS_MODULE, 411 }, { 412 .name = "LDO6", 413 .id = MAX8998_LDO6, 414 .ops = &max8998_ldo_ops, 415 .type = REGULATOR_VOLTAGE, 416 .owner = THIS_MODULE, 417 }, { 418 .name = "LDO7", 419 .id = MAX8998_LDO7, 420 .ops = &max8998_ldo_ops, 421 .type = REGULATOR_VOLTAGE, 422 .owner = THIS_MODULE, 423 }, { 424 .name = "LDO8", 425 .id = MAX8998_LDO8, 426 .ops = &max8998_ldo_ops, 427 .type = REGULATOR_VOLTAGE, 428 .owner = THIS_MODULE, 429 }, { 430 .name = "LDO9", 431 .id = MAX8998_LDO9, 432 .ops = &max8998_ldo_ops, 433 .type = REGULATOR_VOLTAGE, 434 .owner = THIS_MODULE, 435 }, { 436 .name = "LDO10", 437 .id = MAX8998_LDO10, 438 .ops = &max8998_ldo_ops, 439 .type = REGULATOR_VOLTAGE, 440 .owner = THIS_MODULE, 441 }, { 442 .name = "LDO11", 443 .id = MAX8998_LDO11, 444 .ops = &max8998_ldo_ops, 445 .type = REGULATOR_VOLTAGE, 446 .owner = THIS_MODULE, 447 }, { 448 .name = "LDO12", 449 .id = MAX8998_LDO12, 450 .ops = &max8998_ldo_ops, 451 .type = REGULATOR_VOLTAGE, 452 .owner = THIS_MODULE, 453 }, { 454 .name = "LDO13", 455 .id = MAX8998_LDO13, 456 .ops = &max8998_ldo_ops, 457 .type = REGULATOR_VOLTAGE, 458 .owner = THIS_MODULE, 459 }, { 460 .name = "LDO14", 461 .id = MAX8998_LDO14, 462 .ops = &max8998_ldo_ops, 463 .type = REGULATOR_VOLTAGE, 464 .owner = THIS_MODULE, 465 }, { 466 .name = "LDO15", 467 .id = MAX8998_LDO15, 468 .ops = &max8998_ldo_ops, 469 .type = REGULATOR_VOLTAGE, 470 .owner = THIS_MODULE, 471 }, { 472 .name = "LDO16", 473 .id = MAX8998_LDO16, 474 .ops = &max8998_ldo_ops, 475 .type = REGULATOR_VOLTAGE, 476 .owner = THIS_MODULE, 477 }, { 478 .name = "LDO17", 479 .id = MAX8998_LDO17, 480 .ops = &max8998_ldo_ops, 481 .type = REGULATOR_VOLTAGE, 482 .owner = THIS_MODULE, 483 }, { 484 .name = "BUCK1", 485 .id = MAX8998_BUCK1, 486 .ops = &max8998_buck_ops, 487 .type = REGULATOR_VOLTAGE, 488 .owner = THIS_MODULE, 489 }, { 490 .name = "BUCK2", 491 .id = MAX8998_BUCK2, 492 .ops = &max8998_buck_ops, 493 .type = REGULATOR_VOLTAGE, 494 .owner = THIS_MODULE, 495 }, { 496 .name = "BUCK3", 497 .id = MAX8998_BUCK3, 498 .ops = &max8998_buck_ops, 499 .type = REGULATOR_VOLTAGE, 500 .owner = THIS_MODULE, 501 }, { 502 .name = "BUCK4", 503 .id = MAX8998_BUCK4, 504 .ops = &max8998_buck_ops, 505 .type = REGULATOR_VOLTAGE, 506 .owner = THIS_MODULE, 507 }, { 508 .name = "EN32KHz AP", 509 .id = MAX8998_EN32KHZ_AP, 510 .ops = &max8998_others_ops, 511 .type = REGULATOR_VOLTAGE, 512 .owner = THIS_MODULE, 513 }, { 514 .name = "EN32KHz CP", 515 .id = MAX8998_EN32KHZ_CP, 516 .ops = &max8998_others_ops, 517 .type = REGULATOR_VOLTAGE, 518 .owner = THIS_MODULE, 519 }, { 520 .name = "ENVICHG", 521 .id = MAX8998_ENVICHG, 522 .ops = &max8998_others_ops, 523 .type = REGULATOR_VOLTAGE, 524 .owner = THIS_MODULE, 525 }, { 526 .name = "ESAFEOUT1", 527 .id = MAX8998_ESAFEOUT1, 528 .ops = &max8998_others_ops, 529 .type = REGULATOR_VOLTAGE, 530 .owner = THIS_MODULE, 531 }, { 532 .name = "ESAFEOUT2", 533 .id = MAX8998_ESAFEOUT2, 534 .ops = &max8998_others_ops, 535 .type = REGULATOR_VOLTAGE, 536 .owner = THIS_MODULE, 537 } 538}; 539 540static __devinit int max8998_pmic_probe(struct platform_device *pdev) 541{ 542 struct max8998_dev *iodev = dev_get_drvdata(pdev->dev.parent); 543 struct max8998_platform_data *pdata = dev_get_platdata(iodev->dev); 544 struct regulator_dev **rdev; 545 struct max8998_data *max8998; 546 int i, ret, size; 547 548 if (!pdata) { 549 dev_err(pdev->dev.parent, "No platform init data supplied\n"); 550 return -ENODEV; 551 } 552 553 max8998 = kzalloc(sizeof(struct max8998_data), GFP_KERNEL); 554 if (!max8998) 555 return -ENOMEM; 556 557 size = sizeof(struct regulator_dev *) * pdata->num_regulators; 558 max8998->rdev = kzalloc(size, GFP_KERNEL); 559 if (!max8998->rdev) { 560 kfree(max8998); 561 return -ENOMEM; 562 } 563 564 rdev = max8998->rdev; 565 max8998->dev = &pdev->dev; 566 max8998->iodev = iodev; 567 max8998->num_regulators = pdata->num_regulators; 568 platform_set_drvdata(pdev, max8998); 569 570 for (i = 0; i < pdata->num_regulators; i++) { 571 const struct voltage_map_desc *desc; 572 int id = pdata->regulators[i].id; 573 int index = id - MAX8998_LDO2; 574 575 desc = ldo_voltage_map[id]; 576 if (desc && regulators[index].ops != &max8998_others_ops) { 577 int count = (desc->max - desc->min) / desc->step + 1; 578 regulators[index].n_voltages = count; 579 } 580 rdev[i] = regulator_register(®ulators[index], max8998->dev, 581 pdata->regulators[i].initdata, max8998); 582 if (IS_ERR(rdev[i])) { 583 ret = PTR_ERR(rdev[i]); 584 dev_err(max8998->dev, "regulator init failed\n"); 585 rdev[i] = NULL; 586 goto err; 587 } 588 } 589 590 591 return 0; 592err: 593 for (i = 0; i < max8998->num_regulators; i++) 594 if (rdev[i]) 595 regulator_unregister(rdev[i]); 596 597 kfree(max8998->rdev); 598 kfree(max8998); 599 600 return ret; 601} 602 603static int __devexit max8998_pmic_remove(struct platform_device *pdev) 604{ 605 struct max8998_data *max8998 = platform_get_drvdata(pdev); 606 struct regulator_dev **rdev = max8998->rdev; 607 int i; 608 609 for (i = 0; i < max8998->num_regulators; i++) 610 if (rdev[i]) 611 regulator_unregister(rdev[i]); 612 613 kfree(max8998->rdev); 614 kfree(max8998); 615 616 return 0; 617} 618 619static struct platform_driver max8998_pmic_driver = { 620 .driver = { 621 .name = "max8998-pmic", 622 .owner = THIS_MODULE, 623 }, 624 .probe = max8998_pmic_probe, 625 .remove = __devexit_p(max8998_pmic_remove), 626}; 627 628static int __init max8998_pmic_init(void) 629{ 630 return platform_driver_register(&max8998_pmic_driver); 631} 632subsys_initcall(max8998_pmic_init); 633 634static void __exit max8998_pmic_cleanup(void) 635{ 636 platform_driver_unregister(&max8998_pmic_driver); 637} 638module_exit(max8998_pmic_cleanup); 639 640MODULE_DESCRIPTION("MAXIM 8998 voltage regulator driver"); 641MODULE_AUTHOR("Kyungmin Park <kyungmin.park@samsung.com>"); 642MODULE_LICENSE("GPL"); 643