X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sound%2Foss%2Fali5455.c;h=70dcd703a66fc18436af8fd03af52854e29e0b9f;hb=16c70f8c1b54b61c3b951b6fb220df250fe09b32;hp=8976224f5ae1e9ebecd4042efd737f4032746f82;hpb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;p=linux-2.6.git diff --git a/sound/oss/ali5455.c b/sound/oss/ali5455.c index 8976224f5..70dcd703a 100644 --- a/sound/oss/ali5455.c +++ b/sound/oss/ali5455.c @@ -64,6 +64,8 @@ #include #include #include +#include + #include #ifndef PCI_DEVICE_ID_ALI_5455 @@ -234,7 +236,7 @@ struct ali_state { struct ali_card *card; /* Card info */ /* single open lock mechanism, only used for recording */ - struct semaphore open_sem; + struct mutex open_mutex; wait_queue_head_t open_wait; /* file mode */ @@ -311,7 +313,6 @@ struct ali_card { u16 pci_id; #ifdef CONFIG_PM u16 pm_suspended; - u32 pm_save_state[64 / sizeof(u32)]; int pm_saved_mixer_settings[SOUND_MIXER_NRDEVICES][NR_AC97]; #endif /* soundcore stuff */ @@ -934,7 +935,7 @@ static int alloc_dmabuf(struct ali_state *state) dmabuf->rawbuf = rawbuf; dmabuf->buforder = order; - /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */ + /* now mark the pages as reserved; otherwise remap_pfn_range doesn't do what we want */ pend = virt_to_page(rawbuf + (PAGE_SIZE << order) - 1); for (page = virt_to_page(rawbuf); page <= pend; page++) SetPageReserved(page); @@ -1955,7 +1956,9 @@ static int ali_mmap(struct file *file, struct vm_area_struct *vma) if (size > (PAGE_SIZE << dmabuf->buforder)) goto out; ret = -EAGAIN; - if (remap_page_range(vma, vma->vm_start, virt_to_phys(dmabuf->rawbuf), size, vma->vm_page_prot)) + if (remap_pfn_range(vma, vma->vm_start, + virt_to_phys(dmabuf->rawbuf) >> PAGE_SHIFT, + size, vma->vm_page_prot)) goto out; dmabuf->mapped = 1; dmabuf->trigger = 0; @@ -2806,7 +2809,7 @@ found_virt: state->card = card; state->magic = ALI5455_STATE_MAGIC; init_waitqueue_head(&dmabuf->wait); - init_MUTEX(&state->open_sem); + mutex_init(&state->open_mutex); file->private_data = state; dmabuf->trigger = 0; /* allocate hardware channels */ @@ -3358,7 +3361,7 @@ static void __devinit ali_configure_clocking(void) state->card = card; state->magic = ALI5455_STATE_MAGIC; init_waitqueue_head(&dmabuf->wait); - init_MUTEX(&state->open_sem); + mutex_init(&state->open_mutex); dmabuf->fmt = ALI5455_FMT_STEREO | ALI5455_FMT_16BIT; dmabuf->trigger = PCM_ENABLE_OUTPUT; ali_set_dac_rate(state, 48000); @@ -3457,7 +3460,7 @@ static int __devinit ali_probe(struct pci_dev *pci_dev, card->channel[4].num = 4; /* claim our iospace and irq */ request_region(card->iobase, 256, card_names[pci_id->driver_data]); - if (request_irq(card->irq, &ali_interrupt, SA_SHIRQ, + if (request_irq(card->irq, &ali_interrupt, IRQF_SHARED, card_names[pci_id->driver_data], card)) { printk(KERN_ERR "ali_audio: unable to allocate irq %d\n", card->irq); @@ -3527,7 +3530,7 @@ static void __devexit ali_remove(struct pci_dev *pci_dev) } #ifdef CONFIG_PM -static int ali_pm_suspend(struct pci_dev *dev, u32 pm_state) +static int ali_pm_suspend(struct pci_dev *dev, pm_message_t pm_state) { struct ali_card *card = pci_get_drvdata(dev); struct ali_state *state; @@ -3576,7 +3579,7 @@ static int ali_pm_suspend(struct pci_dev *dev, u32 pm_state) } } } - pci_save_state(dev, card->pm_save_state); /* XXX do we need this? */ + pci_save_state(dev); /* XXX do we need this? */ pci_disable_device(dev); /* disable busmastering */ pci_set_power_state(dev, 3); /* Zzz. */ return 0; @@ -3588,7 +3591,7 @@ static int ali_pm_resume(struct pci_dev *dev) int num_ac97, i = 0; struct ali_card *card = pci_get_drvdata(dev); pci_enable_device(dev); - pci_restore_state(dev, card->pm_save_state); + pci_restore_state(dev); /* observation of a toshiba portege 3440ct suggests that the hardware has to be more or less completely reinitialized from scratch after an apm suspend. Works For Me. -dan */ @@ -3650,12 +3653,13 @@ static int ali_pm_resume(struct pci_dev *dev) MODULE_AUTHOR(""); MODULE_DESCRIPTION("ALI 5455 audio support"); MODULE_LICENSE("GPL"); -MODULE_PARM(clocking, "i"); -MODULE_PARM(strict_clocking, "i"); -MODULE_PARM(codec_pcmout_share_spdif_locked, "i"); -MODULE_PARM(codec_independent_spdif_locked, "i"); -MODULE_PARM(controller_pcmout_share_spdif_locked, "i"); -MODULE_PARM(controller_independent_spdif_locked, "i"); +module_param(clocking, int, 0); +/* FIXME: bool? */ +module_param(strict_clocking, uint, 0); +module_param(codec_pcmout_share_spdif_locked, uint, 0); +module_param(codec_independent_spdif_locked, uint, 0); +module_param(controller_pcmout_share_spdif_locked, uint, 0); +module_param(controller_independent_spdif_locked, uint, 0); #define ALI5455_MODULE_NAME "ali5455" static struct pci_driver ali_pci_driver = { .name = ALI5455_MODULE_NAME, @@ -3714,11 +3718,7 @@ static int __init ali_init_module(void) controller_pcmout_share_spdif_locked = 0; } } - if (!pci_register_driver(&ali_pci_driver)) { - pci_unregister_driver(&ali_pci_driver); - return -ENODEV; - } - return 0; + return pci_register_driver(&ali_pci_driver); } static void __exit ali_cleanup_module(void)