diff mbox series

[1/2] hwmon: (pmbus/ltc2978): add support for more parts.

Message ID 1581032654-4330-1-git-send-email-michael-a1.jones@analog.com (mailing list archive)
State Accepted
Headers show
Series [1/2] hwmon: (pmbus/ltc2978): add support for more parts. | expand

Commit Message

Jones, Michael-A1 Feb. 6, 2020, 11:44 p.m. UTC
LTC2972, LTC2979, LTC3884, LTC3889, LTC7880, LTM4664, LTM4677,
LTM4678, LTM4680, LTM4700.

Signed-off-by: Mike Jones <michael-a1.jones@analog.com>
---
 Documentation/hwmon/ltc2978.rst | 164 +++++++++++++++++++++++++++++++---------
 drivers/hwmon/pmbus/Kconfig     |  11 +--
 drivers/hwmon/pmbus/ltc2978.c   |  92 ++++++++++++++++++++--
 3 files changed, 220 insertions(+), 47 deletions(-)

Comments

Guenter Roeck Feb. 10, 2020, 5:49 p.m. UTC | #1
On Thu, Feb 06, 2020 at 04:44:13PM -0700, Mike Jones wrote:
> LTC2972, LTC2979, LTC3884, LTC3889, LTC7880, LTM4664, LTM4677,
> LTM4678, LTM4680, LTM4700.
> 
> Signed-off-by: Mike Jones <michael-a1.jones@analog.com>

Applied to hwmon-next.

