Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ; Áèáëèîòåêà äëÿ ÷èïîâ WinBond
  3. ;
  4. ;
  5. ;    Äîïèñàòü ïîëó÷åíèå èíôû ñ äðóãèõ äàò÷èêîâ
  6. ;    W83627DHG ìîíèòîðèíã àíàëîãè÷åí W83627EHF, äîïèñàòü ó÷¸ò DIV_B2
  7. ;  + 16.03.06 Èñïðàâëåíà îøèáêà â wb_get_cpu_temper ñ äåñÿòûõ ãðàäóñà (áûëî 30.5 30.0 31.5 ...)
  8. ;
  9. ;
  10. ;    Î ìàðêèðîâêå (?) : H - H/W Monitor, G - Pb-free package, T - ACPI, S - Smart Card Reader Interface
  11. ;      D - SuperIO supporting Intel* PECI* & SST* interfaces, U - UART
  12. ;
  13. ;                     | Chip name       | ID            Vin     Fanin   PWM     Temp   ISA   SMBus
  14. msg_wb27HF:     db 8, 'W83627HF'        ; 0x20|0x21      9        3      2       3      +      +
  15. msg_wb27THF:    db 9, 'W83627THF'       ; 0x90|0x91      7        3      3       3      +      +
  16. msg_wb37THF:    db 9, 'W83637THF'       ; 0x80           7        3      3       3      +      +
  17. msg_wb97HF:     db 8, 'W83697HF'        ; 0x60|0x61      8        2      2       2      +      -
  18. msg_wb27THFA:   db 11,'W83627THF-A'     ; 0x1A
  19.  
  20. msg_w83627DHG:  db 9, 'W83627DHG'       ; 0xC1           ?        5      ?       3      +      +
  21. msg_w83627EHF:  db 9, 'W83627EHF'       ; 0x88           10       5      3       3      +      +
  22. msg_w83627EHG:  db 9, 'W83627EHG'       ; 0xA1           10       5      3       3      +      +
  23.  
  24.  
  25. ;               db 7, 'W83781D'         ; 0x10|0x11      7               3       3      +      +
  26. ;               db 7, 'W83782D'         ; 0x30           9               3       3      +      +
  27. ;               db 8, 'AS99127F'        ; 0x31           7               3       3      -      +
  28. ;               db 7, 'W83783S'         ; 0x40|0x41      5-6             3       1-2    -      +
  29. ;               db 7, 'W83791D'         ; 0x70|0x71      10              5       3      -      +
  30. msg_wbunk:      db 15,'Unknown Winbond' ; other, non zero ;-)
  31.  
  32. uglobal
  33. wb_fans_num     db      0
  34. endg
  35.  
  36. ;-----------------------------------
  37. wb_init:
  38. ; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ
  39. ; OUT - CF = 1 - error
  40.         cmp     byte[acc_type], 2       ; Only ISA and SMBus
  41.         jae     wb_no
  42.  
  43.         mov     al, 0x4e
  44.         xor     bl, bl
  45.         call    [IO_Write]
  46.         mov     al, 0x4f
  47.         call    [IO_Read]
  48.         mov     ah, al          ;!
  49.         mov     al, 0x4e
  50.         mov     bl, 0x80
  51.         call    [IO_Write]     
  52.         mov     al, 0x4f
  53.         call    [IO_Read]
  54.         cmp     ax, 0xa35c
  55.         jne     wb_no           ; ýòî íå Winbond !!!
  56.  
  57.         ; --- óçíà¸ì èäåíòèôèêàòîð ÷èïà --
  58.         mov     al, 0x58
  59.         call    [IO_Read]
  60.         and     al, 0xFE        ; 0x20 = 0x21, 0x60 = 0x61, etc
  61.         mov     byte[wb_fans_num], 3
  62.         mov     edx, msg_wb27HF
  63.         cmp     al, 0x20
  64.         je      @f
  65.         mov     edx, msg_wb27THF
  66.         cmp     al, 0x90
  67.         je      @f
  68.         mov     edx, msg_wb37THF
  69.         cmp     al, 0x80
  70.         je      @f
  71.         mov     edx, msg_wb97HF
  72.         cmp     al, 0x60
  73.         je      @f
  74.         mov     edx, msg_wb27THFA
  75.         cmp     al, 0x1A
  76.         je      @f
  77.         mov     byte[wb_fans_num], 5
  78.         mov     edx, msg_w83627EHF
  79.         cmp     al, 0x88
  80.         je      @f
  81.         mov     edx, msg_w83627EHG
  82.         cmp     al, 0xA0
  83.         je      @f
  84.         mov     edx, msg_w83627DHG
  85.         cmp     al, 0xC0
  86.         je      @f
  87.         mov     byte[wb_fans_num], 3
  88.         mov     edx, msg_wbunk
  89. @@:     mov     [hwm_chip_name], edx
  90.         clc
  91.         ret
  92. wb_no:  stc
  93.         ret
  94.  
  95. ;-----------------------------------
  96. wb_getparam:
  97.         call    wb_get_temp
  98.         call    wb_get_fan_speed
  99.         mov     edi, wb_coeff
  100.         call    wb_get_volt
  101.         fld     dword[V12]
  102.         fld     dword[wb_n12v_const]
  103.         faddp   st1, st0
  104.         fstp    dword[V12]
  105.         ret
  106. ;-----------------------------------
  107. wb_get_temp:
  108.         ; temp 1
  109.         mov     al, 0x4e        ; Âûáèðàåì bank 1
  110.         mov     bl, 1
  111.         call    [IO_Write]
  112.         mov     al, 0x50        ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû)
  113.         call    [IO_Read]
  114.         mov     [hwm_temps], 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 + 1], al
  121.  
  122.         ; temp 2 (3 SYSTIN)
  123.         mov     al, 0x4e        ; Âûáèðàåì bank 0
  124.         xor     bl, bl
  125.         call    [IO_Write]
  126.         mov     al, 0x27        ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû)
  127.         call    [IO_Read]
  128.         mov     [hwm_temps + 2], al
  129.        
  130.         ; temp 3 (VTIN)
  131.         mov     al, 0x4e        ; Âûáèðàåì bank 2
  132.         mov     bl, 2
  133.         call    [IO_Write]
  134.         mov     al, 0x50        ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû)
  135.         call    [IO_Read]
  136.         mov     [hwm_temps + 4], al
  137.         mov     al, 0x51        ; Ïîëó÷àåì ìëàäøèé áàéò òåìïåðàòóðû  (x.5`C)
  138.         call    [IO_Read]
  139.         cmp     al, 0           ; if al == 0 then x.0, else x.5
  140.         je      @f
  141.         mov     al, 5
  142. @@:     mov     [hwm_temps + 5], al
  143.  
  144.         ; Ïðîâåðêà òåìïåðàòóðû, äàò÷èêè ñ 127.5`C íå èñïîëüçóþòñÿ
  145.         mov     ecx, 3
  146.         mov     esi, hwm_temps
  147. wb_check_temp:
  148.         cmp     word[esi + ecx * 2 - 2], 0x057F
  149.         jne     wb_temp_ok
  150.         mov     word[esi + ecx * 2 - 2], 0
  151. wb_temp_ok:
  152.         loop    wb_check_temp
  153.        
  154.         ret
  155. ;-----------------------------------
  156. wb_get_fan_speed:
  157.         ; fan1
  158.         mov     al, 0x47
  159.         call    [IO_Read]
  160.         and     al, 0x30
  161.         shr     al, 4
  162.         mov     ebx, 1
  163.         mov     cl, al
  164.         shl     ebx, cl ; <- div1
  165.         xor     eax, eax
  166.         mov     al,  0x28
  167.         call    [IO_Read]
  168.         cmp     al, 255
  169.         jne     @f
  170.         xor     eax, eax        ; ???
  171.         ret                     ; ???
  172. @@:     mul     ebx
  173.         mov     ebx, eax
  174.         mov     eax, 1350000
  175.         xor     edx, edx
  176.         div     ebx
  177.         mov     [hwm_rpms], eax
  178.        
  179.         mov     al, 0x47
  180.         call    [IO_Read]
  181.         shr     al, 6
  182.         mov     ebx, 1
  183.         mov     cl, al
  184.         shl     ebx, cl ; <- div2
  185.         xor     eax, eax
  186.         mov     al,  0x29
  187.         call    [IO_Read]
  188.         cmp     al, 255
  189.         jne     @f
  190.         xor     eax, eax
  191.         ret
  192. @@:     mul     ebx
  193.         mov     ebx, eax
  194.         mov     eax, 1350000
  195.         xor     edx, edx
  196.         div     ebx
  197.         mov     [hwm_rpms + 4], eax
  198.        
  199.         mov     al, 0x4B
  200.         call    [IO_Read]
  201.         shr     al, 6
  202.         mov     ebx, 1
  203.         mov     cl, al
  204.         shl     ebx, cl ; <- div3
  205.         xor     eax, eax
  206.         mov     al,  0x2A
  207.         call    [IO_Read]
  208.         cmp     al, 255
  209.         jne     @f
  210.         xor     eax, eax
  211.         ret
  212. @@:     mul     ebx
  213.         mov     ebx, eax
  214.         mov     eax, 1350000
  215.         xor     edx, edx
  216.         div     ebx
  217.         mov     [hwm_rpms + 8], eax
  218.  
  219.         cmp     byte[wb_fans_num], 3
  220.         jna     .wb_f_e
  221.  
  222.         mov     al, 0x59
  223.         call    [IO_Read]
  224.         and     al, 3
  225.         mov     ebx, 1
  226.         mov     cl, al
  227.         shl     ebx, cl ; <- div4, äîïèñàòü ó÷¸ò DIV_B2
  228.         xor     eax, eax
  229.         mov     al,  0x3F
  230.         call    [IO_Read]
  231.         cmp     al, 255
  232.         jne     @f
  233.         xor     eax, eax
  234.         ret
  235. @@:     mul     ebx
  236.         mov     ebx, eax
  237.         mov     eax, 1350000
  238.         xor     edx, edx
  239.         div     ebx
  240.         mov     [hwm_rpms + 12], eax
  241.        
  242.         mov     al, 0x59
  243.         call    [IO_Read]
  244.         shr     al, 2
  245.         and     al, 3
  246.         mov     ebx, 1
  247.         mov     cl, al
  248.         shl     ebx, cl ; <- div5, äîïèñàòü ó÷¸ò DIV_B2
  249.         xor     eax, eax
  250.         mov     al, 0x4e        ; Âûáèðàåì bank 5
  251.         mov     bl, 5
  252.         call    [IO_Write]
  253.         mov     al,  0x53
  254.         call    [IO_Read]
  255.         cmp     al, 255
  256.         jne     @f
  257.         xor     eax, eax
  258.         ret
  259. @@:     mul     ebx
  260.         mov     ebx, eax
  261.         mov     eax, 1350000
  262.         xor     edx, edx
  263.         div     ebx
  264.         mov     [hwm_rpms + 16], eax
  265.  
  266. .wb_f_e:
  267.         ret
  268. ;-----------------------------------
  269. wb_get_volt:
  270.         ;mov    edi, wb_coeff           ; <-- possible differences for miscellaneous chip
  271.         mov     esi, hwm_voltages
  272.         xor     ecx, ecx
  273. @@:     mov     eax, ecx
  274.         add     al, 0x20
  275.         call    [IO_Read]
  276.         fld     dword [edi + ecx * 4]
  277.         push    eax
  278.         fild    dword [esp]
  279.         fmulp   st1, st0
  280.         fstp    dword [esi + ecx * 4]
  281.         pop     eax
  282.         inc     ecx
  283.         cmp     ecx, 7
  284.         jb      @b
  285.         ret
  286.  
  287. wb_coeff:       dd 0.016                ; Vcore
  288.                 dd 0.016                ; Vin0
  289.                 dd 0.016                ; Vin1 (+3.3V)
  290.                 dd 0.02688              ; AVcc (+5V)
  291.                 dd 0.0608               ; Vin2 (+12V)
  292.                 dd 0.0822857142857145   ; -12V
  293.                 dd -0.02408             ; -5V ; false
  294.                
  295. wb_n12v_const   dd -14.9142857142857
  296.  
  297.        
  298.        
  299.