Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 4323 → Rev 4324

/drivers/audio/intel_hda/CODEC.INC
13,15 → 13,15
shl eax, 28
mov ebx, [direct]
shl ebx, 27
or eax, ebx
or eax, ebx
mov ebx, [nid]
shl ebx, 20
or eax, ebx
or eax, ebx
mov ebx, [verb]
shl ebx, 8
or eax, ebx
or eax, ebx
mov ebx, [parm]
or eax, ebx
or eax, ebx
pop ebx
ret
.err:
32,11 → 32,11
 
;; Send and receive a verb
proc codec_exec_verb stdcall, cmd:dword;, res:dword <- returned in eax
push ebx edx
push ebx edx
mov ebx, [cmd]
cmp ebx, -1
jne @f
pop edx ebx
pop edx ebx
mov eax, -1
ret
@@:
61,7 → 61,7
mov edx, eax
if FDEBUG
test edx, edx
jz .end_debug
jz .end_debug
push eax esi
mov esi, msgVerbAnswer
call SysMsgBoardStr
80,10 → 80,10
 
mov eax, [ctrl.rirb_error]
test eax, eax
jz .l1
jz .l1
 
mov eax, [ctrl.response_reset]
jz @f
jz @f
 
if DEBUG
push esi
101,7 → 101,7
@@:
mov eax, edx
 
pop edx ebx
pop edx ebx
ret
endp
 
163,7 → 163,7
;jnz @b
;______________________________________
cmp dword [esi], 0
je .out
je .out
movzx ecx, word [esi] ; NID
movzx ebx, word [esi+2] ; verb
and bx, 0x0FFF
192,7 → 192,7
;; Returns the number of sub-nodes.
;;
proc snd_hda_get_sub_nodes stdcall, nid:dword;, start_id:dword <- returned in upper word of eax
snd_hda_param_read [nid], AC_PAR_NODE_COUNT
snd_hda_param_read [nid], AC_PAR_NODE_COUNT
 
cmp eax, -1
jne @f
217,13 → 217,13
;;
proc snd_hda_get_connections stdcall, nid:dword, conn_list:dword, max_conns:dword ;Asper: Complete translation!
locals
parm dd ?
parm dd ?
conn_len dd ?
conns dd 0
shift db 8
conns dd 0
shift db 8
num_elements dd 4
mask dd 0x7F
wcaps dd ?
mask dd 0x7F
wcaps dd ?
prev_nid dw 1 ;Asper: Hmm.. Probably ALSA bug that it isn't initialized. I suppose to init it with 1.
endl
 
230,7 → 230,7
push ebx ecx edx edi esi
mov edi, [conn_list]
test edi, edi
jz .err_out
jz .err_out
mov ecx, [max_conns]
cmp ecx, 0
jle .err_out
241,7 → 241,7
mov [wcaps], eax
stdcall get_wcaps_type, ebx
cmp eax, AC_WID_VOL_KNB
je .conn_list_ok
je .conn_list_ok
test ebx, AC_WCAP_CONN_LIST
jnz .conn_list_ok
if DEBUG
256,11 → 256,11
jmp .out
.conn_list_ok:
 
snd_hda_param_read [nid], AC_PAR_CONNLIST_LEN
snd_hda_param_read [nid], AC_PAR_CONNLIST_LEN
mov [parm], eax
 
test eax, AC_CLIST_LONG
jz @f
jz @f
; long form
mov [shift], 16
mov [num_elements], 2
268,7 → 268,7
@@:
and eax, AC_CLIST_LENGTH
test eax, eax
jz .out ; no connection
jz .out ; no connection
 
mov [conn_len], eax
cmp eax, 1
300,7 → 300,7
mov eax, ecx
.mod:
cmp eax, edx
jl .mod_counted
jl .mod_counted
sub eax, edx
jmp .mod
.mod_counted:
360,13 → 360,13
pop ecx
 
test ebx, ebx
jz .range_zero
jz .range_zero
; ranges between the previous and this one
movzx esi, word [prev_nid]
test esi, esi
jz .l2
jz .l2
cmp esi, eax
jl @f
jl @f
.l2:
if DEBUG
push eax esi
394,7 → 394,7
mov ebx, [conns]
.next_conn2:
cmp ebx, [max_conns]
jl @f
jl @f
if DEBUG
push esi
mov esi, emsgTooManyConns
422,7 → 422,7
 
