openvortex-dev
[Top][All Lists]
Advanced

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

[Openvortex-dev] Re: au88x0 modem


From: Raymond
Subject: [Openvortex-dev] Re: au88x0 modem
Date: Fri, 16 Sep 2005 10:17:01 +0800
User-agent: Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.7.8) Gecko/20050603 Fedora/1.7.8-1.1.1.legacy

Alien wrote:
Op donderdag 15 september 2005 17:34, schreef Raymond:

Sasha Khapyorsky wrote:

Great, the secondary modem codec is there. The valid codec id bits are
24:25 (AC97 interface supports up to four codecs):

#define VORTEX_CODEC_ID_SHIFT 24

I will send cleaned codec access patch separately and will look what is
next.

It would be more easy to debug/maintain the driver if using different
read/write routines for audio and modem codec.

Audio codec is always primary in sound card and audio/modem combo

The existing vortex_codec_read() and vortex_codec_write() can remain
unchanged.

Just add new routine vortex_modem_codec_read() vortex_modem_code_write()
to handle secondary/primary modem codec for audio/modem combo and PCI
modem card.

http://www.nix.ru/autocatalog/modems/AurVcomPCIV90RTL_5817.html

Make sure your patch is 32bits/64bits compatible

AMD64 user may use the  PCI audio/modem combo card and PCI modem card.


does that mean that PCI sound card is broken on AMD64 ?

cause, maybe that's why my snd-au8810 card gives problems...

http://www.amd.com/us-en/assets/content_type/DownloadableAssets/Porting_x86_Linux_device_drivers_to_AMD64_Technology.htm

Yes, the au88x0 driver in ALSA CVS is still broken on AMD64 until someone submit au88x0_amd64.patch

http://lists.nongnu.org/archive/html/openvortex-dev/2005-05/msg00000.html

I suspect your au8810 problem is caused by ACPI.
Erik has some volume problem on his au8830.

Igor Kovalenko (Diamond Sonic Impact S90) and penguinparty
report the patch work on their 64-bits machines.

https://bugtrack.alsa-project.org/alsa-bug/view.php?id=1138


You still need feedback from
1) au8810 user on 32bits/64bits machines
2) au8820 user on 32bits machines
3) au8830 user on 32bits/64bits machines
4) mpu401 test

https://bugtrack.alsa-project.org/alsa-bug/view.php?id=1025
https://bugtrack.alsa-project.org/alsa-bug/view.php?id=1047


I only test the core part of the patch using my au8830 on 32bits machine.


diff -udr /tmp/yy/linux-2.6.11/sound/pci/au88x0/au88x0.c sound/pci/au88x0/au88x0.c --- /tmp/yy/linux-2.6.11/sound/pci/au88x0/au88x0.c 2005-04-25 22:22:07.000000000 +0400
+++ sound/pci/au88x0/au88x0.c   2005-04-25 22:24:36.000000000 +0400
@@ -144,15 +144,18 @@
        // check PCI availability (DMA).
        if ((err = pci_enable_device(pci)) < 0)
                return err;
-       if (!pci_dma_supported(pci, VORTEX_DMA_MASK)) {
+        if (pci_set_dma_mask(pci, VORTEX_DMA_MASK) < 0 ||
+               pci_set_consistent_dma_mask(pci, VORTEX_DMA_MASK) < 0) {
                printk(KERN_ERR "error to set DMA mask\n");
+               pci_disable_device(pci);
                return -ENXIO;
        }
-       pci_set_dma_mask(pci, VORTEX_DMA_MASK);

        chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
-       if (chip == NULL)
+       if (chip == NULL) {
+               pci_disable_device(pci);
                return -ENOMEM;
+       }

        chip->card = card;

@@ -202,6 +205,8 @@
                goto alloc_out;
        }

+       snd_card_set_dev(card, &pci->dev);
+
        *rchip = chip;

        return 0;
diff -udr /tmp/yy/linux-2.6.11/sound/pci/au88x0/au88x0.h sound/pci/au88x0/au88x0.h --- /tmp/yy/linux-2.6.11/sound/pci/au88x0/au88x0.h 2005-04-25 22:22:07.000000000 +0400
+++ sound/pci/au88x0/au88x0.h   2005-05-07 11:25:54.000000000 +0400
@@ -41,8 +41,8 @@

 #define        VORTEX_DMA_MASK 0xffffffff

-#define        hwread(x,y) readl((x)+((y)>>2))
-#define        hwwrite(x,y,z) writel((z),(x)+((y)>>2))
+#define        hwread(x,y) readl((x)+(y))
+#define        hwwrite(x,y,z) writel((z),(x)+(y))

 /* Vortex MPU401 defines. */
 #define        MIDI_CLOCK_DIV          0x61
@@ -172,7 +172,7 @@

        /* PCI hardware resources */
        unsigned long io;
-       unsigned long __iomem *mmio;
+       void __iomem *mmio;
        unsigned int irq;
        spinlock_t lock;






reply via email to

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