| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Hardware monitoring driver for LTC2978 and compatible chips. |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright (c) 2011 Ericsson AB. |
|---|
| 5 | 6 | * Copyright (c) 2013, 2014, 2015 Guenter Roeck |
|---|
| 6 | 7 | * Copyright (c) 2015 Linear Technology |
|---|
| 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. |
|---|
| 8 | + * Copyright (c) 2018 Analog Devices Inc. |
|---|
| 17 | 9 | */ |
|---|
| 18 | 10 | |
|---|
| 19 | 11 | #include <linux/delay.h> |
|---|
| .. | .. |
|---|
| 27 | 19 | #include <linux/regulator/driver.h> |
|---|
| 28 | 20 | #include "pmbus.h" |
|---|
| 29 | 21 | |
|---|
| 30 | | -enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882, |
|---|
| 31 | | - ltc3883, ltc3886, ltc3887, ltm2987, ltm4675, ltm4676 }; |
|---|
| 22 | +enum chips { |
|---|
| 23 | + /* Managers */ |
|---|
| 24 | + ltc2972, ltc2974, ltc2975, ltc2977, ltc2978, ltc2979, ltc2980, |
|---|
| 25 | + /* Controllers */ |
|---|
| 26 | + ltc3880, ltc3882, ltc3883, ltc3884, ltc3886, ltc3887, ltc3889, ltc7880, |
|---|
| 27 | + /* Modules */ |
|---|
| 28 | + ltm2987, ltm4664, ltm4675, ltm4676, ltm4677, ltm4678, ltm4680, ltm4686, |
|---|
| 29 | + ltm4700, |
|---|
| 30 | +}; |
|---|
| 32 | 31 | |
|---|
| 33 | 32 | /* Common for all chips */ |
|---|
| 34 | 33 | #define LTC2978_MFR_VOUT_PEAK 0xdd |
|---|
| .. | .. |
|---|
| 51 | 50 | #define LTC3880_MFR_CLEAR_PEAKS 0xe3 |
|---|
| 52 | 51 | #define LTC3880_MFR_TEMPERATURE2_PEAK 0xf4 |
|---|
| 53 | 52 | |
|---|
| 54 | | -/* LTC3883 and LTC3886 only */ |
|---|
| 53 | +/* LTC3883, LTC3884, LTC3886, LTC3889 and LTC7880 only */ |
|---|
| 55 | 54 | #define LTC3883_MFR_IIN_PEAK 0xe1 |
|---|
| 55 | + |
|---|
| 56 | 56 | |
|---|
| 57 | 57 | /* LTC2975 only */ |
|---|
| 58 | 58 | #define LTC2975_MFR_IIN_PEAK 0xc4 |
|---|
| .. | .. |
|---|
| 62 | 62 | |
|---|
| 63 | 63 | #define LTC2978_ID_MASK 0xfff0 |
|---|
| 64 | 64 | |
|---|
| 65 | +#define LTC2972_ID 0x0310 |
|---|
| 65 | 66 | #define LTC2974_ID 0x0210 |
|---|
| 66 | 67 | #define LTC2975_ID 0x0220 |
|---|
| 67 | 68 | #define LTC2977_ID 0x0130 |
|---|
| 68 | 69 | #define LTC2978_ID_REV1 0x0110 /* Early revision */ |
|---|
| 69 | 70 | #define LTC2978_ID_REV2 0x0120 |
|---|
| 71 | +#define LTC2979_ID_A 0x8060 |
|---|
| 72 | +#define LTC2979_ID_B 0x8070 |
|---|
| 70 | 73 | #define LTC2980_ID_A 0x8030 /* A/B for two die IDs */ |
|---|
| 71 | 74 | #define LTC2980_ID_B 0x8040 |
|---|
| 72 | 75 | #define LTC3880_ID 0x4020 |
|---|
| 73 | 76 | #define LTC3882_ID 0x4200 |
|---|
| 74 | 77 | #define LTC3882_ID_D1 0x4240 /* Dash 1 */ |
|---|
| 75 | 78 | #define LTC3883_ID 0x4300 |
|---|
| 79 | +#define LTC3884_ID 0x4C00 |
|---|
| 76 | 80 | #define LTC3886_ID 0x4600 |
|---|
| 77 | 81 | #define LTC3887_ID 0x4700 |
|---|
| 78 | 82 | #define LTM2987_ID_A 0x8010 /* A/B for two die IDs */ |
|---|
| 79 | 83 | #define LTM2987_ID_B 0x8020 |
|---|
| 84 | +#define LTC3889_ID 0x4900 |
|---|
| 85 | +#define LTC7880_ID 0x49E0 |
|---|
| 86 | +#define LTM4664_ID 0x4120 |
|---|
| 80 | 87 | #define LTM4675_ID 0x47a0 |
|---|
| 81 | 88 | #define LTM4676_ID_REV1 0x4400 |
|---|
| 82 | 89 | #define LTM4676_ID_REV2 0x4480 |
|---|
| 83 | 90 | #define LTM4676A_ID 0x47e0 |
|---|
| 91 | +#define LTM4677_ID_REV1 0x47B0 |
|---|
| 92 | +#define LTM4677_ID_REV2 0x47D0 |
|---|
| 93 | +#define LTM4678_ID_REV1 0x4100 |
|---|
| 94 | +#define LTM4678_ID_REV2 0x4110 |
|---|
| 95 | +#define LTM4680_ID 0x4140 |
|---|
| 96 | +#define LTM4686_ID 0x4770 |
|---|
| 97 | +#define LTM4700_ID 0x4130 |
|---|
| 84 | 98 | |
|---|
| 99 | +#define LTC2972_NUM_PAGES 2 |
|---|
| 85 | 100 | #define LTC2974_NUM_PAGES 4 |
|---|
| 86 | 101 | #define LTC2978_NUM_PAGES 8 |
|---|
| 87 | 102 | #define LTC3880_NUM_PAGES 2 |
|---|
| .. | .. |
|---|
| 158 | 173 | return -ETIMEDOUT; |
|---|
| 159 | 174 | } |
|---|
| 160 | 175 | |
|---|
| 161 | | -static int ltc_read_word_data(struct i2c_client *client, int page, int reg) |
|---|
| 176 | +static int ltc_read_word_data(struct i2c_client *client, int page, int phase, |
|---|
| 177 | + int reg) |
|---|
| 162 | 178 | { |
|---|
| 163 | 179 | int ret; |
|---|
| 164 | 180 | |
|---|
| .. | .. |
|---|
| 166 | 182 | if (ret < 0) |
|---|
| 167 | 183 | return ret; |
|---|
| 168 | 184 | |
|---|
| 169 | | - return pmbus_read_word_data(client, page, reg); |
|---|
| 185 | + return pmbus_read_word_data(client, page, 0xff, reg); |
|---|
| 170 | 186 | } |
|---|
| 171 | 187 | |
|---|
| 172 | 188 | static int ltc_read_byte_data(struct i2c_client *client, int page, int reg) |
|---|
| .. | .. |
|---|
| 209 | 225 | { |
|---|
| 210 | 226 | int ret; |
|---|
| 211 | 227 | |
|---|
| 212 | | - ret = ltc_read_word_data(client, page, reg); |
|---|
| 228 | + ret = ltc_read_word_data(client, page, 0xff, reg); |
|---|
| 213 | 229 | if (ret >= 0) { |
|---|
| 214 | 230 | if (lin11_to_val(ret) > lin11_to_val(*pmax)) |
|---|
| 215 | 231 | *pmax = ret; |
|---|
| .. | .. |
|---|
| 223 | 239 | { |
|---|
| 224 | 240 | int ret; |
|---|
| 225 | 241 | |
|---|
| 226 | | - ret = ltc_read_word_data(client, page, reg); |
|---|
| 242 | + ret = ltc_read_word_data(client, page, 0xff, reg); |
|---|
| 227 | 243 | if (ret >= 0) { |
|---|
| 228 | 244 | if (lin11_to_val(ret) < lin11_to_val(*pmin)) |
|---|
| 229 | 245 | *pmin = ret; |
|---|
| .. | .. |
|---|
| 245 | 261 | &data->vin_max); |
|---|
| 246 | 262 | break; |
|---|
| 247 | 263 | case PMBUS_VIRT_READ_VOUT_MAX: |
|---|
| 248 | | - ret = ltc_read_word_data(client, page, LTC2978_MFR_VOUT_PEAK); |
|---|
| 264 | + ret = ltc_read_word_data(client, page, 0xff, |
|---|
| 265 | + LTC2978_MFR_VOUT_PEAK); |
|---|
| 249 | 266 | if (ret >= 0) { |
|---|
| 250 | 267 | /* |
|---|
| 251 | 268 | * VOUT is 16 bit unsigned with fixed exponent, |
|---|
| .. | .. |
|---|
| 276 | 293 | return ret; |
|---|
| 277 | 294 | } |
|---|
| 278 | 295 | |
|---|
| 279 | | -static int ltc2978_read_word_data(struct i2c_client *client, int page, int reg) |
|---|
| 296 | +static int ltc2978_read_word_data(struct i2c_client *client, int page, |
|---|
| 297 | + int phase, int reg) |
|---|
| 280 | 298 | { |
|---|
| 281 | 299 | const struct pmbus_driver_info *info = pmbus_get_driver_info(client); |
|---|
| 282 | 300 | struct ltc2978_data *data = to_ltc2978_data(info); |
|---|
| .. | .. |
|---|
| 288 | 306 | &data->vin_min); |
|---|
| 289 | 307 | break; |
|---|
| 290 | 308 | case PMBUS_VIRT_READ_VOUT_MIN: |
|---|
| 291 | | - ret = ltc_read_word_data(client, page, LTC2978_MFR_VOUT_MIN); |
|---|
| 309 | + ret = ltc_read_word_data(client, page, phase, |
|---|
| 310 | + LTC2978_MFR_VOUT_MIN); |
|---|
| 292 | 311 | if (ret >= 0) { |
|---|
| 293 | 312 | /* |
|---|
| 294 | 313 | * VOUT_MIN is known to not be supported on some lots |
|---|
| .. | .. |
|---|
| 321 | 340 | return ret; |
|---|
| 322 | 341 | } |
|---|
| 323 | 342 | |
|---|
| 324 | | -static int ltc2974_read_word_data(struct i2c_client *client, int page, int reg) |
|---|
| 343 | +static int ltc2974_read_word_data(struct i2c_client *client, int page, |
|---|
| 344 | + int phase, int reg) |
|---|
| 325 | 345 | { |
|---|
| 326 | 346 | const struct pmbus_driver_info *info = pmbus_get_driver_info(client); |
|---|
| 327 | 347 | struct ltc2978_data *data = to_ltc2978_data(info); |
|---|
| .. | .. |
|---|
| 340 | 360 | ret = 0; |
|---|
| 341 | 361 | break; |
|---|
| 342 | 362 | default: |
|---|
| 343 | | - ret = ltc2978_read_word_data(client, page, reg); |
|---|
| 363 | + ret = ltc2978_read_word_data(client, page, phase, reg); |
|---|
| 344 | 364 | break; |
|---|
| 345 | 365 | } |
|---|
| 346 | 366 | return ret; |
|---|
| 347 | 367 | } |
|---|
| 348 | 368 | |
|---|
| 349 | | -static int ltc2975_read_word_data(struct i2c_client *client, int page, int reg) |
|---|
| 369 | +static int ltc2975_read_word_data(struct i2c_client *client, int page, |
|---|
| 370 | + int phase, int reg) |
|---|
| 350 | 371 | { |
|---|
| 351 | 372 | const struct pmbus_driver_info *info = pmbus_get_driver_info(client); |
|---|
| 352 | 373 | struct ltc2978_data *data = to_ltc2978_data(info); |
|---|
| .. | .. |
|---|
| 374 | 395 | ret = 0; |
|---|
| 375 | 396 | break; |
|---|
| 376 | 397 | default: |
|---|
| 377 | | - ret = ltc2978_read_word_data(client, page, reg); |
|---|
| 398 | + ret = ltc2978_read_word_data(client, page, phase, reg); |
|---|
| 378 | 399 | break; |
|---|
| 379 | 400 | } |
|---|
| 380 | 401 | return ret; |
|---|
| 381 | 402 | } |
|---|
| 382 | 403 | |
|---|
| 383 | | -static int ltc3880_read_word_data(struct i2c_client *client, int page, int reg) |
|---|
| 404 | +static int ltc3880_read_word_data(struct i2c_client *client, int page, |
|---|
| 405 | + int phase, int reg) |
|---|
| 384 | 406 | { |
|---|
| 385 | 407 | const struct pmbus_driver_info *info = pmbus_get_driver_info(client); |
|---|
| 386 | 408 | struct ltc2978_data *data = to_ltc2978_data(info); |
|---|
| .. | .. |
|---|
| 412 | 434 | return ret; |
|---|
| 413 | 435 | } |
|---|
| 414 | 436 | |
|---|
| 415 | | -static int ltc3883_read_word_data(struct i2c_client *client, int page, int reg) |
|---|
| 437 | +static int ltc3883_read_word_data(struct i2c_client *client, int page, |
|---|
| 438 | + int phase, int reg) |
|---|
| 416 | 439 | { |
|---|
| 417 | 440 | const struct pmbus_driver_info *info = pmbus_get_driver_info(client); |
|---|
| 418 | 441 | struct ltc2978_data *data = to_ltc2978_data(info); |
|---|
| .. | .. |
|---|
| 427 | 450 | ret = 0; |
|---|
| 428 | 451 | break; |
|---|
| 429 | 452 | default: |
|---|
| 430 | | - ret = ltc3880_read_word_data(client, page, reg); |
|---|
| 453 | + ret = ltc3880_read_word_data(client, page, phase, reg); |
|---|
| 431 | 454 | break; |
|---|
| 432 | 455 | } |
|---|
| 433 | 456 | return ret; |
|---|
| .. | .. |
|---|
| 499 | 522 | } |
|---|
| 500 | 523 | |
|---|
| 501 | 524 | static const struct i2c_device_id ltc2978_id[] = { |
|---|
| 525 | + {"ltc2972", ltc2972}, |
|---|
| 502 | 526 | {"ltc2974", ltc2974}, |
|---|
| 503 | 527 | {"ltc2975", ltc2975}, |
|---|
| 504 | 528 | {"ltc2977", ltc2977}, |
|---|
| 505 | 529 | {"ltc2978", ltc2978}, |
|---|
| 530 | + {"ltc2979", ltc2979}, |
|---|
| 506 | 531 | {"ltc2980", ltc2980}, |
|---|
| 507 | 532 | {"ltc3880", ltc3880}, |
|---|
| 508 | 533 | {"ltc3882", ltc3882}, |
|---|
| 509 | 534 | {"ltc3883", ltc3883}, |
|---|
| 535 | + {"ltc3884", ltc3884}, |
|---|
| 510 | 536 | {"ltc3886", ltc3886}, |
|---|
| 511 | 537 | {"ltc3887", ltc3887}, |
|---|
| 538 | + {"ltc3889", ltc3889}, |
|---|
| 539 | + {"ltc7880", ltc7880}, |
|---|
| 512 | 540 | {"ltm2987", ltm2987}, |
|---|
| 541 | + {"ltm4664", ltm4664}, |
|---|
| 513 | 542 | {"ltm4675", ltm4675}, |
|---|
| 514 | 543 | {"ltm4676", ltm4676}, |
|---|
| 544 | + {"ltm4677", ltm4677}, |
|---|
| 545 | + {"ltm4678", ltm4678}, |
|---|
| 546 | + {"ltm4680", ltm4680}, |
|---|
| 547 | + {"ltm4686", ltm4686}, |
|---|
| 548 | + {"ltm4700", ltm4700}, |
|---|
| 515 | 549 | {} |
|---|
| 516 | 550 | }; |
|---|
| 517 | 551 | MODULE_DEVICE_TABLE(i2c, ltc2978_id); |
|---|
| .. | .. |
|---|
| 561 | 595 | |
|---|
| 562 | 596 | chip_id &= LTC2978_ID_MASK; |
|---|
| 563 | 597 | |
|---|
| 564 | | - if (chip_id == LTC2974_ID) |
|---|
| 598 | + if (chip_id == LTC2972_ID) |
|---|
| 599 | + return ltc2972; |
|---|
| 600 | + else if (chip_id == LTC2974_ID) |
|---|
| 565 | 601 | return ltc2974; |
|---|
| 566 | 602 | else if (chip_id == LTC2975_ID) |
|---|
| 567 | 603 | return ltc2975; |
|---|
| .. | .. |
|---|
| 569 | 605 | return ltc2977; |
|---|
| 570 | 606 | else if (chip_id == LTC2978_ID_REV1 || chip_id == LTC2978_ID_REV2) |
|---|
| 571 | 607 | return ltc2978; |
|---|
| 608 | + else if (chip_id == LTC2979_ID_A || chip_id == LTC2979_ID_B) |
|---|
| 609 | + return ltc2979; |
|---|
| 572 | 610 | else if (chip_id == LTC2980_ID_A || chip_id == LTC2980_ID_B) |
|---|
| 573 | 611 | return ltc2980; |
|---|
| 574 | 612 | else if (chip_id == LTC3880_ID) |
|---|
| .. | .. |
|---|
| 577 | 615 | return ltc3882; |
|---|
| 578 | 616 | else if (chip_id == LTC3883_ID) |
|---|
| 579 | 617 | return ltc3883; |
|---|
| 618 | + else if (chip_id == LTC3884_ID) |
|---|
| 619 | + return ltc3884; |
|---|
| 580 | 620 | else if (chip_id == LTC3886_ID) |
|---|
| 581 | 621 | return ltc3886; |
|---|
| 582 | 622 | else if (chip_id == LTC3887_ID) |
|---|
| 583 | 623 | return ltc3887; |
|---|
| 624 | + else if (chip_id == LTC3889_ID) |
|---|
| 625 | + return ltc3889; |
|---|
| 626 | + else if (chip_id == LTC7880_ID) |
|---|
| 627 | + return ltc7880; |
|---|
| 584 | 628 | else if (chip_id == LTM2987_ID_A || chip_id == LTM2987_ID_B) |
|---|
| 585 | 629 | return ltm2987; |
|---|
| 630 | + else if (chip_id == LTM4664_ID) |
|---|
| 631 | + return ltm4664; |
|---|
| 586 | 632 | else if (chip_id == LTM4675_ID) |
|---|
| 587 | 633 | return ltm4675; |
|---|
| 588 | 634 | else if (chip_id == LTM4676_ID_REV1 || chip_id == LTM4676_ID_REV2 || |
|---|
| 589 | 635 | chip_id == LTM4676A_ID) |
|---|
| 590 | 636 | return ltm4676; |
|---|
| 637 | + else if (chip_id == LTM4677_ID_REV1 || chip_id == LTM4677_ID_REV2) |
|---|
| 638 | + return ltm4677; |
|---|
| 639 | + else if (chip_id == LTM4678_ID_REV1 || chip_id == LTM4678_ID_REV2) |
|---|
| 640 | + return ltm4678; |
|---|
| 641 | + else if (chip_id == LTM4680_ID) |
|---|
| 642 | + return ltm4680; |
|---|
| 643 | + else if (chip_id == LTM4686_ID) |
|---|
| 644 | + return ltm4686; |
|---|
| 645 | + else if (chip_id == LTM4700_ID) |
|---|
| 646 | + return ltm4700; |
|---|
| 591 | 647 | |
|---|
| 592 | 648 | dev_err(&client->dev, "Unsupported chip ID 0x%x\n", chip_id); |
|---|
| 593 | 649 | return -ENODEV; |
|---|
| 594 | 650 | } |
|---|
| 595 | 651 | |
|---|
| 596 | | -static int ltc2978_probe(struct i2c_client *client, |
|---|
| 597 | | - const struct i2c_device_id *id) |
|---|
| 652 | +static int ltc2978_probe(struct i2c_client *client) |
|---|
| 598 | 653 | { |
|---|
| 599 | 654 | int i, chip_id; |
|---|
| 600 | 655 | struct ltc2978_data *data; |
|---|
| 601 | 656 | struct pmbus_driver_info *info; |
|---|
| 657 | + const struct i2c_device_id *id; |
|---|
| 602 | 658 | |
|---|
| 603 | 659 | if (!i2c_check_functionality(client->adapter, |
|---|
| 604 | 660 | I2C_FUNC_SMBUS_READ_WORD_DATA)) |
|---|
| .. | .. |
|---|
| 614 | 670 | return chip_id; |
|---|
| 615 | 671 | |
|---|
| 616 | 672 | data->id = chip_id; |
|---|
| 673 | + id = i2c_match_id(ltc2978_id, client); |
|---|
| 617 | 674 | if (data->id != id->driver_data) |
|---|
| 618 | 675 | dev_warn(&client->dev, |
|---|
| 619 | | - "Device mismatch: Configured %s, detected %s\n", |
|---|
| 676 | + "Device mismatch: Configured %s (%d), detected %d\n", |
|---|
| 620 | 677 | id->name, |
|---|
| 621 | | - ltc2978_id[data->id].name); |
|---|
| 678 | + (int) id->driver_data, |
|---|
| 679 | + chip_id); |
|---|
| 622 | 680 | |
|---|
| 623 | 681 | info = &data->info; |
|---|
| 624 | 682 | info->write_word_data = ltc2978_write_word_data; |
|---|
| .. | .. |
|---|
| 641 | 699 | data->temp2_max = 0x7c00; |
|---|
| 642 | 700 | |
|---|
| 643 | 701 | switch (data->id) { |
|---|
| 702 | + case ltc2972: |
|---|
| 703 | + info->read_word_data = ltc2975_read_word_data; |
|---|
| 704 | + info->pages = LTC2972_NUM_PAGES; |
|---|
| 705 | + info->func[0] = PMBUS_HAVE_IIN | PMBUS_HAVE_PIN |
|---|
| 706 | + | PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT |
|---|
| 707 | + | PMBUS_HAVE_TEMP2; |
|---|
| 708 | + for (i = 0; i < info->pages; i++) { |
|---|
| 709 | + info->func[i] |= PMBUS_HAVE_VOUT |
|---|
| 710 | + | PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_POUT |
|---|
| 711 | + | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP |
|---|
| 712 | + | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT; |
|---|
| 713 | + } |
|---|
| 714 | + break; |
|---|
| 644 | 715 | case ltc2974: |
|---|
| 645 | 716 | info->read_word_data = ltc2974_read_word_data; |
|---|
| 646 | 717 | info->pages = LTC2974_NUM_PAGES; |
|---|
| .. | .. |
|---|
| 666 | 737 | | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT; |
|---|
| 667 | 738 | } |
|---|
| 668 | 739 | break; |
|---|
| 740 | + |
|---|
| 669 | 741 | case ltc2977: |
|---|
| 670 | 742 | case ltc2978: |
|---|
| 743 | + case ltc2979: |
|---|
| 671 | 744 | case ltc2980: |
|---|
| 672 | 745 | case ltm2987: |
|---|
| 673 | 746 | info->read_word_data = ltc2978_read_word_data; |
|---|
| .. | .. |
|---|
| 684 | 757 | case ltc3887: |
|---|
| 685 | 758 | case ltm4675: |
|---|
| 686 | 759 | case ltm4676: |
|---|
| 760 | + case ltm4677: |
|---|
| 761 | + case ltm4686: |
|---|
| 687 | 762 | data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING; |
|---|
| 688 | 763 | info->read_word_data = ltc3880_read_word_data; |
|---|
| 689 | 764 | info->pages = LTC3880_NUM_PAGES; |
|---|
| .. | .. |
|---|
| 724 | 799 | | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | PMBUS_HAVE_TEMP |
|---|
| 725 | 800 | | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP; |
|---|
| 726 | 801 | break; |
|---|
| 802 | + case ltc3884: |
|---|
| 727 | 803 | case ltc3886: |
|---|
| 804 | + case ltc3889: |
|---|
| 805 | + case ltc7880: |
|---|
| 806 | + case ltm4664: |
|---|
| 807 | + case ltm4678: |
|---|
| 808 | + case ltm4680: |
|---|
| 809 | + case ltm4700: |
|---|
| 728 | 810 | data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING; |
|---|
| 729 | 811 | info->read_word_data = ltc3883_read_word_data; |
|---|
| 730 | 812 | info->pages = LTC3880_NUM_PAGES; |
|---|
| .. | .. |
|---|
| 752 | 834 | } |
|---|
| 753 | 835 | #endif |
|---|
| 754 | 836 | |
|---|
| 755 | | - return pmbus_do_probe(client, id, info); |
|---|
| 837 | + return pmbus_do_probe(client, info); |
|---|
| 756 | 838 | } |
|---|
| 839 | + |
|---|
| 757 | 840 | |
|---|
| 758 | 841 | #ifdef CONFIG_OF |
|---|
| 759 | 842 | static const struct of_device_id ltc2978_of_match[] = { |
|---|
| 843 | + { .compatible = "lltc,ltc2972" }, |
|---|
| 760 | 844 | { .compatible = "lltc,ltc2974" }, |
|---|
| 761 | 845 | { .compatible = "lltc,ltc2975" }, |
|---|
| 762 | 846 | { .compatible = "lltc,ltc2977" }, |
|---|
| 763 | 847 | { .compatible = "lltc,ltc2978" }, |
|---|
| 848 | + { .compatible = "lltc,ltc2979" }, |
|---|
| 764 | 849 | { .compatible = "lltc,ltc2980" }, |
|---|
| 765 | 850 | { .compatible = "lltc,ltc3880" }, |
|---|
| 766 | 851 | { .compatible = "lltc,ltc3882" }, |
|---|
| 767 | 852 | { .compatible = "lltc,ltc3883" }, |
|---|
| 853 | + { .compatible = "lltc,ltc3884" }, |
|---|
| 768 | 854 | { .compatible = "lltc,ltc3886" }, |
|---|
| 769 | 855 | { .compatible = "lltc,ltc3887" }, |
|---|
| 856 | + { .compatible = "lltc,ltc3889" }, |
|---|
| 857 | + { .compatible = "lltc,ltc7880" }, |
|---|
| 770 | 858 | { .compatible = "lltc,ltm2987" }, |
|---|
| 859 | + { .compatible = "lltc,ltm4664" }, |
|---|
| 771 | 860 | { .compatible = "lltc,ltm4675" }, |
|---|
| 772 | 861 | { .compatible = "lltc,ltm4676" }, |
|---|
| 862 | + { .compatible = "lltc,ltm4677" }, |
|---|
| 863 | + { .compatible = "lltc,ltm4678" }, |
|---|
| 864 | + { .compatible = "lltc,ltm4680" }, |
|---|
| 865 | + { .compatible = "lltc,ltm4686" }, |
|---|
| 866 | + { .compatible = "lltc,ltm4700" }, |
|---|
| 773 | 867 | { } |
|---|
| 774 | 868 | }; |
|---|
| 775 | 869 | MODULE_DEVICE_TABLE(of, ltc2978_of_match); |
|---|
| .. | .. |
|---|
| 780 | 874 | .name = "ltc2978", |
|---|
| 781 | 875 | .of_match_table = of_match_ptr(ltc2978_of_match), |
|---|
| 782 | 876 | }, |
|---|
| 783 | | - .probe = ltc2978_probe, |
|---|
| 877 | + .probe_new = ltc2978_probe, |
|---|
| 784 | 878 | .remove = pmbus_do_remove, |
|---|
| 785 | 879 | .id_table = ltc2978_id, |
|---|
| 786 | 880 | }; |
|---|
| .. | .. |
|---|
| 788 | 882 | module_i2c_driver(ltc2978_driver); |
|---|
| 789 | 883 | |
|---|
| 790 | 884 | MODULE_AUTHOR("Guenter Roeck"); |
|---|
| 791 | | -MODULE_DESCRIPTION("PMBus driver for LTC2978 and comppatible chips"); |
|---|
| 885 | +MODULE_DESCRIPTION("PMBus driver for LTC2978 and compatible chips"); |
|---|
| 792 | 886 | MODULE_LICENSE("GPL"); |
|---|