diff options
author | Guenter Roeck <linux@roeck-us.net> | 2015-08-17 10:21:43 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2015-08-17 19:36:00 -0400 |
commit | 228b687d9e20f367e4d5ea8723e3abbf0892db61 (patch) | |
tree | 60b86be18f02776b10abb1cb71db3414aa25bbfa /drivers/hwmon/pmbus | |
parent | 52aae6af71e0e78e25c64e13266917bb323984d5 (diff) |
hwmon: (ltc2978) Add support for LTC3886
LTC3886 is a is a dual PolyPhase DC/DC synchronous step-down switching
regulator controller. It is mostly command compatible to LTC3883,
but supports two phases instead of one.
Suggested-by: Michael Jones <mike@proclivis.com>
Tested-by: Michael Jones <mike@proclivis.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon/pmbus')
-rw-r--r-- | drivers/hwmon/pmbus/Kconfig | 2 | ||||
-rw-r--r-- | drivers/hwmon/pmbus/ltc2978.c | 24 |
2 files changed, 23 insertions, 3 deletions
diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig index af778aed4033..5ebc36255c88 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig | |||
@@ -53,7 +53,7 @@ config SENSORS_LTC2978 | |||
53 | help | 53 | help |
54 | If you say yes here you get hardware monitoring support for Linear | 54 | If you say yes here you get hardware monitoring support for Linear |
55 | Technology LTC2974, LTC2975, LTC2977, LTC2978, LTC2980, LTC3880, | 55 | Technology LTC2974, LTC2975, LTC2977, LTC2978, LTC2980, LTC3880, |
56 | LTC3883, LTC3887, LTCM2987, and LTM4676. | 56 | LTC3883, LTC3886, LTC3887, LTCM2987, and LTM4676. |
57 | 57 | ||
58 | This driver can also be built as a module. If so, the module will | 58 | This driver can also be built as a module. If so, the module will |
59 | be called ltc2978. | 59 | be called ltc2978. |
diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c index 48dcde0bc740..60fe8f9839d3 100644 --- a/drivers/hwmon/pmbus/ltc2978.c +++ b/drivers/hwmon/pmbus/ltc2978.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include "pmbus.h" | 25 | #include "pmbus.h" |
26 | 26 | ||
27 | enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882, | 27 | enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882, |
28 | ltc3883, ltc3887, ltm2987, ltm4676 }; | 28 | ltc3883, ltc3886, ltc3887, ltm2987, ltm4676 }; |
29 | 29 | ||
30 | /* Common for all chips */ | 30 | /* Common for all chips */ |
31 | #define LTC2978_MFR_VOUT_PEAK 0xdd | 31 | #define LTC2978_MFR_VOUT_PEAK 0xdd |
@@ -47,7 +47,7 @@ enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882, | |||
47 | #define LTC3880_MFR_CLEAR_PEAKS 0xe3 | 47 | #define LTC3880_MFR_CLEAR_PEAKS 0xe3 |
48 | #define LTC3880_MFR_TEMPERATURE2_PEAK 0xf4 | 48 | #define LTC3880_MFR_TEMPERATURE2_PEAK 0xf4 |
49 | 49 | ||
50 | /* LTC3883 only */ | 50 | /* LTC3883 and LTC3886 only */ |
51 | #define LTC3883_MFR_IIN_PEAK 0xe1 | 51 | #define LTC3883_MFR_IIN_PEAK 0xe1 |
52 | 52 | ||
53 | /* LTC2975 only */ | 53 | /* LTC2975 only */ |
@@ -69,6 +69,7 @@ enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882, | |||
69 | #define LTC3882_ID 0x4200 | 69 | #define LTC3882_ID 0x4200 |
70 | #define LTC3882_ID_D1 0x4240 /* Dash 1 */ | 70 | #define LTC3882_ID_D1 0x4240 /* Dash 1 */ |
71 | #define LTC3883_ID 0x4300 | 71 | #define LTC3883_ID 0x4300 |
72 | #define LTC3886_ID 0x4600 | ||
72 | #define LTC3887_ID 0x4700 | 73 | #define LTC3887_ID 0x4700 |
73 | #define LTM2987_ID_A 0x8010 /* A/B for two die IDs */ | 74 | #define LTM2987_ID_A 0x8010 /* A/B for two die IDs */ |
74 | #define LTM2987_ID_B 0x8020 | 75 | #define LTM2987_ID_B 0x8020 |
@@ -417,6 +418,7 @@ static const struct i2c_device_id ltc2978_id[] = { | |||
417 | {"ltc3880", ltc3880}, | 418 | {"ltc3880", ltc3880}, |
418 | {"ltc3882", ltc3882}, | 419 | {"ltc3882", ltc3882}, |
419 | {"ltc3883", ltc3883}, | 420 | {"ltc3883", ltc3883}, |
421 | {"ltc3886", ltc3886}, | ||
420 | {"ltc3887", ltc3887}, | 422 | {"ltc3887", ltc3887}, |
421 | {"ltm2987", ltm2987}, | 423 | {"ltm2987", ltm2987}, |
422 | {"ltm4676", ltm4676}, | 424 | {"ltm4676", ltm4676}, |
@@ -485,6 +487,8 @@ static int ltc2978_get_id(struct i2c_client *client) | |||
485 | return ltc3882; | 487 | return ltc3882; |
486 | else if (chip_id == LTC3883_ID) | 488 | else if (chip_id == LTC3883_ID) |
487 | return ltc3883; | 489 | return ltc3883; |
490 | else if (chip_id == LTC3886_ID) | ||
491 | return ltc3886; | ||
488 | else if (chip_id == LTC3887_ID) | 492 | else if (chip_id == LTC3887_ID) |
489 | return ltc3887; | 493 | return ltc3887; |
490 | else if (chip_id == LTM2987_ID_A || chip_id == LTM2987_ID_B) | 494 | else if (chip_id == LTM2987_ID_A || chip_id == LTM2987_ID_B) |
@@ -624,6 +628,21 @@ static int ltc2978_probe(struct i2c_client *client, | |||
624 | | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | PMBUS_HAVE_TEMP | 628 | | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | PMBUS_HAVE_TEMP |
625 | | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP; | 629 | | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP; |
626 | break; | 630 | break; |
631 | case ltc3886: | ||
632 | data->features |= FEAT_CLEAR_PEAKS; | ||
633 | info->read_word_data = ltc3883_read_word_data; | ||
634 | info->pages = LTC3880_NUM_PAGES; | ||
635 | info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | ||
636 | | PMBUS_HAVE_STATUS_INPUT | ||
637 | | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | ||
638 | | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | ||
639 | | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | PMBUS_HAVE_TEMP | ||
640 | | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP; | ||
641 | info->func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | ||
642 | | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | ||
643 | | PMBUS_HAVE_POUT | ||
644 | | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP; | ||
645 | break; | ||
627 | default: | 646 | default: |
628 | return -ENODEV; | 647 | return -ENODEV; |
629 | } | 648 | } |
@@ -650,6 +669,7 @@ static const struct of_device_id ltc2978_of_match[] = { | |||
650 | { .compatible = "lltc,ltc3880" }, | 669 | { .compatible = "lltc,ltc3880" }, |
651 | { .compatible = "lltc,ltc3882" }, | 670 | { .compatible = "lltc,ltc3882" }, |
652 | { .compatible = "lltc,ltc3883" }, | 671 | { .compatible = "lltc,ltc3883" }, |
672 | { .compatible = "lltc,ltc3886" }, | ||
653 | { .compatible = "lltc,ltc3887" }, | 673 | { .compatible = "lltc,ltc3887" }, |
654 | { .compatible = "lltc,ltm2987" }, | 674 | { .compatible = "lltc,ltm2987" }, |
655 | { .compatible = "lltc,ltm4676" }, | 675 | { .compatible = "lltc,ltm4676" }, |