Merge tag 'denywrite-for-5.15' of git://github.com/davidhildenbrand/linux
[linux-2.6-microblaze.git] / sound / pci / vx222 / vx222.c
index 04c7204..f48cc20 100644 (file)
@@ -100,26 +100,6 @@ static const struct snd_vx_hardware vx222_mic_hw = {
 
 /*
  */
-static int snd_vx222_free(struct vx_core *chip)
-{
-       struct snd_vx222 *vx = to_vx222(chip);
-
-       if (chip->irq >= 0)
-               free_irq(chip->irq, (void*)chip);
-       if (vx->port[0])
-               pci_release_regions(vx->pci);
-       pci_disable_device(vx->pci);
-       kfree(chip);
-       return 0;
-}
-
-static int snd_vx222_dev_free(struct snd_device *device)
-{
-       struct vx_core *chip = device->device_data;
-       return snd_vx222_free(chip);
-}
-
-
 static int snd_vx222_create(struct snd_card *card, struct pci_dev *pci,
                            const struct snd_vx_hardware *hw,
                            struct snd_vx222 **rchip)
@@ -127,13 +107,10 @@ static int snd_vx222_create(struct snd_card *card, struct pci_dev *pci,
        struct vx_core *chip;
        struct snd_vx222 *vx;
        int i, err;
-       static const struct snd_device_ops ops = {
-               .dev_free =     snd_vx222_dev_free,
-       };
        const struct snd_vx_ops *vx_ops;
 
        /* enable PCI device */
-       err = pci_enable_device(pci);
+       err = pcim_enable_device(pci);
        if (err < 0)
                return err;
        pci_set_master(pci);
@@ -141,38 +118,26 @@ static int snd_vx222_create(struct snd_card *card, struct pci_dev *pci,
        vx_ops = hw->type == VX_TYPE_BOARD ? &vx222_old_ops : &vx222_ops;
        chip = snd_vx_create(card, hw, vx_ops,
                             sizeof(struct snd_vx222) - sizeof(struct vx_core));
-       if (! chip) {
-               pci_disable_device(pci);
+       if (!chip)
                return -ENOMEM;
-       }
        vx = to_vx222(chip);
        vx->pci = pci;
 
        err = pci_request_regions(pci, CARD_NAME);
-       if (err < 0) {
-               snd_vx222_free(chip);
+       if (err < 0)
                return err;
-       }
        for (i = 0; i < 2; i++)
                vx->port[i] = pci_resource_start(pci, i + 1);
 
-       if (request_threaded_irq(pci->irq, snd_vx_irq_handler,
-                                snd_vx_threaded_irq_handler, IRQF_SHARED,
-                                KBUILD_MODNAME, chip)) {
+       if (devm_request_threaded_irq(&pci->dev, pci->irq, snd_vx_irq_handler,
+                                     snd_vx_threaded_irq_handler, IRQF_SHARED,
+                                     KBUILD_MODNAME, chip)) {
                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
-               snd_vx222_free(chip);
                return -EBUSY;
        }
        chip->irq = pci->irq;
        card->sync_irq = chip->irq;
 
-       err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
-       if (err < 0) {
-               snd_vx222_free(chip);
-               return err;
-       }
-
-       *rchip = vx;
        return 0;
 }
 
@@ -193,8 +158,8 @@ static int snd_vx222_probe(struct pci_dev *pci,
                return -ENOENT;
        }
 
-       err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
-                          0, &card);
+       err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
+                               0, &card);
        if (err < 0)
                return err;
 
@@ -211,10 +176,8 @@ static int snd_vx222_probe(struct pci_dev *pci,
                break;
        }
        err = snd_vx222_create(card, pci, hw, &vx);
-       if (err < 0) {
-               snd_card_free(card);
+       if (err < 0)
                return err;
-       }
        card->private_data = vx;
        vx->core.ibl.size = ibl[dev];
 
@@ -228,27 +191,18 @@ static int snd_vx222_probe(struct pci_dev *pci,
 #endif
 
        err = snd_vx_setup_firmware(&vx->core);
-       if (err < 0) {
-               snd_card_free(card);
+       if (err < 0)
                return err;
-       }
 
        err = snd_card_register(card);
-       if (err < 0) {
-               snd_card_free(card);
+       if (err < 0)
                return err;
-       }
 
        pci_set_drvdata(pci, card);
        dev++;
        return 0;
 }
 
-static void snd_vx222_remove(struct pci_dev *pci)
-{
-       snd_card_free(pci_get_drvdata(pci));
-}
-
 #ifdef CONFIG_PM_SLEEP
 static int snd_vx222_suspend(struct device *dev)
 {
@@ -276,7 +230,6 @@ static struct pci_driver vx222_driver = {
        .name = KBUILD_MODNAME,
        .id_table = snd_vx222_ids,
        .probe = snd_vx222_probe,
-       .remove = snd_vx222_remove,
        .driver = {
                .pm = SND_VX222_PM_OPS,
        },