Subversion Repositories Kolibri OS

Rev

Rev 378 | Go to most recent revision | Details | Compare with Previous | 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
 
378 serge 70
        stdcall codec_write, dword CODEC_MASTER_VOL_REG
168 serge 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
endp
101
102
 
378 serge 103
 
104
;  eax= volume  -10000 - 0 for both channels
105
106
 
168 serge 107
set_master_vol:
378 serge 108
           cmp eax, 0
109
           jl @F
110
           xor eax, eax
111
           jmp .set
112
@@:
168 serge 113
           cmp eax, -9450
378 serge 114
           jg .set
115
           mov eax, -9450     ;clamp into 6 bits
116
.set:
117
           cdq
118
           mov ebx, -150
119
           idiv ebx
120
           mov ah, al
121
	   stdcall codec_write, dword CODEC_MASTER_VOL_REG
168 serge 122
           xor eax, eax
378 serge 123
	   ret
168 serge 124
125
 
126
proc get_master_vol stdcall, pvol:dword
127
128
 
129
	   and eax, 0x3F
130
           imul eax, -150
378 serge 131
           mov ebx, [pvol]
168 serge 132
           mov [ebx], eax
133
           xor eax, eax
378 serge 134
	   ret
168 serge 135
endp
136
137
 
138
proc set_sample_rate stdcall, rate:dword
139
	   mov eax, [rate]
140
	   stdcall codec_write, dword CODEC_PCM_FRONT_DACRATE_REG
141
	   ret
142
endp
143
144
 
145
ac_unknown     db 'unknown manufacturer',13,10,0
146
ac_Realtek     db 'Realtek Semiconductor',13,10,0
147
ac_Analog      db 'Analog Devices',13,10,0
148
ac_CMedia      db 'C-Media Electronics',13,10,0
149
chip_unknown   db 'unknown chip', 13,10,0
150
151
 
152
CHIP_REALTEK   equ 0x414C4700
153
CHIP_CMEDIA    equ 0x434D4900
154
155
 
156
codecs	       dd CHIP_ANALOG, ac_Analog,  chips_Analog
157
	       dd CHIP_CMEDIA, ac_CMedia,  chips_CMedia
158
	       dd CHIP_REALTEK,ac_Realtek, chips_Realtek
159
	       dd 0
160
161
 
162
chips_Analog   dd 0x03, chip_AD1819
163
	       dd 0x40, chip_AD1881
164
	       dd 0x48, chip_AD1881A
165
	       dd 0x60, chip_AD1884
166
	       dd 0x61, chip_AD1886
167
	       dd 0x62, chip_AD1887
168
	       dd 0x63, chip_AD1886A
169
	       dd 0x70, chip_AD1980
170
	       dd 0x75, chip_AD1985
171
	       dd 0
172
173
 
174
	       dd 0x21, chip_ALC650D
175
	       dd 0x22, chip_ALC650E
176
	       dd 0x23, chip_ALC650F
177
	       dd 0x60, chip_ALC655
178
	       dd 0x80, chip_ALC658
179
	       dd 0x81, chip_ALC658D
180
	       dd 0x90, chip_ALC850
181
	       dd 0
182
183
 
184
	       dd 0x61, chip_CM9739
185
	       dd 0x69, chip_CM9780
186
	       dd 0x78, chip_CM9761
187
	       dd 0x82, chip_CM9761
188
	       dd 0x83, chip_CM9761
189
	       dd 0
190
191
 
192
;Analog Devices
193
chip_AD1819      db 'AD1819 ',0dh,0ah,00h
194
chip_AD1881      db 'AD1881 ',0dh,0ah,00h
195
chip_AD1881A     db 'AD1881A',0dh,0ah,00h
196
chip_AD1884      db 'AD1885 ',0dh,0ah,00h
197
chip_AD1885      db 'AD1885 ',0dh,0ah,00h
198
chip_AD1886      db 'AD1886 ',0dh,0ah,00h
199
chip_AD1886A     db 'AD1886A',0dh,0ah,00h
200
chip_AD1887      db 'AD1887 ',0dh,0ah,00h
201
chip_AD1980      db 'AD1980 ',0dh,0ah,00h
202
chip_AD1985      db 'AD1985 ',0dh,0ah,00h
203
204
 
205
chip_ALC650	 db 'ALC650 ',0dh,0ah,00h
206
chip_ALC650D	 db 'ALC650D',0dh,0ah,00h
207
chip_ALC650E	 db 'ALC650E',0dh,0ah,00h
208
chip_ALC650F	 db 'ALC650F',0dh,0ah,00h
209
chip_ALC655	 db 'ALC655 ',0dh,0ah,00h
210
chip_ALC658	 db 'ALC658 ',0dh,0ah,00h
211
chip_ALC658D	 db 'ALC658D',0dh,0ah,00h
212
chip_ALC850	 db 'ALC850 ',0dh,0ah,00h
213
214
 
215
chip_CM9738	 db 'CMI9738', 0dh,0ah,0
216
chip_CM9739	 db 'CMI9739', 0dh,0ah,0
217
chip_CM9780	 db 'CMI9780', 0dh,0ah,0
218
chip_CM9761	 db 'CMI9761', 0dh,0ah,0
219