| .. | .. |
|---|
| 33 | 33 | unsigned int buck2_idx; |
|---|
| 34 | 34 | }; |
|---|
| 35 | 35 | |
|---|
| 36 | | -struct voltage_map_desc { |
|---|
| 37 | | - int min; |
|---|
| 38 | | - int max; |
|---|
| 39 | | - int step; |
|---|
| 40 | | -}; |
|---|
| 41 | | - |
|---|
| 42 | | -/* Voltage maps in uV*/ |
|---|
| 43 | | -static const struct voltage_map_desc ldo23_voltage_map_desc = { |
|---|
| 44 | | - .min = 800000, .step = 50000, .max = 1300000, |
|---|
| 45 | | -}; |
|---|
| 46 | | -static const struct voltage_map_desc ldo456711_voltage_map_desc = { |
|---|
| 47 | | - .min = 1600000, .step = 100000, .max = 3600000, |
|---|
| 48 | | -}; |
|---|
| 49 | | -static const struct voltage_map_desc ldo8_voltage_map_desc = { |
|---|
| 50 | | - .min = 3000000, .step = 100000, .max = 3600000, |
|---|
| 51 | | -}; |
|---|
| 52 | | -static const struct voltage_map_desc ldo9_voltage_map_desc = { |
|---|
| 53 | | - .min = 2800000, .step = 100000, .max = 3100000, |
|---|
| 54 | | -}; |
|---|
| 55 | | -static const struct voltage_map_desc ldo10_voltage_map_desc = { |
|---|
| 56 | | - .min = 950000, .step = 50000, .max = 1300000, |
|---|
| 57 | | -}; |
|---|
| 58 | | -static const struct voltage_map_desc ldo1213_voltage_map_desc = { |
|---|
| 59 | | - .min = 800000, .step = 100000, .max = 3300000, |
|---|
| 60 | | -}; |
|---|
| 61 | | -static const struct voltage_map_desc ldo1415_voltage_map_desc = { |
|---|
| 62 | | - .min = 1200000, .step = 100000, .max = 3300000, |
|---|
| 63 | | -}; |
|---|
| 64 | | -static const struct voltage_map_desc ldo1617_voltage_map_desc = { |
|---|
| 65 | | - .min = 1600000, .step = 100000, .max = 3600000, |
|---|
| 66 | | -}; |
|---|
| 67 | | -static const struct voltage_map_desc buck12_voltage_map_desc = { |
|---|
| 68 | | - .min = 750000, .step = 25000, .max = 1525000, |
|---|
| 69 | | -}; |
|---|
| 70 | | -static const struct voltage_map_desc buck3_voltage_map_desc = { |
|---|
| 71 | | - .min = 1600000, .step = 100000, .max = 3600000, |
|---|
| 72 | | -}; |
|---|
| 73 | | -static const struct voltage_map_desc buck4_voltage_map_desc = { |
|---|
| 74 | | - .min = 800000, .step = 100000, .max = 2300000, |
|---|
| 75 | | -}; |
|---|
| 76 | | - |
|---|
| 77 | | -static const struct voltage_map_desc *ldo_voltage_map[] = { |
|---|
| 78 | | - NULL, |
|---|
| 79 | | - NULL, |
|---|
| 80 | | - &ldo23_voltage_map_desc, /* LDO2 */ |
|---|
| 81 | | - &ldo23_voltage_map_desc, /* LDO3 */ |
|---|
| 82 | | - &ldo456711_voltage_map_desc, /* LDO4 */ |
|---|
| 83 | | - &ldo456711_voltage_map_desc, /* LDO5 */ |
|---|
| 84 | | - &ldo456711_voltage_map_desc, /* LDO6 */ |
|---|
| 85 | | - &ldo456711_voltage_map_desc, /* LDO7 */ |
|---|
| 86 | | - &ldo8_voltage_map_desc, /* LDO8 */ |
|---|
| 87 | | - &ldo9_voltage_map_desc, /* LDO9 */ |
|---|
| 88 | | - &ldo10_voltage_map_desc, /* LDO10 */ |
|---|
| 89 | | - &ldo456711_voltage_map_desc, /* LDO11 */ |
|---|
| 90 | | - &ldo1213_voltage_map_desc, /* LDO12 */ |
|---|
| 91 | | - &ldo1213_voltage_map_desc, /* LDO13 */ |
|---|
| 92 | | - &ldo1415_voltage_map_desc, /* LDO14 */ |
|---|
| 93 | | - &ldo1415_voltage_map_desc, /* LDO15 */ |
|---|
| 94 | | - &ldo1617_voltage_map_desc, /* LDO16 */ |
|---|
| 95 | | - &ldo1617_voltage_map_desc, /* LDO17 */ |
|---|
| 96 | | - &buck12_voltage_map_desc, /* BUCK1 */ |
|---|
| 97 | | - &buck12_voltage_map_desc, /* BUCK2 */ |
|---|
| 98 | | - &buck3_voltage_map_desc, /* BUCK3 */ |
|---|
| 99 | | - &buck4_voltage_map_desc, /* BUCK4 */ |
|---|
| 36 | +static const unsigned int charger_current_table[] = { |
|---|
| 37 | + 90000, 380000, 475000, 550000, 570000, 600000, 700000, 800000, |
|---|
| 100 | 38 | }; |
|---|
| 101 | 39 | |
|---|
| 102 | 40 | static int max8998_get_enable_register(struct regulator_dev *rdev, |
|---|
| .. | .. |
|---|
| 129 | 67 | *reg = MAX8998_REG_CHGR2; |
|---|
| 130 | 68 | *shift = 7 - (ldo - MAX8998_ESAFEOUT1); |
|---|
| 131 | 69 | break; |
|---|
| 70 | + case MAX8998_CHARGER: |
|---|
| 71 | + *reg = MAX8998_REG_CHGR2; |
|---|
| 72 | + *shift = 0; |
|---|
| 73 | + break; |
|---|
| 132 | 74 | default: |
|---|
| 133 | 75 | return -EINVAL; |
|---|
| 134 | 76 | } |
|---|
| .. | .. |
|---|
| 152 | 94 | return ret; |
|---|
| 153 | 95 | |
|---|
| 154 | 96 | return val & (1 << shift); |
|---|
| 97 | +} |
|---|
| 98 | + |
|---|
| 99 | +static int max8998_ldo_is_enabled_inverted(struct regulator_dev *rdev) |
|---|
| 100 | +{ |
|---|
| 101 | + return (!max8998_ldo_is_enabled(rdev)); |
|---|
| 155 | 102 | } |
|---|
| 156 | 103 | |
|---|
| 157 | 104 | static int max8998_ldo_enable(struct regulator_dev *rdev) |
|---|
| .. | .. |
|---|
| 400 | 347 | { |
|---|
| 401 | 348 | struct max8998_data *max8998 = rdev_get_drvdata(rdev); |
|---|
| 402 | 349 | struct i2c_client *i2c = max8998->iodev->i2c; |
|---|
| 403 | | - const struct voltage_map_desc *desc; |
|---|
| 404 | 350 | int buck = rdev_get_id(rdev); |
|---|
| 405 | 351 | u8 val = 0; |
|---|
| 406 | 352 | int difference, ret; |
|---|
| 407 | 353 | |
|---|
| 408 | 354 | if (buck < MAX8998_BUCK1 || buck > MAX8998_BUCK4) |
|---|
| 409 | 355 | return -EINVAL; |
|---|
| 410 | | - |
|---|
| 411 | | - desc = ldo_voltage_map[buck]; |
|---|
| 412 | 356 | |
|---|
| 413 | 357 | /* Voltage stabilization */ |
|---|
| 414 | 358 | ret = max8998_read_reg(i2c, MAX8998_REG_ONOFF4, &val); |
|---|
| .. | .. |
|---|
| 420 | 364 | if (max8998->iodev->type == TYPE_MAX8998 && !(val & MAX8998_ENRAMP)) |
|---|
| 421 | 365 | return 0; |
|---|
| 422 | 366 | |
|---|
| 423 | | - difference = (new_selector - old_selector) * desc->step / 1000; |
|---|
| 367 | + difference = (new_selector - old_selector) * rdev->desc->uV_step / 1000; |
|---|
| 424 | 368 | if (difference > 0) |
|---|
| 425 | 369 | return DIV_ROUND_UP(difference, (val & 0x0f) + 1); |
|---|
| 426 | 370 | |
|---|
| 427 | 371 | return 0; |
|---|
| 428 | 372 | } |
|---|
| 429 | 373 | |
|---|
| 430 | | -static struct regulator_ops max8998_ldo_ops = { |
|---|
| 374 | +static int max8998_set_current_limit(struct regulator_dev *rdev, |
|---|
| 375 | + int min_uA, int max_uA) |
|---|
| 376 | +{ |
|---|
| 377 | + struct max8998_data *max8998 = rdev_get_drvdata(rdev); |
|---|
| 378 | + struct i2c_client *i2c = max8998->iodev->i2c; |
|---|
| 379 | + unsigned int n_currents = rdev->desc->n_current_limits; |
|---|
| 380 | + int i, sel = -1; |
|---|
| 381 | + |
|---|
| 382 | + if (n_currents == 0) |
|---|
| 383 | + return -EINVAL; |
|---|
| 384 | + |
|---|
| 385 | + if (rdev->desc->curr_table) { |
|---|
| 386 | + const unsigned int *curr_table = rdev->desc->curr_table; |
|---|
| 387 | + bool ascend = curr_table[n_currents - 1] > curr_table[0]; |
|---|
| 388 | + |
|---|
| 389 | + /* search for closest to maximum */ |
|---|
| 390 | + if (ascend) { |
|---|
| 391 | + for (i = n_currents - 1; i >= 0; i--) { |
|---|
| 392 | + if (min_uA <= curr_table[i] && |
|---|
| 393 | + curr_table[i] <= max_uA) { |
|---|
| 394 | + sel = i; |
|---|
| 395 | + break; |
|---|
| 396 | + } |
|---|
| 397 | + } |
|---|
| 398 | + } else { |
|---|
| 399 | + for (i = 0; i < n_currents; i++) { |
|---|
| 400 | + if (min_uA <= curr_table[i] && |
|---|
| 401 | + curr_table[i] <= max_uA) { |
|---|
| 402 | + sel = i; |
|---|
| 403 | + break; |
|---|
| 404 | + } |
|---|
| 405 | + } |
|---|
| 406 | + } |
|---|
| 407 | + } |
|---|
| 408 | + |
|---|
| 409 | + if (sel < 0) |
|---|
| 410 | + return -EINVAL; |
|---|
| 411 | + |
|---|
| 412 | + sel <<= ffs(rdev->desc->csel_mask) - 1; |
|---|
| 413 | + |
|---|
| 414 | + return max8998_update_reg(i2c, rdev->desc->csel_reg, |
|---|
| 415 | + sel, rdev->desc->csel_mask); |
|---|
| 416 | +} |
|---|
| 417 | + |
|---|
| 418 | +static int max8998_get_current_limit(struct regulator_dev *rdev) |
|---|
| 419 | +{ |
|---|
| 420 | + struct max8998_data *max8998 = rdev_get_drvdata(rdev); |
|---|
| 421 | + struct i2c_client *i2c = max8998->iodev->i2c; |
|---|
| 422 | + u8 val; |
|---|
| 423 | + int ret; |
|---|
| 424 | + |
|---|
| 425 | + ret = max8998_read_reg(i2c, rdev->desc->csel_reg, &val); |
|---|
| 426 | + if (ret != 0) |
|---|
| 427 | + return ret; |
|---|
| 428 | + |
|---|
| 429 | + val &= rdev->desc->csel_mask; |
|---|
| 430 | + val >>= ffs(rdev->desc->csel_mask) - 1; |
|---|
| 431 | + |
|---|
| 432 | + if (rdev->desc->curr_table) { |
|---|
| 433 | + if (val >= rdev->desc->n_current_limits) |
|---|
| 434 | + return -EINVAL; |
|---|
| 435 | + |
|---|
| 436 | + return rdev->desc->curr_table[val]; |
|---|
| 437 | + } |
|---|
| 438 | + |
|---|
| 439 | + return -EINVAL; |
|---|
| 440 | +} |
|---|
| 441 | + |
|---|
| 442 | +static const struct regulator_ops max8998_ldo_ops = { |
|---|
| 431 | 443 | .list_voltage = regulator_list_voltage_linear, |
|---|
| 432 | 444 | .map_voltage = regulator_map_voltage_linear, |
|---|
| 433 | 445 | .is_enabled = max8998_ldo_is_enabled, |
|---|
| .. | .. |
|---|
| 437 | 449 | .set_voltage_sel = max8998_set_voltage_ldo_sel, |
|---|
| 438 | 450 | }; |
|---|
| 439 | 451 | |
|---|
| 440 | | -static struct regulator_ops max8998_buck_ops = { |
|---|
| 452 | +static const struct regulator_ops max8998_buck_ops = { |
|---|
| 441 | 453 | .list_voltage = regulator_list_voltage_linear, |
|---|
| 442 | 454 | .map_voltage = regulator_map_voltage_linear, |
|---|
| 443 | 455 | .is_enabled = max8998_ldo_is_enabled, |
|---|
| .. | .. |
|---|
| 448 | 460 | .set_voltage_time_sel = max8998_set_voltage_buck_time_sel, |
|---|
| 449 | 461 | }; |
|---|
| 450 | 462 | |
|---|
| 451 | | -static struct regulator_ops max8998_others_ops = { |
|---|
| 463 | +static const struct regulator_ops max8998_charger_ops = { |
|---|
| 464 | + .set_current_limit = max8998_set_current_limit, |
|---|
| 465 | + .get_current_limit = max8998_get_current_limit, |
|---|
| 466 | + .is_enabled = max8998_ldo_is_enabled_inverted, |
|---|
| 467 | + /* Swapped as register is inverted */ |
|---|
| 468 | + .enable = max8998_ldo_disable, |
|---|
| 469 | + .disable = max8998_ldo_enable, |
|---|
| 470 | +}; |
|---|
| 471 | + |
|---|
| 472 | +static const struct regulator_ops max8998_others_ops = { |
|---|
| 452 | 473 | .is_enabled = max8998_ldo_is_enabled, |
|---|
| 453 | 474 | .enable = max8998_ldo_enable, |
|---|
| 454 | 475 | .disable = max8998_ldo_disable, |
|---|
| 455 | 476 | }; |
|---|
| 456 | 477 | |
|---|
| 457 | | -static struct regulator_desc regulators[] = { |
|---|
| 458 | | - { |
|---|
| 459 | | - .name = "LDO2", |
|---|
| 460 | | - .id = MAX8998_LDO2, |
|---|
| 461 | | - .ops = &max8998_ldo_ops, |
|---|
| 462 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 463 | | - .owner = THIS_MODULE, |
|---|
| 464 | | - }, { |
|---|
| 465 | | - .name = "LDO3", |
|---|
| 466 | | - .id = MAX8998_LDO3, |
|---|
| 467 | | - .ops = &max8998_ldo_ops, |
|---|
| 468 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 469 | | - .owner = THIS_MODULE, |
|---|
| 470 | | - }, { |
|---|
| 471 | | - .name = "LDO4", |
|---|
| 472 | | - .id = MAX8998_LDO4, |
|---|
| 473 | | - .ops = &max8998_ldo_ops, |
|---|
| 474 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 475 | | - .owner = THIS_MODULE, |
|---|
| 476 | | - }, { |
|---|
| 477 | | - .name = "LDO5", |
|---|
| 478 | | - .id = MAX8998_LDO5, |
|---|
| 479 | | - .ops = &max8998_ldo_ops, |
|---|
| 480 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 481 | | - .owner = THIS_MODULE, |
|---|
| 482 | | - }, { |
|---|
| 483 | | - .name = "LDO6", |
|---|
| 484 | | - .id = MAX8998_LDO6, |
|---|
| 485 | | - .ops = &max8998_ldo_ops, |
|---|
| 486 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 487 | | - .owner = THIS_MODULE, |
|---|
| 488 | | - }, { |
|---|
| 489 | | - .name = "LDO7", |
|---|
| 490 | | - .id = MAX8998_LDO7, |
|---|
| 491 | | - .ops = &max8998_ldo_ops, |
|---|
| 492 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 493 | | - .owner = THIS_MODULE, |
|---|
| 494 | | - }, { |
|---|
| 495 | | - .name = "LDO8", |
|---|
| 496 | | - .id = MAX8998_LDO8, |
|---|
| 497 | | - .ops = &max8998_ldo_ops, |
|---|
| 498 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 499 | | - .owner = THIS_MODULE, |
|---|
| 500 | | - }, { |
|---|
| 501 | | - .name = "LDO9", |
|---|
| 502 | | - .id = MAX8998_LDO9, |
|---|
| 503 | | - .ops = &max8998_ldo_ops, |
|---|
| 504 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 505 | | - .owner = THIS_MODULE, |
|---|
| 506 | | - }, { |
|---|
| 507 | | - .name = "LDO10", |
|---|
| 508 | | - .id = MAX8998_LDO10, |
|---|
| 509 | | - .ops = &max8998_ldo_ops, |
|---|
| 510 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 511 | | - .owner = THIS_MODULE, |
|---|
| 512 | | - }, { |
|---|
| 513 | | - .name = "LDO11", |
|---|
| 514 | | - .id = MAX8998_LDO11, |
|---|
| 515 | | - .ops = &max8998_ldo_ops, |
|---|
| 516 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 517 | | - .owner = THIS_MODULE, |
|---|
| 518 | | - }, { |
|---|
| 519 | | - .name = "LDO12", |
|---|
| 520 | | - .id = MAX8998_LDO12, |
|---|
| 521 | | - .ops = &max8998_ldo_ops, |
|---|
| 522 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 523 | | - .owner = THIS_MODULE, |
|---|
| 524 | | - }, { |
|---|
| 525 | | - .name = "LDO13", |
|---|
| 526 | | - .id = MAX8998_LDO13, |
|---|
| 527 | | - .ops = &max8998_ldo_ops, |
|---|
| 528 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 529 | | - .owner = THIS_MODULE, |
|---|
| 530 | | - }, { |
|---|
| 531 | | - .name = "LDO14", |
|---|
| 532 | | - .id = MAX8998_LDO14, |
|---|
| 533 | | - .ops = &max8998_ldo_ops, |
|---|
| 534 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 535 | | - .owner = THIS_MODULE, |
|---|
| 536 | | - }, { |
|---|
| 537 | | - .name = "LDO15", |
|---|
| 538 | | - .id = MAX8998_LDO15, |
|---|
| 539 | | - .ops = &max8998_ldo_ops, |
|---|
| 540 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 541 | | - .owner = THIS_MODULE, |
|---|
| 542 | | - }, { |
|---|
| 543 | | - .name = "LDO16", |
|---|
| 544 | | - .id = MAX8998_LDO16, |
|---|
| 545 | | - .ops = &max8998_ldo_ops, |
|---|
| 546 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 547 | | - .owner = THIS_MODULE, |
|---|
| 548 | | - }, { |
|---|
| 549 | | - .name = "LDO17", |
|---|
| 550 | | - .id = MAX8998_LDO17, |
|---|
| 551 | | - .ops = &max8998_ldo_ops, |
|---|
| 552 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 553 | | - .owner = THIS_MODULE, |
|---|
| 554 | | - }, { |
|---|
| 555 | | - .name = "BUCK1", |
|---|
| 556 | | - .id = MAX8998_BUCK1, |
|---|
| 557 | | - .ops = &max8998_buck_ops, |
|---|
| 558 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 559 | | - .owner = THIS_MODULE, |
|---|
| 560 | | - }, { |
|---|
| 561 | | - .name = "BUCK2", |
|---|
| 562 | | - .id = MAX8998_BUCK2, |
|---|
| 563 | | - .ops = &max8998_buck_ops, |
|---|
| 564 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 565 | | - .owner = THIS_MODULE, |
|---|
| 566 | | - }, { |
|---|
| 567 | | - .name = "BUCK3", |
|---|
| 568 | | - .id = MAX8998_BUCK3, |
|---|
| 569 | | - .ops = &max8998_buck_ops, |
|---|
| 570 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 571 | | - .owner = THIS_MODULE, |
|---|
| 572 | | - }, { |
|---|
| 573 | | - .name = "BUCK4", |
|---|
| 574 | | - .id = MAX8998_BUCK4, |
|---|
| 575 | | - .ops = &max8998_buck_ops, |
|---|
| 576 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 577 | | - .owner = THIS_MODULE, |
|---|
| 578 | | - }, { |
|---|
| 579 | | - .name = "EN32KHz-AP", |
|---|
| 580 | | - .id = MAX8998_EN32KHZ_AP, |
|---|
| 581 | | - .ops = &max8998_others_ops, |
|---|
| 582 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 583 | | - .owner = THIS_MODULE, |
|---|
| 584 | | - }, { |
|---|
| 585 | | - .name = "EN32KHz-CP", |
|---|
| 586 | | - .id = MAX8998_EN32KHZ_CP, |
|---|
| 587 | | - .ops = &max8998_others_ops, |
|---|
| 588 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 589 | | - .owner = THIS_MODULE, |
|---|
| 590 | | - }, { |
|---|
| 591 | | - .name = "ENVICHG", |
|---|
| 592 | | - .id = MAX8998_ENVICHG, |
|---|
| 593 | | - .ops = &max8998_others_ops, |
|---|
| 594 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 595 | | - .owner = THIS_MODULE, |
|---|
| 596 | | - }, { |
|---|
| 597 | | - .name = "ESAFEOUT1", |
|---|
| 598 | | - .id = MAX8998_ESAFEOUT1, |
|---|
| 599 | | - .ops = &max8998_others_ops, |
|---|
| 600 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 601 | | - .owner = THIS_MODULE, |
|---|
| 602 | | - }, { |
|---|
| 603 | | - .name = "ESAFEOUT2", |
|---|
| 604 | | - .id = MAX8998_ESAFEOUT2, |
|---|
| 605 | | - .ops = &max8998_others_ops, |
|---|
| 606 | | - .type = REGULATOR_VOLTAGE, |
|---|
| 607 | | - .owner = THIS_MODULE, |
|---|
| 478 | +#define MAX8998_LINEAR_REG(_name, _ops, _min, _step, _max) \ |
|---|
| 479 | + { \ |
|---|
| 480 | + .name = #_name, \ |
|---|
| 481 | + .id = MAX8998_##_name, \ |
|---|
| 482 | + .ops = _ops, \ |
|---|
| 483 | + .min_uV = (_min), \ |
|---|
| 484 | + .uV_step = (_step), \ |
|---|
| 485 | + .n_voltages = ((_max) - (_min)) / (_step) + 1, \ |
|---|
| 486 | + .type = REGULATOR_VOLTAGE, \ |
|---|
| 487 | + .owner = THIS_MODULE, \ |
|---|
| 608 | 488 | } |
|---|
| 489 | + |
|---|
| 490 | +#define MAX8998_CURRENT_REG(_name, _ops, _table, _reg, _mask) \ |
|---|
| 491 | + { \ |
|---|
| 492 | + .name = #_name, \ |
|---|
| 493 | + .id = MAX8998_##_name, \ |
|---|
| 494 | + .ops = _ops, \ |
|---|
| 495 | + .curr_table = _table, \ |
|---|
| 496 | + .n_current_limits = ARRAY_SIZE(_table), \ |
|---|
| 497 | + .csel_reg = _reg, \ |
|---|
| 498 | + .csel_mask = _mask, \ |
|---|
| 499 | + .type = REGULATOR_CURRENT, \ |
|---|
| 500 | + .owner = THIS_MODULE, \ |
|---|
| 501 | + } |
|---|
| 502 | + |
|---|
| 503 | +#define MAX8998_OTHERS_REG(_name, _id) \ |
|---|
| 504 | + { \ |
|---|
| 505 | + .name = #_name, \ |
|---|
| 506 | + .id = _id, \ |
|---|
| 507 | + .ops = &max8998_others_ops, \ |
|---|
| 508 | + .type = REGULATOR_VOLTAGE, \ |
|---|
| 509 | + .owner = THIS_MODULE, \ |
|---|
| 510 | + } |
|---|
| 511 | + |
|---|
| 512 | +static const struct regulator_desc regulators[] = { |
|---|
| 513 | + MAX8998_LINEAR_REG(LDO2, &max8998_ldo_ops, 800000, 50000, 1300000), |
|---|
| 514 | + MAX8998_LINEAR_REG(LDO3, &max8998_ldo_ops, 800000, 50000, 1300000), |
|---|
| 515 | + MAX8998_LINEAR_REG(LDO4, &max8998_ldo_ops, 1600000, 100000, 3600000), |
|---|
| 516 | + MAX8998_LINEAR_REG(LDO5, &max8998_ldo_ops, 1600000, 100000, 3600000), |
|---|
| 517 | + MAX8998_LINEAR_REG(LDO6, &max8998_ldo_ops, 1600000, 100000, 3600000), |
|---|
| 518 | + MAX8998_LINEAR_REG(LDO7, &max8998_ldo_ops, 1600000, 100000, 3600000), |
|---|
| 519 | + MAX8998_LINEAR_REG(LDO8, &max8998_ldo_ops, 3000000, 100000, 3600000), |
|---|
| 520 | + MAX8998_LINEAR_REG(LDO9, &max8998_ldo_ops, 2800000, 100000, 3100000), |
|---|
| 521 | + MAX8998_LINEAR_REG(LDO10, &max8998_ldo_ops, 950000, 50000, 1300000), |
|---|
| 522 | + MAX8998_LINEAR_REG(LDO11, &max8998_ldo_ops, 1600000, 100000, 3600000), |
|---|
| 523 | + MAX8998_LINEAR_REG(LDO12, &max8998_ldo_ops, 800000, 100000, 3300000), |
|---|
| 524 | + MAX8998_LINEAR_REG(LDO13, &max8998_ldo_ops, 800000, 100000, 3300000), |
|---|
| 525 | + MAX8998_LINEAR_REG(LDO14, &max8998_ldo_ops, 1200000, 100000, 3300000), |
|---|
| 526 | + MAX8998_LINEAR_REG(LDO15, &max8998_ldo_ops, 1200000, 100000, 3300000), |
|---|
| 527 | + MAX8998_LINEAR_REG(LDO16, &max8998_ldo_ops, 1600000, 100000, 3600000), |
|---|
| 528 | + MAX8998_LINEAR_REG(LDO17, &max8998_ldo_ops, 1600000, 100000, 3600000), |
|---|
| 529 | + MAX8998_LINEAR_REG(BUCK1, &max8998_buck_ops, 750000, 25000, 1525000), |
|---|
| 530 | + MAX8998_LINEAR_REG(BUCK2, &max8998_buck_ops, 750000, 25000, 1525000), |
|---|
| 531 | + MAX8998_LINEAR_REG(BUCK3, &max8998_buck_ops, 1600000, 100000, 3600000), |
|---|
| 532 | + MAX8998_LINEAR_REG(BUCK4, &max8998_buck_ops, 800000, 100000, 2300000), |
|---|
| 533 | + MAX8998_OTHERS_REG(EN32KHz-AP, MAX8998_EN32KHZ_AP), |
|---|
| 534 | + MAX8998_OTHERS_REG(EN32KHz-CP, MAX8998_EN32KHZ_CP), |
|---|
| 535 | + MAX8998_OTHERS_REG(ENVICHG, MAX8998_ENVICHG), |
|---|
| 536 | + MAX8998_OTHERS_REG(ESAFEOUT1, MAX8998_ESAFEOUT1), |
|---|
| 537 | + MAX8998_OTHERS_REG(ESAFEOUT2, MAX8998_ESAFEOUT2), |
|---|
| 538 | + MAX8998_CURRENT_REG(CHARGER, &max8998_charger_ops, |
|---|
| 539 | + charger_current_table, MAX8998_REG_CHGR1, 0x7), |
|---|
| 609 | 540 | }; |
|---|
| 610 | 541 | |
|---|
| 611 | 542 | static int max8998_pmic_dt_parse_dvs_gpio(struct max8998_dev *iodev, |
|---|
| .. | .. |
|---|
| 796 | 727 | |
|---|
| 797 | 728 | /* Set predefined values for BUCK1 registers */ |
|---|
| 798 | 729 | for (v = 0; v < ARRAY_SIZE(pdata->buck1_voltage); ++v) { |
|---|
| 730 | + int index = MAX8998_BUCK1 - MAX8998_LDO2; |
|---|
| 731 | + |
|---|
| 799 | 732 | i = 0; |
|---|
| 800 | | - while (buck12_voltage_map_desc.min + |
|---|
| 801 | | - buck12_voltage_map_desc.step*i |
|---|
| 733 | + while (regulators[index].min_uV + |
|---|
| 734 | + regulators[index].uV_step * i |
|---|
| 802 | 735 | < pdata->buck1_voltage[v]) |
|---|
| 803 | 736 | i++; |
|---|
| 804 | 737 | |
|---|
| .. | .. |
|---|
| 824 | 757 | |
|---|
| 825 | 758 | /* Set predefined values for BUCK2 registers */ |
|---|
| 826 | 759 | for (v = 0; v < ARRAY_SIZE(pdata->buck2_voltage); ++v) { |
|---|
| 760 | + int index = MAX8998_BUCK2 - MAX8998_LDO2; |
|---|
| 761 | + |
|---|
| 827 | 762 | i = 0; |
|---|
| 828 | | - while (buck12_voltage_map_desc.min + |
|---|
| 829 | | - buck12_voltage_map_desc.step*i |
|---|
| 763 | + while (regulators[index].min_uV + |
|---|
| 764 | + regulators[index].uV_step * i |
|---|
| 830 | 765 | < pdata->buck2_voltage[v]) |
|---|
| 831 | 766 | i++; |
|---|
| 832 | 767 | |
|---|
| .. | .. |
|---|
| 839 | 774 | } |
|---|
| 840 | 775 | |
|---|
| 841 | 776 | for (i = 0; i < pdata->num_regulators; i++) { |
|---|
| 842 | | - const struct voltage_map_desc *desc; |
|---|
| 843 | | - int id = pdata->regulators[i].id; |
|---|
| 844 | | - int index = id - MAX8998_LDO2; |
|---|
| 845 | | - |
|---|
| 846 | | - desc = ldo_voltage_map[id]; |
|---|
| 847 | | - if (desc && regulators[index].ops != &max8998_others_ops) { |
|---|
| 848 | | - int count = (desc->max - desc->min) / desc->step + 1; |
|---|
| 849 | | - |
|---|
| 850 | | - regulators[index].n_voltages = count; |
|---|
| 851 | | - regulators[index].min_uV = desc->min; |
|---|
| 852 | | - regulators[index].uV_step = desc->step; |
|---|
| 853 | | - } |
|---|
| 777 | + int index = pdata->regulators[i].id - MAX8998_LDO2; |
|---|
| 854 | 778 | |
|---|
| 855 | 779 | config.dev = max8998->dev; |
|---|
| 856 | 780 | config.of_node = pdata->regulators[i].reg_node; |
|---|
| .. | .. |
|---|
| 866 | 790 | return ret; |
|---|
| 867 | 791 | } |
|---|
| 868 | 792 | } |
|---|
| 869 | | - |
|---|
| 870 | 793 | |
|---|
| 871 | 794 | return 0; |
|---|
| 872 | 795 | } |
|---|