openvortex-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Openvortex-dev] Re: Re: [ALSA - driver 0001138]: errors when inst


From: Raymond
Subject: Re: [Openvortex-dev] Re: Re: [ALSA - driver 0001138]: errors when installing au8820 modules
Date: Sat, 02 Jul 2005 20:53:39 +0800
User-agent: Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.7.7) Gecko/20050504 Fedora/1.7.7-1.1.2.legacy

Igor Kovalenko wrote:
Raymond wrote:

Igor Kovalenko wrote:

Raymond wrote:

Igor Kovalenko wrote:


Well, I've not stated the problem clearly enough.
Once set, volume stays as it should. The problem is that
PCM volume is:
1% - at lowest audible level
25% - at about 50% audible level
49% - at about max audible level
51% - at lowest audible level
75% - at about 50% audible level
99% - at about max audible level
- that is what I described as low-high-low-high.
On the other hand, Master volume behaves as expected.



What is the value of comment.range of 'PCM Playback Volume' in
/etc/asound.state for your STAC9704 (au8820) ?


According to 9704SPEC.pdf, it should be '0-31' ( 5 bits ) for STAC9704
PCM Out volume.



       control.21 {
               comment.access 'read write'
               comment.type INTEGER
               comment.count 2
               comment.range '0 - 63'
               iface MIXER
               name 'PCM Playback Volume'
               value.0 21
               value.1 21
       }

Do you mean AC97 is incorrectly reporting 0...63 range?



Try the following patch to log the read/write of ac97 and post the
system log using dmesg. (loading au8820 and alsactl restore)


alsa-driver-1.0.9b/alsa-kernel/pci/au88x0/au88x0_core.c
@@ -2520,6 +2515,7 @@
    vortex_t *card = (vortex_t *) codec->private_data;
    unsigned int lifeboat = 0;

+    printk(KERN_INFO "ac97 write %.2x : %.4x\n",addr,data);
    /* wait for transactions to clear */
    while (!(hwread(card->mmio, VORTEX_CODEC_CTRL) & 0x100)) {
        udelay(100);
@@ -2567,6 +2563,7 @@
        }
    } while ((data & VORTEX_CODEC_ADDMASK) !=
         (addr << VORTEX_CODEC_ADDSHIFT));
+    printk(KERN_INFO "ac97 read  %.2x : %.4x\n",addr,data &
VORTEX_CODEC_DATMASK);

    /* return data. */
    return (u16) (data & VORTEX_CODEC_DATMASK);



Here is the dmesg excerpt:

