요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Kernel driver adm1026
=====================
Supported chips:
* Analog Devices ADM1026
Prefix: 'adm1026'
Addresses scanned: I2C 0x2c, 0x2d, 0x2e
Datasheet: Publicly available at the Analog Devices website
https://www.onsemi.com/PowerSolutions/product.do?id=ADM1026
Authors:
- Philip Pokorny <ppokorny@penguincomputing.com> for Penguin Computing
- Justin Thiessen <jthiessen@penguincomputing.com>
Module Parameters
-----------------
* gpio_input: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as inputs
* gpio_output: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as outputs
* gpio_inverted: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as inverted
* gpio_normal: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as normal/non-inverted
* gpio_fan: int array (min = 1, max = 8)
List of GPIO pins (0-7) to program as fan tachs
Description
-----------
This driver implements support for the Analog Devices ADM1026. Analog
Devices calls it a "complete thermal system management controller."
The ADM1026 implements three (3) temperature sensors, 17 voltage sensors,
16 general purpose digital I/O lines, eight (8) fan speed sensors (8-bit),
an analog output and a PWM output along with limit, alarm and mask bits for
all of the above. There is even 8k bytes of EEPROM memory on chip.
Temperatures are measured in degrees Celsius. There are two external
sensor inputs and one internal sensor. Each sensor has a high and low
limit. If the limit is exceeded, an interrupt (#SMBALERT) can be
generated. The interrupts can be masked. In addition, there are over-temp
limits for each sensor. If this limit is exceeded, the #THERM output will
be asserted. The current temperature and limits have a resolution of 1
degree.
Fan rotation speeds are reported in RPM (rotations per minute) but measured
in counts of a 22.5kHz internal clock. Each fan has a high limit which
corresponds to a minimum fan speed. If the limit is exceeded, an interrupt
can be generated. Each fan can be programmed to divide the reference clock
by 1, 2, 4 or 8. Not all RPM values can accurately be represented, so some
rounding is done. With a divider of 8, the slowest measurable speed of a
two pulse per revolution fan is 661 RPM.
There are 17 voltage sensors. An alarm is triggered if the voltage has
crossed a programmable minimum or maximum limit. Note that minimum in this
case always means 'closest to zero'; this is important for negative voltage
measurements. Several inputs have integrated attenuators so they can measure
higher voltages directly. 3.3V, 5V, 12V, -12V and battery voltage all have
dedicated inputs. There are several inputs scaled to 0-3V full-scale range
for SCSI terminator power. The remaining inputs are not scaled and have
a 0-2.5V full-scale range. A 2.5V or 1.82V reference voltage is provided
for negative voltage measurements.
If an alarm triggers, it will remain triggered until the hardware register
is read at least once. This means that the cause for the alarm may already
have disappeared! Note that in the current implementation, all hardware
registers are read whenever any data is read (unless it is less than 2.0
seconds since the last update). This means that you can easily miss
once-only alarms.
The ADM1026 measures continuously. Analog inputs are measured about 4
times a second. Fan speed measurement time depends on fan speed and
divisor. It can take as long as 1.5 seconds to measure all fan speeds.
The ADM1026 has the ability to automatically control fan speed based on the
temperature sensor inputs. Both the PWM output and the DAC output can be
used to control fan speed. Usually only one of these two outputs will be
used. Write the minimum PWM or DAC value to the appropriate control
register. Then set the low temperature limit in the tmin values for each
temperature sensor. The range of control is fixed at 20 °C, and the
largest difference between current and tmin of the temperature sensors sets
the control output. See the datasheet for several example circuits for
controlling fan speed with the PWM and DAC outputs. The fan speed sensors
do not have PWM compensation, so it is probably best to control the fan
voltage from the power lead rather than on the ground lead.
The datasheet shows an example application with VID signals attached to
GPIO lines. Unfortunately, the chip may not be connected to the VID lines
in this way. The driver assumes that the chips *is* connected this way to
get a VID voltage.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
지원 칩과 저자
1-18이 드라이버는 Analog Devices `ADM1026`을 prefix `adm1026`으로 지원합니다. 자동 검색 주소는 I2C `0x2c`, `0x2d`, `0x2e`입니다.
데이터시트는 Analog Devices 웹사이트 및 문서에 적힌 onsemi URL `https://www.onsemi.com/PowerSolutions/product.do?id=ADM1026`에서 확인할 수 있습니다. 저자는 Penguin Computing의 Philip Pokorny와 Justin Thiessen입니다.
드라이버 결합에 필요한 기본 정보입니다.
지정된 세 주소에서 장치를 찾습니다.
Kernel driver adm1026
=====================
Supported chips:
* Analog Devices ADM1026
Prefix: 'adm1026'
Addresses scanned: I2C 0x2c, 0x2d, 0x2e
Datasheet: Publicly available at the Analog Devices website
https://www.onsemi.com/PowerSolutions/product.do?id=ADM1026
Authors:
- Philip Pokorny <ppokorny@penguincomputing.com> for Penguin Computing
- Justin Thiessen <jthiessen@penguincomputing.com>
GPIO module parameter
19-43`gpio_input`은 길이 1~17의 integer array이며 GPIO pin 0~16 중 input으로 설정할 pin 목록입니다. `gpio_output`은 같은 범위에서 output으로 설정할 pin 목록입니다.
`gpio_inverted`는 GPIO pin 0~16 중 논리를 inverted로 설정할 목록이고, `gpio_normal`은 normal 또는 non-inverted로 설정할 목록입니다. 두 parameter 모두 길이 1~17의 integer array입니다.
`gpio_fan`은 길이 1~8의 integer array이며 GPIO pin 0~7 중 fan tachometer로 설정할 pin 목록입니다.
Analog Devices는 ADM1026을 'complete thermal system management controller'라고 부릅니다.
GPIO 방향, 극성 및 fan tach 기능을 지정합니다.
Module load 시 pin 역할과 극성을 적용합니다.
Module Parameters
-----------------
* gpio_input: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as inputs
* gpio_output: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as outputs
* gpio_inverted: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as inverted
* gpio_normal: int array (min = 1, max = 17)
List of GPIO pins (0-16) to program as normal/non-inverted
* gpio_fan: int array (min = 1, max = 8)
List of GPIO pins (0-7) to program as fan tachs
Description
-----------
This driver implements support for the Analog Devices ADM1026. Analog
Devices calls it a "complete thermal system management controller."
센서 자원과 경보 동작
44-80ADM1026은 온도 센서 3개, 전압 센서 17개, 범용 digital I/O 16개, 8-bit fan speed sensor 8개, analog output 1개와 PWM output 1개를 구현합니다. 이 모든 자원에는 limit, alarm, mask bit가 있으며 chip 내부에 8k byte EEPROM도 있습니다.
온도는 섭씨로 측정합니다. 외부 센서 입력 2개와 내부 센서 1개가 있고 각 센서에는 high 및 low limit가 있습니다. 한계 초과 시 `#SMBALERT` interrupt를 발생시킬 수 있고 interrupt는 mask할 수 있습니다. 센서별 over-temperature limit를 넘으면 `#THERM` output이 assert됩니다. 현재 온도와 한계값의 해상도는 1도입니다.
Fan 회전 속도는 RPM으로 보고하지만 22.5kHz 내부 clock의 count로 측정합니다. 각 fan의 high limit는 최소 fan speed에 대응하며 이를 넘으면 interrupt를 발생시킬 수 있습니다. Reference clock divisor는 1, 2, 4, 8 중 하나입니다. 모든 RPM을 정확히 표현할 수 없어 반올림하며, divisor 8에서 회전당 pulse가 2개인 fan의 최저 측정 속도는 661 RPM입니다.
전압 센서는 17개입니다. 프로그램 가능한 min 또는 max를 넘으면 경보가 발생하며 min은 음전압에서도 0에 가장 가까운 값을 뜻합니다. 일부 입력은 높은 전압을 직접 측정하도록 attenuator가 통합되어 있습니다. 3.3V, 5V, 12V, -12V와 battery voltage는 전용 입력을 사용합니다. SCSI terminator power용 입력은 0~3V full-scale이고 나머지 비확장 입력은 0~2.5V full-scale입니다. 음전압 측정용으로 2.5V 또는 1.82V reference voltage를 제공합니다.
경보는 하드웨어 register를 한 번 이상 읽을 때까지 유지되므로 읽는 시점에는 원인이 사라졌을 수 있습니다. 현재 구현은 마지막 update 후 2.0초가 지나지 않은 경우를 제외하고 어떤 data를 읽어도 모든 hardware register를 읽습니다. 이 때문에 한 번만 발생한 경보를 쉽게 놓칠 수 있습니다.
센서 수, 측정 방식과 경보 출력을 정리합니다.
Register 읽기가 latch 상태에 미치는 영향입니다.
The ADM1026 implements three (3) temperature sensors, 17 voltage sensors,
16 general purpose digital I/O lines, eight (8) fan speed sensors (8-bit),
an analog output and a PWM output along with limit, alarm and mask bits for
all of the above. There is even 8k bytes of EEPROM memory on chip.
Temperatures are measured in degrees Celsius. There are two external
sensor inputs and one internal sensor. Each sensor has a high and low
limit. If the limit is exceeded, an interrupt (#SMBALERT) can be
generated. The interrupts can be masked. In addition, there are over-temp
limits for each sensor. If this limit is exceeded, the #THERM output will
be asserted. The current temperature and limits have a resolution of 1
degree.
Fan rotation speeds are reported in RPM (rotations per minute) but measured
in counts of a 22.5kHz internal clock. Each fan has a high limit which
corresponds to a minimum fan speed. If the limit is exceeded, an interrupt
can be generated. Each fan can be programmed to divide the reference clock
by 1, 2, 4 or 8. Not all RPM values can accurately be represented, so some
rounding is done. With a divider of 8, the slowest measurable speed of a
two pulse per revolution fan is 661 RPM.
There are 17 voltage sensors. An alarm is triggered if the voltage has
crossed a programmable minimum or maximum limit. Note that minimum in this
case always means 'closest to zero'; this is important for negative voltage
measurements. Several inputs have integrated attenuators so they can measure
higher voltages directly. 3.3V, 5V, 12V, -12V and battery voltage all have
dedicated inputs. There are several inputs scaled to 0-3V full-scale range
for SCSI terminator power. The remaining inputs are not scaled and have
a 0-2.5V full-scale range. A 2.5V or 1.82V reference voltage is provided
for negative voltage measurements.
If an alarm triggers, it will remain triggered until the hardware register
is read at least once. This means that the cause for the alarm may already
have disappeared! Note that in the current implementation, all hardware
registers are read whenever any data is read (unless it is less than 2.0
seconds since the last update). This means that you can easily miss
once-only alarms.
연속 측정, 자동 fan 제어와 VID
81-101ADM1026은 연속 측정하며 analog input은 초당 약 4회 측정합니다. Fan speed 측정 시간은 실제 fan speed와 divisor에 따라 달라지고 모든 fan 속도를 측정하는 데 최대 1.5초가 걸릴 수 있습니다.
온도 센서 입력을 기준으로 fan speed를 자동 제어할 수 있습니다. PWM output과 DAC output 모두 fan 제어에 사용할 수 있지만 일반적으로 둘 중 하나만 사용합니다. 해당 control register에 최소 PWM 또는 DAC 값을 기록한 다음 각 온도 센서의 `tmin`에 low temperature limit를 설정합니다.
제어 범위는 20도씨로 고정되어 있으며 각 센서의 현재 온도와 `tmin` 차이 중 가장 큰 값이 control output을 결정합니다. PWM 및 DAC output으로 fan speed를 제어하는 회로 예시는 데이터시트에 있습니다. Fan speed sensor에는 PWM compensation이 없으므로 ground lead보다 power lead에서 fan voltage를 제어하는 편이 좋습니다.
데이터시트에는 VID signal을 GPIO line에 연결한 예제가 있지만 실제 chip이 그 방식으로 배선되지 않았을 수도 있습니다. 드라이버는 VID voltage를 얻기 위해 chip이 예제와 같은 방식으로 연결되었다고 가정합니다.
측정 주기와 온도 기반 출력 계산입니다.
최소 출력과 tmin을 이용해 자동 제어합니다.
The ADM1026 measures continuously. Analog inputs are measured about 4
times a second. Fan speed measurement time depends on fan speed and
divisor. It can take as long as 1.5 seconds to measure all fan speeds.
The ADM1026 has the ability to automatically control fan speed based on the
temperature sensor inputs. Both the PWM output and the DAC output can be
used to control fan speed. Usually only one of these two outputs will be
used. Write the minimum PWM or DAC value to the appropriate control
register. Then set the low temperature limit in the tmin values for each
temperature sensor. The range of control is fixed at 20 °C, and the
largest difference between current and tmin of the temperature sensors sets
the control output. See the datasheet for several example circuits for
controlling fan speed with the PWM and DAC outputs. The fan speed sensors
do not have PWM compensation, so it is probably best to control the fan
voltage from the power lead rather than on the ground lead.
The datasheet shows an example application with VID signals attached to
GPIO lines. Unfortunately, the chip may not be connected to the VID lines
in this way. The driver assumes that the chips *is* connected this way to
get a VID voltage.
요약·해설
adm1026.rst:1-101종합 thermal controller의 module parameter, 28개 센서 채널, latch 경보와 온도 기반 PWM/DAC 제어를 다룹니다.
원문과 핵심 지원 범위를 요약합니다.
드라이버를 이해할 때의 주요 순서입니다.