Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ; Áèáëèîòåêà äëÿ ÷èïîâ WinBond
  3. ;
  4. ;
  5. ;    Äîïèñàòü ïîëó÷åíèå èíôû ñ äðóãèõ äàò÷èêîâ
  6. ;  + 16.03.06 Èñïðàâëåíà îøèáêà â wb_get_cpu_temper ñ äåñÿòûõ ãðàäóñà (áûëî 30.5 30.0 31.5 ...)
  7. ;
  8. ;
  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      +      -
  14. msg_wb27EHF:    db 11,'W83627EHF-A'     ; 0x88
  15. msg_wb27THFA:   db 11,'W83627THF-A'     ; 0x1A
  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      -      +
  21. msg_wbunk:      db 15,'Unknown Winbond' ; other, non zero ;-)
  22.  
  23. ;-----------------------------------
  24. wb_init:
  25. ; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ
  26. ; OUT - CF = 1 - error
  27.         cmp     byte[acc_type], 2       ; Only ISA and SMBus
  28.         jae     wb_no
  29.  
  30.         mov     al, 0x4e
  31.         xor     bl, bl
  32.         call    [IO_Write]
  33.         mov     al, 0x4f
  34.         call    [IO_Read]
  35.         mov     ah, al          ;!
  36.         mov     al, 0x4e
  37.         mov     bl, 0x80
  38.         call    [IO_Write]     
  39.         mov     al, 0x4f
  40.         call    [IO_Read]
  41.         cmp     ax, 0xa35c
  42.         jne     wb_no           ; ýòî íå Winbond !!!
  43.        
  44.         ; --- óçíà¸ì èäåíòèôèêàòîð ÷èïà --
  45.         mov     al, 0x58
  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
  68.         clc
  69.         ret
  70. wb_no:  stc
  71.         ret
  72.  
  73. ;-----------------------------------
  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. ;-----------------------------------
  85. wb_get_temp:
  86.         ; temp 1
  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
  96.         je      @f
  97.         mov     al, 5
  98. @@:     mov     [hwm_temps + 1], al
  99.  
  100.         ; temp 2 (3 SYSTIN)
  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.        
  108.         ; temp 3 (VTIN)
  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
  118.         je      @f
  119.         mov     al, 5
  120. @@:     mov     [hwm_temps + 5], al
  121.  
  122.         ; Ïðîâåðêà òåìïåðàòóðû, äàò÷èêè ñ 127.5`C íå èñïîëüçóþòñÿ
  123.         mov     ecx, 3
  124.         mov     esi, hwm_temps
  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
  137.         call    [IO_Read]
  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
  144.         mov     al,  0x28
  145.         call    [IO_Read]
  146.         cmp     al, 255
  147.         jne     @f
  148.         xor     eax, eax        ; ???
  149.         ret                     ; ???
  150. @@:     mul     ebx
  151.         mov     ebx, eax
  152.         mov     eax, 1350000
  153.         xor     edx, edx
  154.         div     ebx
  155.         mov     [hwm_rpms], eax
  156.         mov     al, 0x47
  157.         call    [IO_Read]
  158.         shr     al, 6
  159.         mov     ebx, 1
  160.         mov     cl, al
  161.         shl     ebx, cl ; <- div2
  162.         xor     eax, eax
  163.         mov     al,  0x29
  164.         call    [IO_Read]
  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
  174.         mov     [hwm_rpms + 4], eax
  175.         ret
  176. ;-----------------------------------
  177. wb_get_volt:
  178.         ;mov    edi, wb_coeff           ; <-- possible differences for miscellaneous chip
  179.         mov     esi, hwm_voltages
  180.         xor     ecx, ecx
  181. @@:     mov     eax, ecx
  182.         add     al, 0x20
  183.         call    [IO_Read]
  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
  204.  
  205.        
  206.        
  207.