瀏覽代碼

hwmon: (tmp421) Add support for TMP441 and TMP442

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>
Guenter Roeck 11 年之前
父節點
當前提交
05c77ab240
共有 3 個文件被更改,包括 33 次插入12 次删除
  1. 15 7
      Documentation/hwmon/tmp421
  2. 1 1
      drivers/hwmon/Kconfig
  3. 17 4
      drivers/hwmon/tmp421.c

+ 15 - 7
Documentation/hwmon/tmp421

@@ -14,6 +14,14 @@ Supported chips:
     Prefix: 'tmp423'
     Prefix: 'tmp423'
     Addresses scanned: I2C 0x4c and 0x4d
     Addresses scanned: I2C 0x4c and 0x4d
     Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp421.html
     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:
 Authors:
 	Andre Prendel <andre.prendel@gmx.de>
 	Andre Prendel <andre.prendel@gmx.de>
@@ -21,13 +29,13 @@ Authors:
 Description
 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 chips support only temperature measurement. The driver exports
 the temperature values via the following sysfs files:
 the temperature values via the following sysfs files:

+ 1 - 1
drivers/hwmon/Kconfig

@@ -1431,7 +1431,7 @@ config SENSORS_TMP421
 	depends on I2C
 	depends on I2C
 	help
 	help
 	  If you say yes here you get support for Texas Instruments TMP421,
 	  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
 	  This driver can also be built as a module.  If so, the module
 	  will be called tmp421.
 	  will be called tmp421.

+ 17 - 4
drivers/hwmon/tmp421.c

@@ -21,7 +21,7 @@
 
 
 /*
 /*
  * Driver for the Texas Instruments TMP421 SMBus temperature sensor IC.
  * 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>
 #include <linux/module.h>
@@ -39,7 +39,7 @@
 static const unsigned short normal_i2c[] = { 0x2a, 0x4c, 0x4d, 0x4e, 0x4f,
 static const unsigned short normal_i2c[] = { 0x2a, 0x4c, 0x4d, 0x4e, 0x4f,
 					     I2C_CLIENT_END };
 					     I2C_CLIENT_END };
 
 
-enum chips { tmp421, tmp422, tmp423 };
+enum chips { tmp421, tmp422, tmp423, tmp441, tmp442 };
 
 
 /* The TMP421 registers */
 /* The TMP421 registers */
 #define TMP421_STATUS_REG			0x08
 #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 TMP421_DEVICE_ID			0x21
 #define TMP422_DEVICE_ID			0x22
 #define TMP422_DEVICE_ID			0x22
 #define TMP423_DEVICE_ID			0x23
 #define TMP423_DEVICE_ID			0x23
+#define TMP441_DEVICE_ID			0x41
+#define TMP442_DEVICE_ID			0x42
 
 
 static const struct i2c_device_id tmp421_id[] = {
 static const struct i2c_device_id tmp421_id[] = {
 	{ "tmp421", 2 },
 	{ "tmp421", 2 },
 	{ "tmp422", 3 },
 	{ "tmp422", 3 },
 	{ "tmp423", 4 },
 	{ "tmp423", 4 },
+	{ "tmp441", 2 },
+	{ "tmp442", 3 },
 	{ }
 	{ }
 };
 };
 MODULE_DEVICE_TABLE(i2c, tmp421_id);
 MODULE_DEVICE_TABLE(i2c, tmp421_id);
@@ -235,7 +239,8 @@ static int tmp421_detect(struct i2c_client *client,
 {
 {
 	enum chips kind;
 	enum chips kind;
 	struct i2c_adapter *adapter = client->adapter;
 	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;
 	int addr = client->addr;
 	u8 reg;
 	u8 reg;
 
 
@@ -269,6 +274,14 @@ static int tmp421_detect(struct i2c_client *client,
 			return -ENODEV;
 			return -ENODEV;
 		kind = tmp423;
 		kind = tmp423;
 		break;
 		break;
+	case TMP441_DEVICE_ID:
+		kind = tmp441;
+		break;
+	case TMP442_DEVICE_ID:
+		if (addr != 0x4c && addr != 0x4d)
+			return -ENODEV;
+		kind = tmp442;
+		break;
 	default:
 	default:
 		return -ENODEV;
 		return -ENODEV;
 	}
 	}
@@ -319,5 +332,5 @@ static struct i2c_driver tmp421_driver = {
 module_i2c_driver(tmp421_driver);
 module_i2c_driver(tmp421_driver);
 
 
 MODULE_AUTHOR("Andre Prendel <andre.prendel@gmx.de>");
 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");
 MODULE_LICENSE("GPL");