Kernel driver ds1621
====================

Supported chips:

  * Dallas Semiconductor / Maxim Integrated DS1621

    Prefix: 'ds1621'

    Addresses scanned: none

    Datasheet: Publicly available from www.maximintegrated.com

  * Dallas Semiconductor DS1625

    Prefix: 'ds1625'

    Addresses scanned: none

    Datasheet: Publicly available from www.datasheetarchive.com

  * Maxim Integrated DS1631

    Prefix: 'ds1631'

    Addresses scanned: none

    Datasheet: Publicly available from www.maximintegrated.com

  * Maxim Integrated DS1721

    Prefix: 'ds1721'

    Addresses scanned: none

    Datasheet: Publicly available from www.maximintegrated.com

  * Maxim Integrated DS1731

    Prefix: 'ds1731'

    Addresses scanned: none

    Datasheet: Publicly available from www.maximintegrated.com

Authors:
      - Christian W. Zuckschwerdt <zany@triq.net>
      - valuable contributions by Jan M. Sendler <sendler@sendler.de>
      - ported to 2.6 by Aurelien Jarno <aurelien@aurel32.net>
	with the help of Jean Delvare <jdelvare@suse.de>

Module Parameters
------------------

* polarity int
  Output's polarity:

  * 0 = active high,
  * 1 = active low

Description
-----------

The DS1621 is a (one instance) digital thermometer and thermostat. It has
both high and low temperature limits which can be user defined (i.e.
programmed into non-volatile on-chip registers). Temperature range is -55
degree Celsius to +125 in 0.5 increments. You may convert this into a
Fahrenheit range of -67 to +257 degrees with 0.9 steps. If polarity
parameter is not provided, original value is used.

As for the thermostat, behavior can also be programmed using the polarity
toggle. On the one hand ("heater"), the thermostat output of the chip,
Tout, will trigger when the low limit temperature is met or underrun and
stays high until the high limit is met or exceeded. On the other hand
("cooler"), vice versa. That way "heater" equals "active low", whereas
"conditioner" equals "active high". Please note that the DS1621 data sheet
is somewhat misleading in this point since setting the polarity bit does
not simply invert Tout.

A second thing is that, during extensive testing, Tout showed a tolerance
of up to +/- 0.5 degrees even when compared against precise temperature
readings. Be sure to have a high vs. low temperature limit gap of al least
1.0 degree Celsius to avoid Tout "bouncing", though!

The alarm bits are set when the high or low limits are met or exceeded and
are reset by the module as soon as the respective temperature ranges are
left.

The alarm registers are in no way suitable to find out about the actual
status of Tout. They will only tell you about its history, whether or not
any of the limits have ever been met or exceeded since last power-up or
reset. Be aware: When testing, it showed that the status of Tout can change
with neither of the alarms set.

Since there is no version or vendor identification register, there is
no unique identification for these devices. Therefore, explicit device
instantiation is required for correct device identification and functionality
(one device per address in this address range: 0x48..0x4f).

The DS1625 is pin compatible and functionally equivalent with the DS1621,
but the DS1621 is meant to replace it. The DS1631, DS1721, and DS1731 are
also pin compatible with the DS1621 and provide multi-resolution support.

Additionally, the DS1721 data sheet says the temperature flags (THF and TLF)
are used internally, however, these flags do get set and cleared as the actual
temperature crosses the min or max settings (which by default are set to 75
and 80 degrees respectively).

Temperature Conversion
----------------------

- DS1621 - 750ms (older devices may take up to 1000ms)
- DS1625 - 500ms
- DS1631 - 93ms..750ms for 9..12 bits resolution, respectively.
- DS1721 - 93ms..750ms for 9..12 bits resolution, respectively.
- DS1731 - 93ms..750ms for 9..12 bits resolution, respectively.

Note:
On the DS1621, internal access to non-volatile registers may last for 10ms
or less (unverified on the other devices).

Temperature Accuracy
--------------------

- DS1621: +/- 0.5 degree Celsius (from 0 to +70 degrees)
- DS1625: +/- 0.5 degree Celsius (from 0 to +70 degrees)
- DS1631: +/- 0.5 degree Celsius (from 0 to +70 degrees)
- DS1721: +/- 1.0 degree Celsius (from -10 to +85 degrees)
- DS1731: +/- 1.0 degree Celsius (from -10 to +85 degrees)

.. Note::

   Please refer to the device datasheets for accuracy at other temperatures.

Temperature Resolution:
-----------------------
As mentioned above, the DS1631, DS1721, and DS1731 provide multi-resolution
support, which is achieved via the R0 and R1 config register bits, where:

R0..R1
------

== ==  ===============================
R0 R1
== ==  ===============================
 0  0  9 bits, 0.5 degrees Celsius
 1  0  10 bits, 0.25 degrees Celsius
 0  1  11 bits, 0.125 degrees Celsius
 1  1  12 bits, 0.0625 degrees Celsius
== ==  ===============================

.. Note::

   At initial device power-on, the default resolution is set to 12-bits.

The resolution mode for the DS1631, DS1721, or DS1731 can be changed from
userspace, via the device 'update_interval' sysfs attribute. This attribute
will normalize the range of input values to the device maximum resolution
values defined in the datasheet as follows:

============= ================== ===============
Resolution    Conversion Time    Input Range
 (C/LSB)       (msec)             (msec)
============= ================== ===============
0.5             93.75              0....94
0.25            187.5              95...187
0.125           375                188..375
0.0625          750                376..infinity
============= ================== ===============

The following examples show how the 'update_interval' attribute can be
used to change the conversion time::

  $ cat update_interval
  750
  $ cat temp1_input
  22062
  $
  $ echo 300 > update_interval
  $ cat update_interval
  375
  $ cat temp1_input
  22125
  $
  $ echo 150 > update_interval
  $ cat update_interval
  188
  $ cat temp1_input
  22250
  $
  $ echo 1 > update_interval
  $ cat update_interval
  94
  $ cat temp1_input
  22000
  $
  $ echo 1000 > update_interval
  $ cat update_interval
  750
  $ cat temp1_input
  22062
  $

As shown, the ds1621 driver automatically adjusts the 'update_interval'
user input, via a step function. Reading back the 'update_interval' value
after a write operation provides the conversion time used by the device.

Mathematically, the resolution can be derived from the conversion time
via the following function:

   g(x) = 0.5 * [minimum_conversion_time/x]

where:

 - 'x' = the output from 'update_interval'
 - 'g(x)' = the resolution in degrees C per LSB.
 - 93.75ms = minimum conversion time
