lm93 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. Kernel driver lm93
  2. ==================
  3. Supported chips:
  4. * National Semiconductor LM93
  5. Prefix 'lm93'
  6. Addresses scanned: I2C 0x2c-0x2e
  7. Datasheet: http://www.national.com/ds.cgi/LM/LM93.pdf
  8. Author:
  9. Mark M. Hoffman <mhoffman@lightlink.com>
  10. Ported to 2.6 by Eric J. Bowersox <ericb@aspsys.com>
  11. Adapted to 2.6.20 by Carsten Emde <ce@osadl.org>
  12. Modified for mainline integration by Hans J. Koch <hjk@linutronix.de>
  13. Module Parameters
  14. -----------------
  15. (specific to LM93)
  16. * init: integer
  17. Set to non-zero to force some initializations (default is 0).
  18. * disable_block: integer
  19. A "0" allows SMBus block data transactions if the host supports them. A "1"
  20. disables SMBus block data transactions. The default is 0.
  21. * vccp_limit_type: integer array (2)
  22. Configures in7 and in8 limit type, where 0 means absolute and non-zero
  23. means relative. "Relative" here refers to "Dynamic Vccp Monitoring using
  24. VID" from the datasheet. It greatly simplifies the interface to allow
  25. only one set of limits (absolute or relative) to be in operation at a
  26. time (even though the hardware is capable of enabling both). There's
  27. not a compelling use case for enabling both at once, anyway. The default
  28. is "0,0".
  29. * vid_agtl: integer
  30. A "0" configures the VID pins for V(ih) = 2.1V min, V(il) = 0.8V max.
  31. A "1" configures the VID pins for V(ih) = 0.8V min, V(il) = 0.4V max.
  32. (The latter setting is referred to as AGTL+ Compatible in the datasheet.)
  33. I.e. this parameter controls the VID pin input thresholds; if your VID
  34. inputs are not working, try changing this. The default value is "0".
  35. (common among sensor drivers)
  36. * force: short array (min = 1, max = 48)
  37. List of adapter,address pairs to assume to be present. Autodetection
  38. of the target device will still be attempted. Use one of the more
  39. specific force directives below if this doesn't detect the device.
  40. * force_lm93: short array (min = 1, max = 48)
  41. List of adapter,address pairs which are unquestionably assumed to contain
  42. a 'lm93' chip
  43. * ignore: short array (min = 1, max = 48)
  44. List of adapter,address pairs not to scan
  45. * ignore_range: short array (min = 1, max = 48)
  46. List of adapter,start-addr,end-addr triples not to scan
  47. * probe: short array (min = 1, max = 48)
  48. List of adapter,address pairs to scan additionally
  49. * probe_range: short array (min = 1, max = 48)
  50. List of adapter,start-addr,end-addr triples to scan additionally
  51. Hardware Description
  52. --------------------
  53. (from the datasheet)
  54. The LM93, hardware monitor, has a two wire digital interface compatible with
  55. SMBus 2.0. Using an 8-bit ADC, the LM93 measures the temperature of two remote
  56. diode connected transistors as well as its own die and 16 power supply
  57. voltages. To set fan speed, the LM93 has two PWM outputs that are each
  58. controlled by up to four temperature zones. The fancontrol algorithm is lookup
  59. table based. The LM93 includes a digital filter that can be invoked to smooth
  60. temperature readings for better control of fan speed. The LM93 has four
  61. tachometer inputs to measure fan speed. Limit and status registers for all
  62. measured values are included. The LM93 builds upon the functionality of
  63. previous motherboard management ASICs and uses some of the LM85 s features
  64. (i.e. smart tachometer mode). It also adds measurement and control support
  65. for dynamic Vccp monitoring and PROCHOT. It is designed to monitor a dual
  66. processor Xeon class motherboard with a minimum of external components.
  67. Driver Description
  68. ------------------
  69. This driver implements support for the National Semiconductor LM93.
  70. User Interface
  71. --------------
  72. #PROCHOT:
  73. The LM93 can monitor two #PROCHOT signals. The results are found in the
  74. sysfs files prochot1, prochot2, prochot1_avg, prochot2_avg, prochot1_max,
  75. and prochot2_max. prochot1_max and prochot2_max contain the user limits
  76. for #PROCHOT1 and #PROCHOT2, respectively. prochot1 and prochot2 contain
  77. the current readings for the most recent complete time interval. The
  78. value of prochot1_avg and prochot2_avg is something like a 2 period
  79. exponential moving average (but not quite - check the datasheet). Note
  80. that this third value is calculated by the chip itself. All values range
  81. from 0-255 where 0 indicates no throttling, and 255 indicates > 99.6%.
  82. The monitoring intervals for the two #PROCHOT signals is also configurable.
  83. These intervals can be found in the sysfs files prochot1_interval and
  84. prochot2_interval. The values in these files specify the intervals for
  85. #P1_PROCHOT and #P2_PROCHOT, respectively. Selecting a value not in this
  86. list will cause the driver to use the next largest interval. The available
  87. intervals are:
  88. #PROCHOT intervals: 0.73, 1.46, 2.9, 5.8, 11.7, 23.3, 46.6, 93.2, 186, 372
  89. It is possible to configure the LM93 to logically short the two #PROCHOT
  90. signals. I.e. when #P1_PROCHOT is asserted, the LM93 will automatically
  91. assert #P2_PROCHOT, and vice-versa. This mode is enabled by writing a
  92. non-zero integer to the sysfs file prochot_short.
  93. The LM93 can also override the #PROCHOT pins by driving a PWM signal onto
  94. one or both of them. When overridden, the signal has a period of 3.56 mS,
  95. a minimum pulse width of 5 clocks (at 22.5kHz => 6.25% duty cycle), and
  96. a maximum pulse width of 80 clocks (at 22.5kHz => 99.88% duty cycle).
  97. The sysfs files prochot1_override and prochot2_override contain boolean
  98. intgers which enable or disable the override function for #P1_PROCHOT and
  99. #P2_PROCHOT, respectively. The sysfs file prochot_override_duty_cycle
  100. contains a value controlling the duty cycle for the PWM signal used when
  101. the override function is enabled. This value ranges from 0 to 15, with 0
  102. indicating minimum duty cycle and 15 indicating maximum.
  103. #VRD_HOT:
  104. The LM93 can monitor two #VRD_HOT signals. The results are found in the
  105. sysfs files vrdhot1 and vrdhot2. There is one value per file: a boolean for
  106. which 1 indicates #VRD_HOT is asserted and 0 indicates it is negated. These
  107. files are read-only.
  108. Smart Tach Mode:
  109. (from the datasheet)
  110. If a fan is driven using a low-side drive PWM, the tachometer
  111. output of the fan is corrupted. The LM93 includes smart tachometer
  112. circuitry that allows an accurate tachometer reading to be
  113. achieved despite the signal corruption. In smart tach mode all
  114. four signals are measured within 4 seconds.
  115. Smart tach mode is enabled by the driver by writing 1 or 2 (associating the
  116. the fan tachometer with a pwm) to the sysfs file fan<n>_smart_tach. A zero
  117. will disable the function for that fan. Note that Smart tach mode cannot be
  118. enabled if the PWM output frequency is 22500 Hz (see below).
  119. Manual PWM:
  120. The LM93 has a fixed or override mode for the two PWM outputs (although, there
  121. are still some conditions that will override even this mode - see section
  122. 15.10.6 of the datasheet for details.) The sysfs files pwm1_override
  123. and pwm2_override are used to enable this mode; each is a boolean integer
  124. where 0 disables and 1 enables the manual control mode. The sysfs files pwm1
  125. and pwm2 are used to set the manual duty cycle; each is an integer (0-255)
  126. where 0 is 0% duty cycle, and 255 is 100%. Note that the duty cycle values
  127. are constrained by the hardware. Selecting a value which is not available
  128. will cause the driver to use the next largest value. Also note: when manual
  129. PWM mode is disabled, the value of pwm1 and pwm2 indicates the current duty
  130. cycle chosen by the h/w.
  131. PWM Output Frequency:
  132. The LM93 supports several different frequencies for the PWM output channels.
  133. The sysfs files pwm1_freq and pwm2_freq are used to select the frequency. The
  134. frequency values are constrained by the hardware. Selecting a value which is
  135. not available will cause the driver to use the next largest value. Also note
  136. that this parameter has implications for the Smart Tach Mode (see above).
  137. PWM Output Frequencies: 12, 36, 48, 60, 72, 84, 96, 22500 (h/w default)
  138. Automatic PWM:
  139. The LM93 is capable of complex automatic fan control, with many different
  140. points of configuration. To start, each PWM output can be bound to any
  141. combination of eight control sources. The final PWM is the largest of all
  142. individual control sources to which the PWM output is bound.
  143. The eight control sources are: temp1-temp4 (aka "zones" in the datasheet),
  144. #PROCHOT 1 & 2, and #VRDHOT 1 & 2. The bindings are expressed as a bitmask
  145. in the sysfs files pwm<n>_auto_channels, where a "1" enables the binding, and
  146. a "0" disables it. The h/w default is 0x0f (all temperatures bound).
  147. 0x01 - Temp 1
  148. 0x02 - Temp 2
  149. 0x04 - Temp 3
  150. 0x08 - Temp 4
  151. 0x10 - #PROCHOT 1
  152. 0x20 - #PROCHOT 2
  153. 0x40 - #VRDHOT 1
  154. 0x80 - #VRDHOT 2
  155. The function y = f(x) takes a source temperature x to a PWM output y. This
  156. function of the LM93 is derived from a base temperature and a table of 12
  157. temperature offsets. The base temperature is expressed in degrees C in the
  158. sysfs files temp<n>_auto_base. The offsets are expressed in cumulative
  159. degrees C, with the value of offset <i> for temperature value <n> being
  160. contained in the file temp<n>_auto_offset<i>. E.g. if the base temperature
  161. is 40C:
  162. offset # temp<n>_auto_offset<i> range pwm
  163. 1 0 - 25.00%
  164. 2 0 - 28.57%
  165. 3 1 40C - 41C 32.14%
  166. 4 1 41C - 42C 35.71%
  167. 5 2 42C - 44C 39.29%
  168. 6 2 44C - 46C 42.86%
  169. 7 2 48C - 50C 46.43%
  170. 8 2 50C - 52C 50.00%
  171. 9 2 52C - 54C 53.57%
  172. 10 2 54C - 56C 57.14%
  173. 11 2 56C - 58C 71.43%
  174. 12 2 58C - 60C 85.71%
  175. > 60C 100.00%
  176. Valid offsets are in the range 0C <= x <= 7.5C in 0.5C increments.
  177. There is an independent base temperature for each temperature channel. Note,
  178. however, there are only two tables of offsets: one each for temp[12] and
  179. temp[34]. Therefore, any change to e.g. temp1_auto_offset<i> will also
  180. affect temp2_auto_offset<i>.
  181. The LM93 can also apply hysteresis to the offset table, to prevent unwanted
  182. oscillation between two steps in the offsets table. These values are found in
  183. the sysfs files temp<n>_auto_offset_hyst. The value in this file has the
  184. same representation as in temp<n>_auto_offset<i>.
  185. If a temperature reading falls below the base value for that channel, the LM93
  186. will use the minimum PWM value. These values are found in the sysfs files
  187. temp<n>_auto_pwm_min. Note, there are only two minimums: one each for temp[12]
  188. and temp[34]. Therefore, any change to e.g. temp1_auto_pwm_min will also
  189. affect temp2_auto_pwm_min.
  190. PWM Spin-Up Cycle:
  191. A spin-up cycle occurs when a PWM output is commanded from 0% duty cycle to
  192. some value > 0%. The LM93 supports a minimum duty cycle during spin-up. These
  193. values are found in the sysfs files pwm<n>_auto_spinup_min. The value in this
  194. file has the same representation as other PWM duty cycle values. The
  195. duration of the spin-up cycle is also configurable. These values are found in
  196. the sysfs files pwm<n>_auto_spinup_time. The value in this file is
  197. the spin-up time in seconds. The available spin-up times are constrained by
  198. the hardware. Selecting a value which is not available will cause the driver
  199. to use the next largest value.
  200. Spin-up Durations: 0 (disabled, h/w default), 0.1, 0.25, 0.4, 0.7, 1.0,
  201. 2.0, 4.0
  202. #PROCHOT and #VRDHOT PWM Ramping:
  203. If the #PROCHOT or #VRDHOT signals are asserted while bound to a PWM output
  204. channel, the LM93 will ramp the PWM output up to 100% duty cycle in discrete
  205. steps. The duration of each step is configurable. There are two files, with
  206. one value each in seconds: pwm_auto_prochot_ramp and pwm_auto_vrdhot_ramp.
  207. The available ramp times are constrained by the hardware. Selecting a value
  208. which is not available will cause the driver to use the next largest value.
  209. Ramp Times: 0 (disabled, h/w default) to 0.75 in 0.05 second intervals
  210. Fan Boost:
  211. For each temperature channel, there is a boost temperature: if the channel
  212. exceeds this limit, the LM93 will immediately drive both PWM outputs to 100%.
  213. This limit is expressed in degrees C in the sysfs files temp<n>_auto_boost.
  214. There is also a hysteresis temperature for this function: after the boost
  215. limit is reached, the temperature channel must drop below this value before
  216. the boost function is disabled. This temperature is also expressed in degrees
  217. C in the sysfs files temp<n>_auto_boost_hyst.
  218. GPIO Pins:
  219. The LM93 can monitor the logic level of four dedicated GPIO pins as well as the
  220. four tach input pins. GPIO0-GPIO3 correspond to (fan) tach 1-4, respectively.
  221. All eight GPIOs are read by reading the bitmask in the sysfs file gpio. The
  222. LSB is GPIO0, and the MSB is GPIO7.
  223. LM93 Unique sysfs Files
  224. -----------------------
  225. file description
  226. -------------------------------------------------------------
  227. prochot<n> current #PROCHOT %
  228. prochot<n>_avg moving average #PROCHOT %
  229. prochot<n>_max limit #PROCHOT %
  230. prochot_short enable or disable logical #PROCHOT pin short
  231. prochot<n>_override force #PROCHOT assertion as PWM
  232. prochot_override_duty_cycle
  233. duty cycle for the PWM signal used when
  234. #PROCHOT is overridden
  235. prochot<n>_interval #PROCHOT PWM sampling interval
  236. vrdhot<n> 0 means negated, 1 means asserted
  237. fan<n>_smart_tach enable or disable smart tach mode
  238. pwm<n>_auto_channels select control sources for PWM outputs
  239. pwm<n>_auto_spinup_min minimum duty cycle during spin-up
  240. pwm<n>_auto_spinup_time duration of spin-up
  241. pwm_auto_prochot_ramp ramp time per step when #PROCHOT asserted
  242. pwm_auto_vrdhot_ramp ramp time per step when #VRDHOT asserted
  243. temp<n>_auto_base temperature channel base
  244. temp<n>_auto_offset[1-12]
  245. temperature channel offsets
  246. temp<n>_auto_offset_hyst
  247. temperature channel offset hysteresis
  248. temp<n>_auto_boost temperature channel boost (PWMs to 100%) limit
  249. temp<n>_auto_boost_hyst temperature channel boost hysteresis
  250. gpio input state of 8 GPIO pins; read-only
  251. Sample Configuration File
  252. -------------------------
  253. Here is a sample LM93 chip config for sensors.conf:
  254. ---------- cut here ----------
  255. chip "lm93-*"
  256. # VOLTAGE INPUTS
  257. # labels and scaling based on datasheet recommendations
  258. label in1 "+12V1"
  259. compute in1 @ * 12.945, @ / 12.945
  260. set in1_min 12 * 0.90
  261. set in1_max 12 * 1.10
  262. label in2 "+12V2"
  263. compute in2 @ * 12.945, @ / 12.945
  264. set in2_min 12 * 0.90
  265. set in2_max 12 * 1.10
  266. label in3 "+12V3"
  267. compute in3 @ * 12.945, @ / 12.945
  268. set in3_min 12 * 0.90
  269. set in3_max 12 * 1.10
  270. label in4 "FSB_Vtt"
  271. label in5 "3GIO"
  272. label in6 "ICH_Core"
  273. label in7 "Vccp1"
  274. label in8 "Vccp2"
  275. label in9 "+3.3V"
  276. set in9_min 3.3 * 0.90
  277. set in9_max 3.3 * 1.10
  278. label in10 "+5V"
  279. set in10_min 5.0 * 0.90
  280. set in10_max 5.0 * 1.10
  281. label in11 "SCSI_Core"
  282. label in12 "Mem_Core"
  283. label in13 "Mem_Vtt"
  284. label in14 "Gbit_Core"
  285. # Assuming R1/R2 = 4.1143, and 3.3V reference
  286. # -12V = (4.1143 + 1) * (@ - 3.3) + 3.3
  287. label in15 "-12V"
  288. compute in15 @ * 5.1143 - 13.57719, (@ + 13.57719) / 5.1143
  289. set in15_min -12 * 0.90
  290. set in15_max -12 * 1.10
  291. label in16 "+3.3VSB"
  292. set in16_min 3.3 * 0.90
  293. set in16_max 3.3 * 1.10
  294. # TEMPERATURE INPUTS
  295. label temp1 "CPU1"
  296. label temp2 "CPU2"
  297. label temp3 "LM93"
  298. # TACHOMETER INPUTS
  299. label fan1 "Fan1"
  300. set fan1_min 3000
  301. label fan2 "Fan2"
  302. set fan2_min 3000
  303. label fan3 "Fan3"
  304. set fan3_min 3000
  305. label fan4 "Fan4"
  306. set fan4_min 3000
  307. # PWM OUTPUTS
  308. label pwm1 "CPU1"
  309. label pwm2 "CPU2"