Vortex: shutdown...<6>done.
ACPI: PCI Interrupt 0000:02:06.0[A] -> Link [APC3] -> GSI 18 (level, low) -> 
IRQ 185
Vortex: init.... <6>done.
ac97 read  7c : 8384
ac97 read  7e : 7605
ac97 write 00 : 0000
ac97 read  00 : 6940
ac97 read  7c : 8384
ac97 read  7e : 7605
ac97 write 1c : 8a05
ac97 read  1c : 8a05
ac97 read  7c : 8384
ac97 read  7e : 7605
ac97 write 1c : 8a06
ac97 read  1c : 8a06
ac97 read  00 : 6940
ac97 read  28 : 0000
ac97 write 26 : 0000
ac97 write 00 : 0000
ac97 write 26 : 0000
ac97 write 20 : 0000
ac97 read  26 : 000f
ac97 read  02 : 8000
ac97 read  02 : 8000
ac97 write 02 : 0000
ac97 read  02 : 0000
ac97 write 02 : 8000
ac97 read  02 : 8000
ac97 write 02 : 8000
ac97 write 02 : a0a0
ac97 read  02 : 9f9f
ac97 write 02 : 9090
ac97 read  02 : 9090
ac97 read  02 : 9010
ac97 write 02 : 9f1f
ac97 read  06 : 9f00
ac97 read  06 : 8000
ac97 write 06 : 0000
ac97 read  06 : 0000
ac97 write 06 : 8000
ac97 read  06 : 8000
ac97 write 06 : 8000
ac97 write 06 : a0a0
ac97 read  06 : a09f
ac97 write 06 : 9090
ac97 read  06 : 9090
ac97 read  06 : 8010
ac97 write 06 : bf1f
ac97 read  0a : 0000
ac97 write 0a : 8000
ac97 read  0a : 8000
ac97 read  0a : 8000
ac97 write 0a : 801e
ac97 read  0c : 8008
ac97 read  0c : 8008
ac97 write 0c : 0008
ac97 read  0c : 0008
ac97 write 0c : 8008
ac97 read  0c : 8008
ac97 write 0c : 8008
ac97 write 0c : a0a0
ac97 read  0c : 8000
ac97 write 0c : 9090
ac97 read  0c : 8010
ac97 write 0c : 8181
ac97 read  0c : 8001
ac97 read  0c : 8001
ac97 write 0c : 801f
ac97 read  0e : 8008
ac97 read  0e : 8008
ac97 write 0e : 0008
ac97 read  0e : 0008
ac97 write 0e : 8008
ac97 read  0e : 8008
ac97 write 0e : 8008
ac97 write 0e : a0a0
ac97 read  0e : a0a0
ac97 read  0e : 8000
ac97 write 0e : bf3f
ac97 read  10 : a828
ac97 read  10 : 8808
ac97 write 10 : 0808
ac97 read  10 : 0808
ac97 write 10 : 8808
ac97 read  10 : 8808
ac97 write 10 : 8808
ac97 write 10 : a0a0
ac97 read  10 : a0a0
ac97 read  10 : 8000
ac97 write 10 : bf3f
ac97 read  12 : a828
ac97 read  12 : 8808
ac97 write 12 : 0808
ac97 read  12 : 0808
ac97 write 12 : 8808
ac97 read  12 : 8808
ac97 write 12 : 8808
ac97 write 12 : a0a0
ac97 read  12 : a0a0
ac97 read  12 : 8000
ac97 write 12 : bf3f
ac97 read  14 : a828
ac97 read  14 : 8808
ac97 write 14 : 0808
ac97 read  14 : 0808
ac97 write 14 : 8808
ac97 read  14 : 8808
ac97 write 14 : 8808
ac97 write 14 : a0a0
ac97 read  14 : a0a0
ac97 read  14 : 8000
ac97 write 14 : bf3f
ac97 read  16 : a828
ac97 read  16 : 8808
ac97 write 16 : 0808
ac97 read  16 : 0808
ac97 write 16 : 8808
ac97 read  16 : 8808
ac97 write 16 : 8808
ac97 write 16 : a0a0
ac97 read  16 : a0a0
ac97 read  16 : 8000
ac97 write 16 : bf3f
ac97 read  18 : 8808
ac97 write 18 : 0808
ac97 read  18 : 0808
ac97 write 18 : 8808
ac97 read  18 : 8808
ac97 write 18 : 8808
ac97 write 18 : a0a0
ac97 read  18 : a0a0
ac97 read  18 : 8000
ac97 write 18 : bf3f
ac97 read  1c : b030
ac97 write 1c : 3030
ac97 read  1c : 3030
ac97 write 1c : b030
ac97 read  1c : b030
ac97 write 1c : b030
ac97 write 1a : 0000
ac97 write 1c : 0000
ac97 read  20 : 0000
ac97 write 20 : 8000
ac97 read  20 : 8000
ac97 write 20 : 0000
ac97 read  20 : 0000
ac97 write 20 : 2000
ac97 read  20 : 2000
ac97 write 20 : 0000
ac97 read  20 : 0000
ac97 write 20 : 0200
ac97 read  20 : 0200
ac97 write 20 : 0000
ac97 read  20 : 0000
ac97 write 20 : 0100
ac97 read  20 : 0100
ac97 write 20 : 0000
ac97 read  22 : 0000
ac97 write 22 : 0707
ac97 read  22 : 0707
ac97 write 22 : 0000
ac97 read  26 : 000f
ac97 write 26 : 800f
ac97 read  26 : 800f
ac97 write 26 : 000f
ac97 read  2a : ffff
ac97 write 2a : ffff
ac97 write 02 : 1f1f
ac97 write 02 : 1313
ac97 write 12 : 3f3f
ac97 write 12 : 3434
ac97 write 18 : 3f3f
ac97 write 18 : 2828
ac97 write 20 : 0200
ac97 write 22 : 0400
ac97 write 22 : 0402
ac97 write 26 : 800f


