Ignore:
Timestamp:
Aug 7, 2022, 6:11:12 PM (3 years ago)
Author:
David Azarewicz
Message:

Merge changes from next branch.

Location:
GPL/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/alsa-kernel/pci/atiixp.c

    r703 r717  
    15411541 */
    15421542
    1543 static int snd_atiixp_free(struct atiixp *chip)
    1544 {
    1545         if (chip->irq < 0)
    1546                 goto __hw_end;
    1547         snd_atiixp_chip_stop(chip);
    1548 
    1549       __hw_end:
    1550         if (chip->irq >= 0)
    1551                 free_irq(chip->irq, chip);
    1552         iounmap(chip->remap_addr);
    1553         pci_release_regions(chip->pci);
    1554         pci_disable_device(chip->pci);
    1555         kfree(chip);
    1556         return 0;
    1557 }
    1558 
    1559 static int snd_atiixp_dev_free(struct snd_device *device)
    1560 {
    1561         struct atiixp *chip = device->device_data;
    1562         return snd_atiixp_free(chip);
     1543static void snd_atiixp_free(struct snd_card *card)
     1544{
     1545        snd_atiixp_chip_stop(card->private_data);
    15631546}
    15641547
     
    15661549 * constructor for chip instance
    15671550 */
    1568 static int snd_atiixp_create(struct snd_card *card,
    1569                              struct pci_dev *pci,
    1570                              struct atiixp **r_chip)
    1571 {
    1572         static const struct snd_device_ops ops = {
    1573                 .dev_free =     snd_atiixp_dev_free,
    1574         };
    1575         struct atiixp *chip;
     1551static int snd_atiixp_init(struct snd_card *card, struct pci_dev *pci)
     1552{
     1553        struct atiixp *chip = card->private_data;
    15761554        int err;
    15771555
    1578         err = pci_enable_device(pci);
     1556        err = pcim_enable_device(pci);
    15791557        if (err < 0)
    15801558                return err;
    1581 
    1582         chip = kzalloc(sizeof(*chip), GFP_KERNEL);
    1583         if (chip == NULL) {
    1584                 pci_disable_device(pci);
    1585                 return -ENOMEM;
    1586         }
    15871559
    15881560        spin_lock_init(&chip->reg_lock);
     
    15911563        chip->pci = pci;
    15921564        chip->irq = -1;
     1565#ifndef TARGET_OS2
     1566        err = pcim_iomap_regions(pci, 1 << 0, "ATI IXP AC97");
     1567        if (err < 0)
     1568                return err;
     1569#else
    15931570        err = pci_request_regions(pci, "ATI IXP AC97");
    15941571        if (err < 0) {
     
    15971574                return err;
    15981575        }
     1576#endif
    15991577        chip->addr = pci_resource_start(pci, 0);
     1578#ifndef TARGET_OS2
     1579        chip->remap_addr = pcim_iomap_table(pci)[0];
     1580#else
    16001581        chip->remap_addr = pci_ioremap_bar(pci, 0);
    1601         if (chip->remap_addr == NULL) {
    1602                 dev_err(card->dev, "AC'97 space ioremap problem\n");
    1603                 snd_atiixp_free(chip);
    1604                 return -EIO;
    1605         }
    1606 
    1607         if (request_irq(pci->irq, snd_atiixp_interrupt, IRQF_SHARED,
    1608                         KBUILD_MODNAME, chip)) {
     1582#endif
     1583        if (devm_request_irq(&pci->dev, pci->irq, snd_atiixp_interrupt,
     1584                             IRQF_SHARED, KBUILD_MODNAME, chip)) {
    16091585                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
    1610                 snd_atiixp_free(chip);
    16111586                return -EBUSY;
    16121587        }
    16131588        chip->irq = pci->irq;
    16141589        card->sync_irq = chip->irq;
     1590        card->private_free = snd_atiixp_free;
    16151591        pci_set_master(pci);
    16161592
    1617         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
    1618         if (err < 0) {
    1619                 snd_atiixp_free(chip);
    1620                 return err;
    1621         }
    1622 
    1623         *r_chip = chip;
    1624         return 0;
    1625 }
    1626 
    1627 
    1628 static int snd_atiixp_probe(struct pci_dev *pci,
    1629                             const struct pci_device_id *pci_id)
     1593        return 0;
     1594}
     1595
     1596
     1597static int __snd_atiixp_probe(struct pci_dev *pci,
     1598                              const struct pci_device_id *pci_id)
    16301599{
    16311600        struct snd_card *card;
     
    16331602        int err;
    16341603
    1635         err = snd_card_new(&pci->dev, index, id, THIS_MODULE, 0, &card);
     1604        err = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE,
     1605                                sizeof(*chip), &card);
    16361606        if (err < 0)
    16371607                return err;
     1608        chip = card->private_data;
    16381609
    16391610        strcpy(card->driver, spdif_aclink ? "ATIIXP" : "ATIIXP-SPDMA");
    16401611        strcpy(card->shortname, "ATI IXP");
    1641         err = snd_atiixp_create(card, pci, &chip);
     1612        err = snd_atiixp_init(card, pci);
    16421613        if (err < 0)
    1643                 goto __error;
    1644         card->private_data = chip;
     1614                return err;
    16451615
    16461616        err = snd_atiixp_aclink_reset(chip);
    16471617        if (err < 0)
    1648                 goto __error;
     1618                return err;
    16491619
    16501620        chip->spdif_over_aclink = spdif_aclink;
     
    16521622        err = snd_atiixp_mixer_new(chip, ac97_clock, ac97_quirk);
    16531623        if (err < 0)
    1654                 goto __error;
     1624                return err;
    16551625
    16561626        err = snd_atiixp_pcm_new(chip);
    16571627        if (err < 0)
    1658                 goto __error;
     1628                return err;
    16591629       
    16601630        snd_atiixp_proc_init(chip);
     
    16741644        err = snd_card_register(card);
    16751645        if (err < 0)
    1676                 goto __error;
     1646                return err;
    16771647
    16781648        pci_set_drvdata(pci, card);
    16791649        return 0;
    1680 
    1681  __error:
    1682         snd_card_free(card);
    1683         return err;
    1684 }
    1685 
    1686 static void snd_atiixp_remove(struct pci_dev *pci)
    1687 {
    1688         snd_card_free(pci_get_drvdata(pci));
     1650}
     1651
     1652static int snd_atiixp_probe(struct pci_dev *pci,
     1653                            const struct pci_device_id *pci_id)
     1654{
     1655        return snd_card_free_on_error(&pci->dev, __snd_atiixp_probe(pci, pci_id));
    16891656}
    16901657
     
    16931660        .id_table = snd_atiixp_ids,
    16941661        .probe = snd_atiixp_probe,
    1695         .remove = snd_atiixp_remove,
    16961662        .driver = {
    16971663                .pm = SND_ATIIXP_PM_OPS,
Note: See TracChangeset for help on using the changeset viewer.