Back to home page

OSCL-LXR

 
 

    


0001 Kernel driver ds1621
0002 ====================
0003 
0004 Supported chips:
0005 
0006   * Dallas Semiconductor / Maxim Integrated DS1621
0007 
0008     Prefix: 'ds1621'
0009 
0010     Addresses scanned: none
0011 
0012     Datasheet: Publicly available from www.maximintegrated.com
0013 
0014   * Dallas Semiconductor DS1625
0015 
0016     Prefix: 'ds1625'
0017 
0018     Addresses scanned: none
0019 
0020     Datasheet: Publicly available from www.datasheetarchive.com
0021 
0022   * Maxim Integrated DS1631
0023 
0024     Prefix: 'ds1631'
0025 
0026     Addresses scanned: none
0027 
0028     Datasheet: Publicly available from www.maximintegrated.com
0029 
0030   * Maxim Integrated DS1721
0031 
0032     Prefix: 'ds1721'
0033 
0034     Addresses scanned: none
0035 
0036     Datasheet: Publicly available from www.maximintegrated.com
0037 
0038   * Maxim Integrated DS1731
0039 
0040     Prefix: 'ds1731'
0041 
0042     Addresses scanned: none
0043 
0044     Datasheet: Publicly available from www.maximintegrated.com
0045 
0046 Authors:
0047       - Christian W. Zuckschwerdt <zany@triq.net>
0048       - valuable contributions by Jan M. Sendler <sendler@sendler.de>
0049       - ported to 2.6 by Aurelien Jarno <aurelien@aurel32.net>
0050         with the help of Jean Delvare <jdelvare@suse.de>
0051 
0052 Module Parameters
0053 ------------------
0054 
0055 * polarity int
0056   Output's polarity:
0057 
0058   * 0 = active high,
0059   * 1 = active low
0060 
0061 Description
0062 -----------
0063 
0064 The DS1621 is a (one instance) digital thermometer and thermostat. It has
0065 both high and low temperature limits which can be user defined (i.e.
0066 programmed into non-volatile on-chip registers). Temperature range is -55
0067 degree Celsius to +125 in 0.5 increments. You may convert this into a
0068 Fahrenheit range of -67 to +257 degrees with 0.9 steps. If polarity
0069 parameter is not provided, original value is used.
0070 
0071 As for the thermostat, behavior can also be programmed using the polarity
0072 toggle. On the one hand ("heater"), the thermostat output of the chip,
0073 Tout, will trigger when the low limit temperature is met or underrun and
0074 stays high until the high limit is met or exceeded. On the other hand
0075 ("cooler"), vice versa. That way "heater" equals "active low", whereas
0076 "conditioner" equals "active high". Please note that the DS1621 data sheet
0077 is somewhat misleading in this point since setting the polarity bit does
0078 not simply invert Tout.
0079 
0080 A second thing is that, during extensive testing, Tout showed a tolerance
0081 of up to +/- 0.5 degrees even when compared against precise temperature
0082 readings. Be sure to have a high vs. low temperature limit gap of al least
0083 1.0 degree Celsius to avoid Tout "bouncing", though!
0084 
0085 The alarm bits are set when the high or low limits are met or exceeded and
0086 are reset by the module as soon as the respective temperature ranges are
0087 left.
0088 
0089 The alarm registers are in no way suitable to find out about the actual
0090 status of Tout. They will only tell you about its history, whether or not
0091 any of the limits have ever been met or exceeded since last power-up or
0092 reset. Be aware: When testing, it showed that the status of Tout can change
0093 with neither of the alarms set.
0094 
0095 Since there is no version or vendor identification register, there is
0096 no unique identification for these devices. Therefore, explicit device
0097 instantiation is required for correct device identification and functionality
0098 (one device per address in this address range: 0x48..0x4f).
0099 
0100 The DS1625 is pin compatible and functionally equivalent with the DS1621,
0101 but the DS1621 is meant to replace it. The DS1631, DS1721, and DS1731 are
0102 also pin compatible with the DS1621 and provide multi-resolution support.
0103 
0104 Additionally, the DS1721 data sheet says the temperature flags (THF and TLF)
0105 are used internally, however, these flags do get set and cleared as the actual
0106 temperature crosses the min or max settings (which by default are set to 75
0107 and 80 degrees respectively).
0108 
0109 Temperature Conversion
0110 ----------------------
0111 
0112 - DS1621 - 750ms (older devices may take up to 1000ms)
0113 - DS1625 - 500ms
0114 - DS1631 - 93ms..750ms for 9..12 bits resolution, respectively.
0115 - DS1721 - 93ms..750ms for 9..12 bits resolution, respectively.
0116 - DS1731 - 93ms..750ms for 9..12 bits resolution, respectively.
0117 
0118 Note:
0119 On the DS1621, internal access to non-volatile registers may last for 10ms
0120 or less (unverified on the other devices).
0121 
0122 Temperature Accuracy
0123 --------------------
0124 
0125 - DS1621: +/- 0.5 degree Celsius (from 0 to +70 degrees)
0126 - DS1625: +/- 0.5 degree Celsius (from 0 to +70 degrees)
0127 - DS1631: +/- 0.5 degree Celsius (from 0 to +70 degrees)
0128 - DS1721: +/- 1.0 degree Celsius (from -10 to +85 degrees)
0129 - DS1731: +/- 1.0 degree Celsius (from -10 to +85 degrees)
0130 
0131 .. Note::
0132 
0133    Please refer to the device datasheets for accuracy at other temperatures.
0134 
0135 Temperature Resolution:
0136 -----------------------
0137 As mentioned above, the DS1631, DS1721, and DS1731 provide multi-resolution
0138 support, which is achieved via the R0 and R1 config register bits, where:
0139 
0140 R0..R1
0141 ------
0142 
0143 == ==  ===============================
0144 R0 R1
0145 == ==  ===============================
0146  0  0  9 bits, 0.5 degrees Celsius
0147  1  0  10 bits, 0.25 degrees Celsius
0148  0  1  11 bits, 0.125 degrees Celsius
0149  1  1  12 bits, 0.0625 degrees Celsius
0150 == ==  ===============================
0151 
0152 .. Note::
0153 
0154    At initial device power-on, the default resolution is set to 12-bits.
0155 
0156 The resolution mode for the DS1631, DS1721, or DS1731 can be changed from
0157 userspace, via the device 'update_interval' sysfs attribute. This attribute
0158 will normalize the range of input values to the device maximum resolution
0159 values defined in the datasheet as follows:
0160 
0161 ============= ================== ===============
0162 Resolution    Conversion Time    Input Range
0163  (C/LSB)       (msec)             (msec)
0164 ============= ================== ===============
0165 0.5             93.75              0....94
0166 0.25            187.5              95...187
0167 0.125           375                188..375
0168 0.0625          750                376..infinity
0169 ============= ================== ===============
0170 
0171 The following examples show how the 'update_interval' attribute can be
0172 used to change the conversion time::
0173 
0174   $ cat update_interval
0175   750
0176   $ cat temp1_input
0177   22062
0178   $
0179   $ echo 300 > update_interval
0180   $ cat update_interval
0181   375
0182   $ cat temp1_input
0183   22125
0184   $
0185   $ echo 150 > update_interval
0186   $ cat update_interval
0187   188
0188   $ cat temp1_input
0189   22250
0190   $
0191   $ echo 1 > update_interval
0192   $ cat update_interval
0193   94
0194   $ cat temp1_input
0195   22000
0196   $
0197   $ echo 1000 > update_interval
0198   $ cat update_interval
0199   750
0200   $ cat temp1_input
0201   22062
0202   $
0203 
0204 As shown, the ds1621 driver automatically adjusts the 'update_interval'
0205 user input, via a step function. Reading back the 'update_interval' value
0206 after a write operation provides the conversion time used by the device.
0207 
0208 Mathematically, the resolution can be derived from the conversion time
0209 via the following function:
0210 
0211    g(x) = 0.5 * [minimum_conversion_time/x]
0212 
0213 where:
0214 
0215  - 'x' = the output from 'update_interval'
0216  - 'g(x)' = the resolution in degrees C per LSB.
0217  - 93.75ms = minimum conversion time