Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
168 serge 1
 
2
proc detect_codec
3
	   locals
4
	     codec_id dd ?
5
	   endl
6
7
 
8
	   shl eax, 16
9
	   mov [codec_id], eax
10
11
 
12
	   or eax, [codec_id]
13
14
 
15
	   and eax, 0xFFFFFF00
16
17
 
18
@@:
19
	   mov ebx, [edi]
20
	   test ebx, ebx
21
	   jz .unknown
22
23
 
24
	   jne .next
25
	   mov eax, [edi+4]
26
	   mov [codec.ac_vendor_ids], eax
27
	   stdcall detect_chip, [edi+8]
28
	   ret
29
.next:
30
	   add edi, 12
31
	   jmp @B
32
.unknown:
33
	   mov [codec.ac_vendor_ids], ac_unknown
34
	   mov [codec.chip_ids], chip_unknown
35
	   ret
36
endp
37
38
 
39
proc detect_chip stdcall, chip_tab:dword
40
41
 
42
	   and eax, 0xFF
43
44
 
45
@@:
46
	   mov ebx, [edi]
47
	   test ebx, ebx
48
	   jz .unknown
49
50
 
51
	   jne .next
52
	   mov eax, [edi+4]
53
	   mov [codec.chip_ids], eax
54
	   ret
55
.next:
56
	   add edi, 8
57
	   jmp @b
58
.unknown:
59
	   mov [codec.chip_ids], chip_unknown
60
	   ret
61
endp
62
63
 
64
proc setup_codec
65
66
 
67
        stdcall codec_write, dword CODEC_AUX_VOL
68
69
 
70
        stdcall codec_write, dword CODEC_MASTER_VOL_REG
71
72
 
73
        stdcall codec_write, dword 0x0C
74
75
 
76
	stdcall codec_write, dword CODEC_PCM_OUT_REG
77
78
 
79
        stdcall codec_write, dword 0x10
80
81
 
82
        stdcall codec_write, dword 0x12
83
84
 
85
        stdcall codec_write, dword 0x16
86
87
 
88
 
89
90
 
91
	or   eax, BIT0				 ; set VRA (BIT0)
92
	stdcall codec_write, dword CODEC_EXT_AUDIO_CTRL_REG
93
94
 
95
96
 
97
98
 
99
	ret
100
101
 
102
103
 
104
proc set_master_vol stdcall, vol:dword
105
106
 
107
	   mov ecx, 20644
108
	   mov eax, [vol]
109
	   cmp eax, 90
110
	   jna @f
111
	   mov eax, 90
112
@@:
113
	   mul ecx
114
	   shr eax, 15
115
	   sub ebx, eax
116
	   mov ah, bl
117
	   mov al, bl
118
	   stdcall codec_write, dword CODEC_MASTER_VOL_REG
119
	   ret
120
endp
121
122
 
123
proc get_master_vol stdcall, pvol:dword
124
125
 
126
	   and eax, 0x3F
127
	   mov ebx, 63
128
	   mov ecx, 20644
129
130
 
131
	   sub eax, ebx
132
	   shl eax, 15
133
	   xor edx, edx
134
	   div ecx
135
           mov ebx, [pvol]
136
           mov [ebx], eax
137
	   ret
138
endp
139
140
 
141
proc set_sample_rate stdcall, rate:dword
142
	   mov eax, [rate]
143
	   stdcall codec_write, dword CODEC_PCM_FRONT_DACRATE_REG
144
	   ret
145
endp
146
147
 
148
ac_unknown     db 'unknown manufacturer',13,10,0
149
ac_Realtek     db 'Realtek Semiconductor',13,10,0
150
ac_Analog      db 'Analog Devices',13,10,0
151
ac_CMedia      db 'C-Media Electronics',13,10,0
152
chip_unknown   db 'unknown chip', 13,10,0
153
154
 
155
CHIP_REALTEK   equ 0x414C4700
156
CHIP_CMEDIA    equ 0x434D4900
157
158
 
159
codecs	       dd CHIP_ANALOG, ac_Analog,  chips_Analog
160
	       dd CHIP_CMEDIA, ac_CMedia,  chips_CMedia
161
	       dd CHIP_REALTEK,ac_Realtek, chips_Realtek
162
	       dd 0
163
164
 
165
chips_Analog   dd 0x03, chip_AD1819
166
	       dd 0x40, chip_AD1881
167
	       dd 0x48, chip_AD1881A
168
	       dd 0x60, chip_AD1884
169
	       dd 0x61, chip_AD1886
170
	       dd 0x62, chip_AD1887
171
	       dd 0x63, chip_AD1886A
172
	       dd 0x70, chip_AD1980
173
	       dd 0x75, chip_AD1985
174
	       dd 0
175
176
 
177
	       dd 0x21, chip_ALC650D
178
	       dd 0x22, chip_ALC650E
179
	       dd 0x23, chip_ALC650F
180
	       dd 0x60, chip_ALC655
181
	       dd 0x80, chip_ALC658
182
	       dd 0x81, chip_ALC658D
183
	       dd 0x90, chip_ALC850
184
	       dd 0
185
186
 
187
	       dd 0x61, chip_CM9739
188
	       dd 0x69, chip_CM9780
189
	       dd 0x78, chip_CM9761
190
	       dd 0x82, chip_CM9761
191
	       dd 0x83, chip_CM9761
192
	       dd 0
193
194
 
195
;Analog Devices
196
chip_AD1819      db 'AD1819 ',0dh,0ah,00h
197
chip_AD1881      db 'AD1881 ',0dh,0ah,00h
198
chip_AD1881A     db 'AD1881A',0dh,0ah,00h
199
chip_AD1884      db 'AD1885 ',0dh,0ah,00h
200
chip_AD1885      db 'AD1885 ',0dh,0ah,00h
201
chip_AD1886      db 'AD1886 ',0dh,0ah,00h
202
chip_AD1886A     db 'AD1886A',0dh,0ah,00h
203
chip_AD1887      db 'AD1887 ',0dh,0ah,00h
204
chip_AD1980      db 'AD1980 ',0dh,0ah,00h
205
chip_AD1985      db 'AD1985 ',0dh,0ah,00h
206
207
 
208
chip_ALC650	 db 'ALC650 ',0dh,0ah,00h
209
chip_ALC650D	 db 'ALC650D',0dh,0ah,00h
210
chip_ALC650E	 db 'ALC650E',0dh,0ah,00h
211
chip_ALC650F	 db 'ALC650F',0dh,0ah,00h
212
chip_ALC655	 db 'ALC655 ',0dh,0ah,00h
213
chip_ALC658	 db 'ALC658 ',0dh,0ah,00h
214
chip_ALC658D	 db 'ALC658D',0dh,0ah,00h
215
chip_ALC850	 db 'ALC850 ',0dh,0ah,00h
216
217
 
218
chip_CM9738	 db 'CMI9738', 0dh,0ah,0
219
chip_CM9739	 db 'CMI9739', 0dh,0ah,0
220
chip_CM9780	 db 'CMI9780', 0dh,0ah,0
221
chip_CM9761	 db 'CMI9761', 0dh,0ah,0
222