MAX6642 chip detection and other stuff

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

I finally got MAX6642 samples, so I am able to play around with the chip.

The attached patch (on top of Per's most recent patch) works quite nicely.
Per, maybe you can just merge it with your patch and resubmit it.

While testing the chip, I found another little problem: the fault attribute is named
temp_fault. That will have to be renamed to temp2_fault, first because it reflects
a fault with the external diode and second to match the ABI. We will need a separate
patch to fix this problem.

Here is the output of i2cdump for the MAX6642 (with open/unconnected external sensor).

root@groeck-desktop:/home/groeck# i2cdump -y 5 0x48
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 18 ff 84 10 10 46 46 78 78 78 78 78 78 78 78 78    ?.???FFxxxxxxxxx
10: c0 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    ?@@@@@@@@@@@@@@@
20: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
30: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
40: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
50: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
60: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
70: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
80: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
90: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
a0: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
b0: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
c0: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
d0: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
e0: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40    @@@@@@@@@@@@@@@@
f0: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 4d 4d    @@@@@@@@@@@@@@MM
root@groeck-desktop:/home/groeck# modprobe max6642
root@groeck-desktop:/home/groeck# sensors
max6642-i2c-5-48
Adapter: i2c-devantech-iss at bus 001 device 007
temp1:        +24.0°C  (high = +70.0°C)
temp2:          FAULT  (high = +120.0°C)

Thanks,
Guenter
>From 197b9b4fb23c372de6d08afad4a0ebd72cfaadc6 Mon Sep 17 00:00:00 2001
From: Guenter Roeck <guenter.roeck@xxxxxxxxxxxx>
Date: Fri, 27 May 2011 21:39:59 -0700
Subject: [PATCH] hwmon: (max6642) Improve chip detection

Signed-off-by: Guenter Roeck <guenter.roeck@xxxxxxxxxxxx>
---
 drivers/hwmon/max6642.c |   35 ++++++++++++++++++-----------------
 1 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/drivers/hwmon/max6642.c b/drivers/hwmon/max6642.c
index 872155e..160853c 100644
--- a/drivers/hwmon/max6642.c
+++ b/drivers/hwmon/max6642.c
@@ -64,14 +64,6 @@ static const unsigned short normal_i2c[] = {
 #define MAX6642_REG_W_REMOTE_HIGH	0x0D
 
 /*
- * Registers for detection tests. These registers are not present and,
- * when read, will only return the last valid register read.
- */
-#define MAX6642_REG_R_DUMMY_1          0x04
-#define MAX6642_REG_R_DUMMY_2          0x06
-#define MAX6642_REG_R_DUMMY_3          0xFF
-
-/*
  * Conversions
  */
 
@@ -134,7 +126,7 @@ static int max6642_detect(struct i2c_client *client,
 			  struct i2c_board_info *info)
 {
 	struct i2c_adapter *adapter = client->adapter;
-	u8 reg_config, reg_status, man_id, dummy_reg;
+	u8 reg_config, reg_status, man_id;
 
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return -ENODEV;
@@ -145,16 +137,13 @@ static int max6642_detect(struct i2c_client *client,
 		return -ENODEV;
 
 	/* sanity check */
-	dummy_reg = i2c_smbus_read_byte_data(client, MAX6642_REG_R_DUMMY_1);
-	if (dummy_reg != 0x4D)
+	if (i2c_smbus_read_byte_data(client, 0x04) != 0x4D)
 		return -ENODEV;
 
-	dummy_reg = i2c_smbus_read_byte_data(client, MAX6642_REG_R_DUMMY_2);
-	if (dummy_reg != 0x4D)
+	if (i2c_smbus_read_byte_data(client, 0x06) != 0x4D)
 		return -ENODEV;
 
-	dummy_reg = i2c_smbus_read_byte_data(client, MAX6642_REG_R_DUMMY_3);
-	if (dummy_reg != 0x4D)
+	if (i2c_smbus_read_byte_data(client, 0xff) != 0x4D)
 		return -ENODEV;
 
 	/*
@@ -163,9 +152,21 @@ static int max6642_detect(struct i2c_client *client,
 	 * zero in the status register.
 	 */
 	reg_config = i2c_smbus_read_byte_data(client, MAX6642_REG_R_CONFIG);
+	if ((reg_config & 0x0f) != 0x00)
+		return -ENODEV;
+
+	/* in between, another round of sanity checks */
+	if (i2c_smbus_read_byte_data(client, 0x04) != reg_config)
+		return -ENODEV;
+
+	if (i2c_smbus_read_byte_data(client, 0x06) != reg_config)
+		return -ENODEV;
+
+	if (i2c_smbus_read_byte_data(client, 0xff) != reg_config)
+		return -ENODEV;
+
 	reg_status = i2c_smbus_read_byte_data(client, MAX6642_REG_R_STATUS);
-	if (((reg_config & 0x0f) != 0x00) ||
-	    ((reg_status & 0x2b) != 0x00))
+	if ((reg_status & 0x2b) != 0x00)
 		return -ENODEV;
 
 	strlcpy(info->type, "max6642", I2C_NAME_SIZE);
-- 
1.7.3.1

_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux