diff options
| author | Matthew Garrett <mjg@redhat.com> | 2010-05-27 19:58:38 +0200 | 
|---|---|---|
| committer | Jean Delvare <khali@linux-fr.org> | 2010-05-27 19:58:38 +0200 | 
| commit | 10f2ed31aae11040dfd64cee10c47db79b4b4647 (patch) | |
| tree | bae22e065d19fba90db1f25c976166d742dd086e | |
| parent | 70dd6beac02f43a5099fcf5fddf68cfee0cbf479 (diff) | |
hwmon: (lm63) Add basic support for LM64
The LM64 appears to be an LM63 with added GPIO lines. Add support for the
hwmon functionality - GPIO can be added at some later stage if someone
has a need for them.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
| -rw-r--r-- | Documentation/hwmon/lm63 | 7 | ||||
| -rw-r--r-- | drivers/hwmon/Kconfig | 11 | ||||
| -rw-r--r-- | drivers/hwmon/lm63.c | 16 | 
3 files changed, 25 insertions, 9 deletions
| diff --git a/Documentation/hwmon/lm63 b/Documentation/hwmon/lm63 index 31660bf97979..b9843eab1afb 100644 --- a/Documentation/hwmon/lm63 +++ b/Documentation/hwmon/lm63 @@ -7,6 +7,11 @@ Supported chips:      Addresses scanned: I2C 0x4c      Datasheet: Publicly available at the National Semiconductor website                 http://www.national.com/pf/LM/LM63.html +  * National Semiconductor LM64 +    Prefix: 'lm64' +    Addresses scanned: I2C 0x18 and 0x4e +    Datasheet: Publicly available at the National Semiconductor website +               http://www.national.com/pf/LM/LM64.html  Author: Jean Delvare <khali@linux-fr.org> @@ -55,3 +60,5 @@ The lm63 driver will not update its values more frequently than every  second; reading them more often will do no harm, but will return 'old'  values. +The LM64 is effectively an LM63 with GPIO lines. The driver does not +support these GPIO lines at present. diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 6a9ac754ca5d..fa609586c7c9 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -447,13 +447,14 @@ config SENSORS_IT87  	  will be called it87.  config SENSORS_LM63 -	tristate "National Semiconductor LM63" +	tristate "National Semiconductor LM63 and LM64"  	depends on I2C  	help -	  If you say yes here you get support for the National Semiconductor -	  LM63 remote diode digital temperature sensor with integrated fan -	  control.  Such chips are found on the Tyan S4882 (Thunder K8QS Pro) -	  motherboard, among others. +	  If you say yes here you get support for the National +	  Semiconductor LM63 and LM64 remote diode digital temperature +	  sensors with integrated fan control.  Such chips are found +	  on the Tyan S4882 (Thunder K8QS Pro) motherboard, among +	  others.  	  This driver can also be built as a module.  If so, the module  	  will be called lm63. diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c index bf81aff7051d..776aeb3019d2 100644 --- a/drivers/hwmon/lm63.c +++ b/drivers/hwmon/lm63.c @@ -53,7 +53,7 @@   * Address is fully defined internally and cannot be changed.   */ -static const unsigned short normal_i2c[] = { 0x4c, I2C_CLIENT_END }; +static const unsigned short normal_i2c[] = { 0x18, 0x4c, 0x4e, I2C_CLIENT_END };  /*   * The LM63 registers @@ -131,12 +131,15 @@ static struct lm63_data *lm63_update_device(struct device *dev);  static int lm63_detect(struct i2c_client *client, struct i2c_board_info *info);  static void lm63_init_client(struct i2c_client *client); +enum chips { lm63, lm64 }; +  /*   * Driver data (common to all clients)   */  static const struct i2c_device_id lm63_id[] = { -	{ "lm63", 0 }, +	{ "lm63", lm63 }, +	{ "lm64", lm64 },  	{ }  };  MODULE_DEVICE_TABLE(i2c, lm63_id); @@ -422,6 +425,7 @@ static int lm63_detect(struct i2c_client *new_client,  	struct i2c_adapter *adapter = new_client->adapter;  	u8 man_id, chip_id, reg_config1, reg_config2;  	u8 reg_alert_status, reg_alert_mask; +	int address = new_client->addr;  	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))  		return -ENODEV; @@ -439,7 +443,6 @@ static int lm63_detect(struct i2c_client *new_client,  			 LM63_REG_ALERT_MASK);  	if (man_id != 0x01 /* National Semiconductor */ -	 || chip_id != 0x41 /* LM63 */  	 || (reg_config1 & 0x18) != 0x00  	 || (reg_config2 & 0xF8) != 0x00  	 || (reg_alert_status & 0x20) != 0x00 @@ -450,7 +453,12 @@ static int lm63_detect(struct i2c_client *new_client,  		return -ENODEV;  	} -	strlcpy(info->type, "lm63", I2C_NAME_SIZE); +	if (chip_id == 0x41 && address == 0x4c) +		strlcpy(info->type, "lm63", I2C_NAME_SIZE); +	else if (chip_id == 0x51 && (address == 0x18 || address == 0x4e)) +		strlcpy(info->type, "lm64", I2C_NAME_SIZE); +	else +		return -ENODEV;  	return 0;  } | 
