Re: [lm-sensors] [PATCH v2] hwmon: add driver for Microchip TC74

2015-06-21 Thread Guenter Roeck

On 06/21/2015 06:54 AM, Maciej S. Szmigiero wrote:

Add hwmon driver for the Microchip TC74.

The TC74 is a single-input 8-bit I2C temperature sensor,
with +-2 degrees centigrade accuracy.

Signed-off-by: Maciej Szmigiero 



Applied to -next.

Thanks,
Guenter

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at  http://www.tux.org/lkml/


[lm-sensors] [PATCH v2] hwmon: add driver for Microchip TC74

2015-06-21 Thread Maciej S. Szmigiero
Add hwmon driver for the Microchip TC74.

The TC74 is a single-input 8-bit I2C temperature sensor,
with +-2 degrees centigrade accuracy.

Signed-off-by: Maciej Szmigiero 

diff --git a/Documentation/hwmon/tc74 b/Documentation/hwmon/tc74
new file mode 100644
index 000..43027aa
--- /dev/null
+++ b/Documentation/hwmon/tc74
@@ -0,0 +1,20 @@
+Kernel driver tc74
+
+
+Supported chips:
+   * Microchip TC74
+ Prefix: 'tc74'
+ Datasheet: Publicly available at Microchip website.
+
+Description
+---
+
+Driver supports the above part.
+
+The tc74 has an 8-bit sensor, with 1 degree centigrade resolution
+and +- 2 degrees centigrade accuracy.
+
+Notes
+-
+
+Currently entering low power standby mode is not supported.
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 25d9e72..bbaaa2e 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -1452,6 +1452,16 @@ config SENSORS_INA2XX
  This driver can also be built as a module.  If so, the module
  will be called ina2xx.
 
+config SENSORS_TC74
+   tristate "Microchip TC74"
+   depends on I2C
+   help
+ If you say yes here you get support for Microchip TC74 single
+ input temperature sensor chips.
+
+ This driver can also be built as a module.  If so, the module
+ will be called tc74.
+
 config SENSORS_THMC50
tristate "Texas Instruments THMC50 / Analog Devices ADM1022"
depends on I2C
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index b4a40f1..ab90402 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -140,6 +140,7 @@ obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o
 obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
 obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
 obj-$(CONFIG_SENSORS_AMC6821)  += amc6821.o
+obj-$(CONFIG_SENSORS_TC74) += tc74.o
 obj-$(CONFIG_SENSORS_THMC50)   += thmc50.o
 obj-$(CONFIG_SENSORS_TMP102)   += tmp102.o
 obj-$(CONFIG_SENSORS_TMP103)   += tmp103.o
