요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Kernel driver asb100
====================
Supported Chips:
* Asus ASB100 and ASB100-A "Bach"
Prefix: 'asb100'
Addresses scanned: I2C 0x2d
Datasheet: none released
Author: Mark M. Hoffman <mhoffman@lightlink.com>
Description
-----------
This driver implements support for the Asus ASB100 and ASB100-A "Bach".
These are custom ASICs available only on Asus mainboards. Asus refuses to
supply a datasheet for these chips. Thanks go to many people who helped
investigate their hardware, including:
Vitaly V. Bursov
Alexander van Kaam (author of MBM for Windows)
Bertrik Sikken
The ASB100 implements seven voltage sensors, three fan rotation speed
sensors, four temperature sensors, VID lines and alarms. In addition to
these, the ASB100-A also implements a single PWM controller for fans 2 and
3 (i.e. one setting controls both.) If you have a plain ASB100, the PWM
controller will simply not work (or maybe it will for you... it doesn't for
me).
Temperatures are measured and reported in degrees Celsius.
Fan speeds are reported in RPM (rotations per minute). An alarm is
triggered if the rotation speed has dropped below a programmable limit.
Voltage sensors (also known as IN sensors) report values in volts.
The VID lines encode the core voltage value: the voltage level your
processor should work with. This is hardcoded by the mainboard and/or
processor itself. It is a value in volts.
Alarms: (TODO question marks indicate may or may not work)
- 0x0001 => in0 (?)
- 0x0002 => in1 (?)
- 0x0004 => in2
- 0x0008 => in3
- 0x0010 => temp1 [1]_
- 0x0020 => temp2
- 0x0040 => fan1
- 0x0080 => fan2
- 0x0100 => in4
- 0x0200 => in5 (?) [2]_
- 0x0400 => in6 (?) [2]_
- 0x0800 => fan3
- 0x1000 => chassis switch
- 0x2000 => temp3
.. [1] This alarm will only trigger if the hysteresis value is 127C.
I.e. it behaves the same as w83781d.
.. [2] The min and max registers for these values appear to
be read-only or otherwise stuck at 0x00.
TODO:
* Experiment with fan divisors > 8.
* Experiment with temp. sensor types.
* Are there really 13 voltage inputs? Probably not...
* Cleanups, no doubt...
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
ASB100 지원과 측정 기능
1-44이 driver는 Asus ASB100과 ASB100-A `Bach`를 prefix `asb100`으로 지원하며 I2C 주소 `0x2d`를 검색합니다. 공개된 datasheet는 없습니다. 저자는 Mark M. Hoffman입니다.
두 custom ASIC은 Asus mainboard에서만 사용됩니다. Asus가 datasheet 제공을 거부했기 때문에 hardware 조사에 참여한 Vitaly V. Bursov, Windows용 MBM 저자 Alexander van Kaam, Bertrik Sikken의 도움으로 동작을 파악했습니다.
ASB100은 voltage sensor 7개, fan rotation speed sensor 3개, temperature sensor 4개, VID line, alarm을 구현합니다. ASB100-A에는 fan 2와 fan 3을 함께 제어하는 단일 PWM controller가 추가됩니다. 일반 ASB100에서는 이 PWM controller가 동작하지 않습니다.
Temperature는 degrees Celsius, fan speed는 RPM, IN sensor라고도 부르는 voltage sensor 값은 volts로 보고합니다. Fan rotation speed가 programmable limit 아래로 내려가면 alarm이 발생합니다.
VID line은 processor가 동작해야 하는 core voltage를 encode합니다. 이 값은 mainboard나 processor에 hardcode되어 있으며 volts 단위입니다.
ASB100과 ASB100-A의 공통 기능과 차이입니다.
역공학으로 확인된 register에서 측정값과 alarm을 읽습니다.
Kernel driver asb100
====================
Supported Chips:
* Asus ASB100 and ASB100-A "Bach"
Prefix: 'asb100'
Addresses scanned: I2C 0x2d
Datasheet: none released
Author: Mark M. Hoffman <mhoffman@lightlink.com>
Description
-----------
This driver implements support for the Asus ASB100 and ASB100-A "Bach".
These are custom ASICs available only on Asus mainboards. Asus refuses to
supply a datasheet for these chips. Thanks go to many people who helped
investigate their hardware, including:
Vitaly V. Bursov
Alexander van Kaam (author of MBM for Windows)
Bertrik Sikken
The ASB100 implements seven voltage sensors, three fan rotation speed
sensors, four temperature sensors, VID lines and alarms. In addition to
these, the ASB100-A also implements a single PWM controller for fans 2 and
3 (i.e. one setting controls both.) If you have a plain ASB100, the PWM
controller will simply not work (or maybe it will for you... it doesn't for
me).
Temperatures are measured and reported in degrees Celsius.
Fan speeds are reported in RPM (rotations per minute). An alarm is
triggered if the rotation speed has dropped below a programmable limit.
Voltage sensors (also known as IN sensors) report values in volts.
The VID lines encode the core voltage value: the voltage level your
processor should work with. This is hardcoded by the mainboard and/or
processor itself. It is a value in volts.
Alarm bitmap과 알려지지 않은 동작
45-73Alarm bit `0x0001`, `0x0002`, `0x0004`, `0x0008`은 각각 `in0`, `in1`, `in2`, `in3`에 대응합니다. 이 가운데 in0과 in1은 실제 동작 여부가 확실하지 않습니다. `0x0010`은 `temp1`, `0x0020`은 `temp2`, `0x0040`은 `fan1`, `0x0080`은 `fan2`입니다.
`0x0100`은 `in4`, `0x0200`은 `in5`, `0x0400`은 `in6`, `0x0800`은 `fan3`, `0x1000`은 chassis switch, `0x2000`은 `temp3`입니다. in5와 in6 alarm도 동작 여부가 불확실합니다.
`temp1` alarm은 hysteresis 값이 `127C`일 때만 발생하며 `w83781d`와 같은 방식으로 동작합니다. `in5`와 `in6`의 min/max register는 read-only이거나 `0x00`에 고정된 것으로 보입니다.
남은 TODO는 8보다 큰 fan divisor 시험, temperature sensor type 시험, 실제 voltage input이 13개인지 확인, 전반적인 cleanup입니다.
각 bit와 sensor를 대응시킵니다.
Raw alarm word를 sensor 상태로 분해합니다.
Alarms: (TODO question marks indicate may or may not work)
- 0x0001 => in0 (?)
- 0x0002 => in1 (?)
- 0x0004 => in2
- 0x0008 => in3
- 0x0010 => temp1 [1]_
- 0x0020 => temp2
- 0x0040 => fan1
- 0x0080 => fan2
- 0x0100 => in4
- 0x0200 => in5 (?) [2]_
- 0x0400 => in6 (?) [2]_
- 0x0800 => fan3
- 0x1000 => chassis switch
- 0x2000 => temp3
.. [1] This alarm will only trigger if the hysteresis value is 127C.
I.e. it behaves the same as w83781d.
.. [2] The min and max registers for these values appear to
be read-only or otherwise stuck at 0x00.
TODO:
* Experiment with fan divisors > 8.
* Experiment with temp. sensor types.
* Are there really 13 voltage inputs? Probably not...
* Cleanups, no doubt...
요약·해설
asb100.rst:1-73공개 datasheet가 없는 Asus ASIC의 sensor 자원과 일부 불확실성이 남은 alarm bit를 설명합니다.
원문 분량과 핵심 지원 범위입니다.
장치를 구성하고 측정·제어하는 기본 순서입니다.