hwmon: (lm93) Add support for LM94
Guenter Roeck [Mon, 17 Jan 2011 20:48:20 +0000 (12:48 -0800)]
This patch adds basic support for LM94 to the LM93 driver. LM94 specific
sensors and features are not supported.

Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Acked-by: Jean Delvare <khali@linux-fr.org>

Documentation/hwmon/lm93
drivers/hwmon/Kconfig
drivers/hwmon/lm93.c

index 7a10616..f3b2ad2 100644 (file)
@@ -6,6 +6,10 @@ Supported chips:
     Prefix 'lm93'
     Addresses scanned: I2C 0x2c-0x2e
     Datasheet: http://www.national.com/ds.cgi/LM/LM93.pdf
+  * National Semiconductor LM94
+    Prefix 'lm94'
+    Addresses scanned: I2C 0x2c-0x2e
+    Datasheet: http://www.national.com/ds.cgi/LM/LM94.pdf
 
 Authors:
        Mark M. Hoffman <mhoffman@lightlink.com>
@@ -56,6 +60,9 @@ previous motherboard management ASICs and uses some of the LM85's features
 for dynamic Vccp monitoring and PROCHOT. It is designed to monitor a dual
 processor Xeon class motherboard with a minimum of external components.
 
+LM94 is also supported in LM93 compatible mode. Extra sensors and features of
+LM94 are not supported.
+
 
 User Interface
 --------------
index 35f00da..773e484 100644 (file)
@@ -618,8 +618,8 @@ config SENSORS_LM93
        depends on I2C
        select HWMON_VID
        help
-         If you say yes here you get support for National Semiconductor LM93
-         sensor chips.
+         If you say yes here you get support for National Semiconductor LM93,
+         LM94, and compatible sensor chips.
 
          This driver can also be built as a module.  If so, the module
          will be called lm93.
index c9ed14e..3b43df4 100644 (file)
 #define LM93_MFR_ID            0x73
 #define LM93_MFR_ID_PROTOTYPE  0x72
 
+/* LM94 REGISTER VALUES */
+#define LM94_MFR_ID_2          0x7a
+#define LM94_MFR_ID            0x79
+#define LM94_MFR_ID_PROTOTYPE  0x78
+
 /* SMBus capabilities */
 #define LM93_SMBUS_FUNC_FULL (I2C_FUNC_SMBUS_BYTE_DATA | \
                I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA)
@@ -2504,6 +2509,7 @@ static int lm93_detect(struct i2c_client *client, struct i2c_board_info *info)
 {
        struct i2c_adapter *adapter = client->adapter;
        int mfr, ver;
+       const char *name;
 
        if (!i2c_check_functionality(adapter, LM93_SMBUS_FUNC_MIN))
                return -ENODEV;
@@ -2517,13 +2523,23 @@ static int lm93_detect(struct i2c_client *client, struct i2c_board_info *info)
        }
 
        ver = lm93_read_byte(client, LM93_REG_VER);
-       if (ver != LM93_MFR_ID && ver != LM93_MFR_ID_PROTOTYPE) {
+       switch (ver) {
+       case LM93_MFR_ID:
+       case LM93_MFR_ID_PROTOTYPE:
+               name = "lm93";
+               break;
+       case LM94_MFR_ID_2:
+       case LM94_MFR_ID:
+       case LM94_MFR_ID_PROTOTYPE:
+               name = "lm94";
+               break;
+       default:
                dev_dbg(&adapter->dev,
                        "detect failed, bad version id 0x%02x!\n", ver);
                return -ENODEV;
        }
 
-       strlcpy(info->type, "lm93", I2C_NAME_SIZE);
+       strlcpy(info->type, name, I2C_NAME_SIZE);
        dev_dbg(&adapter->dev,"loading %s at %d,0x%02x\n",
                client->name, i2c_adapter_id(client->adapter),
                client->addr);
@@ -2602,6 +2618,7 @@ static int lm93_remove(struct i2c_client *client)
 
 static const struct i2c_device_id lm93_id[] = {
        { "lm93", 0 },
+       { "lm94", 0 },
        { }
 };
 MODULE_DEVICE_TABLE(i2c, lm93_id);