mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-10-17 10:59:31 +00:00
git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2028 7894878c-1315-0410-8ee3-d5d059ff63e0
126 lines
4.2 KiB
Plaintext
126 lines
4.2 KiB
Plaintext
Sensors chip driver for MAXIM MAX6650 / MAX6651 fan controllers
|
|
===============================================================
|
|
|
|
Chip notes
|
|
----------
|
|
|
|
The MAX6551 is a fan controller. It has two distinct functions:
|
|
|
|
1) Speed control, with feedback, for a single fan. The code can write
|
|
to a register requesting that the fan run at a certain speed, and the
|
|
chip will adjust the fan voltage until it reaches that speed. This
|
|
is called "closed loop" mode in the datasheet.
|
|
|
|
2) Speed measurement (tachometers) for up to four fans, including the
|
|
controlled one.
|
|
|
|
The MAX6550 is similar but only has one measurement tachometer.
|
|
|
|
Both chips have a few general purpose i/o pins, some of which can be
|
|
configured to have special functions. At the time of writing an overview
|
|
of the chip, with links to the datasheet, can be seen at:
|
|
|
|
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2296/ln/en
|
|
|
|
If that has moved searching for MAX6550 from Maxim's home page should
|
|
work.
|
|
|
|
Driver state
|
|
------------
|
|
|
|
Currently the driver provides the following entries in /proc/sys/
|
|
dev/sensors/max6650-xxx/:
|
|
|
|
fan1 through fan4 (read only): the current measured fan speeds, in
|
|
rpm.
|
|
|
|
speed (read/write): when written, sets the chip to closed loop mode and
|
|
sets the configured speed, in rpm, to the value written. When read returns
|
|
the configured speed, again in rpm.
|
|
|
|
xdump (read only): returns all of the chip register values, except the
|
|
tachometers. Used for debug, and should probably go away or be conditionally
|
|
compiled.
|
|
|
|
The MAX665x uses byte wide registers with various scaling factors and
|
|
some more or less complex equations (in the datasheet) relating register
|
|
values to real world values. The driver takes care of all of this.
|
|
|
|
Note that the measured speed ("fan1") never exactly matches the set speed
|
|
("speed") because of the coarse resolution of the underlying registers.
|
|
|
|
Assumptions
|
|
-----------
|
|
|
|
The driver assumes that:
|
|
|
|
o The MAX665x is running from its internal 254 kHz clock, not an
|
|
external clock.
|
|
|
|
o The monitored fans produce two pulses per rotation (This same
|
|
assumption is made by Maxim throughout the datasheet.)
|
|
|
|
o The tachometer count time (register 0x16) has been configured suitably
|
|
for the fans in use, perhaps by some boot code. The driver reads this
|
|
register to compute rpm, but never writes to it.
|
|
|
|
o The speed controller prescale (low three bits of register 0x04) has
|
|
been configured suitably for the fans in use, perhaps by some boot
|
|
code. The driver reads these bits to compute rpm, but never changes
|
|
them.
|
|
|
|
The driver currently never reads or writes any other configuration
|
|
(gpio config, alarms, 5V/12V setting).
|
|
|
|
Bugs
|
|
----
|
|
|
|
o The driver assumes too much: it should be possible to set more of the
|
|
configuration dynamically instead of assuming that some other code has
|
|
done it.
|
|
|
|
o It does not differentiate between a MAX6550 and a MAX6551, as I can
|
|
see no obvious way to do this. It has only been tested with a MAX6551
|
|
so if anyone gets a board with a MAX6550 to test with maybe something
|
|
will be revealed, such as the three missing tachometer registers
|
|
returning all ones or something. (OK, so maybe I should have called
|
|
this driver max6651, and ignored the max6650 totally...)
|
|
|
|
o The /proc names don't match the standards in doc/developers/proc,
|
|
as this chip doesn't map well to other fan controllers,
|
|
|
|
Detection notes
|
|
---------------
|
|
|
|
The module will autodetect the presence of a max6650 or max6651 at any
|
|
of the four possible I2C addresses for these devices. There is no ID
|
|
register, but there are several registers with all zero bits at the
|
|
high end. The driver checks that all of these are in fact zero before
|
|
declaring the chip to be a MAX6550/1.
|
|
|
|
sensors-detect
|
|
--------------
|
|
|
|
Support for MAX6650/1 has been added to sensors-detect. It has been
|
|
tested as correctly detecting a MAX6551 at I2C address 0x1B. Like the
|
|
driver, it cannot yet distinguish a MAX6650 and MAX6651.
|
|
|
|
prog/sensors
|
|
------------
|
|
|
|
Initial read-only support has been added to the "sensors" program.
|
|
|
|
Testing
|
|
-------
|
|
|
|
The driver and associated programs have been tested under Linux 2.4.18
|
|
running on an embedded Intel XScale processor (actually an IXP425 running
|
|
in big-endian mode) with a MAX6651 chip.
|
|
|
|
Author
|
|
------
|
|
|
|
John Morris (john.morris@spirentcom.com)
|
|
|
|
|