📄 xllp_wm9712.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4345
TTL F:\wm520\PLATFORM\intel_dbpxa27x\Public\CSP\ARM\INTEL\PXA27X\XLLP\SOURCE\.\xllp_wm9712.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |XllpWm9712SetMasterVol|
IMPORT |XllpAc97ACodecWrite|
; File f:\wm520\platform\intel_dbpxa27x\public\csp\arm\intel\pxa27x\xllp\source\xllp_wm9712.c
00000 AREA |.text| { |XllpWm9712SetMasterVol| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpWm9712SetMasterVol|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpWm9712SetMasterVol| } ; comdat associative
|$T1341| DCD |$L1340|
DCD 0x40001701
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpWm9712SetMasterVol| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpWm9712SetMasterVol| PROC
; 30 : {
00000 |$L1340|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M1338|
; 31 : XLLP_ACODEC_ERROR_T status = XLLP_ACODEC_SUCCESS;
; 32 : XLLP_UINT16_T value;
; 33 : XLLP_UINT8_T leftVolume, rightVolume;
; 34 :
; 35 : /*take the unit of GainInDb as 1 db*/
; 36 : leftVolume = (XLLP_UINT8_T)(GainInDb * 10 / 15);
00004 e59f304c ldr r3, [pc, #0x4C]
00008 e0812101 add r2, r1, r1, lsl #2
0000c e1a0e082 mov lr, r2, lsl #1
00010 e0c3139e smull r1, r3, lr, r3
; 37 : if (leftVolume > XLLP_AC97_U14_MAX_VOLUME)
; 38 : {
; 39 : leftVolume = XLLP_AC97_U14_MAX_VOLUME;
; 40 : }
; 41 : rightVolume = leftVolume;
; 42 :
; 43 : if ((0 == leftVolume) && (0 == rightVolume))
; 44 : {
; 45 : //mute the output
; 46 : value = XLLP_AC97_U14_MVR_MM;
; 47 : }
; 48 : else
; 49 : {
; 50 : leftVolume = XLLP_AC97_U14_MAX_VOLUME - leftVolume; //translate into attenuation value
; 51 : rightVolume = XLLP_AC97_U14_MAX_VOLUME - rightVolume;
; 52 : value = leftVolume << XLLP_AC97_U14_MVR_ML_SHIFT;
; 53 : value |= rightVolume;
; 54 : }
; 55 :
; 56 : status = XllpAc97ACodecWrite (pDeviceContext, XLLP_AC97_CR_MASTER_VOLUME, value);
00014 e3a01002 mov r1, #2
00018 e0833082 add r3, r3, r2, lsl #1
0001c e1a031c3 mov r3, r3, asr #3
00020 e0833fa3 add r3, r3, r3, lsr #31
00024 e20330ff and r3, r3, #0xFF
00028 e353003f cmp r3, #0x3F
0002c 83a0303f movhi r3, #0x3F
00030 e3530000 cmp r3, #0
00034 1263303f rsbne r3, r3, #0x3F
00038 120330ff andne r3, r3, #0xFF
0003c 11833403 orrne r3, r3, r3, lsl #8
00040 03a02902 moveq r2, #2, 18
00044 11a02803 movne r2, r3, lsl #16
00048 11a02822 movne r2, r2, lsr #16
0004c eb000000 bl XllpAc97ACodecWrite
; 57 : return status;
; 58 : }
00050 e49de004 ldr lr, [sp], #4
00054 e12fff1e bx lr
00058 |$L1343|
00058 88888889 DCD 0x88888889
0005c |$M1339|
ENDP ; |XllpWm9712SetMasterVol|
EXPORT |XllpWm9712SetMasterInputGain|
00000 AREA |.text| { |XllpWm9712SetMasterInputGain| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpWm9712SetMasterInputGain|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpWm9712SetMasterInputGain| } ; comdat associative
|$T1355| DCD |$L1354|
DCD 0x40001501
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpWm9712SetMasterInputGain| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpWm9712SetMasterInputGain| PROC
; 61 : {
00000 |$L1354|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M1352|
; 62 : XLLP_ACODEC_ERROR_T status = XLLP_ACODEC_SUCCESS;
; 63 : XLLP_UINT8_T leftVolume, rightVolume;
; 64 : XLLP_UINT16_T value;
; 65 :
; 66 : /*take the unit of GainInDb as 1 db*/
; 67 : leftVolume = (XLLP_UINT8_T)(GainInDb * 10 / 15);
00004 e59f3044 ldr r3, [pc, #0x44]
00008 e0812101 add r2, r1, r1, lsl #2
0000c e1a0e082 mov lr, r2, lsl #1
00010 e0c3139e smull r1, r3, lr, r3
; 68 : if (leftVolume > XLLP_AC97_U14_MAX_ADCGAIN)
; 69 : {
; 70 : leftVolume = XLLP_AC97_U14_MAX_ADCGAIN;
; 71 : }
; 72 : rightVolume = leftVolume;
; 73 : if ((0 == leftVolume) && (0 == rightVolume))
; 74 : {
; 75 : //mute the record
; 76 : value = XLLP_AC97_U14_RGR_RM;
; 77 : }
; 78 : else
; 79 : {
; 80 : value = leftVolume << XLLP_AC97_U14_RGR_GL_SHIFT;
; 81 : value |= rightVolume;
; 82 : }
; 83 :
; 84 : status = XllpAc97ACodecWrite (pDeviceContext, XLLP_AC97_CR_RECORD_GAIN, value);
00014 e3a0101c mov r1, #0x1C
00018 e0833082 add r3, r3, r2, lsl #1
0001c e1a031c3 mov r3, r3, asr #3
00020 e0833fa3 add r3, r3, r3, lsr #31
00024 e20330ff and r3, r3, #0xFF
00028 e353000f cmp r3, #0xF
0002c 83a0300f movhi r3, #0xF
00030 e3530000 cmp r3, #0
00034 11833403 orrne r3, r3, r3, lsl #8
00038 03a02902 moveq r2, #2, 18
0003c 11a02803 movne r2, r3, lsl #16
00040 11a02822 movne r2, r2, lsr #16
00044 eb000000 bl XllpAc97ACodecWrite
; 85 : return status;
; 86 : }
00048 e49de004 ldr lr, [sp], #4
0004c e12fff1e bx lr
00050 |$L1357|
00050 88888889 DCD 0x88888889
00054 |$M1353|
ENDP ; |XllpWm9712SetMasterInputGain|
EXPORT |XllpWm9712GetInSampleRate|
IMPORT |XllpAc97ACodecRead|
00000 AREA |.text| { |XllpWm9712GetInSampleRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpWm9712GetInSampleRate|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpWm9712GetInSampleRate| } ; comdat associative
|$T1369| DCD |$L1368|
DCD 0x40002902
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpWm9712GetInSampleRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpWm9712GetInSampleRate| PROC
; 89 : {
00000 |$L1368|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M1366|
00008 e1a04001 mov r4, r1
; 90 : XLLP_ACODEC_ERROR_T status = XLLP_ACODEC_SUCCESS;
; 91 : XLLP_UINT16_T value;
; 92 :
; 93 : status = XllpAc97ACodecRead(pDeviceContext, XLLP_AC97_CR_E_ASR_PCM_LR_ADC_RT, &value);
0000c e28d2000 add r2, sp, #0
00010 e3a01032 mov r1, #0x32
00014 eb000000 bl XllpAc97ACodecRead
00018 e3500000 cmp r0, #0
; 94 :
; 95 : if (XLLP_ACODEC_SUCCESS != status)
; 96 : {
; 97 : return status;
0001c 1a00001d bne |$L1207|
; 98 : }
; 99 :
; 100 : switch (value)
00020 e1dd30b0 ldrh r3, [sp]
00024 e3530d7d cmp r3, #0x7D, 26
00028 0a000017 beq |$L1215|
0002c e3a02c2b mov r2, #0x2B, 24
00030 e3822011 orr r2, r2, #0x11
00034 e1530002 cmp r3, r2
00038 0a00000d beq |$L1220|
0003c e3530dfa cmp r3, #0xFA, 26
00040 0a00000f beq |$L1217|
00044 e3a02c56 mov r2, #0x56, 24
00048 e3822022 orr r2, r2, #0x22
0004c e1530002 cmp r3, r2
00050 0a000007 beq |$L1220|
00054 e3530c7d cmp r3, #0x7D, 24
00058 0a000007 beq |$L1219|
0005c e3a02b2b mov r2, #0x2B, 22
00060 e3822044 orr r2, r2, #0x44
00064 e1530002 cmp r3, r2
; 120 : default:
; 121 : *RateInHz = 48000;
00068 13a03cbb movne r3, #0xBB, 24
0006c 13833080 orrne r3, r3, #0x80
00070 1a000006 bne |$L1365|
00074 |$L1220|
; 117 : case XLLP_AC97_U14_DR_44100:
; 118 : *RateInHz = 44100;
00074 e1c420b0 strh r2, [r4]
; 119 : break;
00078 ea000005 b |$L1212|
0007c |$L1219|
; 111 : case XLLP_AC97_U14_DR_22050:
; 112 : *RateInHz = 22050;
; 113 : break;
; 114 : case XLLP_AC97_U14_DR_32000:
; 115 : *RateInHz = 32000;
0007c e3a03c7d mov r3, #0x7D, 24
; 116 : break;
00080 ea000002 b |$L1365|
00084 |$L1217|
; 104 : break;
; 105 : case XLLP_AC97_U14_DR_11025:
; 106 : *RateInHz = 11025;
; 107 : break;
; 108 : case XLLP_AC97_U14_DR_16000:
; 109 : *RateInHz = 16000;
00084 e3a03dfa mov r3, #0xFA, 26
; 110 : break;
00088 ea000000 b |$L1365|
0008c |$L1215|
; 101 : {
; 102 : case XLLP_AC97_U14_DR_8000:
; 103 : *RateInHz = 8000;
0008c e3a03d7d mov r3, #0x7D, 26
00090 |$L1365|
00090 e1c430b0 strh r3, [r4]
00094 |$L1212|
; 122 : break;
; 123 : }
; 124 :
; 125 : return status;
00094 e3a00000 mov r0, #0
00098 |$L1207|
; 126 : }
00098 e28dd004 add sp, sp, #4
0009c e8bd4010 ldmia sp!, {r4, lr}
000a0 e12fff1e bx lr
000a4 |$M1367|
ENDP ; |XllpWm9712GetInSampleRate|
EXPORT |XllpWm9712GetOutSampleRate|
00000 AREA |.text| { |XllpWm9712GetOutSampleRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpWm9712GetOutSampleRate|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpWm9712GetOutSampleRate| } ; comdat associative
|$T1382| DCD |$L1381|
DCD 0x40002902
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpWm9712GetOutSampleRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpWm9712GetOutSampleRate| PROC
; 129 : {
00000 |$L1381|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 e24dd004 sub sp, sp, #4
00008 |$M1379|
00008 e1a04001 mov r4, r1
; 130 : XLLP_ACODEC_ERROR_T status = XLLP_ACODEC_SUCCESS;
; 131 : XLLP_UINT16_T value;
; 132 :
; 133 : status = XllpAc97ACodecRead(pDeviceContext, XLLP_AC97_CR_E_ASR_PCM_FRNT_DAC_RT, &value);
0000c e28d2000 add r2, sp, #0
00010 e3a0102c mov r1, #0x2C
00014 eb000000 bl XllpAc97ACodecRead
00018 e3500000 cmp r0, #0
; 134 :
; 135 : if (XLLP_ACODEC_SUCCESS != status)
; 136 : {
; 137 : return status;
0001c 1a00001d bne |$L1226|
; 138 : }
; 139 :
; 140 : switch (value)
00020 e1dd30b0 ldrh r3, [sp]
00024 e3530d7d cmp r3, #0x7D, 26
00028 0a000017 beq |$L1234|
0002c e3a02c2b mov r2, #0x2B, 24
00030 e3822011 orr r2, r2, #0x11
00034 e1530002 cmp r3, r2
00038 0a00000d beq |$L1239|
0003c e3530dfa cmp r3, #0xFA, 26
00040 0a00000f beq |$L1236|
00044 e3a02c56 mov r2, #0x56, 24
00048 e3822022 orr r2, r2, #0x22
0004c e1530002 cmp r3, r2
00050 0a000007 beq |$L1239|
00054 e3530c7d cmp r3, #0x7D, 24
00058 0a000007 beq |$L1238|
0005c e3a02b2b mov r2, #0x2B, 22
00060 e3822044 orr r2, r2, #0x44
00064 e1530002 cmp r3, r2
; 160 : default:
; 161 : *RateInHz = 48000;
00068 13a03cbb movne r3, #0xBB, 24
0006c 13833080 orrne r3, r3, #0x80
00070 1a000006 bne |$L1378|
00074 |$L1239|
; 157 : case XLLP_AC97_U14_DR_44100:
; 158 : *RateInHz = 44100;
00074 e1c420b0 strh r2, [r4]
; 159 : break;
00078 ea000005 b |$L1231|
0007c |$L1238|
; 151 : case XLLP_AC97_U14_DR_22050:
; 152 : *RateInHz = 22050;
; 153 : break;
; 154 : case XLLP_AC97_U14_DR_32000:
; 155 : *RateInHz = 32000;
0007c e3a03c7d mov r3, #0x7D, 24
; 156 : break;
00080 ea000002 b |$L1378|
00084 |$L1236|
; 144 : break;
; 145 : case XLLP_AC97_U14_DR_11025:
; 146 : *RateInHz = 11025;
; 147 : break;
; 148 : case XLLP_AC97_U14_DR_16000:
; 149 : *RateInHz = 16000;
00084 e3a03dfa mov r3, #0xFA, 26
; 150 : break;
00088 ea000000 b |$L1378|
0008c |$L1234|
; 141 : {
; 142 : case XLLP_AC97_U14_DR_8000:
; 143 : *RateInHz = 8000;
0008c e3a03d7d mov r3, #0x7D, 26
00090 |$L1378|
00090 e1c430b0 strh r3, [r4]
00094 |$L1231|
; 162 : break;
; 163 : }
; 164 :
; 165 : return status;
00094 e3a00000 mov r0, #0
00098 |$L1226|
; 166 : }
00098 e28dd004 add sp, sp, #4
0009c e8bd4010 ldmia sp!, {r4, lr}
000a0 e12fff1e bx lr
000a4 |$M1380|
ENDP ; |XllpWm9712GetOutSampleRate|
EXPORT |XllpWm9712SetInSampleRate|
00000 AREA |.text| { |XllpWm9712SetInSampleRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpWm9712SetInSampleRate|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpWm9712SetInSampleRate| } ; comdat associative
|$T1395| DCD |$L1394|
DCD 0x40002c01
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpWm9712SetInSampleRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpWm9712SetInSampleRate| PROC
; 169 : {
00000 |$L1394|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M1392|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -