Subversion Repositories Kolibri OS

Rev

Rev 223 | 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. uglobal
  10. wb_chip_id:     db 0                    ; Èäåíòèôèêàòîð ÷èïà (åñëè íàøëè)
  11. endg
  12. ;                     | Chip name       | ID            Vin     Fanin   PWM     Temp
  13. msg_wb27HF:     db 8, 'W83627HF'        ; 0x20|0x21      9        3      2       3
  14. msg_wb27THF:    db 9, 'W83627THF'       ; 0x90|0x91      7        3      3       3
  15. msg_wb37THF:    db 9, 'W83637THF'       ; 0x80           7        3      3       3
  16. msg_wb97HF:     db 8, 'W83697HF'        ; 0x60|0x61      8        2      2       2
  17. msg_wb27EHF:    db 11,'W83627EHF-A'     ; 0x88
  18. msg_wb27THFA:   db 11,'W83627THF-A'     ; 0x1A
  19. ;               db 7, 'W83781D'         ; 0x10|0x11      7               3       3
  20. ;               db 7, 'W83782D'         ; 0x30           9               3       3
  21. ;               db 8, 'AS99127F'        ; 0x31
  22. ;               db 7, 'W83783S'         ; 0x40|0x41      5-6             3       1-2
  23. ;               db 7, 'W83791D'         ; 0x70|0x71      10              5       3
  24. msg_wbunk:      db 15,'Unknown Winbond' ; other, non zero ;-)
  25.  
  26. ;-----------------------------------
  27. wb_init:
  28. ; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ
  29. ; OUT - CF = 1 - error
  30.         mov     dx, 0x295
  31.         mov     al, 0x4e
  32.         out     dx, al
  33.         inc     edx
  34.         xor     al, al
  35.         out     dx, al
  36.         dec     edx
  37.         mov     al, 0x4f
  38.         out     dx, al
  39.         inc     edx
  40.         in      al, dx
  41.         mov     ah, al          ;!
  42.         dec     edx
  43.         mov     al, 0x4e
  44.         out     dx, al
  45.         inc     edx
  46.         mov     al, 0x80
  47.         out     dx, al
  48.         dec     edx
  49.         mov     al, 0x4f
  50.         out     dx, al
  51.         inc     edx
  52.         in      al, dx
  53.         cmp     ax, 0xa35c
  54.         jne     wb_no           ; ýòî íå Winbond !!!
  55.         dec     edx             ; --- óçíà¸ì èäåíòèôèêàòîð ÷èïà --
  56.         mov     al, 0x58
  57.         out     dx, al
  58.         inc     edx
  59.         in      al, dx
  60.         mov     byte[wb_chip_id], al
  61.         clc
  62.         ret
  63. wb_no:  stc
  64.         ret
  65.  
  66. ;-----------------------------------
  67. wb_get_temp:
  68.         ; temp 1
  69.         mov     dx, 0x295       ; Âûáèðàåì bank 1
  70.         mov     al, 0x4e
  71.         out     dx, al
  72.         inc     edx
  73.         mov     al, 1
  74.         out     dx, al
  75.  
  76.         dec     edx             ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû)
  77.         mov     al, 0x50
  78.         out     dx, al
  79.         inc     edx
  80.         in      al, dx
  81.         mov     [temps], al
  82.         dec     edx             ; Ïîëó÷àåì ìëàäøèé áàéò òåìïåðàòóðû  (0.5`C)
  83.         mov     al, 0x51
  84.         out     dx, al
  85.         inc     edx
  86.         in      al, dx          ; if al == 0 then 0.0, else 0.5
  87.         cmp     al, 0
  88.         je      @f
  89.         mov     al, 5
  90. @@:     mov     [temps + 1], al
  91.         ; temp 2 (3 SYSTIN)
  92.         dec     edx             ; Âûáèðàåì bank 0
  93.         mov     al, 0x4e
  94.         out     dx, al
  95.         inc     edx
  96.         mov     al, 0
  97.         out     dx, al
  98.  
  99.         dec     edx             ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû)
  100.         mov     al, 0x27
  101.         out     dx, al
  102.         inc     edx
  103.         in      al, dx
  104.         mov     [temps + 2], al
  105.         ; temp 3 (VTIN)
  106.         dec     edx             ; Âûáèðàåì bank 2
  107.         mov     al, 0x4e
  108.         out     dx, al
  109.         inc     edx
  110.         mov     al, 2
  111.         out     dx, al
  112.  
  113.         dec     edx             ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû)
  114.         mov     al, 0x50
  115.         out     dx, al
  116.         inc     edx
  117.         in      al, dx
  118.         mov     [temps + 4], al
  119.         dec     edx             ; Ïîëó÷àåì ìëàäøèé áàéò òåìïåðàòóðû  (0.5`C)
  120.         mov     al, 0x51
  121.         out     dx, al
  122.         inc     edx
  123.         in      al, dx          ; if al == 0 then 0.0, else 0.5
  124.         cmp     al, 0
  125.         je      @f
  126.         mov     al, 5
  127. @@:     mov     [temps + 5], al
  128.         ; Ïðîâåðêà òåìïåðàòóðû, äàò÷èêè ñ 127.5`C íå èñïîëüçóþòñÿ
  129.         mov     ecx, 3
  130.         mov     esi, temps
  131. wb_check_temp:
  132.         cmp     word[esi + ecx * 2 - 2], 0x057F
  133.         jne     wb_temp_ok
  134.         mov     word[esi + ecx * 2 - 2], 0
  135. wb_temp_ok:
  136.         loop    wb_check_temp
  137.        
  138.         ret
  139. ;-----------------------------------
  140. wb_get_fan_speed:
  141.         ; fan1
  142.         mov     al, 0x47
  143.         mov     dx, 0x295
  144.         out     dx, al
  145.         inc     edx
  146.         in      al, dx
  147.         and     al, 0x30
  148.         shr     al, 4
  149.         mov     ebx, 1
  150.         mov     cl, al
  151.         shl     ebx, cl ; <- div1
  152.         dec     edx
  153.         mov     al, 0x28
  154.         out     dx, al
  155.         inc     edx
  156.         xor     eax, eax
  157.         in      al, dx
  158.         cmp     al, 255
  159.         jne     @f
  160.         xor     eax, eax
  161.         ret
  162. @@:     mul     ebx
  163.         mov     ebx, eax
  164.         mov     eax, 1350000
  165.         xor     edx, edx
  166.         div     ebx
  167.         mov     [rpms], eax
  168.  
  169.         mov     al, 0x47
  170.         mov     dx, 0x295
  171.         out     dx, al
  172.         inc     edx
  173.         in      al, dx
  174.         shr     al, 6
  175.         mov     ebx, 1
  176.         mov     cl, al
  177.         shl     ebx, cl ; <- div2
  178.         dec     edx
  179.         mov     al, 0x29
  180.         out     dx, al
  181.         inc     edx
  182.         xor     eax, eax
  183.         in      al, dx
  184.         cmp     al, 255
  185.         jne     @f
  186.         xor     eax, eax
  187.         ret
  188. @@:     mul     ebx
  189.         mov     ebx, eax
  190.         mov     eax, 1350000
  191.         xor     edx, edx
  192.         div     ebx
  193.         mov     [rpms + 4], eax
  194.         ret
  195. ;-----------------------------------
  196. wb_get_volt:
  197.         mov     dx, 0x295
  198.         ;mov    edi, vcoeff             ; <-- possible differences for miscellaneous chip
  199.         mov     esi, Vcore
  200.         xor     ecx, ecx       
  201. @@:     mov     eax, ecx
  202.         add     al, 0x20
  203.         out     dx, al
  204.         inc     edx
  205.         in      al, dx
  206.         fld     dword [edi + ecx * 4]
  207.         push    eax
  208.         fild    dword [esp]
  209.         fmulp   st1, st0
  210.         fstp    dword [esi + ecx * 4]
  211.         pop     eax
  212.         inc     ecx
  213.         dec     edx
  214.         cmp     ecx, 7
  215.         jb      @b
  216.         ret
  217.  
  218. wb_coeff:       dd 0.016                ; Vcore
  219.                 dd 0.016                ; Vin0
  220.                 dd 0.016                ; Vin1 (+3.3V)
  221.                 dd 0.02688              ; AVcc (+5V)
  222.                 dd 0.0608               ; Vin2 (+12V)
  223.                 dd 0.0822857142857145   ; -12V
  224.                 dd -0.02408             ; -5V ; false
  225.                
  226. wb_n12v_const   dd -14.9142857142857
  227. ;-----------------------------------
  228. wb_get_name:
  229. ; Âîçâðàùàåò èìÿ ÷èïà
  230. ; Out : EDX - pointer to string (size:string - Pascal style)
  231.         mov     al, [wb_chip_id]
  232.         and     al, 0xFE        ; 0x20 = 0x21, 0x60 = 0x61, etc
  233.         mov     edx, msg_wb27HF
  234.         cmp     al, 0x20
  235.         je      @f
  236.         mov     edx, msg_wb27THF
  237.         cmp     al, 0x90
  238.         je      @f
  239.         mov     edx, msg_wb37THF
  240.         cmp     al, 0x80
  241.         je      @f
  242.         mov     edx, msg_wb97HF
  243.         cmp     al, 0x60
  244.         je      @f
  245.         mov     edx, msg_wb27EHF
  246.         cmp     al, 0x88
  247.         je      @f
  248.         mov     edx, msg_wb27THFA
  249.         cmp     al, 0x1A
  250.         je      @f
  251.         mov     edx, msg_wbunk
  252. @@:     ret
  253.        
  254.        
  255.