mov ebx, [conns]
cmp ebx, [max_conns]
jl @f
jl @f
if DEBUG
push esi
mov esi, emsgTooManyConns
444,7 → 444,7
.continue:
inc ecx
cmp ecx, [conn_len]
jl .next_conn
jl .next_conn
 
mov eax, [conns]
.out:
512,6 → 512,22
test eax, eax
jnz @f
 
;Asper+: try to use another codec if possible [
if DEBUG
push esi
mov esi, msgNoAFGFound
call SysMsgBoardStr
pop esi
end if
push ecx
inc eax
mov ecx, [codec.addr]
shl eax, cl
pop ecx
cmp eax, [ctrl.codec_mask]
jl .skip_codec
;Asper+]
 
mov eax, [codec.mfg]
test eax, eax
jnz @f
521,6 → 537,7
call SysMsgBoardStr
pop esi
end if
.skip_codec:
mov eax, -1
ret
@@:
560,6 → 577,7
; power up all before initialization
stdcall snd_hda_set_power_state, ebx, AC_PWRST_D0
 
xor eax, eax
pop ebx
ret
endp
820,9 → 838,9
 
if FDEBUG
push eax esi
mov esi, msgPinCfgs
mov esi, msgPinCfgs
call SysMsgBoardStr
pop esi eax
pop esi eax
end if
 
 
972,7 → 990,7
or eax, [channel_id]
stdcall snd_hda_codec_write, [nid], 0, AC_VERB_SET_CHANNEL_STREAMID, eax
 
mov eax, 1000 ; wait 1 ms
mov eax, 1000 ; wait 1 ms
call StallExec
 
stdcall snd_hda_codec_write, [nid], 0, AC_VERB_SET_STREAM_FORMAT, [format]
998,7 → 1016,7
pop esi
end if
stdcall snd_hda_codec_write, [nid], 0, AC_VERB_SET_CHANNEL_STREAMID, 0
if 0 ; keep the format
if 0 ; keep the format
mov eax, 1000000 ; wait 100 ms
call StallExec
stdcall snd_hda_codec_write, [nid], 0, AC_VERB_SET_STREAM_FORMAT, 0
1180,7 → 1198,7
stdcall snd_hda_codec_read, [fg], 0, AC_VERB_GET_POWER_STATE, 0
cmp eax, ebx
je .out
mov eax, 1000 ; msleep(1);
mov eax, 1000 ; msleep(1);
call StallExec
dec ecx
jnz .wait_D0
1194,21 → 1212,21
 
; codec vendors
align 16
msg_Cirrus db 'Cirrus Logic ',0
msg_Motorola db 'Motorola ',0
msg_Cirrus db 'Cirrus Logic ',0
msg_Motorola db 'Motorola ',0
msg_SiliconImage db 'Silicon Image ',0
msg_Realtek db 'Realtek ',0
msg_Creative db 'Creative ',0
msg_IDT db 'IDT ',0
msg_LSI db 'LSI ',0
msg_Realtek db 'Realtek ',0
msg_Creative db 'Creative ',0
msg_IDT db 'IDT ',0
msg_LSI db 'LSI ',0
msg_AnalogDevices db 'Analog Devices ',0
msg_CMedia db 'C-Media ',0
msg_Conexant db 'Conexant ',0
msg_Chrontel db 'Chrontel ',0
msg_LG db 'LG ',0
msg_Wolfson db 'Wolfson Microelectronics ',0
msg_Qumranet db 'Qumranet ',0
msg_SigmaTel db 'SigmaTel ',0
msg_CMedia db 'C-Media ',0
msg_Conexant db 'Conexant ',0
msg_Chrontel db 'Chrontel ',0
msg_LG db 'LG ',0
msg_Wolfson db 'Wolfson Microelectronics ',0
msg_Qumranet db 'Qumranet ',0
msg_SigmaTel db 'SigmaTel ',0
ac_unknown db 'unknown manufacturer ',0
 