Since there is no error message "vortex: ac97 codec stuck busy" or
"vortex: ac97 address never arrived" appear in your system log.

It seem to me that your problem is due to the routine
check_volume_resolution() do not take care of the difference between
STAC9704 (AC97 2.0) and AC97 2.1 Specification. ( "reserved bits are
don't care upon read back" in AC97 2.0 and "reserved bits must return 0
upon read back" in AC97 2.1)

http://cvs.sourceforge.net/viewcvs.py/alsa/alsa-kernel/pci/ac97/ac97_codec.c?r1=1.163&r2=1.164

You will need to open another bug report with category "AC97" in ALSA
Bug Tracking System.


STAC9704 specification

1) All registers not shown and bits contain an X are resserved.
2) Any reserved bits, marked X, can be written to but are don't care
upon read back.

AC97 2.1 specification

1) Italian underline indicate optional feature registers or optional
bits within a register. Whether implemented or not, these may be written
to but must return 0 if there is no support for this feature.
2) Any reserved bits, marked X, can be written to but must return 0 on
read back.


Master Volume

ac97 read  02 : 8000
ac97 read  02 : 8000
ac97 write 02 : 0000
ac97 read  02 : 0000
ac97 write 02 : 8000
ac97 read  02 : 8000
ac97 write 02 : 8000
ac97 write 02 : a0a0
ac97 read  02 : 9f9f
ac97 write 02 : 9090
ac97 read  02 : 9090
ac97 read  02 : 9010
ac97 write 02 : 9f1f  ( 5-bits )

Master Volume Mono

ac97 read  06 : 9f00
ac97 read  06 : 8000
ac97 write 06 : 0000
ac97 read  06 : 0000
ac97 write 06 : 8000
ac97 read  06 : 8000
ac97 write 06 : 8000
ac97 write 06 : a0a0
ac97 read  06 : a09f <--- ???
ac97 write 06 : 9090
ac97 read  06 : 9090
ac97 read  06 : 8010
ac97 write 06 : bf1f ( 6-bits )

Mic Volume

ac97 read  0e : 8008
ac97 read  0e : 8008
ac97 write 0e : 0008
ac97 read  0e : 0008
ac97 write 0e : 8008
ac97 read  0e : 8008
ac97 write 0e : 8008
ac97 write 0e : a0a0
ac97 read  0e : a0a0 <--- ???
ac97 read  0e : 8000
ac97 write 0e : bf3f ( 6-bits )

CD Volume

ac97 read  12 : a828
ac97 read  12 : 8808
ac97 write 12 : 0808
ac97 read  12 : 0808
ac97 write 12 : 8808
ac97 read  12 : 8808
ac97 write 12 : 8808
ac97 write 12 : a0a0
ac97 read  12 : a0a0  <--- ???
ac97 read  12 : 8000
ac97 write 12 : bf3f ( 6-bits )

PCM Volume

ac97 read  18 : 8808
ac97 write 18 : 0808
ac97 read  18 : 0808
ac97 write 18 : 8808
ac97 read  18 : 8808
ac97 write 18 : 8808
ac97 write 18 : a0a0
ac97 read  18 : a0a0 <--- ???
ac97 read  18 : 8000
ac97 write 18 : bf3f ( 6-bits )

Record Gain

ac97 read  1c : b030 <--- ???
ac97 write 1c : 3030 <--- ???
ac97 read  1c : 3030 <--- ???
ac97 write 1c : b030 <--- ???
ac97 read  1c : b030 <--- ???
ac97 write 1c : b030 <--- ???



alsactl restore

ac97 write 02 : 1f1f
ac97 write 02 : 1313
ac97 write 12 : 3f3f  <--- ???
ac97 write 12 : 3434  <--- ???
ac97 write 18 : 3f3f  <--- ???
ac97 write 18 : 2828  <--- ???
ac97 write 20 : 0200
ac97 write 22 : 0400
ac97 write 22 : 0402
ac97 write 26 : 800f

















reply via email to

[Prev in Thread] Current Thread [Next in Thread]