diff options
Diffstat (limited to 'sound/pci/cs5530.c')
| -rw-r--r-- | sound/pci/cs5530.c | 76 |
1 files changed, 34 insertions, 42 deletions
diff --git a/sound/pci/cs5530.c b/sound/pci/cs5530.c index bc07e275d4d..b4e0ff6a99a 100644 --- a/sound/pci/cs5530.c +++ b/sound/pci/cs5530.c @@ -37,7 +37,7 @@ */ #include <linux/delay.h> -#include <linux/moduleparam.h> +#include <linux/module.h> #include <linux/pci.h> #include <linux/slab.h> #include <sound/core.h> @@ -50,7 +50,14 @@ MODULE_LICENSE("GPL"); static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; -static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; +static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; + +module_param_array(index, int, NULL, 0444); +MODULE_PARM_DESC(index, "Index value for CS5530 Audio driver."); +module_param_array(id, charp, NULL, 0444); +MODULE_PARM_DESC(id, "ID string for CS5530 Audio driver."); +module_param_array(enable, bool, NULL, 0444); +MODULE_PARM_DESC(enable, "Enable CS5530 Audio driver."); struct snd_cs5530 { struct snd_card *card; @@ -81,13 +88,12 @@ static int snd_cs5530_dev_free(struct snd_device *device) return snd_cs5530_free(chip); } -static void __devexit snd_cs5530_remove(struct pci_dev *pci) +static void snd_cs5530_remove(struct pci_dev *pci) { snd_card_free(pci_get_drvdata(pci)); - pci_set_drvdata(pci, NULL); } -static u8 __devinit snd_cs5530_mixer_read(unsigned long io, u8 reg) +static u8 snd_cs5530_mixer_read(unsigned long io, u8 reg) { outb(reg, io + 4); udelay(20); @@ -96,9 +102,9 @@ static u8 __devinit snd_cs5530_mixer_read(unsigned long io, u8 reg) return reg; } -static int __devinit snd_cs5530_create(struct snd_card *card, - struct pci_dev *pci, - struct snd_cs5530 **rchip) +static int snd_cs5530_create(struct snd_card *card, + struct pci_dev *pci, + struct snd_cs5530 **rchip) { struct snd_cs5530 *chip; unsigned long sb_base; @@ -135,8 +141,7 @@ static int __devinit snd_cs5530_create(struct snd_card *card, mem = pci_ioremap_bar(pci, 0); if (mem == NULL) { - kfree(chip); - pci_disable_device(pci); + snd_cs5530_free(chip); return -EBUSY; } @@ -155,17 +160,17 @@ static int __devinit snd_cs5530_create(struct snd_card *card, sb_base = 0x220 + 0x20 * (map & 3); if (map & (1<<2)) - printk(KERN_INFO "CS5530: XpressAudio at 0x%lx\n", sb_base); + dev_info(card->dev, "XpressAudio at 0x%lx\n", sb_base); else { - printk(KERN_ERR "Could not find XpressAudio!\n"); + dev_err(card->dev, "Could not find XpressAudio!\n"); snd_cs5530_free(chip); return -ENODEV; } if (map & (1<<5)) - printk(KERN_INFO "CS5530: MPU at 0x300\n"); + dev_info(card->dev, "MPU at 0x300\n"); else if (map & (1<<6)) - printk(KERN_INFO "CS5530: MPU at 0x330\n"); + dev_info(card->dev, "MPU at 0x330\n"); irq = snd_cs5530_mixer_read(sb_base, 0x80) & 0x0F; dma8 = snd_cs5530_mixer_read(sb_base, 0x81); @@ -177,7 +182,7 @@ static int __devinit snd_cs5530_create(struct snd_card *card, else if (dma8 & 0x80) dma16 = 7; else { - printk(KERN_ERR "CS5530: No 16bit DMA enabled\n"); + dev_err(card->dev, "No 16bit DMA enabled\n"); snd_cs5530_free(chip); return -ENODEV; } @@ -189,7 +194,7 @@ static int __devinit snd_cs5530_create(struct snd_card *card, else if (dma8 & 0x08) dma8 = 3; else { - printk(KERN_ERR "CS5530: No 8bit DMA enabled\n"); + dev_err(card->dev, "No 8bit DMA enabled\n"); snd_cs5530_free(chip); return -ENODEV; } @@ -203,32 +208,31 @@ static int __devinit snd_cs5530_create(struct snd_card *card, else if (irq & 8) irq = 10; else { - printk(KERN_ERR "CS5530: SoundBlaster IRQ not set\n"); + dev_err(card->dev, "SoundBlaster IRQ not set\n"); snd_cs5530_free(chip); return -ENODEV; } - printk(KERN_INFO "CS5530: IRQ: %d DMA8: %d DMA16: %d\n", irq, dma8, - dma16); + dev_info(card->dev, "IRQ: %d DMA8: %d DMA16: %d\n", irq, dma8, dma16); err = snd_sbdsp_create(card, sb_base, irq, snd_sb16dsp_interrupt, dma8, dma16, SB_HW_CS5530, &chip->sb); if (err < 0) { - printk(KERN_ERR "CS5530: Could not create SoundBlaster\n"); + dev_err(card->dev, "Could not create SoundBlaster\n"); snd_cs5530_free(chip); return err; } err = snd_sb16dsp_pcm(chip->sb, 0, &chip->sb->pcm); if (err < 0) { - printk(KERN_ERR "CS5530: Could not create PCM\n"); + dev_err(card->dev, "Could not create PCM\n"); snd_cs5530_free(chip); return err; } err = snd_sbmixer_new(chip->sb); if (err < 0) { - printk(KERN_ERR "CS5530: Could not create Mixer\n"); + dev_err(card->dev, "Could not create Mixer\n"); snd_cs5530_free(chip); return err; } @@ -239,13 +243,12 @@ static int __devinit snd_cs5530_create(struct snd_card *card, return err; } - snd_card_set_dev(card, &pci->dev); *rchip = chip; return 0; } -static int __devinit snd_cs5530_probe(struct pci_dev *pci, - const struct pci_device_id *pci_id) +static int snd_cs5530_probe(struct pci_dev *pci, + const struct pci_device_id *pci_id) { static int dev; struct snd_card *card; @@ -259,7 +262,8 @@ static int __devinit snd_cs5530_probe(struct pci_dev *pci, return -ENOENT; } - err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card); + err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, + 0, &card); if (err < 0) return err; @@ -284,23 +288,11 @@ static int __devinit snd_cs5530_probe(struct pci_dev *pci, return 0; } -static struct pci_driver driver = { - .name = "CS5530_Audio", +static struct pci_driver cs5530_driver = { + .name = KBUILD_MODNAME, .id_table = snd_cs5530_ids, .probe = snd_cs5530_probe, - .remove = __devexit_p(snd_cs5530_remove), + .remove = snd_cs5530_remove, }; -static int __init alsa_card_cs5530_init(void) -{ - return pci_register_driver(&driver); -} - -static void __exit alsa_card_cs5530_exit(void) -{ - pci_unregister_driver(&driver); -} - -module_init(alsa_card_cs5530_init) -module_exit(alsa_card_cs5530_exit) - +module_pci_driver(cs5530_driver); |
