Update of /cvsroot/alsa/alsa-kernel/pci
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13142/pci

Modified Files:
        atiixp.c 
Log Message:
- probe only audio codecs.
- use enums instead of embedded numbers.
- added KERN_ERR prefix to the error messages.


Index: atiixp.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/atiixp.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- atiixp.c    4 May 2004 15:24:29 -0000       1.8
+++ atiixp.c    13 May 2004 18:40:18 -0000      1.9
@@ -224,7 +224,12 @@
 /*
  * stream enum
  */
-enum { ATI_DMA_PLAYBACK, ATI_DMA_CAPTURE, ATI_DMA_SPDIF };
+enum { ATI_DMA_PLAYBACK, ATI_DMA_CAPTURE, ATI_DMA_SPDIF, NUM_ATI_DMAS }; /* DMAs */
+enum { ATI_PCM_OUT, ATI_PCM_IN, ATI_PCM_SPDIF, NUM_ATI_PCMS }; /* AC97 pcm slots */
+enum { ATI_PCMDEV_ANALOG, ATI_PCMDEV_DIGITAL, NUM_ATI_PCMDEVS }; /* pcm devices */
+
+#define NUM_ATI_CODECS 3
+
 
 /*
  * constants and callbacks for each DMA type
@@ -232,6 +237,7 @@
 struct snd_atiixp_dma_ops {
        int type;                       /* ATI_DMA_XXX */
        unsigned int llp_offset;        /* LINKPTR offset */
+       unsigned int dt_cur;            /* DT_CUR offset */
        void (*enable_dma)(atiixp_t *chip, int on);     /* called from open callback */
        void (*enable_transfer)(atiixp_t *chip, int on); /* called from trigger 
(START/STOP) */
        void (*flush_dma)(atiixp_t *chip);              /* called from trigger (STOP 
only) */
@@ -266,14 +272,14 @@
        int irq;
        
        ac97_bus_t *ac97_bus;
-       ac97_t *ac97[3];                /* IXP can have up to 3 codecs */
+       ac97_t *ac97[NUM_ATI_CODECS];
 
        spinlock_t reg_lock;
        spinlock_t ac97_lock;
 
-       atiixp_dma_t dmas[3];           /* playback, capture, spdif */
-       struct ac97_pcm *pcms[3];       /* playback, capture, spdif */
-       snd_pcm_t *pcmdevs[2];          /* PCM devices: analog i/o, spdif */
+       atiixp_dma_t dmas[NUM_ATI_DMAS];
+       struct ac97_pcm *pcms[NUM_ATI_PCMS];
+       snd_pcm_t *pcmdevs[NUM_ATI_PCMDEVS];
 
        int max_channels;               /* max. channels for PCM out */
 
