X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sound%2Foss%2Fali5455.c;h=62bb936b1f3d49fca893b9d0b6c3a4d460642c35;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=a7e2c3c0a5fd6c2af284dc1fc7a5b7443deb0cf2;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/sound/oss/ali5455.c b/sound/oss/ali5455.c index a7e2c3c0a..62bb936b1 100644 --- a/sound/oss/ali5455.c +++ b/sound/oss/ali5455.c @@ -64,8 +64,9 @@ #include #include #include +#include + #include -#include #ifndef PCI_DEVICE_ID_ALI_5455 #define PCI_DEVICE_ID_ALI_5455 0x5455 @@ -235,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 */ @@ -312,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 */ @@ -935,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); @@ -1956,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; @@ -2807,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 */ @@ -3359,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); @@ -3528,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; @@ -3577,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; @@ -3589,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 */ @@ -3651,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, @@ -3715,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)