chip_unknown db 'unknown codec id ', 0
1239,105 → 1257,105
dd 0x8384, msg_SigmaTel, chips_SigmaTel
dd 0 ; terminator
 
align 16 ;known codecs
chips_ATI dd 0xAA01, chip_ATIR6XX
dd 0xFF
align 16 ;known codecs
chips_ATI dd 0xAA01, chip_ATIR6XX
dd 0xFF
 
chips_Cirrus dd 0xFF
chips_Motorola dd 0xFF
chips_Cirrus dd 0xFF
chips_Motorola dd 0xFF
 
chips_SiliconImage dd 0x1392, chip_SI1392
dd 0xFF
dd 0xFF
 
chips_NVidia dd 0x0002, chip_MCP78
dd 0xFF
chips_NVidia dd 0x0002, chip_MCP78
dd 0xFF
 
chips_Realtek dd 0x0262, chip_ALC262
dd 0x0268, chip_ALC268
dd 0x0269, chip_ALC269
dd 0x0272, chip_ALC272
dd 0x0662, chip_ALC662
dd 0x0663, chip_ALC663
dd 0x0883, chip_ALC883
dd 0x0887, chip_ALC887
dd 0x0888, chip_ALC888
dd 0x0889, chip_ALC889
dd 0xFF
chips_Realtek dd 0x0262, chip_ALC262
dd 0x0268, chip_ALC268
dd 0x0269, chip_ALC269
dd 0x0272, chip_ALC272
dd 0x0662, chip_ALC662
dd 0x0663, chip_ALC663
dd 0x0883, chip_ALC883
dd 0x0887, chip_ALC887
dd 0x0888, chip_ALC888
dd 0x0889, chip_ALC889
dd 0xFF
 
chips_Creative dd 0xFF
chips_Creative dd 0xFF
 
chips_VIA dd 0xE721, chip_VT1708B_1
dd 0x0397, chip_VT17085_0
dd 0xFF
chips_VIA dd 0xE721, chip_VT1708B_1
dd 0x0397, chip_VT17085_0
dd 0xFF
 
chips_IDT dd 0xFF
chips_IDT dd 0xFF
 
chips_LSI dd 0x1039, chip_LSI1039
dd 0x1040, chip_LSI1040
dd 0x3026, chip_LSI3026
dd 0x3055, chip_LSI3055
dd 0xFF
chips_LSI dd 0x1039, chip_LSI1039
dd 0x1040, chip_LSI1040
dd 0x3026, chip_LSI3026
dd 0x3055, chip_LSI3055
dd 0xFF
 
chips_Analog dd 0x1986, chip_AD1986A
dd 0x198B, chip_AD198B
dd 0xFF
chips_Analog dd 0x1986, chip_AD1986A
dd 0x198B, chip_AD198B
dd 0xFF
 
chips_CMedia dd 0xFF
chips_CMedia dd 0xFF
 
chips_Conexant dd 0x5045, chip_CX20549
dd 0x5051, chip_CX20561
dd 0xFF
chips_Conexant dd 0x5045, chip_CX20549
dd 0x5051, chip_CX20561
dd 0xFF
 
chips_Chrontel dd 0xFF
chips_LG dd 0xFF
chips_Wolfson dd 0xFF
chips_Intel dd 0xFF
chips_Chrontel dd 0xFF
chips_LG dd 0xFF
chips_Wolfson dd 0xFF
chips_Intel dd 0xFF
 
chips_Qumranet dd 0x0010, chip_HDA_OUTPUT
dd 0x0020, chip_HDA_DUPLEX
dd 0xFF
chips_Qumranet dd 0x0010, chip_HDA_OUTPUT
dd 0x0020, chip_HDA_DUPLEX
dd 0xFF
 
chips_SigmaTel dd 0x7680, chip_STAC9221
dd 0x7682, chip_STAC9221_A2
dd 0xFF
chips_SigmaTel dd 0x7680, chip_STAC9221
dd 0x7682, chip_STAC9221_A2
dd 0xFF
 
align 16
;AnalogDevices
chip_AD1986A db 'AD1986A',13,10,0
chip_AD198B db 'AD198B',13,10,0
chip_AD1986A db 'AD1986A',13,10,0
chip_AD198B db 'AD198B',13,10,0
 
