[PATCH] lm83: Add LM82 support
authorJordan Crouse <jordan.crouse@amd.com>
Thu, 23 Mar 2006 15:19:49 +0000 (16:19 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 22 Jun 2006 18:10:31 +0000 (11:10 -0700)
Add LM82 temperature sensor support (similar to the LM83,
but less featureful).

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Documentation/hwmon/lm83
drivers/hwmon/Kconfig
drivers/hwmon/lm83.c

index 061d9ed8ff43d4eda0dd093b630e2699f5213f21..74aa7ee1a3595ced93f5b48355b78f657a74929f 100644 (file)
@@ -7,6 +7,10 @@ Supported chips:
     Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
     Datasheet: Publicly available at the National Semiconductor website
                http://www.national.com/pf/LM/LM83.html
     Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
     Datasheet: Publicly available at the National Semiconductor website
                http://www.national.com/pf/LM/LM83.html
+  * National Semiconductor LM82
+    Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
+    Datasheet: Publicly available at the National Semiconductor website
+               http://www.national.com/pf/LM/LM82.html
 
 
 Author: Jean Delvare <khali@linux-fr.org>
 
 
 Author: Jean Delvare <khali@linux-fr.org>
@@ -15,10 +19,11 @@ Description
 -----------
 
 The LM83 is a digital temperature sensor. It senses its own temperature as
 -----------
 
 The LM83 is a digital temperature sensor. It senses its own temperature as
-well as the temperature of up to three external diodes. It is compatible
-with many other devices such as the LM84 and all other ADM1021 clones.
-The main difference between the LM83 and the LM84 in that the later can
-only sense the temperature of one external diode.
+well as the temperature of up to three external diodes. The LM82 is
+a stripped down version of the LM83 that only supports one external diode.
+Both are compatible with many other devices such as the LM84 and all
+other ADM1021 clones. The main difference between the LM83 and the LM84
+in that the later can only sense the temperature of one external diode.
 
 Using the adm1021 driver for a LM83 should work, but only two temperatures
 will be reported instead of four.
 
 Using the adm1021 driver for a LM83 should work, but only two temperatures
 will be reported instead of four.
@@ -36,6 +41,9 @@ Unconfirmed motherboards:
     Iwill       MPX2
     Soltek      SL-75DRV5
 
     Iwill       MPX2
     Soltek      SL-75DRV5
 
+The LM82 is confirmed to have been found on most AMD Geode reference
+designs and test platforms.
+
 The driver has been successfully tested by Magnus Forsström, who I'd
 like to thank here. More testers will be of course welcome.
 
 The driver has been successfully tested by Magnus Forsström, who I'd
 like to thank here. More testers will be of course welcome.
 
index 99cdc612d2c6a49ef32af53ca11b0342af587102..a6a8d66129b3e8d43fd41fe56b28c7172903f876 100644 (file)
@@ -236,11 +236,11 @@ config SENSORS_LM80
          will be called lm80.
 
 config SENSORS_LM83
          will be called lm80.
 
 config SENSORS_LM83
-       tristate "National Semiconductor LM83"
+       tristate "National Semiconductor LM83 and compatibles"
        depends on HWMON && I2C
        help
          If you say yes here you get support for National Semiconductor
        depends on HWMON && I2C
        help
          If you say yes here you get support for National Semiconductor
-         LM83 sensor chips.
+         LM82 and LM83 sensor chips.
 
          This driver can also be built as a module.  If so, the module
          will be called lm83.
 
          This driver can also be built as a module.  If so, the module
          will be called lm83.
index aac4ec2bf69499c79cc70ed4229c75e1ae08d272..2137d7879df668f1f91e46d94a77ed8a2adca043 100644 (file)
  * Since the datasheet omits to give the chip stepping code, I give it
  * here: 0x03 (at register 0xff).
  *
  * Since the datasheet omits to give the chip stepping code, I give it
  * here: 0x03 (at register 0xff).
  *
+ * Also supports the LM82 temp sensor, which is basically a stripped down
+ * model of the LM83.  Datasheet is here:
+ * http://www.national.com/pf/LM/LM82.html
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -52,7 +56,7 @@ static unsigned short normal_i2c[] = { 0x18, 0x19, 0x1a,
  * Insmod parameters
  */
 
  * Insmod parameters
  */
 
-I2C_CLIENT_INSMOD_1(lm83);
+I2C_CLIENT_INSMOD_2(lm83, lm82);
 
 /*
  * The LM83 registers
 
 /*
  * The LM83 registers
@@ -283,6 +287,9 @@ static int lm83_detect(struct i2c_adapter *adapter, int address, int kind)
                if (man_id == 0x01) { /* National Semiconductor */
                        if (chip_id == 0x03) {
                                kind = lm83;
                if (man_id == 0x01) { /* National Semiconductor */
                        if (chip_id == 0x03) {
                                kind = lm83;
+                       } else
+                       if (chip_id == 0x01) {
+                               kind = lm82;
                        }
                }
 
                        }
                }
 
@@ -296,6 +303,9 @@ static int lm83_detect(struct i2c_adapter *adapter, int address, int kind)
 
        if (kind == lm83) {
                name = "lm83";
 
        if (kind == lm83) {
                name = "lm83";
+       } else
+       if (kind == lm82) {
+               name = "lm82";
        }
 
        /* We can fill in the remaining client fields */
        }
 
        /* We can fill in the remaining client fields */
@@ -319,32 +329,46 @@ static int lm83_detect(struct i2c_adapter *adapter, int address, int kind)
                goto exit_detach;
        }
 
                goto exit_detach;
        }
 
