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

    r703 r717  
    308308#define CM_MICGAINZ_SHIFT       0
    309309
    310 #define CM_REG_MIXER3           0x24
    311310#define CM_REG_AUX_VOL          0x26
    312311#define CM_VAUXL_MASK           0xf0
     
    28732872                for (i = 0; ports[i]; i++) {
    28742873                        io_port = ports[i];
    2875                         r = request_region(io_port, 1, "CMIPCI gameport");
     2874                        r = devm_request_region(&cm->pci->dev, io_port, 1,
     2875                                                "CMIPCI gameport");
    28762876                        if (r)
    28772877                                break;
     
    28792879        } else {
    28802880                io_port = joystick_port[dev];
    2881                 r = request_region(io_port, 1, "CMIPCI gameport");
     2881                r = devm_request_region(&cm->pci->dev, io_port, 1,
     2882                                        "CMIPCI gameport");
    28822883        }
    28832884
     
    28902891        if (!gp) {
    28912892                dev_err(cm->card->dev, "cannot allocate memory for gameport\n");
    2892                 release_and_free_resource(r);
    28932893                return -ENOMEM;
    28942894        }
     
    28972897        gameport_set_dev_parent(gp, &cm->pci->dev);
    28982898        gp->io = io_port;
    2899         gameport_set_port_data(gp, r);
    29002899
    29012900        snd_cmipci_set_bit(cm, CM_REG_FUNCTRL1, CM_JYSTK_EN);
     
    29092908{
    29102909        if (cm->gameport) {
    2911                 struct resource *r = gameport_get_port_data(cm->gameport);
    2912 
    29132910                gameport_unregister_port(cm->gameport);
    29142911                cm->gameport = NULL;
    29152912
    29162913                snd_cmipci_clear_bit(cm, CM_REG_FUNCTRL1, CM_JYSTK_EN);
    2917                 release_and_free_resource(r);
    29182914        }
    29192915}
     
    29232919#endif
    29242920
    2925 static int snd_cmipci_free(struct cmipci *cm)
    2926 {
    2927         if (cm->irq >= 0) {
    2928                 snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_FM_EN);
    2929                 snd_cmipci_clear_bit(cm, CM_REG_LEGACY_CTRL, CM_ENSPDOUT);
    2930                 snd_cmipci_write(cm, CM_REG_INT_HLDCLR, 0);  /* disable ints */
    2931                 snd_cmipci_ch_reset(cm, CM_CH_PLAY);
    2932                 snd_cmipci_ch_reset(cm, CM_CH_CAPT);
    2933                 snd_cmipci_write(cm, CM_REG_FUNCTRL0, 0); /* disable channels */
    2934                 snd_cmipci_write(cm, CM_REG_FUNCTRL1, 0);
    2935 
    2936                 /* reset mixer */
    2937                 snd_cmipci_mixer_write(cm, 0, 0);
    2938 
    2939                 free_irq(cm->irq, cm);
    2940         }
     2921static void snd_cmipci_free(struct snd_card *card)
     2922{
     2923        struct cmipci *cm = card->private_data;
     2924
     2925        snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_FM_EN);
     2926        snd_cmipci_clear_bit(cm, CM_REG_LEGACY_CTRL, CM_ENSPDOUT);
     2927        snd_cmipci_write(cm, CM_REG_INT_HLDCLR, 0);  /* disable ints */
     2928        snd_cmipci_ch_reset(cm, CM_CH_PLAY);
     2929        snd_cmipci_ch_reset(cm, CM_CH_CAPT);
     2930        snd_cmipci_write(cm, CM_REG_FUNCTRL0, 0); /* disable channels */
     2931        snd_cmipci_write(cm, CM_REG_FUNCTRL1, 0);
     2932
     2933        /* reset mixer */
     2934        snd_cmipci_mixer_write(cm, 0, 0);
    29412935
    29422936        snd_cmipci_free_gameport(cm);
    2943         pci_release_regions(cm->pci);
    2944         pci_disable_device(cm->pci);
    2945         kfree(cm);
    2946         return 0;
    2947 }
    2948 
    2949 static int snd_cmipci_dev_free(struct snd_device *device)
    2950 {
    2951         struct cmipci *cm = device->device_data;
    2952         return snd_cmipci_free(cm);
    29532937}
    29542938
     
    30092993
    30102994static int snd_cmipci_create(struct snd_card *card, struct pci_dev *pci,
    3011                              int dev, struct cmipci **rcmipci)
    3012 {
    3013         struct cmipci *cm;
     2995                             int dev)
     2996{
     2997        struct cmipci *cm = card->private_data;
    30142998        int err;
    3015         static const struct snd_device_ops ops = {
    3016                 .dev_free =     snd_cmipci_dev_free,
    3017         };
    30182999        unsigned int val;
    30193000        long iomidi = 0;
     
    30263007        };
    30273008
    3028         *rcmipci = NULL;
    3029 
    3030         err = pci_enable_device(pci);
     3009        err = pcim_enable_device(pci);
    30313010        if (err < 0)
    30323011                return err;
    3033 
    3034         cm = kzalloc(sizeof(*cm), GFP_KERNEL);
    3035         if (cm == NULL) {
    3036                 pci_disable_device(pci);
    3037                 return -ENOMEM;
    3038         }
    30393012
    30403013        spin_lock_init(&cm->reg_lock);
     
    30493022
    30503023        err = pci_request_regions(pci, card->driver);
    3051         if (err < 0) {
    3052                 kfree(cm);
    3053                 pci_disable_device(pci);
     3024        if (err < 0)
    30543025                return err;
    3055         }
    30563026        cm->iobase = pci_resource_start(pci, 0);
    30573027
    3058         if (request_irq(pci->irq, snd_cmipci_interrupt,
    3059                         IRQF_SHARED, KBUILD_MODNAME, cm)) {
     3028        if (devm_request_irq(&pci->dev, pci->irq, snd_cmipci_interrupt,
     3029                             IRQF_SHARED, KBUILD_MODNAME, cm)) {
    30603030                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
    3061                 snd_cmipci_free(cm);
    30623031                return -EBUSY;
    30633032        }
    30643033        cm->irq = pci->irq;
    30653034        card->sync_irq = cm->irq;
     3035        card->private_free = snd_cmipci_free;
    30663036
    30673037        pci_set_master(cm->pci);
     
    31633133                card->shortname, modelstr, cm->iobase, cm->irq);
    31643134
    3165         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, cm, &ops);
    3166         if (err < 0) {
    3167                 snd_cmipci_free(cm);
    3168                 return err;
    3169         }
    3170 
    31713135        if (cm->chip_version >= 39) {
    31723136                val = snd_cmipci_read_b(cm, CM_REG_MPU_PCI + 1);
     
    32613225                snd_cmipci_clear_bit(cm, CM_REG_FUNCTRL1, CM_JYSTK_EN);
    32623226
    3263         *rcmipci = cm;
    32643227        return 0;
    32653228}
     
    32853248        }
    32863249
    3287         err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
    3288                            0, &card);
     3250        err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
     3251                                sizeof(*cm), &card);
    32893252        if (err < 0)
    32903253                return err;
     3254        cm = card->private_data;
    32913255       
    32923256        switch (pci->device) {
     
    33043268        }
    33053269
    3306         err = snd_cmipci_create(card, pci, dev, &cm);
     3270        err = snd_cmipci_create(card, pci, dev);
    33073271        if (err < 0)
    3308                 goto free_card;
    3309 
    3310         card->private_data = cm;
     3272                goto error;
    33113273
    33123274        err = snd_card_register(card);
    33133275        if (err < 0)
    3314                 goto free_card;
     3276                goto error;
    33153277
    33163278        pci_set_drvdata(pci, card);
     
    33183280        return 0;
    33193281
    3320 free_card:
     3282 error:
    33213283        snd_card_free(card);
    33223284        return err;
    33233285}
    33243286
    3325 static void snd_cmipci_remove(struct pci_dev *pci)
    3326 {
    3327         snd_card_free(pci_get_drvdata(pci));
    3328 }
    3329 
    3330 
    33313287#ifdef CONFIG_PM_SLEEP
    33323288/*
     
    33353291static const unsigned char saved_regs[] = {
    33363292        CM_REG_FUNCTRL1, CM_REG_CHFORMAT, CM_REG_LEGACY_CTRL, CM_REG_MISC_CTRL,
    3337         CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_MIXER3, CM_REG_PLL,
     3293        CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_AUX_VOL, CM_REG_PLL,
    33383294        CM_REG_CH0_FRAME1, CM_REG_CH0_FRAME2,
    33393295        CM_REG_CH1_FRAME1, CM_REG_CH1_FRAME2, CM_REG_EXT_MISC,
     
    34033359        .id_table = snd_cmipci_ids,
    34043360        .probe = snd_cmipci_probe,
    3405         .remove = snd_cmipci_remove,
    34063361        .driver = {
    34073362                .pm = SND_CMIPCI_PM_OPS,
Note: See TracChangeset for help on using the changeset viewer.