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

    r703 r717  
    23512351 */
    23522352
    2353 static int snd_m3_free(struct snd_m3 *chip)
    2354 {
     2353static void snd_m3_free(struct snd_card *card)
     2354{
     2355        struct snd_m3 *chip = card->private_data;
    23552356        struct m3_dma *s;
    23562357        int i;
    23572358
    23582359        cancel_work_sync(&chip->hwvol_work);
    2359 #ifdef CONFIG_SND_MAESTRO3_INPUT
    2360         if (chip->input_dev)
    2361                 input_unregister_device(chip->input_dev);
    2362 #endif
    23632360
    23642361        if (chip->substreams) {
     
    23712368                }
    23722369                spin_unlock_irq(&chip->reg_lock);
    2373                 kfree(chip->substreams);
    23742370        }
    23752371        if (chip->iobase) {
     
    23802376        vfree(chip->suspend_mem);
    23812377#endif
    2382 
    2383         if (chip->irq >= 0)
    2384                 free_irq(chip->irq, chip);
    2385 
    2386         if (chip->iobase)
    2387                 pci_release_regions(chip->pci);
    2388 
    23892378        release_firmware(chip->assp_kernel_image);
    23902379        release_firmware(chip->assp_minisrc_image);
    2391 
    2392         pci_disable_device(chip->pci);
    2393         kfree(chip);
    2394         return 0;
    23952380}
    23962381
     
    24852470        int err;
    24862471
    2487         input_dev = input_allocate_device();
     2472        input_dev = devm_input_allocate_device(&chip->pci->dev);
    24882473        if (!input_dev)
    24892474                return -ENOMEM;
     
    25052490
    25062491        err = input_register_device(input_dev);
    2507         if (err) {
    2508                 input_free_device(input_dev);
     2492        if (err)
    25092493                return err;
    2510         }
    25112494
    25122495        chip->input_dev = input_dev;
     
    25172500/*
    25182501 */
    2519 
    2520 static int snd_m3_dev_free(struct snd_device *device)
    2521 {
    2522         struct snd_m3 *chip = device->device_data;
    2523         return snd_m3_free(chip);
    2524 }
    25252502
    25262503static int
    25272504snd_m3_create(struct snd_card *card, struct pci_dev *pci,
    25282505              int enable_amp,
    2529               int amp_gpio,
    2530               struct snd_m3 **chip_ret)
    2531 {
    2532         struct snd_m3 *chip;
     2506              int amp_gpio)
     2507{
     2508        struct snd_m3 *chip = card->private_data;
    25332509        int i, err;
    25342510        const struct snd_pci_quirk *quirk;
    2535         static const struct snd_device_ops ops = {
    2536                 .dev_free =     snd_m3_dev_free,
    2537         };
    2538 
    2539         *chip_ret = NULL;
    2540 
    2541         if (pci_enable_device(pci))
     2511
     2512        if (pcim_enable_device(pci))
    25422513                return -EIO;
    25432514
     
    25462517                dev_err(card->dev,
    25472518                        "architecture does not support 28bit PCI busmaster DMA\n");
    2548                 pci_disable_device(pci);
    25492519                return -ENXIO;
    2550         }
    2551 
    2552         chip = kzalloc(sizeof(*chip), GFP_KERNEL);
    2553         if (chip == NULL) {
    2554                 pci_disable_device(pci);
    2555                 return -ENOMEM;
    25562520        }
    25572521
     
    25712535        chip->irq = -1;
    25722536        INIT_WORK(&chip->hwvol_work, snd_m3_update_hw_volume);
     2537        card->private_free = snd_m3_free;
    25732538
    25742539        chip->external_amp = enable_amp;
     
    26002565
    26012566        chip->num_substreams = NR_DSPS;
     2567#ifndef TARGET_OS2
     2568        chip->substreams = devm_kcalloc(&pci->dev, chip->num_substreams,
     2569                                        sizeof(struct m3_dma), GFP_KERNEL);
     2570#else
    26022571        chip->substreams = kcalloc(chip->num_substreams, sizeof(struct m3_dma),
    26032572                                   GFP_KERNEL);
    2604         if (chip->substreams == NULL) {
    2605                 kfree(chip);
    2606                 pci_disable_device(pci);
     2573#endif
     2574        if (!chip->substreams)
    26072575                return -ENOMEM;
    2608         }
    26092576
    26102577        err = request_firmware(&chip->assp_kernel_image,
    26112578                               "ess/maestro3_assp_kernel.fw", &pci->dev);
    26122579        if (err < 0)
    2613                 goto free_chip;
     2580                return err;
    26142581
    26152582        err = request_firmware(&chip->assp_minisrc_image,
    26162583                               "ess/maestro3_assp_minisrc.fw", &pci->dev);
    26172584        if (err < 0)
    2618                 goto free_chip;
     2585                return err;
    26192586
    26202587        err = pci_request_regions(pci, card->driver);
    26212588        if (err < 0)
    2622                 goto free_chip;
     2589                return err;
    26232590
    26242591        chip->iobase = pci_resource_start(pci, 0);
     
    26362603        snd_m3_hv_init(chip);
    26372604
     2605#ifndef TARGET_OS2
     2606        if (devm_request_irq(&pci->dev, pci->irq, snd_m3_interrupt, IRQF_SHARED,
     2607                             KBUILD_MODNAME, chip)) {
     2608                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
     2609                return -ENOMEM;
     2610        }
     2611#else
    26382612        if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED,
    26392613                        KBUILD_MODNAME, chip)) {
    26402614                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
    2641                 err = -ENOMEM;
    2642                 goto free_chip;
    2643         }
     2615                return -ENOMEM;
     2616        }
     2617#endif
    26442618        chip->irq = pci->irq;
    26452619        card->sync_irq = chip->irq;
     
    26542628#endif
    26552629
    2656         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
    2657         if (err < 0)
    2658                 goto free_chip;
    2659 
    26602630        err = snd_m3_mixer(chip);
    26612631        if (err < 0)
     
    26862656        snd_m3_assp_continue(chip);
    26872657
    2688         *chip_ret = chip;
    2689 
    26902658        return 0;
    2691 
    2692 free_chip:
    2693         snd_m3_free(chip);
    2694         return err;
    26952659}
    26962660
     
    26982662 */
    26992663static int
    2700 snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
     2664__snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
    27012665{
    27022666        static int dev;
     
    27162680        }
    27172681
    2718         err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
    2719                            0, &card);
     2682        err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
     2683                                sizeof(*chip), &card);
    27202684        if (err < 0)
    27212685                return err;
     2686        chip = card->private_data;
    27222687
    27232688        switch (pci->device) {
     
    27352700        }
    27362701
    2737         err = snd_m3_create(card, pci, external_amp[dev], amp_gpio[dev], &chip);
     2702        err = snd_m3_create(card, pci, external_amp[dev], amp_gpio[dev]);
    27382703        if (err < 0)
    2739                 goto free_card;
    2740 
    2741         card->private_data = chip;
     2704                return err;
    27422705
    27432706        sprintf(card->shortname, "ESS %s PCI", card->driver);
     
    27472710        err = snd_card_register(card);
    27482711        if (err < 0)
    2749                 goto free_card;
     2712                return err;
    27502713
    27512714#if 0 /* TODO: not supported yet */
     
    27622725        dev++;
    27632726        return 0;
    2764 
    2765 free_card:
    2766         snd_card_free(card);
    2767         return err;
    2768 }
    2769 
    2770 static void snd_m3_remove(struct pci_dev *pci)
    2771 {
    2772         snd_card_free(pci_get_drvdata(pci));
     2727}
     2728
     2729static int
     2730snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
     2731{
     2732        return snd_card_free_on_error(&pci->dev, __snd_m3_probe(pci, pci_id));
    27732733}
    27742734
     
    27772737        .id_table = snd_m3_ids,
    27782738        .probe = snd_m3_probe,
    2779         .remove = snd_m3_remove,
    27802739        .driver = {
    27812740                .pm = M3_PM_OPS,
Note: See TracChangeset for help on using the changeset viewer.