Changeset 717 for GPL/trunk/alsa-kernel/pci/es1968.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/es1968.c
r703 r717 2479 2479 return -ENODEV; 2480 2480 2481 r = request_region(JOYSTICK_ADDR, 8, "ES1968 gameport"); 2481 r = devm_request_region(&chip->pci->dev, JOYSTICK_ADDR, 8, 2482 "ES1968 gameport"); 2482 2483 if (!r) 2483 2484 return -EBUSY; … … 2487 2488 dev_err(chip->card->dev, 2488 2489 "cannot allocate memory for gameport\n"); 2489 release_and_free_resource(r);2490 2490 return -ENOMEM; 2491 2491 } … … 2498 2498 gameport_set_dev_parent(gp, &chip->pci->dev); 2499 2499 gp->io = JOYSTICK_ADDR; 2500 gameport_set_port_data(gp, r);2501 2500 2502 2501 gameport_register_port(gp); … … 2508 2507 { 2509 2508 if (chip->gameport) { 2510 struct resource *r = gameport_get_port_data(chip->gameport);2511 2512 2509 gameport_unregister_port(chip->gameport); 2513 2510 chip->gameport = NULL; 2514 2515 release_and_free_resource(r);2516 2511 } 2517 2512 } … … 2527 2522 int err; 2528 2523 2529 input_dev = input_allocate_device();2524 input_dev = devm_input_allocate_device(&chip->pci->dev); 2530 2525 if (!input_dev) 2531 2526 return -ENOMEM; … … 2547 2542 2548 2543 err = input_register_device(input_dev); 2549 if (err) { 2550 input_free_device(input_dev); 2544 if (err) 2551 2545 return err; 2552 }2553 2546 2554 2547 chip->input_dev = input_dev; … … 2634 2627 #endif 2635 2628 2636 static int snd_es1968_free(struct es1968 *chip) 2637 { 2629 static void snd_es1968_free(struct snd_card *card) 2630 { 2631 struct es1968 *chip = card->private_data; 2632 2638 2633 cancel_work_sync(&chip->hwvol_work); 2639 #ifdef CONFIG_SND_ES1968_INPUT2640 if (chip->input_dev)2641 input_unregister_device(chip->input_dev);2642 #endif2643 2634 2644 2635 if (chip->io_port) { … … 2652 2643 #endif 2653 2644 2654 if (chip->irq >= 0)2655 free_irq(chip->irq, chip);2656 2645 snd_es1968_free_gameport(chip); 2657 pci_release_regions(chip->pci);2658 pci_disable_device(chip->pci);2659 kfree(chip);2660 return 0;2661 }2662 2663 static int snd_es1968_dev_free(struct snd_device *device)2664 {2665 struct es1968 *chip = device->device_data;2666 return snd_es1968_free(chip);2667 2646 } 2668 2647 … … 2694 2673 int chip_type, 2695 2674 int do_pm, 2696 int radio_nr, 2697 struct es1968 **chip_ret) 2698 { 2699 static const struct snd_device_ops ops = { 2700 .dev_free = snd_es1968_dev_free, 2701 }; 2702 struct es1968 *chip; 2675 int radio_nr) 2676 { 2677 struct es1968 *chip = card->private_data; 2703 2678 int i, err; 2704 2679 2705 *chip_ret = NULL;2706 2707 2680 /* enable PCI device */ 2708 err = pci _enable_device(pci);2681 err = pcim_enable_device(pci); 2709 2682 if (err < 0) 2710 2683 return err; … … 2713 2686 dev_err(card->dev, 2714 2687 "architecture does not support 28bit PCI busmaster DMA\n"); 2715 pci_disable_device(pci);2716 2688 return -ENXIO; 2717 }2718 2719 chip = kzalloc(sizeof(*chip), GFP_KERNEL);2720 if (! chip) {2721 pci_disable_device(pci);2722 return -ENOMEM;2723 2689 } 2724 2690 … … 2739 2705 2740 2706 err = pci_request_regions(pci, "ESS Maestro"); 2741 if (err < 0) { 2742 kfree(chip); 2743 pci_disable_device(pci); 2707 if (err < 0) 2744 2708 return err; 2745 }2746 2709 chip->io_port = pci_resource_start(pci, 0); 2747 if ( request_irq(pci->irq, snd_es1968_interrupt, IRQF_SHARED,2748 KBUILD_MODNAME, chip)) {2710 if (devm_request_irq(&pci->dev, pci->irq, snd_es1968_interrupt, 2711 IRQF_SHARED, KBUILD_MODNAME, chip)) { 2749 2712 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2750 snd_es1968_free(chip);2751 2713 return -EBUSY; 2752 2714 } 2753 2715 chip->irq = pci->irq; 2754 2716 card->sync_irq = chip->irq; 2717 card->private_free = snd_es1968_free; 2755 2718 2756 2719 /* Clear Maestro_map */ … … 2786 2749 snd_es1968_chip_init(chip); 2787 2750 2788 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);2789 if (err < 0) {2790 snd_es1968_free(chip);2791 return err;2792 }2793 2794 2751 #ifdef CONFIG_SND_ES1968_RADIO 2795 2752 /* don't play with GPIOs on laptops */ 2796 2753 if (chip->pci->subsystem_vendor != 0x125d) 2797 goto no_radio;2754 return 0; 2798 2755 err = v4l2_device_register(&pci->dev, &chip->v4l2_dev); 2799 if (err < 0) { 2800 snd_es1968_free(chip); 2756 if (err < 0) 2801 2757 return err; 2802 }2803 2758 chip->tea.v4l2_dev = &chip->v4l2_dev; 2804 2759 chip->tea.private_data = chip; … … 2816 2771 } 2817 2772 } 2818 no_radio:2819 2773 #endif 2820 2821 *chip_ret = chip;2822 2823 2774 return 0; 2824 2775 } … … 2827 2778 /* 2828 2779 */ 2829 static int snd_es1968_probe(struct pci_dev *pci,2830 const struct pci_device_id *pci_id)2780 static int __snd_es1968_probe(struct pci_dev *pci, 2781 const struct pci_device_id *pci_id) 2831 2782 { 2832 2783 static int dev; … … 2843 2794 } 2844 2795 2845 err = snd_ card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,2846 0, &card);2796 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 2797 sizeof(*chip), &card); 2847 2798 if (err < 0) 2848 2799 return err; 2800 chip = card->private_data; 2849 2801 2850 2802 if (total_bufsize[dev] < 128) … … 2858 2810 pci_id->driver_data, 2859 2811 use_pm[dev], 2860 radio_nr[dev], 2861 &chip); 2862 if (err < 0) { 2863 snd_card_free(card); 2812 radio_nr[dev]); 2813 if (err < 0) 2864 2814 return err; 2865 }2866 card->private_data = chip;2867 2815 2868 2816 switch (chip->type) { … … 2882 2830 2883 2831 err = snd_es1968_pcm(chip, 0); 2884 if (err < 0) { 2885 snd_card_free(card); 2832 if (err < 0) 2886 2833 return err; 2887 }2888 2834 2889 2835 err = snd_es1968_mixer(chip); 2890 if (err < 0) { 2891 snd_card_free(card); 2836 if (err < 0) 2892 2837 return err; 2893 }2894 2838 2895 2839 if (enable_mpu[dev] == 2) { … … 2934 2878 2935 2879 err = snd_card_register(card); 2936 if (err < 0) { 2937 snd_card_free(card); 2880 if (err < 0) 2938 2881 return err; 2939 }2940 2882 pci_set_drvdata(pci, card); 2941 2883 dev++; … … 2943 2885 } 2944 2886 2945 static void snd_es1968_remove(struct pci_dev *pci) 2946 { 2947 snd_card_free(pci_get_drvdata(pci)); 2887 static int snd_es1968_probe(struct pci_dev *pci, 2888 const struct pci_device_id *pci_id) 2889 { 2890 return snd_card_free_on_error(&pci->dev, __snd_es1968_probe(pci, pci_id)); 2948 2891 } 2949 2892 … … 2952 2895 .id_table = snd_es1968_ids, 2953 2896 .probe = snd_es1968_probe, 2954 .remove = snd_es1968_remove,2955 2897 .driver = { 2956 2898 .pm = ES1968_PM_OPS,
Note:
See TracChangeset
for help on using the changeset viewer.