@@ -543,8 +549,8 @@
 #ifdef CONFIG_PM
 static int snd_atiixp_aclink_down(atiixp_t *chip)
 {
-       if (atiixp_read(chip, MODEM_MIRROR) & 0x1) /* modem running, too? */
-               return -EBUSY;
+       // if (atiixp_read(chip, MODEM_MIRROR) & 0x1) /* modem running, too? */
+       //      return -EBUSY;
        atiixp_update(chip, CMD,
                     ATI_REG_CMD_POWERDOWN | ATI_REG_CMD_AC_RESET,
                     ATI_REG_CMD_POWERDOWN);
@@ -650,7 +656,7 @@
        unsigned long flags;
 
        spin_lock_irqsave(&chip->reg_lock, flags);
-       curptr = readl(chip->remap_addr + dma->ops->llp_offset + 12); /* 
XXX_DMA_DT_CUR */
+       curptr = readl(chip->remap_addr + dma->ops->dt_cur);
        if (curptr < dma->buf_addr) {
                snd_printdd("curptr = %x, base = %x\n", curptr, dma->buf_addr);
                curptr = 0;
@@ -1194,6 +1200,7 @@
 static atiixp_dma_ops_t snd_atiixp_playback_dma_ops = {
        .type = ATI_DMA_PLAYBACK,
        .llp_offset = ATI_REG_OUT_DMA_LINKPTR,
+       .dt_cur = ATI_REG_OUT_DMA_DT_CUR,
        .enable_dma = atiixp_out_enable_dma,
        .enable_transfer = atiixp_out_enable_transfer,
        .flush_dma = atiixp_out_flush_dma,
@@ -1202,6 +1209,7 @@
 static atiixp_dma_ops_t snd_atiixp_capture_dma_ops = {
        .type = ATI_DMA_CAPTURE,
        .llp_offset = ATI_REG_IN_DMA_LINKPTR,
+       .dt_cur = ATI_REG_IN_DMA_DT_CUR,
        .enable_dma = atiixp_in_enable_dma,
        .enable_transfer = atiixp_in_enable_transfer,
        .flush_dma = atiixp_in_flush_dma,
@@ -1210,6 +1218,7 @@
 static atiixp_dma_ops_t snd_atiixp_spdif_dma_ops = {
        .type = ATI_DMA_SPDIF,
        .llp_offset = ATI_REG_SPDF_DMA_LINKPTR,
+       .dt_cur = ATI_REG_SPDF_DMA_DT_CUR,
        .enable_dma = atiixp_spdif_enable_dma,
        .enable_transfer = atiixp_spdif_enable_transfer,
        .flush_dma = atiixp_spdif_flush_dma,
@@ -1240,36 +1249,36 @@
                chip->pcms[i] = &pbus->pcms[i];
 
        chip->max_channels = 2;
-       if (pbus->pcms[0].r[0].slots & (1 << AC97_SLOT_PCM_SLEFT)) {
-               if (pbus->pcms[0].r[0].slots & (1 << AC97_SLOT_LFE))
+       if (pbus->pcms[ATI_PCM_OUT].r[0].slots & (1 << AC97_SLOT_PCM_SLEFT)) {
+               if (pbus->pcms[ATI_PCM_OUT].r[0].slots & (1 << AC97_SLOT_LFE))
                        chip->max_channels = 6;
                else
                        chip->max_channels = 4;
        }
 
        /* PCM #0: analog I/O */
-       err = snd_pcm_new(chip->card, "ATI IXP AC97", 0, 1, 1, &pcm);
+       err = snd_pcm_new(chip->card, "ATI IXP AC97", ATI_PCMDEV_ANALOG, 1, 1, &pcm);
        if (err < 0)
                return err;
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_atiixp_playback_ops);
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_atiixp_capture_ops);
        pcm->private_data = chip;
        strcpy(pcm->name, "ATI IXP AC97");
-       chip->pcmdevs[0] = pcm;
+       chip->pcmdevs[ATI_PCMDEV_ANALOG] = pcm;
 
        snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
                                              snd_dma_pci_data(chip->pci), 64*1024, 
128*1024);
 
        /* no SPDIF support on codec? */
-       if (chip->pcms[2] && ! chip->pcms[2]->rates)
+       if (chip->pcms[ATI_PCM_SPDIF] && ! chip->pcms[ATI_PCM_SPDIF]->rates)
                return 0;
                
        /* FIXME: non-48k sample rate doesn't work on my test machine with AD1888 */
-       if (chip->pcms[2])
-               chip->pcms[2]->rates = SNDRV_PCM_RATE_48000;
+       if (chip->pcms[ATI_PCM_SPDIF])
+               chip->pcms[ATI_PCM_SPDIF]->rates = SNDRV_PCM_RATE_48000;
 
        /* PCM #1: spdif playback */
-       err = snd_pcm_new(chip->card, "ATI IXP IEC958", 1, 1, 0, &pcm);
+       err = snd_pcm_new(chip->card, "ATI IXP IEC958", ATI_PCMDEV_DIGITAL, 1, 0, 
&pcm);
        if (err < 0)
                return err;
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_atiixp_spdif_ops);
@@ -1278,13 +1287,13 @@
                strcpy(pcm->name, "ATI IXP IEC958 (AC97)");
        else
                strcpy(pcm->name, "ATI IXP IEC958 (Direct)");
-       chip->pcmdevs[1] = pcm;
+       chip->pcmdevs[ATI_PCMDEV_DIGITAL] = pcm;
 
        snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
                                              snd_dma_pci_data(chip->pci), 64*1024, 
128*1024);
 
        /* pre-select AC97 SPDIF slots 10/11 */
-       for (i = 0; i < 3; i++) {
+       for (i = 0; i < NUM_ATI_CODECS; i++) {
                if (chip->ac97[i])
                        snd_ac97_update_bits(chip->ac97[i], AC97_EXTENDED_STATUS, 0x03 
<< 4, 0x03 << 4);
        }
@@ -1350,7 +1359,7 @@
        ac97_t ac97;
        int i, err;
        int codec_count;
-       static unsigned int codec_skip[3] = {
+       static unsigned int codec_skip[NUM_ATI_CODECS] = {
                ATI_REG_ISR_CODEC0_NOT_READY,
                ATI_REG_ISR_CODEC1_NOT_READY,
                ATI_REG_ISR_CODEC2_NOT_READY,
@@ -1369,13 +1378,14 @@
        chip->ac97_bus = pbus;
 
        codec_count = 0;
-       for (i = 0; i < 3; i++) {
+       for (i = 0; i < NUM_ATI_CODECS; i++) {
                if (chip->codec_not_ready_bits & codec_skip[i])
                        continue;
                memset(&ac97, 0, sizeof(ac97));
                ac97.private_data = chip;
                ac97.pci = chip->pci;
                ac97.num = i;
+               ac97.scaps = AC97_SCAP_SKIP_MODEM;
                if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) {
                        if (chip->codec_not_ready_bits)
                                /* codec(s) was detected but not available.
@@ -1412,10 +1422,10 @@
        atiixp_t *chip = snd_magic_cast(atiixp_t, card->pm_private_data, return 
-EINVAL);
        int i;
 
-       for (i = 0; i < 2; i++)
+       for (i = 0; i < NUM_ATI_PCMDEVS; i++)
                if (chip->pcmdevs[i])
                        snd_pcm_suspend_all(chip->pcmdevs[i]);
-       for (i = 0; i < 3; i++)
+       for (i = 0; i < NUM_ATI_CODECS; i++)
                if (chip->ac97[i])
                        snd_ac97_suspend(chip->ac97[i]);
        snd_atiixp_aclink_down(chip);
@@ -1440,7 +1450,7 @@
        snd_atiixp_aclink_reset(chip);
        snd_atiixp_chip_start(chip);
 
-       for (i = 0; i < 3; i++)
+       for (i = 0; i < NUM_ATI_CODECS; i++)
                if (chip->ac97[i])
                        snd_ac97_resume(chip->ac97[i]);
 
@@ -1530,19 +1540,19 @@
        chip->irq = -1;
        chip->addr = pci_resource_start(pci, 0);
        if ((chip->res = request_mem_region(chip->addr, ATI_MEM_REGION, "ATI IXP 
AC97")) == NULL) {
-               snd_printk("unable to grab I/O memory 0x%lx\n", chip->addr);
+               snd_printk(KERN_ERR "unable to grab I/O memory 0x%lx\n", chip->addr);
                snd_atiixp_free(chip);
                return -EBUSY;
        }
        chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr, ATI_MEM_REGION);
        if (chip->remap_addr == 0) {
-               snd_printk("AC'97 space ioremap problem\n");
+               snd_printk(KERN_ERR "AC'97 space ioremap problem\n");
                snd_atiixp_free(chip);
                return -EIO;
        }
 
        if (request_irq(pci->irq, snd_atiixp_interrupt, SA_INTERRUPT|SA_SHIRQ, 
card->shortname, (void *)chip)) {
-               snd_printk("unable to grab IRQ %d\n", pci->irq);
+               snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
                snd_atiixp_free(chip);
                return -EBUSY;
        }



-------------------------------------------------------
This SF.Net email is sponsored by: SourceForge.net Broadband
Sign-up now for SourceForge Broadband and get the fastest
6.0/768 connection for only $19.95/mo for the first 3 months!
http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to