OpenWrt – Rev 4

Subversion Repositories:
Rev:
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);