| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * TI LP8788 MFD - buck regulator driver |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright 2012 Texas Instruments |
|---|
| 5 | 6 | * |
|---|
| 6 | 7 | * Author: Milo(Woogyom) Kim <milo.kim@ti.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 version 2 as |
|---|
| 10 | | - * published by the Free Software Foundation. |
|---|
| 11 | | - * |
|---|
| 12 | 8 | */ |
|---|
| 13 | 9 | |
|---|
| 14 | 10 | #include <linux/module.h> |
|---|
| .. | .. |
|---|
| 95 | 91 | void *dvs; |
|---|
| 96 | 92 | }; |
|---|
| 97 | 93 | |
|---|
| 98 | | -/* BUCK 1 ~ 4 voltage table */ |
|---|
| 99 | | -static const int lp8788_buck_vtbl[] = { |
|---|
| 100 | | - 500000, 800000, 850000, 900000, 950000, 1000000, 1050000, 1100000, |
|---|
| 101 | | - 1150000, 1200000, 1250000, 1300000, 1350000, 1400000, 1450000, 1500000, |
|---|
| 102 | | - 1550000, 1600000, 1650000, 1700000, 1750000, 1800000, 1850000, 1900000, |
|---|
| 103 | | - 1950000, 2000000, |
|---|
| 94 | +/* BUCK 1 ~ 4 voltage ranges */ |
|---|
| 95 | +static const struct linear_range buck_volt_ranges[] = { |
|---|
| 96 | + REGULATOR_LINEAR_RANGE(500000, 0, 0, 0), |
|---|
| 97 | + REGULATOR_LINEAR_RANGE(800000, 1, 25, 50000), |
|---|
| 104 | 98 | }; |
|---|
| 105 | 99 | |
|---|
| 106 | 100 | static void lp8788_buck1_set_dvs(struct lp8788_buck *buck) |
|---|
| .. | .. |
|---|
| 345 | 339 | } |
|---|
| 346 | 340 | |
|---|
| 347 | 341 | static const struct regulator_ops lp8788_buck12_ops = { |
|---|
| 348 | | - .list_voltage = regulator_list_voltage_table, |
|---|
| 349 | | - .map_voltage = regulator_map_voltage_ascend, |
|---|
| 342 | + .list_voltage = regulator_list_voltage_linear_range, |
|---|
| 343 | + .map_voltage = regulator_map_voltage_linear_range, |
|---|
| 350 | 344 | .set_voltage_sel = lp8788_buck12_set_voltage_sel, |
|---|
| 351 | 345 | .get_voltage_sel = lp8788_buck12_get_voltage_sel, |
|---|
| 352 | 346 | .enable = regulator_enable_regmap, |
|---|
| .. | .. |
|---|
| 358 | 352 | }; |
|---|
| 359 | 353 | |
|---|
| 360 | 354 | static const struct regulator_ops lp8788_buck34_ops = { |
|---|
| 361 | | - .list_voltage = regulator_list_voltage_table, |
|---|
| 362 | | - .map_voltage = regulator_map_voltage_ascend, |
|---|
| 355 | + .list_voltage = regulator_list_voltage_linear_range, |
|---|
| 356 | + .map_voltage = regulator_map_voltage_linear_range, |
|---|
| 363 | 357 | .set_voltage_sel = regulator_set_voltage_sel_regmap, |
|---|
| 364 | 358 | .get_voltage_sel = regulator_get_voltage_sel_regmap, |
|---|
| 365 | 359 | .enable = regulator_enable_regmap, |
|---|
| .. | .. |
|---|
| 370 | 364 | .get_mode = lp8788_buck_get_mode, |
|---|
| 371 | 365 | }; |
|---|
| 372 | 366 | |
|---|
| 373 | | -static struct regulator_desc lp8788_buck_desc[] = { |
|---|
| 367 | +static const struct regulator_desc lp8788_buck_desc[] = { |
|---|
| 374 | 368 | { |
|---|
| 375 | 369 | .name = "buck1", |
|---|
| 376 | 370 | .id = BUCK1, |
|---|
| 377 | 371 | .ops = &lp8788_buck12_ops, |
|---|
| 378 | | - .n_voltages = ARRAY_SIZE(lp8788_buck_vtbl), |
|---|
| 379 | | - .volt_table = lp8788_buck_vtbl, |
|---|
| 372 | + .n_voltages = 26, |
|---|
| 373 | + .linear_ranges = buck_volt_ranges, |
|---|
| 374 | + .n_linear_ranges = ARRAY_SIZE(buck_volt_ranges), |
|---|
| 380 | 375 | .type = REGULATOR_VOLTAGE, |
|---|
| 381 | 376 | .owner = THIS_MODULE, |
|---|
| 382 | 377 | .enable_reg = LP8788_EN_BUCK, |
|---|
| .. | .. |
|---|
| 386 | 381 | .name = "buck2", |
|---|
| 387 | 382 | .id = BUCK2, |
|---|
| 388 | 383 | .ops = &lp8788_buck12_ops, |
|---|
| 389 | | - .n_voltages = ARRAY_SIZE(lp8788_buck_vtbl), |
|---|
| 390 | | - .volt_table = lp8788_buck_vtbl, |
|---|
| 384 | + .n_voltages = 26, |
|---|
| 385 | + .linear_ranges = buck_volt_ranges, |
|---|
| 386 | + .n_linear_ranges = ARRAY_SIZE(buck_volt_ranges), |
|---|
| 391 | 387 | .type = REGULATOR_VOLTAGE, |
|---|
| 392 | 388 | .owner = THIS_MODULE, |
|---|
| 393 | 389 | .enable_reg = LP8788_EN_BUCK, |
|---|
| .. | .. |
|---|
| 397 | 393 | .name = "buck3", |
|---|
| 398 | 394 | .id = BUCK3, |
|---|
| 399 | 395 | .ops = &lp8788_buck34_ops, |
|---|
| 400 | | - .n_voltages = ARRAY_SIZE(lp8788_buck_vtbl), |
|---|
| 401 | | - .volt_table = lp8788_buck_vtbl, |
|---|
| 396 | + .n_voltages = 26, |
|---|
| 397 | + .linear_ranges = buck_volt_ranges, |
|---|
| 398 | + .n_linear_ranges = ARRAY_SIZE(buck_volt_ranges), |
|---|
| 402 | 399 | .type = REGULATOR_VOLTAGE, |
|---|
| 403 | 400 | .owner = THIS_MODULE, |
|---|
| 404 | 401 | .vsel_reg = LP8788_BUCK3_VOUT, |
|---|
| .. | .. |
|---|
| 410 | 407 | .name = "buck4", |
|---|
| 411 | 408 | .id = BUCK4, |
|---|
| 412 | 409 | .ops = &lp8788_buck34_ops, |
|---|
| 413 | | - .n_voltages = ARRAY_SIZE(lp8788_buck_vtbl), |
|---|
| 414 | | - .volt_table = lp8788_buck_vtbl, |
|---|
| 410 | + .n_voltages = 26, |
|---|
| 411 | + .linear_ranges = buck_volt_ranges, |
|---|
| 412 | + .n_linear_ranges = ARRAY_SIZE(buck_volt_ranges), |
|---|
| 415 | 413 | .type = REGULATOR_VOLTAGE, |
|---|
| 416 | 414 | .owner = THIS_MODULE, |
|---|
| 417 | 415 | .vsel_reg = LP8788_BUCK4_VOUT, |
|---|