+       /*
+        * The LM82 can only monitor one external diode which is
+        * at the same register as the LM83 temp3 entry - so we
+        * declare 1 and 3 common, and then 2 and 4 only for the LM83.
+        */
+
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp1_input.dev_attr);
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp1_input.dev_attr);
-       device_create_file(&new_client->dev,
-                          &sensor_dev_attr_temp2_input.dev_attr);
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp3_input.dev_attr);
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp3_input.dev_attr);
-       device_create_file(&new_client->dev,
-                          &sensor_dev_attr_temp4_input.dev_attr);
+
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp1_max.dev_attr);
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp1_max.dev_attr);
-       device_create_file(&new_client->dev,
-                          &sensor_dev_attr_temp2_max.dev_attr);
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp3_max.dev_attr);
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp3_max.dev_attr);
-       device_create_file(&new_client->dev,
-                          &sensor_dev_attr_temp4_max.dev_attr);
+
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp1_crit.dev_attr);
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp1_crit.dev_attr);
-       device_create_file(&new_client->dev,
-                          &sensor_dev_attr_temp2_crit.dev_attr);
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp3_crit.dev_attr);
        device_create_file(&new_client->dev,
                           &sensor_dev_attr_temp3_crit.dev_attr);
-       device_create_file(&new_client->dev,
-                          &sensor_dev_attr_temp4_crit.dev_attr);
+
        device_create_file(&new_client->dev, &dev_attr_alarms);
 
        device_create_file(&new_client->dev, &dev_attr_alarms);
 
+       if (kind == lm83) {
+               device_create_file(&new_client->dev,
+                                  &sensor_dev_attr_temp2_input.dev_attr);
+               device_create_file(&new_client->dev,
+                                  &sensor_dev_attr_temp4_input.dev_attr);
+
+               device_create_file(&new_client->dev,
+                                  &sensor_dev_attr_temp2_max.dev_attr);
+               device_create_file(&new_client->dev,
+                                  &sensor_dev_attr_temp4_max.dev_attr);
+
+               device_create_file(&new_client->dev,
+                                  &sensor_dev_attr_temp2_crit.dev_attr);
+               device_create_file(&new_client->dev,
+                                  &sensor_dev_attr_temp4_crit.dev_attr);
+       }
+
        return 0;
 
 exit_detach:
        return 0;
 
 exit_detach:
This page took 0.037177 seconds and 5 git commands to generate.