Ignore:
Timestamp:
Jan 1, 2021, 5:31:48 AM (5 years ago)
Author:
Paul Smedley
Message:

Add source for uniaud32 based on code from linux kernel 5.4.86

Location:
GPL/branches/uniaud32-next
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • GPL/branches/uniaud32-next/alsa-kernel/pci/cs5530.c

    r612 r615  
     1// SPDX-License-Identifier: GPL-2.0-or-later
    12/*
    23 * cs5530.c - Initialisation code for Cyrix/NatSemi VSA1 softaudio
     
    2223 * on the XpressAudio(tm) internals.
    2324 *
    24  * This program is free software; you can redistribute it and/or modify it
    25  * under the terms of the GNU General Public License as published by the
    26  * Free Software Foundation; either version 2, or (at your option) any
    27  * later version.
    28  *
    29  * This program is distributed in the hope that it will be useful, but
    30  * WITHOUT ANY WARRANTY; without even the implied warranty of
    31  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    32  * General Public License for more details.
    33  *
    3425 * TO DO:
    3526 *      Investigate whether we can portably support Cognac (5520) in the
     
    5546static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
    5647static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
    57 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
     48static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
     49
     50module_param_array(index, int, NULL, 0444);
     51MODULE_PARM_DESC(index, "Index value for CS5530 Audio driver.");
     52module_param_array(id, charp, NULL, 0444);
     53MODULE_PARM_DESC(id, "ID string for CS5530 Audio driver.");
     54module_param_array(enable, bool, NULL, 0444);
     55MODULE_PARM_DESC(enable, "Enable CS5530 Audio driver.");
    5856
    5957struct snd_cs5530 {
     
    6462};
    6563
    66 static DEFINE_PCI_DEVICE_TABLE(snd_cs5530_ids) = {
     64static const struct pci_device_id snd_cs5530_ids[] = {
    6765        {PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_AUDIO, PCI_ANY_ID,
    6866                                                        PCI_ANY_ID, 0, 0},
     
    8684}
    8785
    88 static void __devexit snd_cs5530_remove(struct pci_dev *pci)
     86static void snd_cs5530_remove(struct pci_dev *pci)
    8987{
    9088        snd_card_free(pci_get_drvdata(pci));
    91         pci_set_drvdata(pci, NULL);
    92 }
    93 
    94 static u8 __devinit snd_cs5530_mixer_read(unsigned long io, u8 reg)
     89}
     90
     91static u8 snd_cs5530_mixer_read(unsigned long io, u8 reg)
    9592{
    9693        outb(reg, io + 4);
     
    10198}
    10299
    103 static int __devinit snd_cs5530_create(struct snd_card *card,
    104                                        struct pci_dev *pci,
    105                                        struct snd_cs5530 **rchip)
     100static int snd_cs5530_create(struct snd_card *card,
     101                             struct pci_dev *pci,
     102                             struct snd_cs5530 **rchip)
    106103{
    107104        struct snd_cs5530 *chip;
     
    140137        mem = pci_ioremap_bar(pci, 0);
    141138        if (mem == NULL) {
    142                 kfree(chip);
    143                 pci_disable_device(pci);
     139                snd_cs5530_free(chip);
    144140                return -EBUSY;
    145141        }
     
    160156
    161157        if (map & (1<<2))
    162                 printk(KERN_INFO "CS5530: XpressAudio at 0x%lx\n", sb_base);
    163         else {
    164                 printk(KERN_ERR "Could not find XpressAudio!\n");
     158                dev_info(card->dev, "XpressAudio at 0x%lx\n", sb_base);
     159        else {
     160                dev_err(card->dev, "Could not find XpressAudio!\n");
    165161                snd_cs5530_free(chip);
    166162                return -ENODEV;
     
    168164
    169165        if (map & (1<<5))
    170                 printk(KERN_INFO "CS5530: MPU at 0x300\n");
     166                dev_info(card->dev, "MPU at 0x300\n");
    171167        else if (map & (1<<6))
    172                 printk(KERN_INFO "CS5530: MPU at 0x330\n");
     168                dev_info(card->dev, "MPU at 0x330\n");
    173169
    174170        irq = snd_cs5530_mixer_read(sb_base, 0x80) & 0x0F;
     
    182178                dma16 = 7;
    183179        else {
    184                 printk(KERN_ERR "CS5530: No 16bit DMA enabled\n");
     180                dev_err(card->dev, "No 16bit DMA enabled\n");
    185181                snd_cs5530_free(chip);
    186182                return -ENODEV;
     
    194190                dma8 = 3;
    195191        else {
    196                 printk(KERN_ERR "CS5530: No 8bit DMA enabled\n");
     192                dev_err(card->dev, "No 8bit DMA enabled\n");
    197193                snd_cs5530_free(chip);
    198194                return -ENODEV;
     
    208204                irq = 10;
    209205        else {
    210                 printk(KERN_ERR "CS5530: SoundBlaster IRQ not set\n");
    211                 snd_cs5530_free(chip);
    212                 return -ENODEV;
    213         }
    214 
    215         printk(KERN_INFO "CS5530: IRQ: %d DMA8: %d DMA16: %d\n", irq, dma8,
    216                                                                         dma16);
     206                dev_err(card->dev, "SoundBlaster IRQ not set\n");
     207                snd_cs5530_free(chip);
     208                return -ENODEV;
     209        }
     210
     211        dev_info(card->dev, "IRQ: %d DMA8: %d DMA16: %d\n", irq, dma8, dma16);
    217212
    218213        err = snd_sbdsp_create(card, sb_base, irq, snd_sb16dsp_interrupt, dma8,
    219214                                                dma16, SB_HW_CS5530, &chip->sb);
    220215        if (err < 0) {
    221                 printk(KERN_ERR "CS5530: Could not create SoundBlaster\n");
    222                 snd_cs5530_free(chip);
    223                 return err;
    224         }
    225 
    226         err = snd_sb16dsp_pcm(chip->sb, 0, &chip->sb->pcm);
    227         if (err < 0) {
    228                 printk(KERN_ERR "CS5530: Could not create PCM\n");
     216                dev_err(card->dev, "Could not create SoundBlaster\n");
     217                snd_cs5530_free(chip);
     218                return err;
     219        }
     220
     221        err = snd_sb16dsp_pcm(chip->sb, 0);
     222        if (err < 0) {
     223                dev_err(card->dev, "Could not create PCM\n");
    229224                snd_cs5530_free(chip);
    230225                return err;
     
    233228        err = snd_sbmixer_new(chip->sb);
    234229        if (err < 0) {
    235                 printk(KERN_ERR "CS5530: Could not create Mixer\n");
     230                dev_err(card->dev, "Could not create Mixer\n");
    236231                snd_cs5530_free(chip);
    237232                return err;
     
    244239        }
    245240
    246         snd_card_set_dev(card, &pci->dev);
    247241        *rchip = chip;
    248242        return 0;
    249243}
    250244
    251 static int __devinit snd_cs5530_probe(struct pci_dev *pci,
    252                                         const struct pci_device_id *pci_id)
     245static int snd_cs5530_probe(struct pci_dev *pci,
     246                            const struct pci_device_id *pci_id)
    253247{
    254248        static int dev;
     
    264258        }
    265259
    266         err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
     260        err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
     261                           0, &card);
    267262
    268263        if (err < 0)
     
    289284}
    290285
    291 static struct pci_driver driver = {
     286static struct pci_driver cs5530_driver = {
    292287        .name = KBUILD_MODNAME,
    293288        .id_table = snd_cs5530_ids,
    294289        .probe = snd_cs5530_probe,
    295         .remove = __devexit_p(snd_cs5530_remove),
     290        .remove = snd_cs5530_remove,
    296291};
    297292
    298 static int __init alsa_card_cs5530_init(void)
    299 {
    300         return pci_register_driver(&driver);
    301 }
    302 
    303 static void __exit alsa_card_cs5530_exit(void)
    304 {
    305         pci_unregister_driver(&driver);
    306 }
    307 
    308 module_init(alsa_card_cs5530_init)
    309 module_exit(alsa_card_cs5530_exit)
    310 
     293module_pci_driver(cs5530_driver);
Note: See TracChangeset for help on using the changeset viewer.