aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2013-09-23 13:56:48 -0400
committerGuenter Roeck <linux@roeck-us.net>2013-10-18 12:12:03 -0400
commitc24c407e963e73d3ad18b9bc0af32cf23f37a7b0 (patch)
treec9c9be213ffdc875f9db74d9371c53c96dec9b23 /drivers/hwmon
parentc8ccab7ab5c71b4fab274bfd18425503a4dcc288 (diff)
hwmon: (pmbus/ltc2978): Add support for LTC2977
LTC2977 is a pin compatible replacement for LTC2978. Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/pmbus/ltc2978.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c
index 586a89ef9e0f..e05ff565ef61 100644
--- a/drivers/hwmon/pmbus/ltc2978.c
+++ b/drivers/hwmon/pmbus/ltc2978.c
@@ -1,5 +1,6 @@
1/* 1/*
2 * Hardware monitoring driver for LTC2974, LTC2978, LTC3880, and LTC3883 2 * Hardware monitoring driver for LTC2974, LTC2977, LTC2978, LTC3880,
3 * and LTC3883
3 * 4 *
4 * Copyright (c) 2011 Ericsson AB. 5 * Copyright (c) 2011 Ericsson AB.
5 * Copyright (c) 2013 Guenter Roeck 6 * Copyright (c) 2013 Guenter Roeck
@@ -27,7 +28,7 @@
27#include <linux/i2c.h> 28#include <linux/i2c.h>
28#include "pmbus.h" 29#include "pmbus.h"
29 30
30enum chips { ltc2974, ltc2978, ltc3880, ltc3883 }; 31enum chips { ltc2974, ltc2977, ltc2978, ltc3880, ltc3883 };
31 32
32/* Common for all chips */ 33/* Common for all chips */
33#define LTC2978_MFR_VOUT_PEAK 0xdd 34#define LTC2978_MFR_VOUT_PEAK 0xdd
@@ -35,7 +36,7 @@ enum chips { ltc2974, ltc2978, ltc3880, ltc3883 };
35#define LTC2978_MFR_TEMPERATURE_PEAK 0xdf 36#define LTC2978_MFR_TEMPERATURE_PEAK 0xdf
36#define LTC2978_MFR_SPECIAL_ID 0xe7 37#define LTC2978_MFR_SPECIAL_ID 0xe7
37 38
38/* LTC2974 and LTC2978 */ 39/* LTC2974, LCT2977, and LTC2978 */
39#define LTC2978_MFR_VOUT_MIN 0xfb 40#define LTC2978_MFR_VOUT_MIN 0xfb
40#define LTC2978_MFR_VIN_MIN 0xfc 41#define LTC2978_MFR_VIN_MIN 0xfc
41#define LTC2978_MFR_TEMPERATURE_MIN 0xfd 42#define LTC2978_MFR_TEMPERATURE_MIN 0xfd
@@ -53,6 +54,7 @@ enum chips { ltc2974, ltc2978, ltc3880, ltc3883 };
53#define LTC3883_MFR_IIN_PEAK 0xe1 54#define LTC3883_MFR_IIN_PEAK 0xe1
54 55
55#define LTC2974_ID 0x0212 56#define LTC2974_ID 0x0212
57#define LTC2977_ID 0x0130
56#define LTC2978_ID_REV1 0x0121 58#define LTC2978_ID_REV1 0x0121
57#define LTC2978_ID_REV2 0x0122 59#define LTC2978_ID_REV2 0x0122
58#define LTC3880_ID 0x4000 60#define LTC3880_ID 0x4000
@@ -363,6 +365,7 @@ static int ltc2978_write_word_data(struct i2c_client *client, int page,
363 365
364static const struct i2c_device_id ltc2978_id[] = { 366static const struct i2c_device_id ltc2978_id[] = {
365 {"ltc2974", ltc2974}, 367 {"ltc2974", ltc2974},
368 {"ltc2977", ltc2977},
366 {"ltc2978", ltc2978}, 369 {"ltc2978", ltc2978},
367 {"ltc3880", ltc3880}, 370 {"ltc3880", ltc3880},
368 {"ltc3883", ltc3883}, 371 {"ltc3883", ltc3883},
@@ -392,6 +395,8 @@ static int ltc2978_probe(struct i2c_client *client,
392 395
393 if (chip_id == LTC2974_ID) { 396 if (chip_id == LTC2974_ID) {
394 data->id = ltc2974; 397 data->id = ltc2974;
398 } else if (chip_id == LTC2977_ID) {
399 data->id = ltc2977;
395 } else if (chip_id == LTC2978_ID_REV1 || chip_id == LTC2978_ID_REV2) { 400 } else if (chip_id == LTC2978_ID_REV1 || chip_id == LTC2978_ID_REV2) {
396 data->id = ltc2978; 401 data->id = ltc2978;
397 } else if ((chip_id & LTC3880_ID_MASK) == LTC3880_ID) { 402 } else if ((chip_id & LTC3880_ID_MASK) == LTC3880_ID) {
@@ -438,6 +443,7 @@ static int ltc2978_probe(struct i2c_client *client,
438 | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT; 443 | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT;
439 } 444 }
440 break; 445 break;
446 case ltc2977:
441 case ltc2978: 447 case ltc2978:
442 info->read_word_data = ltc2978_read_word_data; 448 info->read_word_data = ltc2978_read_word_data;
443 info->pages = LTC2978_NUM_PAGES; 449 info->pages = LTC2978_NUM_PAGES;