> ---
>  Documentation/hwmon/ltc2978.rst | 164 +++++++++++++++++++++++++++++++---------
>  drivers/hwmon/pmbus/Kconfig     |  11 +--
>  drivers/hwmon/pmbus/ltc2978.c   |  92 ++++++++++++++++++++--
>  3 files changed, 220 insertions(+), 47 deletions(-)
> 
> diff --git a/Documentation/hwmon/ltc2978.rst b/Documentation/hwmon/ltc2978.rst
> index 42fd841..58838d4 100644
> --- a/Documentation/hwmon/ltc2978.rst
> +++ b/Documentation/hwmon/ltc2978.rst
> @@ -3,6 +3,14 @@ Kernel driver ltc2978
>  
>  Supported chips:
>  
> +  * Linear Technology LTC2972
> +
> +    Prefix: 'ltc2972'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: https://www.analog.com/en/products/ltc2972.html
> +
>    * Linear Technology LTC2974
>  
>      Prefix: 'ltc2974'
> @@ -37,6 +45,14 @@ Supported chips:
>  
>  	       https://www.analog.com/en/products/ltc2978a
>  
> +  * Linear Technology LTC2979
> +
> +    Prefix: 'ltc2979'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: https://www.analog.com/en/products/ltc2979
> +
>    * Linear Technology LTC2980
>  
>      Prefix: 'ltc2980'
> @@ -69,6 +85,14 @@ Supported chips:
>  
>      Datasheet: https://www.analog.com/en/products/ltc3883
>  
> +  * Linear Technology LTC3884
> +
> +    Prefix: 'ltc3884'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: https://www.analog.com/en/products/ltc3884
> +
>    * Linear Technology LTC3886
>  
>      Prefix: 'ltc3886'
> @@ -85,6 +109,22 @@ Supported chips:
>  
>      Datasheet: https://www.analog.com/en/products/ltc3887
>  
> +  * Linear Technology LTC3889
> +
> +    Prefix: 'ltc3889'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: https://www.analog.com/en/products/ltc3889
> +
> +  * Linear Technology LTC7880
> +
> +    Prefix: 'ltc7880'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: https://www.analog.com/en/products/ltc7880
> +
>    * Linear Technology LTM2987
>  
>      Prefix: 'ltm2987'
> @@ -93,7 +133,15 @@ Supported chips:
>  
>      Datasheet: https://www.analog.com/en/products/ltm2987
>  
> -  * Linear Technology LTM4675
> +  * Linear Technology LTM4644
> +
> +    Prefix: 'ltm4644'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: https://www.analog.com/en/products/ltm4644
> +
> +   * Linear Technology LTM4675
>  
>      Prefix: 'ltm4675'
>  
> @@ -109,6 +157,30 @@ Supported chips:
>  
>      Datasheet: https://www.analog.com/en/products/ltm4676
>  
> +  * Linear Technology LTM4677
> +
> +    Prefix: 'ltm4677'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: https://www.analog.com/en/products/ltm4677
> +
> +  * Linear Technology LTM4678
> +
> +    Prefix: 'ltm4678'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: https://www.analog.com/en/products/ltm4678
> +
> +  * Analog Devices LTM4680
> +
> +    Prefix: 'ltm4680'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: http://www.analog.com/ltm4680
> +
>    * Analog Devices LTM4686
>  
>      Prefix: 'ltm4686'
> @@ -117,6 +189,15 @@ Supported chips:
>  
>      Datasheet: http://www.analog.com/ltm4686
>  
> +  * Analog Devices LTM4700
> +
> +    Prefix: 'ltm4700'
> +
> +    Addresses scanned: -
> +
> +    Datasheet: http://www.analog.com/ltm4700
> +
> +
>  
>  Author: Guenter Roeck <linux@roeck-us.net>
>  
> @@ -166,13 +247,13 @@ in1_min			Minimum input voltage.
>  
>  in1_max			Maximum input voltage.
>  
> -			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
> -			LTM2987 only.
> +			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978,
> +      LTC2979 and LTM2987 only.
>  
>  in1_lcrit		Critical minimum input voltage.
>  
> -			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
> -			LTM2987 only.
> +			LTC2972, LTC2974, LTC2975, LTC2977, LTC2980, LTC2978,
> +      LTC2979 and LTM2987 only.
>  
>  in1_crit		Critical maximum input voltage.
>  
> @@ -180,17 +261,17 @@ in1_min_alarm		Input voltage low alarm.
>  
>  in1_max_alarm		Input voltage high alarm.
>  
> -			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
> -			LTM2987 only.
> +			LTC2972, LTC2974, LTC2975, LTC2977, LTC2980, LTC2978,
> +      LTC2979 and LTM2987 only.
>  in1_lcrit_alarm		Input voltage critical low alarm.
>  
> -			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
> -			LTM2987 only.
> +			LTC2972, LTC2974, LTC2975, LTC2977, LTC2980, LTC2978,
> +      LTC2979 and LTM2987 only.
>  in1_crit_alarm		Input voltage critical high alarm.
>  
>  in1_lowest		Lowest input voltage.
>  
> -			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
> +			LTC2972, LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
>  			LTM2987 only.
>  in1_highest		Highest input voltage.
>  
> @@ -198,11 +279,13 @@ in1_reset_history	Reset input voltage history.
>  
>  in[N]_label		"vout[1-8]".
>  
> +      - LTC2972: N=2-3
>  			- LTC2974, LTC2975: N=2-5
> -			- LTC2977, LTC2980, LTM2987: N=2-9
> +			- LTC2977, LTC2979, LTC2980, LTM2987: N=2-9
>  			- LTC2978: N=2-9
> -			- LTC3880, LTC3882, LTC23886 LTC3887, LTM4675, LTM4676:
> -			  N=2-3
> +			- LTC3880, LTC3882, LTC3884, LTC23886 LTC3887, LTC3889,
> +        LTC7880, LTM4644, LTM4675, LTM4676, LTM4677, LTM4678,
> +        LTM4680, LTM4700: N=2-3
>  			- LTC3883: N=2
>  
>  in[N]_input		Measured output voltage.
> @@ -226,7 +309,7 @@ in[N]_crit_alarm	Output voltage critical high alarm.
>  in[N]_lowest		Lowest output voltage.
>  
>  
> -			LTC2974, LTC2975,and LTC2978 only.
> +			LTC2972, LTC2974, LTC2975,and LTC2978 only.
>  
>  in[N]_highest		Highest output voltage.
>  
> @@ -234,20 +317,24 @@ in[N]_reset_history	Reset output voltage history.
>  
>  temp[N]_input		Measured temperature.
>  
> +      - On LTC2972, temp[1-2] report external temperatures,
> +        and temp 3 reports the chip temperature.
>  			- On LTC2974 and LTC2975, temp[1-4] report external
>  			  temperatures, and temp5 reports the chip temperature.
> -			- On LTC2977, LTC2980, LTC2978, and LTM2987, only one
> -			  temperature measurement is supported and reports
> -			  the chip temperature.
> -			- On LTC3880, LTC3882, LTC3887, LTM4675, and LTM4676,
> -			  temp1 and temp2 report external temperatures, and
> -			  temp3 reports the chip temperature.
> +			- On LTC2977, LTC2979, LTC2980, LTC2978, and LTM2987,
> +        only one temperature measurement is supported and
> +        reports the chip temperature.
> +			- On LTC3880, LTC3882, LTC3886, LTC3887, LTC3889,
> +        LTM4664, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680,
> +        and LTM4700, temp1 and temp2 report external
> +        temperatures, and temp3 reports the chip temperature.
>  			- On LTC3883, temp1 reports an external temperature,
>  			  and temp2 reports the chip temperature.
>  
>  temp[N]_min		Mimimum temperature.
>  
> -			LTC2974, LCT2977, LTM2980, LTC2978, and LTM2987 only.
> +			LTC2972, LTC2974, LCT2977, LTM2980, LTC2978,
> +      LTC2979, and LTM2987 only.
>  
>  temp[N]_max		Maximum temperature.
>  
> @@ -257,8 +344,8 @@ temp[N]_crit		Critical high temperature.
>  
>  temp[N]_min_alarm	Temperature low alarm.
>  
> -			LTC2974, LTC2975, LTC2977, LTM2980, LTC2978, and
> -			LTM2987 only.
> +			LTC2972, LTC2974, LTC2975, LTC2977, LTM2980, LTC2978,
> +      LTC2979, and LTM2987 only.
>  
>  temp[N]_max_alarm	Temperature high alarm.
>  
> @@ -269,8 +356,8 @@ temp[N]_crit_alarm	Temperature critical high alarm.
>  
>  temp[N]_lowest		Lowest measured temperature.
>  
> -			- LTC2974, LTC2975, LTC2977, LTM2980, LTC2978, and
> -			  LTM2987 only.
> +			- LTC2972, LTC2974, LTC2975, LTC2977, LTM2980, LTC2978,
> +        LTC2979, and LTM2987 only.
>  			- Not supported for chip temperature sensor on LTC2974
>  			  and LTC2975.
>  
> @@ -290,19 +377,22 @@ power1_input		Measured input power.
>  
>  power[N]_label		"pout[1-4]".
>  
> +      - LTC2972: N=1-2
>  			- LTC2974, LTC2975: N=1-4
> -			- LTC2977, LTC2980, LTM2987: Not supported
> +			- LTC2977, LTC2979, LTC2980, LTM2987: Not supported
>  			- LTC2978: Not supported
> -			- LTC3880, LTC3882, LTC3886, LTC3887, LTM4675, LTM4676:
> -			  N=1-2
> +			- LTC3880, LTC3882, LTC3884, LTC3886, LTC3887, LTC3889,
> +        LTM4664, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680,
> +        LTM4700: N=1-2
>  			- LTC3883: N=2
>  
>  power[N]_input		Measured output power.
>  
>  curr1_label		"iin".
>  
> -			LTC3880, LTC3883, LTC3886, LTC3887, LTM4675,
> -			and LTM4676 only.
> +			LTC3880, LTC3883, LTC3884, LTC3886, LTC3887, LTC3889,
> +      LTM4644, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680,
> +      and LTM4700 only.
>  
>  curr1_input		Measured input current.
>  
> @@ -320,11 +410,13 @@ curr1_reset_history	Reset input current history.
>  
>  curr[N]_label		"iout[1-4]".
>  
> +      - LTC2972: N-1-2
>  			- LTC2974, LTC2975: N=1-4
> -			- LTC2977, LTC2980, LTM2987: not supported
> +			- LTC2977, LTC2979, LTC2980, LTM2987: not supported
>  			- LTC2978: not supported
> -			- LTC3880, LTC3882, LTC3886, LTC3887, LTM4675, LTM4676:
> -			  N=2-3
> +			- LTC3880, LTC3882, LTC3884, LTC3886, LTC3887, LTC3889,
> +        LTM4664, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680,
> +        LTM4700: N=2-3
>  			- LTC3883: N=2
>  
>  curr[N]_input		Measured output current.
> @@ -335,7 +427,7 @@ curr[N]_crit		Critical high output current.
>  
>  curr[N]_lcrit		Critical low output current.
>  
> -			LTC2974 and LTC2975 only.
> +			LTC2972, LTC2974 and LTC2975 only.
>  
>  curr[N]_max_alarm	Output current high alarm.
>  
> @@ -343,11 +435,11 @@ curr[N]_crit_alarm	Output current critical high alarm.
>  
>  curr[N]_lcrit_alarm	Output current critical low alarm.
>  
> -			LTC2974 and LTC2975 only.
> +			LTC2972, LTC2974 and LTC2975 only.
>  
>  curr[N]_lowest		Lowest output current.
>  
> -			LTC2974 and LTC2975 only.
> +			LTC2972, LTC2974 and LTC2975 only.
>  
>  curr[N]_highest		Highest output current.
>  
> diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig
> index 5985997..92f26f3 100644
> --- a/drivers/hwmon/pmbus/Kconfig
> +++ b/drivers/hwmon/pmbus/Kconfig
> @@ -113,8 +113,8 @@ config SENSORS_LTC2978
>  	tristate "Linear Technologies LTC2978 and compatibles"
>  	help
>  	  If you say yes here you get hardware monitoring support for Linear
> -	  Technology LTC2974, LTC2975, LTC2977, LTC2978, LTC2980, LTC3880,
> -	  LTC3883, LTC3886, LTC3887, LTCM2987, LTM4675, and LTM4676.
> +	  Technology LTC2972, LTC2974, LTC2975, LTC2977, LTC2978, LTC2979,
> +	  LTC2980, and LTM2987.
>  
>  	  This driver can also be built as a module. If so, the module will
>  	  be called ltc2978.
> @@ -123,9 +123,10 @@ config SENSORS_LTC2978_REGULATOR
>  	bool "Regulator support for LTC2978 and compatibles"
>  	depends on SENSORS_LTC2978 && REGULATOR
>  	help
> -	  If you say yes here you get regulator support for Linear
> -	  Technology LTC2974, LTC2977, LTC2978, LTC3880, LTC3883, LTM4676
> -	  and LTM4686.
> +	  If you say yes here you get regulator support for Linear Technology
> +	  LTC3880, LTC3883, LTC3884, LTC3886, LTC3887, LTC3889, LTC7880, 
> +	  LTM4644, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680, LTM4686, 
> +	  and LTM4700.
>  
>  config SENSORS_LTC3815
>  	tristate "Linear Technologies LTC3815"
> diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c
> index a91ed01..8f619d0 100644
> --- a/drivers/hwmon/pmbus/ltc2978.c
> +++ b/drivers/hwmon/pmbus/ltc2978.c
> @@ -19,8 +19,10 @@
>  #include <linux/regulator/driver.h>
>  #include "pmbus.h"
>  
> -enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882,
> -	ltc3883, ltc3886, ltc3887, ltm2987, ltm4675, ltm4676, ltm4686 };
> +enum chips { ltc2972, ltc2974, ltc2975, ltc2977, ltc2978, ltc2979, ltc2980, /* Managers */
> +	ltc3880, ltc3882, ltc3883, ltc3884, ltc3886, ltc3887, ltc3889, ltc7880, /* Controllers */
> +	ltm2987, ltm4664, ltm4675, ltm4676, ltm4677, ltm4678, ltm4680, ltm4686, ltm4700 /* Modules */
> +};
>  
>  /* Common for all chips */
>  #define LTC2978_MFR_VOUT_PEAK		0xdd
> @@ -43,9 +45,10 @@ enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882,
>  #define LTC3880_MFR_CLEAR_PEAKS		0xe3
>  #define LTC3880_MFR_TEMPERATURE2_PEAK	0xf4
>  
> -/* LTC3883 and LTC3886 only */
> +/* LTC3883, LTC3884, LTC3886, LTC3889 and LTC7880 only */
>  #define LTC3883_MFR_IIN_PEAK		0xe1
>  
> +
>  /* LTC2975 only */
>  #define LTC2975_MFR_IIN_PEAK		0xc4
>  #define LTC2975_MFR_IIN_MIN		0xc5
> @@ -54,27 +57,41 @@ enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882,
>  
>  #define LTC2978_ID_MASK			0xfff0
>  
> +#define LTC2972_ID			0x0310
>  #define LTC2974_ID			0x0210
>  #define LTC2975_ID			0x0220
>  #define LTC2977_ID			0x0130
>  #define LTC2978_ID_REV1			0x0110	/* Early revision */
>  #define LTC2978_ID_REV2			0x0120
> +#define LTC2979_ID_A			0x8060
> +#define LTC2979_ID_B			0x8070
>  #define LTC2980_ID_A			0x8030	/* A/B for two die IDs */
>  #define LTC2980_ID_B			0x8040
>  #define LTC3880_ID			0x4020
>  #define LTC3882_ID			0x4200
>  #define LTC3882_ID_D1			0x4240	/* Dash 1 */
>  #define LTC3883_ID			0x4300
> +#define LTC3884_ID			0x4C00
>  #define LTC3886_ID			0x4600
>  #define LTC3887_ID			0x4700
>  #define LTM2987_ID_A			0x8010	/* A/B for two die IDs */
>  #define LTM2987_ID_B			0x8020
> +#define LTC3889_ID			0x4900
> +#define LTC7880_ID			0x49E0
> +#define LTM4664_ID			0x4120
>  #define LTM4675_ID			0x47a0
>  #define LTM4676_ID_REV1			0x4400
>  #define LTM4676_ID_REV2			0x4480
>  #define LTM4676A_ID			0x47e0
> +#define LTM4677_ID_REV1			0x47B0
> +#define LTM4677_ID_REV2			0x47D0
> +#define LTM4678_ID_REV1			0x4100
> +#define LTM4678_ID_REV2			0x4110
> +#define LTM4680_ID			0x4140
>  #define LTM4686_ID			0x4770
> +#define LTM4700_ID			0x4130
>  
> +#define LTC2972_NUM_PAGES		2
>  #define LTC2974_NUM_PAGES		4
>  #define LTC2978_NUM_PAGES		8
>  #define LTC3880_NUM_PAGES		2
> @@ -492,20 +509,30 @@ static int ltc2978_write_word_data(struct i2c_client *client, int page,
>  }
>  
>  static const struct i2c_device_id ltc2978_id[] = {
> +	{"ltc2972", ltc2972},
>  	{"ltc2974", ltc2974},
>  	{"ltc2975", ltc2975},
>  	{"ltc2977", ltc2977},
>  	{"ltc2978", ltc2978},
> +	{"ltc2979", ltc2979},
>  	{"ltc2980", ltc2980},
>  	{"ltc3880", ltc3880},
>  	{"ltc3882", ltc3882},
>  	{"ltc3883", ltc3883},
> +	{"ltc3884", ltc3884},
>  	{"ltc3886", ltc3886},
>  	{"ltc3887", ltc3887},
> +	{"ltc3889", ltc3889},
> +	{"ltc7880", ltc7880},
>  	{"ltm2987", ltm2987},
> +	{"ltm4664", ltm4664},
>  	{"ltm4675", ltm4675},
>  	{"ltm4676", ltm4676},
> +	{"ltm4677", ltm4677},
> +	{"ltm4678", ltm4678},
> +	{"ltm4680", ltm4680},
>  	{"ltm4686", ltm4686},
> +	{"ltm4700", ltm4700},
>  	{}
>  };
>  MODULE_DEVICE_TABLE(i2c, ltc2978_id);
> @@ -555,7 +582,9 @@ static int ltc2978_get_id(struct i2c_client *client)
>  
>  	chip_id &= LTC2978_ID_MASK;
>  
> -	if (chip_id == LTC2974_ID)
> +	if (chip_id == LTC2972_ID)
> +		return ltc2972;
> +	else if (chip_id == LTC2974_ID)
>  		return ltc2974;
>  	else if (chip_id == LTC2975_ID)
>  		return ltc2975;
> @@ -563,6 +592,8 @@ static int ltc2978_get_id(struct i2c_client *client)
>  		return ltc2977;
>  	else if (chip_id == LTC2978_ID_REV1 || chip_id == LTC2978_ID_REV2)
>  		return ltc2978;
> +	else if (chip_id == LTC2979_ID_A || chip_id == LTC2979_ID_B)
> +		return ltc2979;
>  	else if (chip_id == LTC2980_ID_A || chip_id == LTC2980_ID_B)
>  		return ltc2980;
>  	else if (chip_id == LTC3880_ID)
> @@ -571,19 +602,34 @@ static int ltc2978_get_id(struct i2c_client *client)
>  		return ltc3882;
>  	else if (chip_id == LTC3883_ID)
>  		return ltc3883;
> +	else if (chip_id == LTC3884_ID)
> +		return ltc3884;
>  	else if (chip_id == LTC3886_ID)
>  		return ltc3886;
>  	else if (chip_id == LTC3887_ID)
>  		return ltc3887;
> +	else if (chip_id == LTC3889_ID)
> +		return ltc3889;
> +	else if (chip_id == LTC7880_ID)
> +		return ltc7880;
>  	else if (chip_id == LTM2987_ID_A || chip_id == LTM2987_ID_B)
>  		return ltm2987;
> +	else if (chip_id == LTM4664_ID)
> +		return ltm4664;
>  	else if (chip_id == LTM4675_ID)
>  		return ltm4675;
> -	else if (chip_id == LTM4676_ID_REV1 || chip_id == LTM4676_ID_REV2 ||
> -		 chip_id == LTM4676A_ID)
> +	else if (chip_id == LTM4676_ID_REV1 || chip_id == LTM4676_ID_REV2 || chip_id == LTM4676A_ID)
>  		return ltm4676;
> +	else if (chip_id == LTM4677_ID_REV1 || chip_id == LTM4677_ID_REV2)
> +		return ltm4677;
> +	else if (chip_id == LTM4678_ID_REV1 || chip_id == LTM4678_ID_REV2)
> +		return ltm4678;
> +	else if (chip_id == LTM4680_ID)
> +		return ltm4680;
>  	else if (chip_id == LTM4686_ID)
>  		return ltm4686;
> +	else if (chip_id == LTM4700_ID)
> +		return ltm4700;
>  
>  	dev_err(&client->dev, "Unsupported chip ID 0x%x\n", chip_id);
>  	return -ENODEV;
> @@ -637,6 +683,19 @@ static int ltc2978_probe(struct i2c_client *client,
>  	data->temp2_max = 0x7c00;
>  
>  	switch (data->id) {
> +	case ltc2972:
> +		info->read_word_data = ltc2975_read_word_data;
> +		info->pages = LTC2972_NUM_PAGES;
> +		info->func[0] = PMBUS_HAVE_IIN | PMBUS_HAVE_PIN
> +		  | PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT
> +		  | PMBUS_HAVE_TEMP2;
> +		for (i = 0; i < info->pages; i++) {
> +			info->func[i] |= PMBUS_HAVE_VOUT
> +			  | PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_POUT
> +			  | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP
> +			  | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT;
> +		}
> +		break;	
>  	case ltc2974:
>  		info->read_word_data = ltc2974_read_word_data;
>  		info->pages = LTC2974_NUM_PAGES;
> @@ -662,8 +721,10 @@ static int ltc2978_probe(struct i2c_client *client,
>  			  | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT;
>  		}
>  		break;
> +
>  	case ltc2977:
>  	case ltc2978:
> +	case ltc2979:
>  	case ltc2980:
>  	case ltm2987:
>  		info->read_word_data = ltc2978_read_word_data;
> @@ -680,6 +741,7 @@ static int ltc2978_probe(struct i2c_client *client,
>  	case ltc3887:
>  	case ltm4675:
>  	case ltm4676:
> +	case ltm4677:
>  	case ltm4686:
>  		data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING;
>  		info->read_word_data = ltc3880_read_word_data;
> @@ -721,7 +783,14 @@ static int ltc2978_probe(struct i2c_client *client,
>  		  | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | PMBUS_HAVE_TEMP
>  		  | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP;
>  		break;
> +	case ltc3884:
>  	case ltc3886:
> +	case ltc3889:
> +	case ltc7880:
> +	case ltm4664:
> +	case ltm4678:
> +	case ltm4680:
> +	case ltm4700:
>  		data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING;
>  		info->read_word_data = ltc3883_read_word_data;
>  		info->pages = LTC3880_NUM_PAGES;
> @@ -752,22 +821,33 @@ static int ltc2978_probe(struct i2c_client *client,
>  	return pmbus_do_probe(client, id, info);
>  }
>  
> +
>  #ifdef CONFIG_OF
>  static const struct of_device_id ltc2978_of_match[] = {
> +	{ .compatible = "lltc,ltc2972" },
>  	{ .compatible = "lltc,ltc2974" },
>  	{ .compatible = "lltc,ltc2975" },
>  	{ .compatible = "lltc,ltc2977" },
>  	{ .compatible = "lltc,ltc2978" },
> +	{ .compatible = "lltc,ltc2979" },
>  	{ .compatible = "lltc,ltc2980" },
>  	{ .compatible = "lltc,ltc3880" },
>  	{ .compatible = "lltc,ltc3882" },
>  	{ .compatible = "lltc,ltc3883" },
> +	{ .compatible = "lltc,ltc3884" },
>  	{ .compatible = "lltc,ltc3886" },
>  	{ .compatible = "lltc,ltc3887" },
> +	{ .compatible = "lltc,ltc3889" },
> +	{ .compatible = "lltc,ltc7880" },
>  	{ .compatible = "lltc,ltm2987" },
> +	{ .compatible = "lltc,ltm4664" },
>  	{ .compatible = "lltc,ltm4675" },
>  	{ .compatible = "lltc,ltm4676" },
> +	{ .compatible = "lltc,ltm4677" },
> +	{ .compatible = "lltc,ltm4678" },
> +	{ .compatible = "lltc,ltm4680" },
>  	{ .compatible = "lltc,ltm4686" },
> +	{ .compatible = "lltc,ltm4700" },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, ltc2978_of_match);
diff mbox series

Patch

diff --git a/Documentation/hwmon/ltc2978.rst b/Documentation/hwmon/ltc2978.rst
index 42fd841..58838d4 100644
--- a/Documentation/hwmon/ltc2978.rst
+++ b/Documentation/hwmon/ltc2978.rst
@@ -3,6 +3,14 @@  Kernel driver ltc2978
 
 Supported chips:
 
+  * Linear Technology LTC2972
+
+    Prefix: 'ltc2972'
+
+    Addresses scanned: -
+
+    Datasheet: https://www.analog.com/en/products/ltc2972.html
+
   * Linear Technology LTC2974
 
     Prefix: 'ltc2974'
@@ -37,6 +45,14 @@  Supported chips:
 
 	       https://www.analog.com/en/products/ltc2978a
 
+  * Linear Technology LTC2979
+
+    Prefix: 'ltc2979'
+
+    Addresses scanned: -
+
+    Datasheet: https://www.analog.com/en/products/ltc2979
+
   * Linear Technology LTC2980
 
     Prefix: 'ltc2980'
@@ -69,6 +85,14 @@  Supported chips:
 
     Datasheet: https://www.analog.com/en/products/ltc3883
 
+  * Linear Technology LTC3884
+
+    Prefix: 'ltc3884'
+
+    Addresses scanned: -
+
+    Datasheet: https://www.analog.com/en/products/ltc3884
+
   * Linear Technology LTC3886
 
     Prefix: 'ltc3886'
@@ -85,6 +109,22 @@  Supported chips:
 
     Datasheet: https://www.analog.com/en/products/ltc3887
 
+  * Linear Technology LTC3889
+
+    Prefix: 'ltc3889'
+
+    Addresses scanned: -
+
+    Datasheet: https://www.analog.com/en/products/ltc3889
+
+  * Linear Technology LTC7880
+
+    Prefix: 'ltc7880'
+
+    Addresses scanned: -
+
+    Datasheet: https://www.analog.com/en/products/ltc7880
+
   * Linear Technology LTM2987
 
     Prefix: 'ltm2987'
@@ -93,7 +133,15 @@  Supported chips:
 
     Datasheet: https://www.analog.com/en/products/ltm2987
 
-  * Linear Technology LTM4675
+  * Linear Technology LTM4644
+
+    Prefix: 'ltm4644'
+
+    Addresses scanned: -
+
+    Datasheet: https://www.analog.com/en/products/ltm4644
+
+   * Linear Technology LTM4675
 
     Prefix: 'ltm4675'
 
@@ -109,6 +157,30 @@  Supported chips:
 
     Datasheet: https://www.analog.com/en/products/ltm4676
 
+  * Linear Technology LTM4677
+
+    Prefix: 'ltm4677'
+
+    Addresses scanned: -
+
+    Datasheet: https://www.analog.com/en/products/ltm4677
+
+  * Linear Technology LTM4678
+
+    Prefix: 'ltm4678'
+
+    Addresses scanned: -
+
+    Datasheet: https://www.analog.com/en/products/ltm4678
+
+  * Analog Devices LTM4680
+
+    Prefix: 'ltm4680'
+
+    Addresses scanned: -
+
+    Datasheet: http://www.analog.com/ltm4680
+
   * Analog Devices LTM4686
 
     Prefix: 'ltm4686'
@@ -117,6 +189,15 @@  Supported chips:
 
     Datasheet: http://www.analog.com/ltm4686
 
+  * Analog Devices LTM4700
+
+    Prefix: 'ltm4700'
+
+    Addresses scanned: -
+
+    Datasheet: http://www.analog.com/ltm4700
+
+
 
 Author: Guenter Roeck <linux@roeck-us.net>
 
@@ -166,13 +247,13 @@  in1_min			Minimum input voltage.
 
 in1_max			Maximum input voltage.
 
-			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
-			LTM2987 only.
+			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978,
+      LTC2979 and LTM2987 only.
 
 in1_lcrit		Critical minimum input voltage.
 
-			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
-			LTM2987 only.
+			LTC2972, LTC2974, LTC2975, LTC2977, LTC2980, LTC2978,
+      LTC2979 and LTM2987 only.
 
 in1_crit		Critical maximum input voltage.
 
@@ -180,17 +261,17 @@  in1_min_alarm		Input voltage low alarm.
 
 in1_max_alarm		Input voltage high alarm.
 
-			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
-			LTM2987 only.
+			LTC2972, LTC2974, LTC2975, LTC2977, LTC2980, LTC2978,
+      LTC2979 and LTM2987 only.
 in1_lcrit_alarm		Input voltage critical low alarm.
 
-			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
-			LTM2987 only.
+			LTC2972, LTC2974, LTC2975, LTC2977, LTC2980, LTC2978,
+      LTC2979 and LTM2987 only.
 in1_crit_alarm		Input voltage critical high alarm.
 
 in1_lowest		Lowest input voltage.
 
-			LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
+			LTC2972, LTC2974, LTC2975, LTC2977, LTC2980, LTC2978, and
 			LTM2987 only.
 in1_highest		Highest input voltage.
 
@@ -198,11 +279,13 @@  in1_reset_history	Reset input voltage history.
 
 in[N]_label		"vout[1-8]".
 
+      - LTC2972: N=2-3
 			- LTC2974, LTC2975: N=2-5
-			- LTC2977, LTC2980, LTM2987: N=2-9
+			- LTC2977, LTC2979, LTC2980, LTM2987: N=2-9
 			- LTC2978: N=2-9
-			- LTC3880, LTC3882, LTC23886 LTC3887, LTM4675, LTM4676:
-			  N=2-3
+			- LTC3880, LTC3882, LTC3884, LTC23886 LTC3887, LTC3889,
+        LTC7880, LTM4644, LTM4675, LTM4676, LTM4677, LTM4678,
+        LTM4680, LTM4700: N=2-3
 			- LTC3883: N=2
 
 in[N]_input		Measured output voltage.
@@ -226,7 +309,7 @@  in[N]_crit_alarm	Output voltage critical high alarm.
 in[N]_lowest		Lowest output voltage.
 
 
-			LTC2974, LTC2975,and LTC2978 only.
+			LTC2972, LTC2974, LTC2975,and LTC2978 only.
 
 in[N]_highest		Highest output voltage.
 
@@ -234,20 +317,24 @@  in[N]_reset_history	Reset output voltage history.
 
 temp[N]_input		Measured temperature.
 
+      - On LTC2972, temp[1-2] report external temperatures,
+        and temp 3 reports the chip temperature.
 			- On LTC2974 and LTC2975, temp[1-4] report external
 			  temperatures, and temp5 reports the chip temperature.
-			- On LTC2977, LTC2980, LTC2978, and LTM2987, only one
-			  temperature measurement is supported and reports
-			  the chip temperature.
-			- On LTC3880, LTC3882, LTC3887, LTM4675, and LTM4676,
-			  temp1 and temp2 report external temperatures, and
-			  temp3 reports the chip temperature.
+			- On LTC2977, LTC2979, LTC2980, LTC2978, and LTM2987,
+        only one temperature measurement is supported and
+        reports the chip temperature.
+			- On LTC3880, LTC3882, LTC3886, LTC3887, LTC3889,
+        LTM4664, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680,
+        and LTM4700, temp1 and temp2 report external
+        temperatures, and temp3 reports the chip temperature.
 			- On LTC3883, temp1 reports an external temperature,
 			  and temp2 reports the chip temperature.
 
 temp[N]_min		Mimimum temperature.
 
-			LTC2974, LCT2977, LTM2980, LTC2978, and LTM2987 only.
+			LTC2972, LTC2974, LCT2977, LTM2980, LTC2978,
+      LTC2979, and LTM2987 only.
 
 temp[N]_max		Maximum temperature.
 
@@ -257,8 +344,8 @@  temp[N]_crit		Critical high temperature.
 
 temp[N]_min_alarm	Temperature low alarm.
 
-			LTC2974, LTC2975, LTC2977, LTM2980, LTC2978, and
-			LTM2987 only.
+			LTC2972, LTC2974, LTC2975, LTC2977, LTM2980, LTC2978,
+      LTC2979, and LTM2987 only.
 
 temp[N]_max_alarm	Temperature high alarm.
 
@@ -269,8 +356,8 @@  temp[N]_crit_alarm	Temperature critical high alarm.
 
 temp[N]_lowest		Lowest measured temperature.
 
-			- LTC2974, LTC2975, LTC2977, LTM2980, LTC2978, and
-			  LTM2987 only.
+			- LTC2972, LTC2974, LTC2975, LTC2977, LTM2980, LTC2978,
+        LTC2979, and LTM2987 only.
 			- Not supported for chip temperature sensor on LTC2974
 			  and LTC2975.
 
@@ -290,19 +377,22 @@  power1_input		Measured input power.
 
 power[N]_label		"pout[1-4]".
 
+      - LTC2972: N=1-2
 			- LTC2974, LTC2975: N=1-4
-			- LTC2977, LTC2980, LTM2987: Not supported
+			- LTC2977, LTC2979, LTC2980, LTM2987: Not supported
 			- LTC2978: Not supported
-			- LTC3880, LTC3882, LTC3886, LTC3887, LTM4675, LTM4676:
-			  N=1-2
+			- LTC3880, LTC3882, LTC3884, LTC3886, LTC3887, LTC3889,
+        LTM4664, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680,
+        LTM4700: N=1-2
 			- LTC3883: N=2
 
 power[N]_input		Measured output power.
 
 curr1_label		"iin".
 
-			LTC3880, LTC3883, LTC3886, LTC3887, LTM4675,
-			and LTM4676 only.
+			LTC3880, LTC3883, LTC3884, LTC3886, LTC3887, LTC3889,
+      LTM4644, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680,
+      and LTM4700 only.
 
 curr1_input		Measured input current.
 
@@ -320,11 +410,13 @@  curr1_reset_history	Reset input current history.
 
 curr[N]_label		"iout[1-4]".
 
+      - LTC2972: N-1-2
 			- LTC2974, LTC2975: N=1-4
-			- LTC2977, LTC2980, LTM2987: not supported
+			- LTC2977, LTC2979, LTC2980, LTM2987: not supported
 			- LTC2978: not supported
-			- LTC3880, LTC3882, LTC3886, LTC3887, LTM4675, LTM4676:
-			  N=2-3
+			- LTC3880, LTC3882, LTC3884, LTC3886, LTC3887, LTC3889,
+        LTM4664, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680,
+        LTM4700: N=2-3
 			- LTC3883: N=2
 
 curr[N]_input		Measured output current.
@@ -335,7 +427,7 @@  curr[N]_crit		Critical high output current.
 
 curr[N]_lcrit		Critical low output current.
 
-			LTC2974 and LTC2975 only.
+			LTC2972, LTC2974 and LTC2975 only.
 
 curr[N]_max_alarm	Output current high alarm.
 
@@ -343,11 +435,11 @@  curr[N]_crit_alarm	Output current critical high alarm.
 
 curr[N]_lcrit_alarm	Output current critical low alarm.
 
-			LTC2974 and LTC2975 only.
+			LTC2972, LTC2974 and LTC2975 only.
 
 curr[N]_lowest		Lowest output current.
 
-			LTC2974 and LTC2975 only.
+			LTC2972, LTC2974 and LTC2975 only.
 
 curr[N]_highest		Highest output current.
 
diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig
index 5985997..92f26f3 100644
--- a/drivers/hwmon/pmbus/Kconfig
+++ b/drivers/hwmon/pmbus/Kconfig
@@ -113,8 +113,8 @@  config SENSORS_LTC2978
 	tristate "Linear Technologies LTC2978 and compatibles"
 	help
 	  If you say yes here you get hardware monitoring support for Linear
-	  Technology LTC2974, LTC2975, LTC2977, LTC2978, LTC2980, LTC3880,
-	  LTC3883, LTC3886, LTC3887, LTCM2987, LTM4675, and LTM4676.
+	  Technology LTC2972, LTC2974, LTC2975, LTC2977, LTC2978, LTC2979,
+	  LTC2980, and LTM2987.
 
 	  This driver can also be built as a module. If so, the module will
 	  be called ltc2978.
@@ -123,9 +123,10 @@  config SENSORS_LTC2978_REGULATOR
 	bool "Regulator support for LTC2978 and compatibles"
 	depends on SENSORS_LTC2978 && REGULATOR
 	help
-	  If you say yes here you get regulator support for Linear
-	  Technology LTC2974, LTC2977, LTC2978, LTC3880, LTC3883, LTM4676
-	  and LTM4686.
+	  If you say yes here you get regulator support for Linear Technology
+	  LTC3880, LTC3883, LTC3884, LTC3886, LTC3887, LTC3889, LTC7880, 
+	  LTM4644, LTM4675, LTM4676, LTM4677, LTM4678, LTM4680, LTM4686, 
+	  and LTM4700.
 
 config SENSORS_LTC3815
 	tristate "Linear Technologies LTC3815"
diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c
index a91ed01..8f619d0 100644
--- a/drivers/hwmon/pmbus/ltc2978.c
+++ b/drivers/hwmon/pmbus/ltc2978.c
@@ -19,8 +19,10 @@ 
 #include <linux/regulator/driver.h>
 #include "pmbus.h"
 
-enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882,
-	ltc3883, ltc3886, ltc3887, ltm2987, ltm4675, ltm4676, ltm4686 };
+enum chips { ltc2972, ltc2974, ltc2975, ltc2977, ltc2978, ltc2979, ltc2980, /* Managers */
+	ltc3880, ltc3882, ltc3883, ltc3884, ltc3886, ltc3887, ltc3889, ltc7880, /* Controllers */
+	ltm2987, ltm4664, ltm4675, ltm4676, ltm4677, ltm4678, ltm4680, ltm4686, ltm4700 /* Modules */
+};
 
 /* Common for all chips */
 #define LTC2978_MFR_VOUT_PEAK		0xdd
@@ -43,9 +45,10 @@  enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882,
 #define LTC3880_MFR_CLEAR_PEAKS		0xe3
 #define LTC3880_MFR_TEMPERATURE2_PEAK	0xf4
 
-/* LTC3883 and LTC3886 only */
+/* LTC3883, LTC3884, LTC3886, LTC3889 and LTC7880 only */
 #define LTC3883_MFR_IIN_PEAK		0xe1
 
+
 /* LTC2975 only */
 #define LTC2975_MFR_IIN_PEAK		0xc4
 #define LTC2975_MFR_IIN_MIN		0xc5
@@ -54,27 +57,41 @@  enum chips { ltc2974, ltc2975, ltc2977, ltc2978, ltc2980, ltc3880, ltc3882,
 
 #define LTC2978_ID_MASK			0xfff0
 
+#define LTC2972_ID			0x0310
 #define LTC2974_ID			0x0210
 #define LTC2975_ID			0x0220
 #define LTC2977_ID			0x0130
 #define LTC2978_ID_REV1			0x0110	/* Early revision */
 #define LTC2978_ID_REV2			0x0120
+#define LTC2979_ID_A			0x8060
+#define LTC2979_ID_B			0x8070
 #define LTC2980_ID_A			0x8030	/* A/B for two die IDs */
 #define LTC2980_ID_B			0x8040
 #define LTC3880_ID			0x4020
 #define LTC3882_ID			0x4200
 #define LTC3882_ID_D1			0x4240	/* Dash 1 */
 #define LTC3883_ID			0x4300
+#define LTC3884_ID			0x4C00
 #define LTC3886_ID			0x4600
 #define LTC3887_ID			0x4700
 #define LTM2987_ID_A			0x8010	/* A/B for two die IDs */
 #define LTM2987_ID_B			0x8020
+#define LTC3889_ID			0x4900
+#define LTC7880_ID			0x49E0
+#define LTM4664_ID			0x4120
 #define LTM4675_ID			0x47a0
 #define LTM4676_ID_REV1			0x4400
 #define LTM4676_ID_REV2			0x4480
 #define LTM4676A_ID			0x47e0
+#define LTM4677_ID_REV1			0x47B0
+#define LTM4677_ID_REV2			0x47D0
+#define LTM4678_ID_REV1			0x4100
+#define LTM4678_ID_REV2			0x4110
+#define LTM4680_ID			0x4140
 #define LTM4686_ID			0x4770
+#define LTM4700_ID			0x4130
 
+#define LTC2972_NUM_PAGES		2
 #define LTC2974_NUM_PAGES		4
 #define LTC2978_NUM_PAGES		8
 #define LTC3880_NUM_PAGES		2
@@ -492,20 +509,30 @@  static int ltc2978_write_word_data(struct i2c_client *client, int page,
 }
 
 static const struct i2c_device_id ltc2978_id[] = {
+	{"ltc2972", ltc2972},
 	{"ltc2974", ltc2974},
 	{"ltc2975", ltc2975},
 	{"ltc2977", ltc2977},
 	{"ltc2978", ltc2978},
+	{"ltc2979", ltc2979},
 	{"ltc2980", ltc2980},
 	{"ltc3880", ltc3880},
 	{"ltc3882", ltc3882},
 	{"ltc3883", ltc3883},
+	{"ltc3884", ltc3884},
 	{"ltc3886", ltc3886},
 	{"ltc3887", ltc3887},
+	{"ltc3889", ltc3889},
+	{"ltc7880", ltc7880},
 	{"ltm2987", ltm2987},
+	{"ltm4664", ltm4664},
 	{"ltm4675", ltm4675},
 	{"ltm4676", ltm4676},
+	{"ltm4677", ltm4677},
+	{"ltm4678", ltm4678},
+	{"ltm4680", ltm4680},
 	{"ltm4686", ltm4686},
+	{"ltm4700", ltm4700},
 	{}
 };
 MODULE_DEVICE_TABLE(i2c, ltc2978_id);
@@ -555,7 +582,9 @@  static int ltc2978_get_id(struct i2c_client *client)
 
 	chip_id &= LTC2978_ID_MASK;
 
-	if (chip_id == LTC2974_ID)
+	if (chip_id == LTC2972_ID)
+		return ltc2972;
+	else if (chip_id == LTC2974_ID)
 		return ltc2974;
 	else if (chip_id == LTC2975_ID)
 		return ltc2975;
@@ -563,6 +592,8 @@  static int ltc2978_get_id(struct i2c_client *client)
 		return ltc2977;
 	else if (chip_id == LTC2978_ID_REV1 || chip_id == LTC2978_ID_REV2)
 		return ltc2978;
+	else if (chip_id == LTC2979_ID_A || chip_id == LTC2979_ID_B)
+		return ltc2979;
 	else if (chip_id == LTC2980_ID_A || chip_id == LTC2980_ID_B)
 		return ltc2980;
 	else if (chip_id == LTC3880_ID)
@@ -571,19 +602,34 @@  static int ltc2978_get_id(struct i2c_client *client)
 		return ltc3882;
 	else if (chip_id == LTC3883_ID)
 		return ltc3883;
+	else if (chip_id == LTC3884_ID)
+		return ltc3884;
 	else if (chip_id == LTC3886_ID)
 		return ltc3886;
 	else if (chip_id == LTC3887_ID)
 		return ltc3887;
+	else if (chip_id == LTC3889_ID)
+		return ltc3889;
+	else if (chip_id == LTC7880_ID)
+		return ltc7880;
 	else if (chip_id == LTM2987_ID_A || chip_id == LTM2987_ID_B)
 		return ltm2987;
+	else if (chip_id == LTM4664_ID)
+		return ltm4664;
 	else if (chip_id == LTM4675_ID)
 		return ltm4675;
-	else if (chip_id == LTM4676_ID_REV1 || chip_id == LTM4676_ID_REV2 ||
-		 chip_id == LTM4676A_ID)
+	else if (chip_id == LTM4676_ID_REV1 || chip_id == LTM4676_ID_REV2 || chip_id == LTM4676A_ID)
 		return ltm4676;
+	else if (chip_id == LTM4677_ID_REV1 || chip_id == LTM4677_ID_REV2)
+		return ltm4677;
+	else if (chip_id == LTM4678_ID_REV1 || chip_id == LTM4678_ID_REV2)
+		return ltm4678;
+	else if (chip_id == LTM4680_ID)
+		return ltm4680;
 	else if (chip_id == LTM4686_ID)
 		return ltm4686;
+	else if (chip_id == LTM4700_ID)
+		return ltm4700;
 
 	dev_err(&client->dev, "Unsupported chip ID 0x%x\n", chip_id);
 	return -ENODEV;
@@ -637,6 +683,19 @@  static int ltc2978_probe(struct i2c_client *client,
 	data->temp2_max = 0x7c00;
 
 	switch (data->id) {
+	case ltc2972:
+		info->read_word_data = ltc2975_read_word_data;
+		info->pages = LTC2972_NUM_PAGES;
+		info->func[0] = PMBUS_HAVE_IIN | PMBUS_HAVE_PIN
+		  | PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT
+		  | PMBUS_HAVE_TEMP2;
+		for (i = 0; i < info->pages; i++) {
+			info->func[i] |= PMBUS_HAVE_VOUT
+			  | PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_POUT
+			  | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP
+			  | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT;
+		}
+		break;	
 	case ltc2974:
 		info->read_word_data = ltc2974_read_word_data;
 		info->pages = LTC2974_NUM_PAGES;
@@ -662,8 +721,10 @@  static int ltc2978_probe(struct i2c_client *client,
 			  | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT;
 		}
 		break;
+
 	case ltc2977:
 	case ltc2978:
+	case ltc2979:
 	case ltc2980:
 	case ltm2987:
 		info->read_word_data = ltc2978_read_word_data;
@@ -680,6 +741,7 @@  static int ltc2978_probe(struct i2c_client *client,
 	case ltc3887:
 	case ltm4675:
 	case ltm4676:
+	case ltm4677:
 	case ltm4686:
 		data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING;
 		info->read_word_data = ltc3880_read_word_data;
@@ -721,7 +783,14 @@  static int ltc2978_probe(struct i2c_client *client,
 		  | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | PMBUS_HAVE_TEMP
 		  | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP;
 		break;
+	case ltc3884:
 	case ltc3886:
+	case ltc3889:
+	case ltc7880:
+	case ltm4664:
+	case ltm4678:
+	case ltm4680:
+	case ltm4700:
 		data->features |= FEAT_CLEAR_PEAKS | FEAT_NEEDS_POLLING;
 		info->read_word_data = ltc3883_read_word_data;
 		info->pages = LTC3880_NUM_PAGES;
@@ -752,22 +821,33 @@  static int ltc2978_probe(struct i2c_client *client,
 	return pmbus_do_probe(client, id, info);
 }
 
+
 #ifdef CONFIG_OF
 static const struct of_device_id ltc2978_of_match[] = {
+	{ .compatible = "lltc,ltc2972" },
 	{ .compatible = "lltc,ltc2974" },
 	{ .compatible = "lltc,ltc2975" },
 	{ .compatible = "lltc,ltc2977" },
 	{ .compatible = "lltc,ltc2978" },
+	{ .compatible = "lltc,ltc2979" },
 	{ .compatible = "lltc,ltc2980" },
 	{ .compatible = "lltc,ltc3880" },
 	{ .compatible = "lltc,ltc3882" },
 	{ .compatible = "lltc,ltc3883" },
+	{ .compatible = "lltc,ltc3884" },
 	{ .compatible = "lltc,ltc3886" },
 	{ .compatible = "lltc,ltc3887" },
+	{ .compatible = "lltc,ltc3889" },
+	{ .compatible = "lltc,ltc7880" },
 	{ .compatible = "lltc,ltm2987" },
+	{ .compatible = "lltc,ltm4664" },
 	{ .compatible = "lltc,ltm4675" },
 	{ .compatible = "lltc,ltm4676" },
+	{ .compatible = "lltc,ltm4677" },
+	{ .compatible = "lltc,ltm4678" },
+	{ .compatible = "lltc,ltm4680" },
 	{ .compatible = "lltc,ltm4686" },
+	{ .compatible = "lltc,ltm4700" },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, ltc2978_of_match);