Kernel driver smsc47b397
========================

Supported chips:
  * SMSC LPC47B397-NC
  * SMSC SCH5307-NS
  * SMSC SCH5317
    Prefix: 'smsc47b397'
    Addresses scanned: none, address read from Super I/O config space
    Datasheet: In this file

Authors: Mark M. Hoffman <mhoffman@lightlink.com>
         Utilitek Systems, Inc.

November 23, 2004

The following specification describes the SMSC LPC47B397-NC[1] sensor chip
(for which there is no public datasheet available). This document was
provided by Craig Kelly (In-Store Broadcast Network) and edited/corrected
by Mark M. Hoffman <mhoffman@lightlink.com>.

[1] And SMSC SCH5307-NS and SCH5317, which have different device IDs but are
otherwise compatible.

* * * * *

Methods for detecting the HP SIO and reading the thermal data on a dc7100.

The thermal information on the dc7100 is contained in the SIO Hardware Monitor
(HWM). The information is accessed through an index/data pair. The index/data
pair is located at the HWM Base Address + 0 and the HWM Base Address + 1. The
HWM Base address can be obtained from Logical Device 8, registers 0x60 (MSB)
and 0x61 (LSB). Currently we are using 0x480 for the HWM Base Address and
0x480 and 0x481 for the index/data pair.

Reading temperature information.
The temperature information is located in the following registers:
Temp1		0x25	(Currently, this reflects the CPU temp on all systems).
Temp2		0x26
Temp3		0x27
Temp4		0x80

Programming Example
The following is an example of how to read the HWM temperature registers:
MOV	DX,480H
MOV	AX,25H
OUT	DX,AL
MOV	DX,481H
IN	AL,DX

AL contains the data in hex, the temperature in Celsius is the decimal
equivalent.

Ex: If AL contains 0x2A, the temperature is 42 degrees C.

Reading tach information.
The fan speed information is located in the following registers:
		LSB	MSB
Tach1		0x28	0x29	(Currently, this reflects the CPU
				fan speed on all systems).
Tach2		0x2A	0x2B
Tach3		0x2C	0x2D
Tach4		0x2E	0x2F

Important!!!
Reading the tach LSB locks the tach MSB.
The LSB Must be read first.

How to convert the tach reading to RPM.
The tach reading (TCount) is given by: (Tach MSB * 256) + (Tach LSB)
The SIO counts the number of 90kHz (11.111us) pulses per revolution.
RPM = 60/(TCount * 11.111us)

Example:
Reg 0x28 = 0x9B
Reg 0x29 = 0x08

TCount = 0x89B = 2203

RPM = 60 / (2203 * 11.11111 E-6) = 2451 RPM

Obtaining the SIO version.

CONFIGURATION SEQUENCE
To program the configuration registers, the following sequence must be followed:
1. Enter Configuration Mode
2. Configure the Configuration Registers
3. Exit Configuration Mode.

Enter Configuration Mode
To place the chip into the Configuration State The config key (0x55) is written
to the CONFIG PORT (0x2E).

Configuration Mode
In configuration mode, the INDEX PORT is located at the CONFIG PORT address and
the DATA PORT is at INDEX PORT address + 1.

The desired configuration registers are accessed in two steps:
a.	Write the index of the Logical Device Number Configuration Register
	(i.e., 0x07) to the INDEX PORT and then write the number of the
	desired logical device to the DATA PORT.

b.	Write the address of the desired configuration register within the
	logical device to the INDEX PORT and then write or read the config-
	uration register through the DATA PORT.

Note: If accessing the Global Configuration Registers, step (a) is not required.

Exit Configuration Mode
To exit the Configuration State the write 0xAA to the CONFIG PORT (0x2E).
The chip returns to the RUN State.  (This is important).

Programming Example
The following is an example of how to read the SIO Device ID located at 0x20

; ENTER CONFIGURATION MODE
MOV	DX,02EH
MOV	AX,055H
OUT	DX,AL
; GLOBAL CONFIGURATION  REGISTER
MOV	DX,02EH
MOV	AL,20H
OUT	DX,AL
; READ THE DATA
MOV	DX,02FH
IN	AL,DX
; EXIT CONFIGURATION MODE
MOV	DX,02EH
MOV	AX,0AAH
OUT	DX,AL

The registers of interest for identifying the SIO on the dc7100 are Device ID
(0x20) and Device Rev  (0x21).

The Device ID will read 0x6F (0x81 for SCH5307-NS, and 0x85 for SCH5317)
The Device Rev currently reads 0x01

Obtaining the HWM Base Address.
The following is an example of how to read the HWM Base Address located in
Logical Device 8.

; ENTER CONFIGURATION MODE
MOV	DX,02EH
MOV	AX,055H
OUT	DX,AL
; CONFIGURE REGISTER CRE0,
; LOGICAL DEVICE 8
MOV	DX,02EH
MOV	AL,07H
OUT	DX,AL ;Point to LD# Config Reg
MOV	DX,02FH
MOV	AL, 08H
OUT	DX,AL;Point to Logical Device 8
;
MOV	DX,02EH
MOV	AL,60H
OUT	DX,AL	; Point to HWM Base Addr MSB
MOV	DX,02FH
IN	AL,DX	; Get MSB of HWM Base Addr
; EXIT CONFIGURATION MODE
MOV	DX,02EH
MOV	AX,0AAH
OUT	DX,AL
