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/via82xx.c

    r703 r717  
    19161916{
    19171917        struct gameport *gp;
    1918         struct resource *r;
    19191918
    19201919        if (!joystick)
    19211920                return -ENODEV;
    19221921
    1923         r = request_region(JOYSTICK_ADDR, 8, "VIA686 gameport");
    1924         if (!r) {
     1922        if (!devm_request_region(chip->card->dev, JOYSTICK_ADDR, 8,
     1923                                 "VIA686 gameport")) {
    19251924                dev_warn(chip->card->dev, "cannot reserve joystick port %#x\n",
    19261925                       JOYSTICK_ADDR);
     
    19321931                dev_err(chip->card->dev,
    19331932                        "cannot allocate memory for gameport\n");
    1934                 release_and_free_resource(r);
    19351933                return -ENOMEM;
    19361934        }
     
    19401938        gameport_set_dev_parent(gp, &chip->pci->dev);
    19411939        gp->io = JOYSTICK_ADDR;
    1942         gameport_set_port_data(gp, r);
    19431940
    19441941        /* Enable legacy joystick port */
     
    19541951{
    19551952        if (chip->gameport) {
    1956                 struct resource *r = gameport_get_port_data(chip->gameport);
    1957 
    19581953                gameport_unregister_port(chip->gameport);
    19591954                chip->gameport = NULL;
    1960                 release_and_free_resource(r);
    19611955        }
    19621956}
     
    20682062        }
    20692063        if (mpu_port >= 0x200)
    2070                 chip->mpu_res = request_region(mpu_port, 2, "VIA82xx MPU401");
     2064                chip->mpu_res = devm_request_region(&chip->pci->dev, mpu_port,
     2065                                                    2, "VIA82xx MPU401");
    20712066        if (chip->mpu_res) {
    20722067                if (rev_h)
     
    23072302#endif /* CONFIG_PM_SLEEP */
    23082303
    2309 static int snd_via82xx_free(struct via82xx *chip)
    2310 {
     2304static void snd_via82xx_free(struct snd_card *card)
     2305{
     2306        struct via82xx *chip = card->private_data;
    23112307        unsigned int i;
    23122308
    2313         if (chip->irq < 0)
    2314                 goto __end_hw;
    23152309        /* disable interrupts */
    23162310        for (i = 0; i < chip->num_devs; i++)
    23172311                snd_via82xx_channel_reset(chip, &chip->devs[i]);
    2318 
    2319         if (chip->irq >= 0)
    2320                 free_irq(chip->irq, chip);
    2321  __end_hw:
    2322         release_and_free_resource(chip->mpu_res);
    2323         pci_release_regions(chip->pci);
    23242312
    23252313        if (chip->chip_type == TYPE_VIA686) {
     
    23282316                pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, chip->old_legacy_cfg);
    23292317        }
    2330         pci_disable_device(chip->pci);
    2331         kfree(chip);
    2332         return 0;
    2333 }
    2334 
    2335 static int snd_via82xx_dev_free(struct snd_device *device)
    2336 {
    2337         struct via82xx *chip = device->device_data;
    2338         return snd_via82xx_free(chip);
    23392318}
    23402319
     
    23432322                              int chip_type,
    23442323                              int revision,
    2345                               unsigned int ac97_clock,
    2346                               struct via82xx **r_via)
    2347 {
    2348         struct via82xx *chip;
     2324                              unsigned int ac97_clock)
     2325{
     2326        struct via82xx *chip = card->private_data;
    23492327        int err;
    2350         static const struct snd_device_ops ops = {
    2351                 .dev_free =     snd_via82xx_dev_free,
    2352         };
    2353 
    2354         err = pci_enable_device(pci);
     2328
     2329        err = pcim_enable_device(pci);
    23552330        if (err < 0)
    23562331                return err;
    2357 
    2358         chip = kzalloc(sizeof(*chip), GFP_KERNEL);
    2359         if (!chip) {
    2360                 pci_disable_device(pci);
    2361                 return -ENOMEM;
    2362         }
    23632332
    23642333        chip->chip_type = chip_type;
     
    23782347
    23792348        err = pci_request_regions(pci, card->driver);
    2380         if (err < 0) {
    2381                 kfree(chip);
    2382                 pci_disable_device(pci);
     2349        if (err < 0)
    23832350                return err;
    2384         }
    23852351        chip->port = pci_resource_start(pci, 0);
    2386         if (request_irq(pci->irq,
    2387                         chip_type == TYPE_VIA8233 ?
    2388                         snd_via8233_interrupt : snd_via686_interrupt,
    2389                         IRQF_SHARED,
    2390                         KBUILD_MODNAME, chip)) {
     2352        if (devm_request_irq(&pci->dev, pci->irq,
     2353                             chip_type == TYPE_VIA8233 ?
     2354                             snd_via8233_interrupt : snd_via686_interrupt,
     2355                             IRQF_SHARED,
     2356                             KBUILD_MODNAME, chip)) {
    23912357                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
    2392                 snd_via82xx_free(chip);
    23932358                return -EBUSY;
    23942359        }
    23952360        chip->irq = pci->irq;
    23962361        card->sync_irq = chip->irq;
     2362        card->private_free = snd_via82xx_free;
    23972363        if (ac97_clock >= 8000 && ac97_clock <= 48000)
    23982364                chip->ac97_clock = ac97_clock;
    23992365
    24002366        err = snd_via82xx_chip_init(chip);
    2401         if (err < 0) {
    2402                 snd_via82xx_free(chip);
     2367        if (err < 0)
    24032368                return err;
    2404         }
    2405 
    2406         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
    2407         if (err < 0) {
    2408                 snd_via82xx_free(chip);
    2409                 return err;
    2410         }
    24112369
    24122370        /* The 8233 ac97 controller does not implement the master bit
     
    24142372         * We call pci_set_master here because it does not hurt. */
    24152373        pci_set_master(pci);
    2416 
    2417         *r_via = chip;
    24182374        return 0;
    24192375}
     
    25072463};
    25082464
    2509 static int snd_via82xx_probe(struct pci_dev *pci,
    2510                              const struct pci_device_id *pci_id)
     2465static int __snd_via82xx_probe(struct pci_dev *pci,
     2466                               const struct pci_device_id *pci_id)
    25112467{
    25122468        struct snd_card *card;
     
    25162472        int err;
    25172473
    2518         err = snd_card_new(&pci->dev, index, id, THIS_MODULE, 0, &card);
     2474        err = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE,
     2475                                sizeof(*chip), &card);
    25192476        if (err < 0)
    25202477                return err;
     2478        chip = card->private_data;
    25212479
    25222480        card_type = pci_id->driver_data;
     
    25572515        default:
    25582516                dev_err(card->dev, "invalid card type %d\n", card_type);
    2559                 err = -EINVAL;
    2560                 goto __error;
     2517                return -EINVAL;
    25612518        }
    25622519               
    25632520        err = snd_via82xx_create(card, pci, chip_type, pci->revision,
    2564                                  ac97_clock, &chip);
     2521                                 ac97_clock);
    25652522        if (err < 0)
    2566                 goto __error;
    2567         card->private_data = chip;
     2523                return err;
    25682524        err = snd_via82xx_mixer_new(chip, ac97_quirk);
    25692525        if (err < 0)
    2570                 goto __error;
     2526                return err;
    25712527
    25722528        if (chip_type == TYPE_VIA686) {
    25732529                err = snd_via686_pcm_new(chip);
    25742530                if (err < 0)
    2575                         goto __error;
     2531                        return err;
    25762532                err = snd_via686_init_misc(chip);
    25772533                if (err < 0)
    2578                         goto __error;
     2534                        return err;
    25792535        } else {
    25802536                if (chip_type == TYPE_VIA8233A) {
    25812537                        err = snd_via8233a_pcm_new(chip);
    25822538                        if (err < 0)
    2583                                 goto __error;
     2539                                return err;
    25842540                        // chip->dxs_fixed = 1; /* FIXME: use 48k for DXS #3? */
    25852541                } else {
    25862542                        err = snd_via8233_pcm_new(chip);
    25872543                        if (err < 0)
    2588                                 goto __error;
     2544                                return err;
    25892545                        if (dxs_support == VIA_DXS_48K)
    25902546                                chip->dxs_fixed = 1;
     
    25982554                err = snd_via8233_init_misc(chip);
    25992555                if (err < 0)
    2600                         goto __error;
     2556                        return err;
    26012557        }
    26022558
     
    26122568
    26132569        err = snd_card_register(card);
    2614         if (err < 0) {
    2615                 snd_card_free(card);
     2570        if (err < 0)
    26162571                return err;
    2617         }
    26182572        pci_set_drvdata(pci, card);
    26192573        return 0;
    2620 
    2621  __error:
    2622         snd_card_free(card);
    2623         return err;
    2624 }
    2625 
    2626 static void snd_via82xx_remove(struct pci_dev *pci)
    2627 {
    2628         snd_card_free(pci_get_drvdata(pci));
     2574}
     2575
     2576static int snd_via82xx_probe(struct pci_dev *pci,
     2577                             const struct pci_device_id *pci_id)
     2578{
     2579        return snd_card_free_on_error(&pci->dev, __snd_via82xx_probe(pci, pci_id));
    26292580}
    26302581
     
    26332584        .id_table = snd_via82xx_ids,
    26342585        .probe = snd_via82xx_probe,
    2635         .remove = snd_via82xx_remove,
    26362586        .driver = {
    26372587                .pm = SND_VIA82XX_PM_OPS,
Note: See TracChangeset for help on using the changeset viewer.