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

    r703 r717  
    382382       
    383383        u32 bdbars_count;
    384         struct snd_dma_buffer bdbars;
     384        struct snd_dma_buffer *bdbars;
    385385        u32 int_sta_reg;                /* interrupt status register */
    386386        u32 int_sta_mask;               /* interrupt status mask */
     
    14311431
    14321432#define intel8x0_dma_type(chip) \
    1433         ((chip)->fix_nocache ? SNDRV_DMA_TYPE_DEV_UC : SNDRV_DMA_TYPE_DEV)
     1433        ((chip)->fix_nocache ? SNDRV_DMA_TYPE_DEV_WC : SNDRV_DMA_TYPE_DEV)
    14341434
    14351435static int snd_intel8x0_pcm1(struct intel8x0 *chip, int device,
     
    25342534}
    25352535
    2536 static int snd_intel8x0_free(struct intel8x0 *chip)
    2537 {
     2536static void snd_intel8x0_free(struct snd_card *card)
     2537{
     2538        struct intel8x0 *chip = card->private_data;
    25382539        unsigned int i;
    25392540
     
    25582559        if (chip->irq >= 0)
    25592560                free_irq(chip->irq, chip);
    2560         if (chip->bdbars.area)
    2561                 snd_dma_free_pages(&chip->bdbars);
    2562         if (chip->addr)
    2563                 pci_iounmap(chip->pci, chip->addr);
    2564         if (chip->bmaddr)
    2565                 pci_iounmap(chip->pci, chip->bmaddr);
    2566         pci_release_regions(chip->pci);
    2567         pci_disable_device(chip->pci);
    2568         kfree(chip);
    2569         return 0;
    25702561}
    25712562
     
    26662657        if (chip->ac97_bus->clock != 48000)
    26672658                return; /* specified in module option */
     2659        if (chip->inside_vm && !ac97_clock)
     2660                return; /* no measurement on VM */
    26682661
    26692662      __again:
     
    28542847}
    28552848
    2856 static int snd_intel8x0_dev_free(struct snd_device *device)
    2857 {
    2858         struct intel8x0 *chip = device->device_data;
    2859         return snd_intel8x0_free(chip);
    2860 }
    2861 
    28622849struct ich_reg_info {
    28632850        unsigned int int_sta_mask;
     
    29032890}
    29042891
    2905 static int snd_intel8x0_create(struct snd_card *card,
    2906                                struct pci_dev *pci,
    2907                                unsigned long device_type,
    2908                                struct intel8x0 **r_intel8x0)
    2909 {
    2910         struct intel8x0 *chip;
     2892static int snd_intel8x0_init(struct snd_card *card,
     2893                             struct pci_dev *pci,
     2894                             unsigned long device_type)
     2895{
     2896        struct intel8x0 *chip = card->private_data;
    29112897        int err;
    29122898        unsigned int i;
    29132899        unsigned int int_sta_masks;
    29142900        struct ichdev *ichdev;
    2915         static const struct snd_device_ops ops = {
    2916                 .dev_free =     snd_intel8x0_dev_free,
    2917         };
    29182901
    29192902        static const unsigned int bdbars[] = {
     
    29482931        const struct ich_reg_info *tbl;
    29492932
    2950         *r_intel8x0 = NULL;
    2951 
    2952         err = pci_enable_device(pci);
     2933        err = pcim_enable_device(pci);
    29532934        if (err < 0)
    29542935                return err;
    29552936
    2956         chip = kzalloc(sizeof(*chip), GFP_KERNEL);
    2957         if (chip == NULL) {
    2958                 pci_disable_device(pci);
    2959                 return -ENOMEM;
    2960         }
    29612937        spin_lock_init(&chip->reg_lock);
    29622938        chip->device_type = device_type;
     
    29842960
    29852961        err = pci_request_regions(pci, card->shortname);
    2986         if (err < 0) {
    2987                 kfree(chip);
    2988                 pci_disable_device(pci);
     2962        if (err < 0)
    29892963                return err;
    2990         }
    29912964
    29922965        if (device_type == DEVICE_ALI) {
    29932966                /* ALI5455 has no ac97 region */
    2994                 chip->bmaddr = pci_iomap(pci, 0, 0);
    2995                 goto port_inited;
    2996         }
    2997 
    2998         if (pci_resource_flags(pci, 2) & IORESOURCE_MEM) /* ICH4 and Nforce */
    2999                 chip->addr = pci_iomap(pci, 2, 0);
    3000         else
    3001                 chip->addr = pci_iomap(pci, 0, 0);
    3002         if (!chip->addr) {
    3003                 dev_err(card->dev, "AC'97 space ioremap problem\n");
    3004                 snd_intel8x0_free(chip);
    3005                 return -EIO;
    3006         }
    3007         if (pci_resource_flags(pci, 3) & IORESOURCE_MEM) /* ICH4 */
    3008                 chip->bmaddr = pci_iomap(pci, 3, 0);
    3009         else
    3010                 chip->bmaddr = pci_iomap(pci, 1, 0);
    3011 
    3012  port_inited:
    3013         if (!chip->bmaddr) {
    3014                 dev_err(card->dev, "Controller space ioremap problem\n");
    3015                 snd_intel8x0_free(chip);
    3016                 return -EIO;
    3017         }
     2967                chip->bmaddr = pcim_iomap(pci, 0, 0);
     2968        } else {
     2969                if (pci_resource_flags(pci, 2) & IORESOURCE_MEM) /* ICH4 and Nforce */
     2970                        chip->addr = pcim_iomap(pci, 2, 0);
     2971                else
     2972                        chip->addr = pcim_iomap(pci, 0, 0);
     2973                if (pci_resource_flags(pci, 3) & IORESOURCE_MEM) /* ICH4 */
     2974                        chip->bmaddr = pcim_iomap(pci, 3, 0);
     2975                else
     2976                        chip->bmaddr = pcim_iomap(pci, 1, 0);
     2977        }
     2978
    30182979        chip->bdbars_count = bdbars[device_type];
    30192980
     
    30513012        /* allocate buffer descriptor lists */
    30523013        /* the start of each lists must be aligned to 8 bytes */
    3053         if (snd_dma_alloc_pages(intel8x0_dma_type(chip), &pci->dev,
    3054                                 chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2,
    3055                                 &chip->bdbars) < 0) {
    3056                 snd_intel8x0_free(chip);
    3057                 dev_err(card->dev, "cannot allocate buffer descriptors\n");
     3014        chip->bdbars = snd_devm_alloc_pages(&pci->dev, intel8x0_dma_type(chip),
     3015                                            chip->bdbars_count * sizeof(u32) *
     3016                                            ICH_MAX_FRAGS * 2);
     3017        if (!chip->bdbars)
    30583018                return -ENOMEM;
    3059         }
    30603019        /* tables must be aligned to 8 bytes here, but the kernel pages
    30613020           are much bigger, so we don't care (on i386) */
     
    30633022        for (i = 0; i < chip->bdbars_count; i++) {
    30643023                ichdev = &chip->ichd[i];
    3065                 ichdev->bdbar = ((__le32 *)chip->bdbars.area) +
     3024                ichdev->bdbar = ((__le32 *)chip->bdbars->area) +
    30663025                        (i * ICH_MAX_FRAGS * 2);
    3067                 ichdev->bdbar_addr = chip->bdbars.addr +
     3026                ichdev->bdbar_addr = chip->bdbars->addr +
    30683027                        (i * sizeof(u32) * ICH_MAX_FRAGS * 2);
    30693028                int_sta_masks |= ichdev->int_sta_mask;
     
    30993058
    31003059        err = snd_intel8x0_chip_init(chip, 1);
    3101         if (err < 0) {
    3102                 snd_intel8x0_free(chip);
     3060        if (err < 0)
    31033061                return err;
    3104         }
    31053062
    31063063        /* request irq after initializaing int_sta_mask, etc */
     3064        /* NOTE: we don't use devm version here since it's released /
     3065         * re-acquired in PM callbacks.
     3066         * It's released explicitly in snd_intel8x0_free(), too.
     3067         */
    31073068        if (request_irq(pci->irq, snd_intel8x0_interrupt,
    31083069                        IRQF_SHARED, KBUILD_MODNAME, chip)) {
    31093070                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
    3110                 snd_intel8x0_free(chip);
    31113071                return -EBUSY;
    31123072        }
     
    31143074        card->sync_irq = chip->irq;
    31153075
    3116         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
    3117         if (err < 0) {
    3118                 snd_intel8x0_free(chip);
    3119                 return err;
    3120         }
    3121 
    3122         *r_intel8x0 = chip;
     3076        card->private_free = snd_intel8x0_free;
     3077
    31233078        return 0;
    31243079}
     
    31783133}
    31793134
    3180 static int snd_intel8x0_probe(struct pci_dev *pci,
    3181                               const struct pci_device_id *pci_id)
     3135static int __snd_intel8x0_probe(struct pci_dev *pci,
     3136                                const struct pci_device_id *pci_id)
    31823137{
    31833138        struct snd_card *card;
     
    31863141        struct shortname_table *name;
    31873142
    3188         err = snd_card_new(&pci->dev, index, id, THIS_MODULE, 0, &card);
     3143        err = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE,
     3144                                sizeof(*chip), &card);
    31893145        if (err < 0)
    31903146                return err;
     3147        chip = card->private_data;
    31913148
    31923149        if (spdif_aclink < 0)
     
    32223179        }
    32233180
    3224         err = snd_intel8x0_create(card, pci, pci_id->driver_data, &chip);
    3225         if (err < 0) {
    3226                 snd_card_free(card);
     3181        err = snd_intel8x0_init(card, pci, pci_id->driver_data);
     3182        if (err < 0)
    32273183                return err;
    3228         }
    3229         card->private_data = chip;
    32303184
    32313185        err = snd_intel8x0_mixer(chip, ac97_clock, ac97_quirk);
    3232         if (err < 0) {
    3233                 snd_card_free(card);
     3186        if (err < 0)
    32343187                return err;
    3235         }
    32363188        err = snd_intel8x0_pcm(chip);
    3237         if (err < 0) {
    3238                 snd_card_free(card);
     3189        if (err < 0)
    32393190                return err;
    3240         }
    32413191       
    32423192        snd_intel8x0_proc_init(chip);
     
    32563206
    32573207        err = snd_card_register(card);
    3258         if (err < 0) {
    3259                 snd_card_free(card);
     3208        if (err < 0)
    32603209                return err;
    3261         }
     3210
    32623211        pci_set_drvdata(pci, card);
    32633212        return 0;
    32643213}
    32653214
    3266 static void snd_intel8x0_remove(struct pci_dev *pci)
    3267 {
    3268         snd_card_free(pci_get_drvdata(pci));
     3215static int snd_intel8x0_probe(struct pci_dev *pci,
     3216                              const struct pci_device_id *pci_id)
     3217{
     3218        return snd_card_free_on_error(&pci->dev, __snd_intel8x0_probe(pci, pci_id));
    32693219}
    32703220
     
    32733223        .id_table = snd_intel8x0_ids,
    32743224        .probe = snd_intel8x0_probe,
    3275         .remove = snd_intel8x0_remove,
    32763225        .driver = {
    32773226                .pm = INTEL8X0_PM_OPS,
Note: See TracChangeset for help on using the changeset viewer.