hwmon: (ds1621) Add DS1731 chip support to ds1621 driver
These changes add DS1731 chip support to the ds1621 driver, Kconfig, and documentation. Signed-off-by: Robert Coulson <rob.coulson@gmail.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
2ec2819623
commit
260f81ffc1
|
@ -22,6 +22,11 @@ Supported chips:
|
||||||
Addresses scanned: none
|
Addresses scanned: none
|
||||||
Datasheet: Publicly available from www.maximintegrated.com
|
Datasheet: Publicly available from www.maximintegrated.com
|
||||||
|
|
||||||
|
* Maxim Integrated DS1731
|
||||||
|
Prefix: 'ds1731'
|
||||||
|
Addresses scanned: none
|
||||||
|
Datasheet: Publicly available from www.maximintegrated.com
|
||||||
|
|
||||||
Authors:
|
Authors:
|
||||||
Christian W. Zuckschwerdt <zany@triq.net>
|
Christian W. Zuckschwerdt <zany@triq.net>
|
||||||
valuable contributions by Jan M. Sendler <sendler@sendler.de>
|
valuable contributions by Jan M. Sendler <sendler@sendler.de>
|
||||||
|
@ -72,8 +77,8 @@ Temperature conversion of the DS1621 takes up to 1000ms; internal access to
|
||||||
non-volatile registers may last for 10ms or below.
|
non-volatile registers may last for 10ms or below.
|
||||||
|
|
||||||
The DS1625 is pin compatible and functionally equivalent with the DS1621,
|
The DS1625 is pin compatible and functionally equivalent with the DS1621,
|
||||||
but the DS1621 is meant to replace it. The DS1631 and DS1721 are also
|
but the DS1621 is meant to replace it. The DS1631, DS1721, and DS1731 are
|
||||||
pin compatible with the DS1621, but provide multi-resolution support.
|
also pin compatible with the DS1621, but provide multi-resolution support.
|
||||||
|
|
||||||
Since there is no version or vendor identification register, there is
|
Since there is no version or vendor identification register, there is
|
||||||
no unique identification for these devices. Therefore, explicit device
|
no unique identification for these devices. Therefore, explicit device
|
||||||
|
@ -84,26 +89,26 @@ explicitly instantiated, one device per address, in this address
|
||||||
range: 0x48..0x4f.
|
range: 0x48..0x4f.
|
||||||
|
|
||||||
The DS1721 is pin compatible with the DS1621, has an accuracy of +/- 1.0
|
The DS1721 is pin compatible with the DS1621, has an accuracy of +/- 1.0
|
||||||
degree Celsius over a -10 to +85 degree range, a minimum/maximum alarm
|
degree Celsius (from -10 to +85 degrees), a minimum/maximum alarm default
|
||||||
default setting of 75 and 80 degrees respectively, and a maximum conversion
|
setting of 75 and 80 degrees, and a maximum conversion time of 750ms.
|
||||||
time of 750ms.
|
|
||||||
|
|
||||||
In addition, the DS1721 supports four resolution settings from 9 to 12 bits
|
In addition, the DS1721 supports four resolution settings from 9 to 12 bits
|
||||||
(defined in degrees C per LSB: 0.5, 0.25, 0.125, and 0.0625, respectifully),
|
(defined in degrees C per LSB: 0.5, 0.25, 0.125, and 0.0625, respectively),
|
||||||
that are set at device power on to the highest resolution: 12-bits.
|
that are set at device power on to the highest resolution: 12-bits.
|
||||||
|
|
||||||
One additional note about the ds1721 is that although the data sheet says
|
One additional note about the ds1721 is that although the data sheet says
|
||||||
the temperature flags (THF and TLF) are used internally, these flags do
|
the temperature flags (THF and TLF) are used internally, these flags do
|
||||||
get set and cleared as the actual temperature crosses the min or max settings.
|
get set and cleared as the actual temperature crosses the min or max settings.
|
||||||
|
|
||||||
The DS1631 is also pin compatible with the DS1621 and feature compatible with
|
The DS1631 and DS1731 are pin compatible with the DS1621 and feature compatible
|
||||||
the DS1721, however the DS1631 accuracy is +/- 0.5 degree Celsius over the
|
with the DS1721. However, the DS1631 accuracy is +/- 0.5 degree Celsius (from 0
|
||||||
same range.
|
to +70 degrees), while the DS1731 accuracy is +/-1 degree Celsius (from -10 to
|
||||||
|
+85 degrees).
|
||||||
|
|
||||||
Changing the DS1631/1721 resolution mode affects the conversion time and can be
|
The resolution mode for the DS1631, DS1721, or DS1731 can be changed from
|
||||||
done from userspace, via the device 'update_interval' sysfs attribute. This
|
userspace, via the device 'update_interval' sysfs attribute. This attribute
|
||||||
attribute will normalize range of input values to the device maximum resolution
|
will normalize the range of input values to the device maximum resolution
|
||||||
values defined in the datasheet as such:
|
values defined in the datasheet as follows:
|
||||||
|
|
||||||
Resolution Conversion Time Input Range
|
Resolution Conversion Time Input Range
|
||||||
(C/LSB) (msec) (msec)
|
(C/LSB) (msec) (msec)
|
||||||
|
|
|
@ -357,6 +357,7 @@ config SENSORS_DS1621
|
||||||
- Dallas Semiconductor DS1625
|
- Dallas Semiconductor DS1625
|
||||||
- Maxim Integrated DS1631
|
- Maxim Integrated DS1631
|
||||||
- Maxim Integrated DS1721
|
- Maxim Integrated DS1721
|
||||||
|
- Maxim Integrated DS1731
|
||||||
|
|
||||||
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 ds1621.
|
will be called ds1621.
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
* resolution, a thermal alarm output (Tout), and user-defined minimum
|
* resolution, a thermal alarm output (Tout), and user-defined minimum
|
||||||
* and maximum temperature thresholds (TH and TL).
|
* and maximum temperature thresholds (TH and TL).
|
||||||
*
|
*
|
||||||
* The DS1625, DS1631, and DS1721 are pin compatible with the DS1621 and
|
* The DS1625, DS1631, DS1721, and DS1731 are pin compatible with the DS1621
|
||||||
* similar in operation, with slight variations as noted in the device
|
* and similar in operation, with slight variations as noted in the device
|
||||||
* datasheets (please refer to www.maximintegrated.com for specific
|
* datasheets (please refer to www.maximintegrated.com for specific
|
||||||
* device information).
|
* device information).
|
||||||
*
|
*
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
|
||||||
/* Supported devices */
|
/* Supported devices */
|
||||||
enum chips { ds1621, ds1625, ds1631, ds1721 };
|
enum chips { ds1621, ds1625, ds1631, ds1721, ds1731 };
|
||||||
|
|
||||||
/* Insmod parameters */
|
/* Insmod parameters */
|
||||||
static int polarity = -1;
|
static int polarity = -1;
|
||||||
|
@ -65,7 +65,7 @@ MODULE_PARM_DESC(polarity, "Output's polarity: 0 = active high, 1 = active low")
|
||||||
* 7 6 5 4 3 2 1 0
|
* 7 6 5 4 3 2 1 0
|
||||||
* |Done|THF |TLF |NVB | 1 | 0 |POL |1SHOT|
|
* |Done|THF |TLF |NVB | 1 | 0 |POL |1SHOT|
|
||||||
*
|
*
|
||||||
* - DS1631:
|
* - DS1631, DS1731:
|
||||||
* 7 6 5 4 3 2 1 0
|
* 7 6 5 4 3 2 1 0
|
||||||
* |Done|THF |TLF |NVB | R1 | R0 |POL |1SHOT|
|
* |Done|THF |TLF |NVB | R1 | R0 |POL |1SHOT|
|
||||||
*
|
*
|
||||||
|
@ -140,7 +140,7 @@ static inline int DS1621_TEMP_FROM_REG(u16 reg)
|
||||||
* TEMP: 0.001C/bit (-55C to +125C)
|
* TEMP: 0.001C/bit (-55C to +125C)
|
||||||
* REG:
|
* REG:
|
||||||
* - 1621, 1625: 0.5C/bit
|
* - 1621, 1625: 0.5C/bit
|
||||||
* - 1631, 1721: 0.0625C/bit
|
* - 1631, 1721, 1731: 0.0625C/bit
|
||||||
* Assume highest resolution and let the bits fall where they may..
|
* Assume highest resolution and let the bits fall where they may..
|
||||||
*/
|
*/
|
||||||
static inline u16 DS1621_TEMP_TO_REG(long temp)
|
static inline u16 DS1621_TEMP_TO_REG(long temp)
|
||||||
|
@ -176,6 +176,7 @@ static void ds1621_init_client(struct i2c_client *client)
|
||||||
break;
|
break;
|
||||||
case ds1631:
|
case ds1631:
|
||||||
case ds1721:
|
case ds1721:
|
||||||
|
case ds1731:
|
||||||
resol = (new_conf & DS1621_REG_CONFIG_RESOL) >>
|
resol = (new_conf & DS1621_REG_CONFIG_RESOL) >>
|
||||||
DS1621_REG_CONFIG_RESOL_SHIFT;
|
DS1621_REG_CONFIG_RESOL_SHIFT;
|
||||||
data->update_interval = ds1721_convrates[resol];
|
data->update_interval = ds1721_convrates[resol];
|
||||||
|
@ -406,6 +407,7 @@ static const struct i2c_device_id ds1621_id[] = {
|
||||||
{ "ds1625", ds1625 },
|
{ "ds1625", ds1625 },
|
||||||
{ "ds1631", ds1631 },
|
{ "ds1631", ds1631 },
|
||||||
{ "ds1721", ds1721 },
|
{ "ds1721", ds1721 },
|
||||||
|
{ "ds1731", ds1731 },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(i2c, ds1621_id);
|
MODULE_DEVICE_TABLE(i2c, ds1621_id);
|
||||||
|
|
Loading…
Reference in New Issue