hwmon: (tmp421) Add support for TMP441 and TMP442
authorGuenter Roeck <linux@roeck-us.net>
Sat, 12 Apr 2014 23:12:06 +0000 (16:12 -0700)
committerGuenter Roeck <linux@roeck-us.net>
Mon, 4 Aug 2014 14:01:38 +0000 (07:01 -0700)
TMP441 and TMP442 are compatible to TMP421 and TMP422.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Jean Delvare <jdelvare@suse.de>
Documentation/hwmon/tmp421
drivers/hwmon/Kconfig
drivers/hwmon/tmp421.c

index d0e77143077f65a08b0f72c68065dc5f0f4b21b7..9e6fe5549ca1d0df68562fc434339faa41e46a2e 100644 (file)
@@ -14,6 +14,14 @@ Supported chips:
     Prefix: 'tmp423'
     Addresses scanned: I2C 0x4c and 0x4d
     Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp421.html
+  * Texas Instruments TMP441
+    Prefix: 'tmp441'
+    Addresses scanned: I2C 0x2a, 0x4c, 0x4d, 0x4e and 0x4f
+    Datasheet: http://www.ti.com/product/tmp441
+  * Texas Instruments TMP442
+    Prefix: 'tmp442'
+    Addresses scanned: I2C 0x4c and 0x4d
+    Datasheet: http://www.ti.com/product/tmp442
 
 Authors:
        Andre Prendel <andre.prendel@gmx.de>
@@ -21,13 +29,13 @@ Authors:
 Description
 -----------
 
-This driver implements support for Texas Instruments TMP421, TMP422
-and TMP423 temperature sensor chips. These chips implement one local
-and up to one (TMP421), up to two (TMP422) or up to three (TMP423)
-remote sensors. Temperature is measured in degrees Celsius. The chips
-are wired over I2C/SMBus and specified over a temperature range of -40
-to +125 degrees Celsius. Resolution for both the local and remote
-channels is 0.0625 degree C.
+This driver implements support for Texas Instruments TMP421, TMP422,
+TMP423, TMP441, and TMP442 temperature sensor chips. These chips
+implement one local and up to one (TMP421, TMP441), up to two (TMP422,
+TMP442) or up to three (TMP423) remote sensors. Temperature is measured
+in degrees Celsius. The chips are wired over I2C/SMBus and specified
+over a temperature range of -40 to +125 degrees Celsius. Resolution
+for both the local and remote channels is 0.0625 degree C.
 
 The chips support only temperature measurement. The driver exports
 the temperature values via the following sysfs files:
index ae1e2160c1b5ca7b28a1ad241d4fa2e79065d502..37908ff8f7ff061578ee9eaf61454544d35e7e87 100644 (file)
@@ -1431,7 +1431,7 @@ config SENSORS_TMP421
        depends on I2C
        help
          If you say yes here you get support for Texas Instruments TMP421,
-         TMP422 and TMP423 temperature sensor chips.
+         TMP422, TMP423, TMP441, and TMP442 temperature sensor chips.
 
          This driver can also be built as a module.  If so, the module
          will be called tmp421.
index 9438c1bd5d59ea161168e00f6af4cd595d6af979..2ae383f737b4f54fca9317c0770eb1efc612504e 100644 (file)
@@ -21,7 +21,7 @@
 
 /*
  * Driver for the Texas Instruments TMP421 SMBus temperature sensor IC.
- * Supported models: TMP421, TMP422, TMP423
+ * Supported models: TMP421, TMP422, TMP423, TMP441, TMP442
  */
 
 #include <linux/module.h>
@@ -39,7 +39,7 @@
 static const unsigned short normal_i2c[] = { 0x2a, 0x4c, 0x4d, 0x4e, 0x4f,
                                             I2C_CLIENT_END };
 
-enum chips { tmp421, tmp422, tmp423 };
+enum chips { tmp421, tmp422, tmp423, tmp441, tmp442 };
 
 /* The TMP421 registers */
 #define TMP421_STATUS_REG                      0x08
@@ -60,11 +60,15 @@ static const u8 TMP421_TEMP_LSB[4]          = { 0x10, 0x11, 0x12, 0x13 };
 #define TMP421_DEVICE_ID                       0x21
 #define TMP422_DEVICE_ID                       0x22
 #define TMP423_DEVICE_ID                       0x23
+#define TMP441_DEVICE_ID                       0x41
+#define TMP442_DEVICE_ID                       0x42
 
 static const struct i2c_device_id tmp421_id[] = {
        { "tmp421", 2 },
        { "tmp422", 3 },
        { "tmp423", 4 },
+       { "tmp441", 2 },
+       { "tmp442", 3 },
        { }
 };
 MODULE_DEVICE_TABLE(i2c, tmp421_id);
@@ -235,7 +239,8 @@ static int tmp421_detect(struct i2c_client *client,
 {
        enum chips kind;
        struct i2c_adapter *adapter = client->adapter;
-       const char *names[] = { "TMP421", "TMP422", "TMP423" };
+       const char * const names[] = { "TMP421", "TMP422", "TMP423",
+                                      "TMP441", "TMP442" };
        int addr = client->addr;
        u8 reg;
 
@@ -269,6 +274,14 @@ static int tmp421_detect(struct i2c_client *client,
                        return -ENODEV;
                kind = tmp423;
                break;
+       case TMP441_DEVICE_ID:
+               kind = tmp441;
+               break;
+       case TMP442_DEVICE_ID:
+               if (addr != 0x4c && addr != 0x4d)
+                       return -ENODEV;
+               kind = tmp442;
+               break;
        default:
                return -ENODEV;
        }
@@ -319,5 +332,5 @@ static struct i2c_driver tmp421_driver = {
 module_i2c_driver(tmp421_driver);
 
 MODULE_AUTHOR("Andre Prendel <andre.prendel@gmx.de>");
-MODULE_DESCRIPTION("Texas Instruments TMP421/422/423 temperature sensor driver");
+MODULE_DESCRIPTION("Texas Instruments TMP421/422/423/441/442 temperature sensor driver");
 MODULE_LICENSE("GPL");