;ATI
chip_ATIR6XX db 'ATIR6XX',13,10,0
chip_ATIR6XX db 'ATIR6XX',13,10,0
 
;Silicon Image
chip_SI1392 db 'SI1392',13,10,0
chip_SI1392 db 'SI1392',13,10,0
 
;NVidia
chip_MCP78 db 'MCP78',13,10,0
chip_MCP78 db 'MCP78',13,10,0
 
;Realtek
chip_ALC262 db 'ALC262',13,10,0
chip_ALC268 db 'ALC268',13,10,0
chip_ALC269 db 'ALC269',13,10,0
chip_ALC272 db 'ALC272',13,10,0
chip_ALC662 db 'ALC662',13,10,0
chip_ALC663 db 'ALC663',13,10,0
chip_ALC883 db 'ALC883',13,10,0
chip_ALC887 db 'ALC887',13,10,0
chip_ALC888 db 'ALC888',13,10,0
chip_ALC889 db 'ALC889',13,10,0
chip_ALC262 db 'ALC262',13,10,0
chip_ALC268 db 'ALC268',13,10,0
chip_ALC269 db 'ALC269',13,10,0
chip_ALC272 db 'ALC272',13,10,0
chip_ALC662 db 'ALC662',13,10,0
chip_ALC663 db 'ALC663',13,10,0
chip_ALC883 db 'ALC883',13,10,0
chip_ALC887 db 'ALC887',13,10,0
chip_ALC888 db 'ALC888',13,10,0
chip_ALC889 db 'ALC889',13,10,0
 
;Sigmatel
chip_STAC9221 db 'STAC9221',13,10,0
chip_STAC9221 db 'STAC9221',13,10,0
chip_STAC9221_A2 db 'STAC9221_A2',13,10,0
 
;VIA
chip_VT1708B_1 db 'VT1708B_1',13,10,0
chip_VT17085_0 db 'VT17085_0',13,10,0
chip_VT1708B_1 db 'VT1708B_1',13,10,0
chip_VT17085_0 db 'VT17085_0',13,10,0
 
;Conexant
chip_CX20549 db 'CX20549',13,10,0
chip_CX20561 db 'CX20561',13,10,0
chip_CX20549 db 'CX20549',13,10,0
chip_CX20561 db 'CX20561',13,10,0
 
;Qumranet
chip_HDA_OUTPUT db 'HDA-OUTPUT',13,10,0
1347,4 → 1365,4
chip_LSI1039 db '1039 (Agere Systems HDA Modem)',13,10,0
chip_LSI1040 db '1040 (Agere Systems HDA Modem)',13,10,0
chip_LSI3026 db '3026 (Agere Systems HDA Modem)',13,10,0
chip_LSI3055 db '3055 (Agere Systems HDA Modem)',13,10,0
chip_LSI3055 db '3055 (Agere Systems HDA Modem)',13,10,0
/drivers/audio/intel_hda/intel_hda.asm
13,7 → 13,7
 
USE_SINGLE_MODE equ 0 ; 1 = Single mode; 0 = Normal mode.
 
TEST_VERSION_NUMBER equ '018d'
TEST_VERSION_NUMBER equ '018e'
 
;Asper+ [
SDO_TAG equ 1 ;Asper: Output stream tag id (any number except 0)
2338,14 → 2338,17
; if USE_FIRST_CODEC
; cmp ecx, 1
; else
cmp ecx, 3
cmp ecx, 4
; end if
jl .next_slot
mov eax, -1
jmp .out
.init:
push ecx edx
stdcall snd_hda_codec_init
xor eax, eax
pop edx ecx
test eax, eax
jnz @b
.out:
pop edx ecx ebx
ret
2900,6 → 2903,7
msgCodecOK db 'codec probed OK',13,10,0
msgCodecError db 'codec probe error disabling it...',13,10,0
emsgNoAFGorMFGFound db 'no AFG or MFG node found',13,10,0
msgNoAFGFound db 'no AFG node found, trying another codec',13,10,0
emsgNoMem db 'hda_codec: cannot malloc',13,10,0
msgConnect db 'CONNECT: NID=',0
msgIdx db ' IDX=',0