Subversion Repositories Kolibri OS

Rev

Rev 205 | Rev 239 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
205 heavyiron 1
;
2
; Библиотека для чипов WinBond
3
;
4
;
5
;    Дописать получение инфы с других датчиков
6
;  + 16.03.06 Исправлена ошибка в wb_get_cpu_temper с десятых градуса (было 30.5 30.0 31.5 ...)
7
;
8
;
223 Ghost 9
;		      | Chip name	| ID		Vin	Fanin	PWM	Temp   ISA   SMBus
10
msg_wb27HF:	db 8, 'W83627HF'	; 0x20|0x21	 9	  3	 2	 3      +      +
11
msg_wb27THF:	db 9, 'W83627THF'	; 0x90|0x91	 7	  3	 3	 3      +      +
12
msg_wb37THF:	db 9, 'W83637THF'	; 0x80		 7	  3	 3	 3      +      +
13
msg_wb97HF:	db 8, 'W83697HF'	; 0x60|0x61	 8	  2	 2	 2      +      -
205 heavyiron 14
msg_wb27EHF:	db 11,'W83627EHF-A'	; 0x88
15
msg_wb27THFA:	db 11,'W83627THF-A'	; 0x1A
223 Ghost 16
;		db 7, 'W83781D'		; 0x10|0x11	 7	  	 3	 3      +      +
17
;		db 7, 'W83782D'		; 0x30		 9	   	 3	 3      +      +
18
;		db 8, 'AS99127F'	; 0x31           7               3       3      -      +
19
;		db 7, 'W83783S'		; 0x40|0x41	 5-6	   	 3	 1-2    -      +
20
;		db 7, 'W83791D'		; 0x70|0x71	 10	   	 5	 3      -      +
205 heavyiron 21
msg_wbunk:	db 15,'Unknown Winbond'	; other, non zero ;-)
22
 
23
;-----------------------------------
24
wb_init:
25
; Проверка наличия и инициализация
26
; OUT - CF = 1 - error
223 Ghost 27
	cmp	byte[acc_type], 2	; Only ISA and SMBus
28
	jae	wb_no
29
 
205 heavyiron 30
	mov	al, 0x4e
223 Ghost 31
	xor	bl, bl
32
	call	[IO_Write]
205 heavyiron 33
	mov	al, 0x4f
223 Ghost 34
	call	[IO_Read]
205 heavyiron 35
	mov	ah, al		;!
36
	mov	al, 0x4e
223 Ghost 37
	mov	bl, 0x80
38
	call	[IO_Write]
205 heavyiron 39
	mov	al, 0x4f
223 Ghost 40
	call	[IO_Read]
205 heavyiron 41
	cmp	ax, 0xa35c
42
	jne	wb_no		; это не Winbond !!!
223 Ghost 43
 
44
	; --- узнаём идентификатор чипа --
205 heavyiron 45
	mov	al, 0x58
223 Ghost 46
	call	[IO_Read]
47
	and	al, 0xFE	; 0x20 = 0x21, 0x60 = 0x61, etc
48
	mov	edx, msg_wb27HF
49
	cmp	al, 0x20
50
	je	@f
51
	mov	edx, msg_wb27THF
52
	cmp	al, 0x90
53
	je	@f
54
	mov	edx, msg_wb37THF
55
	cmp	al, 0x80
56
	je	@f
57
	mov	edx, msg_wb97HF
58
	cmp	al, 0x60
59
	je	@f
60
	mov	edx, msg_wb27EHF
61
	cmp	al, 0x88
62
	je	@f
63
	mov	edx, msg_wb27THFA
64
	cmp	al, 0x1A
65
	je	@f
66
	mov	edx, msg_wbunk
67
@@:	mov	[hwm_chip_name], edx
205 heavyiron 68
	clc
69
	ret
70
wb_no:	stc
71
	ret
72
 
73
;-----------------------------------
223 Ghost 74
wb_getparam:
75
	call	wb_get_temp
76
	call	wb_get_fan_speed
77
	mov	edi, wb_coeff
78
	call	wb_get_volt
79
	fld	dword[V12]
80
	fld	dword[wb_n12v_const]
81
	faddp	st1, st0
82
	fstp	dword[V12]
83
	ret
84
;-----------------------------------
205 heavyiron 85
wb_get_temp:
86
	; temp 1
223 Ghost 87
	mov	al, 0x4e	; Выбираем bank 1
88
	mov	bl, 1
89
	call	[IO_Write]
90
	mov	al, 0x50	; Получаем старший байт температуры (градусы)
91
	call	[IO_Read]
92
	mov	[hwm_temps], al