diff --git a/drivers/hwmon/tc74.c b/drivers/hwmon/tc74.c
new file mode 100644
index 000..f1fda35
--- /dev/null
+++ b/drivers/hwmon/tc74.c
@@ -0,0 +1,177 @@
+/*
+ * An hwmon driver for the Microchip TC74
+ *
+ * Copyright 2015 Maciej Szmigiero 
+ *
+ * Based on ad7414.c:
+ * Copyright 2006 Stefan Roese, DENX Software Engineering
+ * Copyright 2008 Sean MacLennan, PIKA Technologies
+ * Copyright 2008 Frank Edelhaeuser, Spansion Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* TC74 registers */
+#define TC74_REG_TEMP  0x00
+#define TC74_REG_CONFIG0x01
+
+struct tc74_data {
+   struct i2c_client   *client;
+   struct mutexlock;   /* atomic read data updates */
+   boolvalid;  /* validity of fields below */
+   unsigned long   next_update;/* In jiffies */
+   s8  temp_input; /* Temp value in dC */
+};
+
+static int tc74_update_device(struct device *dev)
+{
+   struct tc74_data *data = dev_get_drvdata(dev);
+   struct i2c_client *client = data->client;
+   int ret;
+
+   ret = mutex_lock_interruptible(>lock);
+   if (ret)
+   return ret;
+
+   if (time_after(jiffies, data->next_update) || !data->valid) {
+   s32 value;
+
+   value = i2c_smbus_read_byte_data(client, TC74_REG_CONFIG);
+   if (value < 0) {
+   dev_dbg(>dev, "TC74_REG_CONFIG read err %d\n",
+   (int)value);
+
+   ret = value;
+   goto ret_unlock;
+   }
+
+   if (!(value & BIT(6))) {
+   /* not ready yet */
+
+   ret = -EAGAIN;
+   goto ret_unlock;
+   }
+
+   value = i2c_smbus_read_byte_data(client, TC74_REG_TEMP);
+   if (value < 0) {
+   dev_dbg(>dev, "TC74_REG_TEMP read err %d\n",
+   (int)value);
+
+   ret = value;
+   goto ret_unlock;
+   }
+
+   data->temp_input = value;
+   data->next_update = jiffies + HZ / 4;
+   data->valid = true;
+   }
+
+ret_unlock:
+   mutex_unlock(>lock);
+
+   return ret;
+}
+
+static ssize_t show_temp_input(struct device *dev,
+  struct device_attribute *attr, char *buf)
+{
+   struct tc74_data *data = dev_get_drvdata(dev);
+   int ret;
+
+   ret = tc74_update_device(dev);
+   if (ret)
+   return ret;
+
+

[lm-sensors] [PATCH v2] hwmon: add driver for Microchip TC74

2015-06-21 Thread Maciej S. Szmigiero
Add hwmon driver for the Microchip TC74.

The TC74 is a single-input 8-bit I2C temperature sensor,
with +-2 degrees centigrade accuracy.

Signed-off-by: Maciej Szmigiero m...@maciej.szmigiero.name

diff --git a/Documentation/hwmon/tc74 b/Documentation/hwmon/tc74
new file mode 100644
index 000..43027aa
--- /dev/null
+++ b/Documentation/hwmon/tc74
@@ -0,0 +1,20 @@
+Kernel driver tc74
+
+
+Supported chips:
+   * Microchip TC74
+ Prefix: 'tc74'
+ Datasheet: Publicly available at Microchip website.
+
+Description
+---
+
+Driver supports the above part.
+
+The tc74 has an 8-bit sensor, with 1 degree centigrade resolution
+and +- 2 degrees centigrade accuracy.
+
+Notes
+-
+
+Currently entering low power standby mode is not supported.
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 25d9e72..bbaaa2e 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -1452,6 +1452,16 @@ config SENSORS_INA2XX
  This driver can also be built as a module.  If so, the module
  will be called ina2xx.
 
+config SENSORS_TC74
+   tristate Microchip TC74
+   depends on I2C
+   help
+ If you say yes here you get support for Microchip TC74 single
+ input temperature sensor chips.
+
+ This driver can also be built as a module.  If so, the module
+ will be called tc74.
+
 config SENSORS_THMC50
tristate Texas Instruments THMC50 / Analog Devices ADM1022
depends on I2C
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index b4a40f1..ab90402 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -140,6 +140,7 @@ obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o
 obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
 obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
 obj-$(CONFIG_SENSORS_AMC6821)  += amc6821.o
+obj-$(CONFIG_SENSORS_TC74) += tc74.o
 obj-$(CONFIG_SENSORS_THMC50)   += thmc50.o
 obj-$(CONFIG_SENSORS_TMP102)   += tmp102.o
 obj-$(CONFIG_SENSORS_TMP103)   += tmp103.o
diff --git a/drivers/hwmon/tc74.c b/drivers/hwmon/tc74.c
new file mode 100644
index 000..f1fda35
--- /dev/null
+++ b/drivers/hwmon/tc74.c
@@ -0,0 +1,177 @@
+/*
+ * An hwmon driver for the Microchip TC74
+ *
+ * Copyright 2015 Maciej Szmigiero m...@maciej.szmigiero.name
+ *
+ * Based on ad7414.c:
+ * Copyright 2006 Stefan Roese, DENX Software Engineering
+ * Copyright 2008 Sean MacLennan, PIKA Technologies
+ * Copyright 2008 Frank Edelhaeuser, Spansion Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include linux/bitops.h
+#include linux/err.h
+#include linux/hwmon.h
+#include linux/hwmon-sysfs.h
+#include linux/i2c.h
+#include linux/jiffies.h
+#include linux/module.h
+#include linux/mutex.h
+#include linux/slab.h
+#include linux/sysfs.h
+
+/* TC74 registers */
+#define TC74_REG_TEMP  0x00
+#define TC74_REG_CONFIG0x01
+
+struct tc74_data {
+   struct i2c_client   *client;
+   struct mutexlock;   /* atomic read data updates */
+   boolvalid;  /* validity of fields below */
+   unsigned long   next_update;/* In jiffies */
+   s8  temp_input; /* Temp value in dC */
+};
+
+static int tc74_update_device(struct device *dev)
+{
+   struct tc74_data *data = dev_get_drvdata(dev);
+   struct i2c_client *client = data-client;
+   int ret;
+
+   ret = mutex_lock_interruptible(data-lock);
+   if (ret)
+   return ret;
+
+   if (time_after(jiffies, data-next_update) || !data-valid) {
+   s32 value;
+
+   value = i2c_smbus_read_byte_data(client, TC74_REG_CONFIG);
+   if (value  0) {
+   dev_dbg(client-dev, TC74_REG_CONFIG read err %d\n,
+   (int)value);
+
+   ret = value;
+   goto ret_unlock;
+   }
+
+   if (!(value  BIT(6))) {
+   /* not ready yet */
+
+   ret = -EAGAIN;
+   goto ret_unlock;
+   }
+
+   value = i2c_smbus_read_byte_data(client, TC74_REG_TEMP);
+   if (value  0) {
+   dev_dbg(client-dev, TC74_REG_TEMP read err %d\n,
+   (int)value);
+
+   ret = value;
+   goto ret_unlock;
+   }
+
+   data-temp_input = value;
+   data-next_update = jiffies + HZ / 4;
+   data-valid = true;
+   }
+
+ret_unlock:
+   mutex_unlock(data-lock);
+
+   return ret;
+}
+
+static ssize_t show_temp_input(struct device *dev,
+  struct 

Re: [lm-sensors] [PATCH v2] hwmon: add driver for Microchip TC74

2015-06-21 Thread Guenter Roeck

On 06/21/2015 06:54 AM, Maciej S. Szmigiero wrote:

Add hwmon driver for the Microchip TC74.

The TC74 is a single-input 8-bit I2C temperature sensor,
with +-2 degrees centigrade accuracy.

Signed-off-by: Maciej Szmigiero m...@maciej.szmigiero.name



Applied to -next.

Thanks,
Guenter

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
Please read the FAQ at  http://www.tux.org/lkml/