You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.8 KiB
66 lines
1.8 KiB
![]()
7 years ago
|
From 694f9bfb8efaef8a33e8992015ff9d0866faf4a2 Mon Sep 17 00:00:00 2001
|
||
|
From: Christian Lamparter <chunkeey@gmail.com>
|
||
|
Date: Sun, 17 Dec 2017 17:27:15 +0100
|
||
|
Subject: [PATCH 1/2] hwmon: tc654 add detection routine
|
||
|
|
||
|
This patch adds a detection routine for the TC654/TC655
|
||
|
chips. Both IDs are listed in the Datasheet.
|
||
|
|
||
|
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||
|
---
|
||
|
drivers/hwmon/tc654.c | 29 +++++++++++++++++++++++++++++
|
||
|
1 file changed, 29 insertions(+)
|
||
|
|
||
|
--- a/drivers/hwmon/tc654.c
|
||
|
+++ b/drivers/hwmon/tc654.c
|
||
|
@@ -64,6 +64,11 @@ enum tc654_regs {
|
||
|
/* Register data is read (and cached) at most once per second. */
|
||
|
#define TC654_UPDATE_INTERVAL HZ
|
||
|
|
||
|
+/* Manufacturer and Version Identification Register Values */
|
||
|
+#define TC654_MFR_ID_MICROCHIP 0x84
|
||
|
+#define TC654_VER_ID 0x00
|
||
|
+#define TC655_VER_ID 0x01
|
||
|
+
|
||
|
struct tc654_data {
|
||
|
struct i2c_client *client;
|
||
|
|
||
|
@@ -497,6 +502,29 @@ static const struct i2c_device_id tc654_
|
||
|
{}
|
||
|
};
|
||
|
|
||
|
+static int
|
||
|
+tc654_detect(struct i2c_client *new_client, struct i2c_board_info *info)
|
||
|
+{
|
||
|
+ struct i2c_adapter *adapter = new_client->adapter;
|
||
|
+ int manufacturer, product;
|
||
|
+
|
||
|
+ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||
|
+ return -ENODEV;
|
||
|
+
|
||
|
+ manufacturer = i2c_smbus_read_byte_data(new_client, TC654_REG_MFR_ID);
|
||
|
+ if (manufacturer != TC654_MFR_ID_MICROCHIP)
|
||
|
+ return -ENODEV;
|
||
|
+
|
||
|
+ product = i2c_smbus_read_byte_data(new_client, TC654_REG_VER_ID);
|
||
|
+ if (!((product == TC654_VER_ID) || (product == TC655_VER_ID)))
|
||
|
+ return -ENODEV;
|
||
|
+
|
||
|
+ strlcpy(info->type, product == TC654_VER_ID ? "tc654" : "tc655",
|
||
|
+ I2C_NAME_SIZE);
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
MODULE_DEVICE_TABLE(i2c, tc654_id);
|
||
|
|
||
|
static struct i2c_driver tc654_driver = {
|
||
|
@@ -505,6 +533,7 @@ static struct i2c_driver tc654_driver =
|
||
|
},
|
||
|
.probe = tc654_probe,
|
||
|
.id_table = tc654_id,
|
||
|
+ .detect = tc654_detect,
|
||
|
};
|
||
|
|
||
|
module_i2c_driver(tc654_driver);
|