93
	mov	al, 0x51	; Получаем младший байт температуры  (x.5`C)
94
	call	[IO_Read]
95
	cmp	al, 0		; if al == 0 then x.0, else x.5
205 heavyiron 96
	je	@f
97
	mov	al, 5
223 Ghost 98
@@:	mov	[hwm_temps + 1], al
99
 
205 heavyiron 100
	; temp 2 (3 SYSTIN)
223 Ghost 101
	mov	al, 0x4e	; Выбираем bank 0
102
	xor	bl, bl
103
	call	[IO_Write]
104
	mov	al, 0x27	; Получаем старший байт температуры (градусы)
105
	call	[IO_Read]
106
	mov	[hwm_temps + 2], al
107
 
205 heavyiron 108
	; temp 3 (VTIN)
223 Ghost 109
	mov	al, 0x4e	; Выбираем bank 2
110
	mov	bl, 2
111
	call	[IO_Write]
112
	mov	al, 0x50	; Получаем старший байт температуры (градусы)
113
	call	[IO_Read]
114
	mov	[hwm_temps + 4], al
115
	mov	al, 0x51	; Получаем младший байт температуры  (x.5`C)
116
	call	[IO_Read]
117
	cmp	al, 0		; if al == 0 then x.0, else x.5
205 heavyiron 118
	je	@f
119
	mov	al, 5
223 Ghost 120
@@:	mov	[hwm_temps + 5], al
121
 
205 heavyiron 122
	; Проверка температуры, датчики с 127.5`C не используются
123
	mov	ecx, 3
223 Ghost 124
	mov	esi, hwm_temps
205 heavyiron 125
wb_check_temp:
126
	cmp	word[esi + ecx * 2 - 2], 0x057F
127
	jne	wb_temp_ok
128
	mov	word[esi + ecx * 2 - 2], 0
129
wb_temp_ok:
130
	loop	wb_check_temp
131
 
132
	ret
133
;-----------------------------------
134
wb_get_fan_speed:
135
	; fan1
136
	mov	al, 0x47
223 Ghost 137
	call	[IO_Read]
205 heavyiron 138
	and	al, 0x30
139
	shr	al, 4
140
	mov	ebx, 1
141
	mov	cl, al
142
	shl	ebx, cl	; <- div1
143
	xor	eax, eax
223 Ghost 144
	mov	al,  0x28
145
	call	[IO_Read]
205 heavyiron 146
	cmp	al, 255
147
	jne	@f
223 Ghost 148
	xor	eax, eax	; ???
149
	ret			; ???
205 heavyiron 150
@@:	mul	ebx
151
	mov	ebx, eax
152
	mov	eax, 1350000
153
	xor	edx, edx
154
	div	ebx
223 Ghost 155
	mov	[hwm_rpms], eax
205 heavyiron 156
	mov	al, 0x47
223 Ghost 157
	call	[IO_Read]
205 heavyiron 158
	shr	al, 6
159
	mov	ebx, 1
160
	mov	cl, al
161
	shl	ebx, cl	; <- div2
162
	xor	eax, eax
223 Ghost 163
	mov	al,  0x29
164
	call	[IO_Read]
205 heavyiron 165
	cmp	al, 255
166
	jne	@f
167
	xor	eax, eax
168
	ret
169
@@:	mul	ebx
170
	mov	ebx, eax
171
	mov	eax, 1350000
172
	xor	edx, edx
173
	div	ebx
223 Ghost 174
	mov	[hwm_rpms + 4], eax
205 heavyiron 175
	ret
176
;-----------------------------------
177
wb_get_volt:
223 Ghost 178
	;mov	edi, wb_coeff		; <-- possible differences for miscellaneous chip
179
	mov	esi, hwm_voltages
180
	xor	ecx, ecx
205 heavyiron 181
@@:	mov	eax, ecx
182
	add	al, 0x20
223 Ghost 183
	call	[IO_Read]
205 heavyiron 184
	fld	dword [edi + ecx * 4]
185
	push	eax
186
	fild	dword [esp]
187
	fmulp	st1, st0
188
	fstp	dword [esi + ecx * 4]
189
	pop	eax
190
	inc	ecx
191
	cmp	ecx, 7
192
	jb	@b
193
	ret
194
 
195
wb_coeff:	dd 0.016		; Vcore
196
		dd 0.016		; Vin0
197
		dd 0.016		; Vin1 (+3.3V)
198
		dd 0.02688		; AVcc (+5V)
199
		dd 0.0608		; Vin2 (+12V)
200
		dd 0.0822857142857145	; -12V
201
		dd -0.02408		; -5V ; false
202
 
203
wb_n12v_const	dd -14.9142857142857
223 Ghost 204