Changeset 717 for GPL/trunk/alsa-kernel/pci/maestro3.c
- Timestamp:
- Aug 7, 2022, 6:11:12 PM (3 years ago)
- Location:
- GPL/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/trunk
- Property svn:mergeinfo changed
/GPL/branches/uniaud32-next merged: 710-716
- Property svn:mergeinfo changed
-
GPL/trunk/alsa-kernel/pci/maestro3.c
r703 r717 2351 2351 */ 2352 2352 2353 static int snd_m3_free(struct snd_m3 *chip) 2354 { 2353 static void snd_m3_free(struct snd_card *card) 2354 { 2355 struct snd_m3 *chip = card->private_data; 2355 2356 struct m3_dma *s; 2356 2357 int i; 2357 2358 2358 2359 cancel_work_sync(&chip->hwvol_work); 2359 #ifdef CONFIG_SND_MAESTRO3_INPUT2360 if (chip->input_dev)2361 input_unregister_device(chip->input_dev);2362 #endif2363 2360 2364 2361 if (chip->substreams) { … … 2371 2368 } 2372 2369 spin_unlock_irq(&chip->reg_lock); 2373 kfree(chip->substreams);2374 2370 } 2375 2371 if (chip->iobase) { … … 2380 2376 vfree(chip->suspend_mem); 2381 2377 #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 2389 2378 release_firmware(chip->assp_kernel_image); 2390 2379 release_firmware(chip->assp_minisrc_image); 2391 2392 pci_disable_device(chip->pci);2393 kfree(chip);2394 return 0;2395 2380 } 2396 2381 … … 2485 2470 int err; 2486 2471 2487 input_dev = input_allocate_device();2472 input_dev = devm_input_allocate_device(&chip->pci->dev); 2488 2473 if (!input_dev) 2489 2474 return -ENOMEM; … … 2505 2490 2506 2491 err = input_register_device(input_dev); 2507 if (err) { 2508 input_free_device(input_dev); 2492 if (err) 2509 2493 return err; 2510 }2511 2494 2512 2495 chip->input_dev = input_dev; … … 2517 2500 /* 2518 2501 */ 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 }2525 2502 2526 2503 static int 2527 2504 snd_m3_create(struct snd_card *card, struct pci_dev *pci, 2528 2505 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; 2533 2509 int i, err; 2534 2510 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)) 2542 2513 return -EIO; 2543 2514 … … 2546 2517 dev_err(card->dev, 2547 2518 "architecture does not support 28bit PCI busmaster DMA\n"); 2548 pci_disable_device(pci);2549 2519 return -ENXIO; 2550 }2551 2552 chip = kzalloc(sizeof(*chip), GFP_KERNEL);2553 if (chip == NULL) {2554 pci_disable_device(pci);2555 return -ENOMEM;2556 2520 } 2557 2521 … … 2571 2535 chip->irq = -1; 2572 2536 INIT_WORK(&chip->hwvol_work, snd_m3_update_hw_volume); 2537 card->private_free = snd_m3_free; 2573 2538 2574 2539 chip->external_amp = enable_amp; … … 2600 2565 2601 2566 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 2602 2571 chip->substreams = kcalloc(chip->num_substreams, sizeof(struct m3_dma), 2603 2572 GFP_KERNEL); 2604 if (chip->substreams == NULL) { 2605 kfree(chip); 2606 pci_disable_device(pci); 2573 #endif 2574 if (!chip->substreams) 2607 2575 return -ENOMEM; 2608 }2609 2576 2610 2577 err = request_firmware(&chip->assp_kernel_image, 2611 2578 "ess/maestro3_assp_kernel.fw", &pci->dev); 2612 2579 if (err < 0) 2613 goto free_chip;2580 return err; 2614 2581 2615 2582 err = request_firmware(&chip->assp_minisrc_image, 2616 2583 "ess/maestro3_assp_minisrc.fw", &pci->dev); 2617 2584 if (err < 0) 2618 goto free_chip;2585 return err; 2619 2586 2620 2587 err = pci_request_regions(pci, card->driver); 2621 2588 if (err < 0) 2622 goto free_chip;2589 return err; 2623 2590 2624 2591 chip->iobase = pci_resource_start(pci, 0); … … 2636 2603 snd_m3_hv_init(chip); 2637 2604 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 2638 2612 if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED, 2639 2613 KBUILD_MODNAME, chip)) { 2640 2614 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 2644 2618 chip->irq = pci->irq; 2645 2619 card->sync_irq = chip->irq; … … 2654 2628 #endif 2655 2629 2656 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);2657 if (err < 0)2658 goto free_chip;2659 2660 2630 err = snd_m3_mixer(chip); 2661 2631 if (err < 0) … … 2686 2656 snd_m3_assp_continue(chip); 2687 2657 2688 *chip_ret = chip;2689 2690 2658 return 0; 2691 2692 free_chip:2693 snd_m3_free(chip);2694 return err;2695 2659 } 2696 2660 … … 2698 2662 */ 2699 2663 static 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) 2701 2665 { 2702 2666 static int dev; … … 2716 2680 } 2717 2681 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); 2720 2684 if (err < 0) 2721 2685 return err; 2686 chip = card->private_data; 2722 2687 2723 2688 switch (pci->device) { … … 2735 2700 } 2736 2701 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]); 2738 2703 if (err < 0) 2739 goto free_card; 2740 2741 card->private_data = chip; 2704 return err; 2742 2705 2743 2706 sprintf(card->shortname, "ESS %s PCI", card->driver); … … 2747 2710 err = snd_card_register(card); 2748 2711 if (err < 0) 2749 goto free_card;2712 return err; 2750 2713 2751 2714 #if 0 /* TODO: not supported yet */ … … 2762 2725 dev++; 2763 2726 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 2729 static int 2730 snd_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)); 2773 2733 } 2774 2734 … … 2777 2737 .id_table = snd_m3_ids, 2778 2738 .probe = snd_m3_probe, 2779 .remove = snd_m3_remove,2780 2739 .driver = { 2781 2740 .pm = M3_PM_OPS,
Note:
See TracChangeset
for help on using the changeset viewer.