Messages in this thread Patch in this message | | | Date | Fri, 11 Jul 2003 19:18:22 +0100 | From | Alan Cox <> | Subject | PATCH: update ymfpci for new ac97 |
| |
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.75/sound/oss/ymfpci.c linux-2.5.75-ac1/sound/oss/ymfpci.c --- linux-2.5.75/sound/oss/ymfpci.c 2003-07-10 21:11:35.000000000 +0100 +++ linux-2.5.75-ac1/sound/oss/ymfpci.c 2003-07-11 16:59:04.000000000 +0100 @@ -177,15 +177,16 @@ ymfpci_t *codec = dev->private_data; u32 cmd; + spin_lock(&codec->ac97_lock); /* XXX Do make use of dev->id */ ymfpci_codec_ready(codec, 0, 0); cmd = ((YDSXG_AC97WRITECMD | reg) << 16) | val; ymfpci_writel(codec, YDSXGR_AC97CMDDATA, cmd); + spin_unlock(&codec->ac97_lock); } -static u16 ymfpci_codec_read(struct ac97_codec *dev, u8 reg) +static u16 _ymfpci_codec_read(ymfpci_t *unit, u8 reg) { - ymfpci_t *unit = dev->private_data; int i; if (ymfpci_codec_ready(unit, 0, 0)) @@ -200,6 +201,18 @@ return ymfpci_readw(unit, YDSXGR_PRISTATUSDATA); } +static u16 ymfpci_codec_read(struct ac97_codec *dev, u8 reg) +{ + ymfpci_t *unit = dev->private_data; + u16 ret; + + spin_lock(&unit->ac97_lock); + ret = _ymfpci_codec_read(unit, reg); + spin_unlock(&unit->ac97_lock); + + return ret; +} + /* * Misc routines */ @@ -2444,9 +2457,8 @@ struct ac97_codec *codec; u16 eid; - if ((codec = kmalloc(sizeof(struct ac97_codec), GFP_KERNEL)) == NULL) + if ((codec = ac97_alloc_codec()) == NULL) return -ENOMEM; - memset(codec, 0, sizeof(struct ac97_codec)); /* initialize some basic codec information, other fields will be filled in ac97_probe_codec */ @@ -2462,7 +2474,7 @@ } eid = ymfpci_codec_read(codec, AC97_EXTENDED_ID); - if (eid==0xFFFFFF) { + if (eid==0xFFFF) { printk(KERN_WARNING "ymfpci: no codec attached ?\n"); goto out_kfree; } @@ -2478,7 +2490,7 @@ return 0; out_kfree: - kfree(codec); + ac97_release_codec(codec); return -ENODEV; } @@ -2517,6 +2529,7 @@ spin_lock_init(&codec->reg_lock); spin_lock_init(&codec->voice_lock); + spin_lock_init(&codec->ac97_lock); init_MUTEX(&codec->open_sem); INIT_LIST_HEAD(&codec->states); codec->pci = pcidev; @@ -2615,7 +2628,7 @@ out_release_region: release_mem_region(pci_resource_start(pcidev, 0), 0x8000); out_free: - kfree(codec); + ac97_release_codec(codec->ac97_codec[0]); return -ENODEV; } @@ -2628,7 +2641,7 @@ list_del(&codec->ymf_devs); unregister_sound_mixer(codec->ac97_codec[0]->dev_mixer); - kfree(codec->ac97_codec[0]); + ac97_release_codec(codec->ac97_codec[0]); unregister_sound_dsp(codec->dev_audio); free_irq(pcidev->irq, codec); ymfpci_memfree(codec); @@ -2643,7 +2656,6 @@ unload_uart401(&codec->mpu_data); } #endif /* CONFIG_SOUND_YMFPCI_LEGACY */ - kfree(codec); } MODULE_AUTHOR("Jaroslav Kysela"); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.75/sound/oss/ymfpci.h linux-2.5.75-ac1/sound/oss/ymfpci.h --- linux-2.5.75/sound/oss/ymfpci.h 2003-07-10 21:08:14.000000000 +0100 +++ linux-2.5.75-ac1/sound/oss/ymfpci.h 2003-07-11 16:59:13.000000000 +0100 @@ -275,6 +275,7 @@ spinlock_t reg_lock; spinlock_t voice_lock; + spinlock_t ac97_lock; /* soundcore stuff */ int dev_audio; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |