.. | .. |
---|
| 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"); |
---|