These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / media / pci / saa7134 / saa7134-alsa.c
index ac3cd74..94f8162 100644 (file)
@@ -16,6 +16,9 @@
  *
  */
 
+#include "saa7134.h"
+#include "saa7134-reg.h"
+
 #include <linux/init.h>
 #include <linux/slab.h>
 #include <linux/time.h>
 #include <linux/interrupt.h>
 #include <linux/vmalloc.h>
 
-#include "saa7134.h"
-#include "saa7134-reg.h"
-
-static unsigned int debug;
-module_param(debug, int, 0644);
-MODULE_PARM_DESC(debug,"enable debug messages [alsa]");
-
 /*
  * Configuration macros
  */
@@ -57,11 +53,6 @@ module_param_array(enable, int, NULL, 0444);
 MODULE_PARM_DESC(index, "Index value for SAA7134 capture interface(s).");
 MODULE_PARM_DESC(enable, "Enable (or not) the SAA7134 capture interface(s).");
 
-#define dprintk(fmt, arg...)    if (debug) \
-       printk(KERN_DEBUG "%s/alsa: " fmt, dev->name , ##arg)
-
-
-
 /*
  * Main chip structure
  */
@@ -149,11 +140,11 @@ static void saa7134_irq_alsa_done(struct saa7134_dev *dev,
 
        spin_lock(&dev->slock);
        if (UNSET == dev->dmasound.dma_blk) {
-               dprintk("irq: recording stopped\n");
+               pr_debug("irq: recording stopped\n");
                goto done;
        }
        if (0 != (status & 0x0f000000))
-               dprintk("irq: lost %ld\n", (status >> 24) & 0x0f);
+               pr_debug("irq: lost %ld\n", (status >> 24) & 0x0f);
        if (0 == (status & 0x10000000)) {
                /* odd */
                if (0 == (dev->dmasound.dma_blk & 0x01))
@@ -164,13 +155,14 @@ static void saa7134_irq_alsa_done(struct saa7134_dev *dev,
                        reg = SAA7134_RS_BA2(6);
        }
        if (0 == reg) {
-               dprintk("irq: field oops [%s]\n",
+               pr_debug("irq: field oops [%s]\n",
                        (status & 0x10000000) ? "even" : "odd");
                goto done;
        }
 
        if (dev->dmasound.read_count >= dev->dmasound.blksize * (dev->dmasound.blocks-2)) {
-               dprintk("irq: overrun [full=%d/%d] - Blocks in %d\n",dev->dmasound.read_count,
+               pr_debug("irq: overrun [full=%d/%d] - Blocks in %d\n",
+                       dev->dmasound.read_count,
                        dev->dmasound.bufsize, dev->dmasound.blocks);
                spin_unlock(&dev->slock);
                snd_pcm_stop_xrun(dev->dmasound.substream);
@@ -180,10 +172,10 @@ static void saa7134_irq_alsa_done(struct saa7134_dev *dev,
        /* next block addr */
        next_blk = (dev->dmasound.dma_blk + 2) % dev->dmasound.blocks;
        saa_writel(reg,next_blk * dev->dmasound.blksize);
-       if (debug > 2)
-               dprintk("irq: ok, %s, next_blk=%d, addr=%x, blocks=%u, size=%u, read=%u\n",
-                       (status & 0x10000000) ? "even" : "odd ", next_blk,
-                       next_blk * dev->dmasound.blksize, dev->dmasound.blocks, dev->dmasound.blksize, dev->dmasound.read_count);
+       pr_debug("irq: ok, %s, next_blk=%d, addr=%x, blocks=%u, size=%u, read=%u\n",
+               (status & 0x10000000) ? "even" : "odd ", next_blk,
+                next_blk * dev->dmasound.blksize, dev->dmasound.blocks,
+                dev->dmasound.blksize, dev->dmasound.read_count);
 
        /* update status & wake waiting readers */
        dev->dmasound.dma_blk = (dev->dmasound.dma_blk + 1) % dev->dmasound.blocks;
@@ -233,7 +225,7 @@ static irqreturn_t saa7134_alsa_irq(int irq, void *dev_id)
        }
 
        if (loop == 10) {
-               dprintk("error! looping IRQ!");
+               pr_debug("error! looping IRQ!");
        }
 
 out:
@@ -281,11 +273,11 @@ static int saa7134_alsa_dma_init(struct saa7134_dev *dev, int nr_pages)
 
        dma->vaddr = vmalloc_32(nr_pages << PAGE_SHIFT);
        if (NULL == dma->vaddr) {
-               dprintk("vmalloc_32(%d pages) failed\n", nr_pages);
+               pr_debug("vmalloc_32(%d pages) failed\n", nr_pages);
                return -ENOMEM;
        }
 
-       dprintk("vmalloc is at addr 0x%08lx, size=%d\n",
+       pr_debug("vmalloc is at addr 0x%08lx, size=%d\n",
                                (unsigned long)dma->vaddr,
                                nr_pages << PAGE_SHIFT);
 
@@ -572,7 +564,7 @@ static int snd_card_saa7134_capture_prepare(struct snd_pcm_substream * substream
                break;
        }
 
-       dprintk("rec_start: afmt=%d ch=%d  =>  fmt=0x%x swap=%c\n",
+       pr_debug("rec_start: afmt=%d ch=%d  =>  fmt=0x%x swap=%c\n",
                runtime->format, runtime->channels, fmt,
                bswap ? 'b' : '-');
        /* dma: setup channel 6 (= AUDIO) */
@@ -821,7 +813,7 @@ static int snd_card_saa7134_capture_open(struct snd_pcm_substream * substream)
        int amux, err;
 
        if (!saa7134) {
-               printk(KERN_ERR "BUG: saa7134 can't find device struct."
+               pr_err("BUG: saa7134 can't find device struct."
                                " Can't proceed with open\n");
                return -ENODEV;
        }
@@ -1175,7 +1167,7 @@ static int alsa_card_saa7134_create(struct saa7134_dev *dev, int devnum)
                                (void*) &dev->dmasound);
 
        if (err < 0) {
-               printk(KERN_ERR "%s: can't get IRQ %d for ALSA\n",
+               pr_err("%s: can't get IRQ %d for ALSA\n",
                        dev->name, dev->pci->irq);
                goto __nodev;
        }
@@ -1196,7 +1188,8 @@ static int alsa_card_saa7134_create(struct saa7134_dev *dev, int devnum)
        sprintf(card->longname, "%s at 0x%lx irq %d",
                chip->dev->name, chip->iobase, chip->irq);
 
-       printk(KERN_INFO "%s/alsa: %s registered as card %d\n",dev->name,card->longname,index[devnum]);
+       pr_info("%s/alsa: %s registered as card %d\n",
+               dev->name, card->longname, index[devnum]);
 
        if ((err = snd_card_register(card)) == 0) {
                snd_saa7134_cards[devnum] = card;
@@ -1218,6 +1211,8 @@ static int alsa_device_init(struct saa7134_dev *dev)
 
 static int alsa_device_exit(struct saa7134_dev *dev)
 {
+       if (!snd_saa7134_cards[dev->nr])
+               return 1;
 
        snd_card_free(snd_saa7134_cards[dev->nr]);
        snd_saa7134_cards[dev->nr] = NULL;
@@ -1240,19 +1235,19 @@ static int saa7134_alsa_init(void)
        saa7134_dmasound_init = alsa_device_init;
        saa7134_dmasound_exit = alsa_device_exit;
 
-       printk(KERN_INFO "saa7134 ALSA driver for DMA sound loaded\n");
+       pr_info("saa7134 ALSA driver for DMA sound loaded\n");
 
        list_for_each(list,&saa7134_devlist) {
                dev = list_entry(list, struct saa7134_dev, devlist);
                if (dev->pci->device == PCI_DEVICE_ID_PHILIPS_SAA7130)
-                       printk(KERN_INFO "%s/alsa: %s doesn't support digital audio\n",
+                       pr_info("%s/alsa: %s doesn't support digital audio\n",
                                dev->name, saa7134_boards[dev->board].name);
                else
                        alsa_device_init(dev);
        }
 
        if (dev == NULL)
-               printk(KERN_INFO "saa7134 ALSA: no saa7134 cards found\n");
+               pr_info("saa7134 ALSA: no saa7134 cards found\n");
 
        return 0;
 
@@ -1267,12 +1262,13 @@ static void saa7134_alsa_exit(void)
        int idx;
 
        for (idx = 0; idx < SNDRV_CARDS; idx++) {
-               snd_card_free(snd_saa7134_cards[idx]);
+               if (snd_saa7134_cards[idx])
+                       snd_card_free(snd_saa7134_cards[idx]);
        }
 
        saa7134_dmasound_init = NULL;
        saa7134_dmasound_exit = NULL;
-       printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n");
+       pr_info("saa7134 ALSA driver for DMA sound unloaded\n");
 
        return;
 }