X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sound%2Foss%2Fcs46xx.c;h=53881bc91bba9c0aef2c02ffde9e6325e9e78824;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=418f976c4554dcd3c9c94a5ae7601428cc5ee01a;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/sound/oss/cs46xx.c b/sound/oss/cs46xx.c index 418f976c4..53881bc91 100644 --- a/sound/oss/cs46xx.c +++ b/sound/oss/cs46xx.c @@ -90,11 +90,11 @@ #include #include #include +#include #include #include #include -#include #include "cs46xxpm-24.h" #include "cs46xx_wrapper-24.h" @@ -176,24 +176,24 @@ #if CSDEBUG static unsigned long cs_debuglevel=1; /* levels range from 1-9 */ -MODULE_PARM(cs_debuglevel, "i"); +module_param(cs_debuglevel, ulong, 0644); static unsigned long cs_debugmask=CS_INIT | CS_ERROR; /* use CS_DBGOUT with various mask values */ -MODULE_PARM(cs_debugmask, "i"); +module_param(cs_debugmask, ulong, 0644); #endif static unsigned long hercules_egpio_disable; /* if non-zero set all EGPIO to 0 */ -MODULE_PARM(hercules_egpio_disable, "i"); +module_param(hercules_egpio_disable, ulong, 0); static unsigned long initdelay=700; /* PM delay in millisecs */ -MODULE_PARM(initdelay, "i"); +module_param(initdelay, ulong, 0); static unsigned long powerdown=-1; /* turn on/off powerdown processing in driver */ -MODULE_PARM(powerdown, "i"); +module_param(powerdown, ulong, 0); #define DMABUF_DEFAULTORDER 3 static unsigned long defaultorder=DMABUF_DEFAULTORDER; -MODULE_PARM(defaultorder, "i"); +module_param(defaultorder, ulong, 0); static int external_amp; -MODULE_PARM(external_amp, "i"); +module_param(external_amp, bool, 0); static int thinkpad; -MODULE_PARM(thinkpad, "i"); +module_param(thinkpad, bool, 0); /* * set the powerdown module parm to 0 to disable all @@ -220,7 +220,7 @@ struct cs_channel #define CS46XX_ARCH "32" //architecture key #endif -struct list_head cs46xx_devs = { &cs46xx_devs, &cs46xx_devs }; +static struct list_head cs46xx_devs = { &cs46xx_devs, &cs46xx_devs }; /* magic numbers to protect our data structures */ #define CS_CARD_MAGIC 0x43525553 /* "CRUS" */ @@ -239,7 +239,7 @@ struct cs_state { struct cs_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 */ @@ -298,7 +298,7 @@ struct cs_state { unsigned subdivision; } dmabuf; /* Guard against mmap/write/read races */ - struct semaphore sem; + struct mutex sem; }; struct cs_card { @@ -347,17 +347,17 @@ struct cs_card { u32 irq; /* mappings */ - void *ba0; + void __iomem *ba0; union { struct { - u8 *data0; - u8 *data1; - u8 *pmem; - u8 *reg; + u8 __iomem *data0; + u8 __iomem *data1; + u8 __iomem *pmem; + u8 __iomem *reg; } name; - u8 *idx[4]; + u8 __iomem *idx[4]; } ba1; /* Function support */ @@ -376,7 +376,7 @@ struct cs_card { unsigned char ibuf[CS_MIDIINBUF]; unsigned char obuf[CS_MIDIOUTBUF]; mode_t open_mode; - struct semaphore open_sem; + struct mutex open_mutex; } midi; struct cs46xx_pm pm; }; @@ -389,34 +389,9 @@ static int cs_hardware_init(struct cs_card *card); static int cs46xx_powerup(struct cs_card *card, unsigned int type); static int cs461x_powerdown(struct cs_card *card, unsigned int type, int suspendflag); static void cs461x_clear_serial_FIFOs(struct cs_card *card, int type); -static int cs46xx_suspend_tbl(struct pci_dev *pcidev, u32 state); +static int cs46xx_suspend_tbl(struct pci_dev *pcidev, pm_message_t state); static int cs46xx_resume_tbl(struct pci_dev *pcidev); -static inline unsigned ld2(unsigned int x) -{ - unsigned r = 0; - - if (x >= 0x10000) { - x >>= 16; - r += 16; - } - if (x >= 0x100) { - x >>= 8; - r += 8; - } - if (x >= 0x10) { - x >>= 4; - r += 4; - } - if (x >= 4) { - x >>= 2; - r += 2; - } - if (x >= 2) - r++; - return r; -} - #if CSDEBUG /* DEBUG ROUTINES */ @@ -427,7 +402,7 @@ static inline unsigned ld2(unsigned int x) #define SOUND_MIXER_CS_SETDBGMASK _SIOWR('M',123, int) #define SOUND_MIXER_CS_APM _SIOWR('M',124, int) -void printioctl(unsigned int x) +static void printioctl(unsigned int x) { unsigned int i; unsigned char vidx; @@ -965,7 +940,7 @@ static struct InitStruct * "SetCaptureSPValues()" -- Initialize record task values before each * capture startup. */ -void SetCaptureSPValues(struct cs_card *card) +static void SetCaptureSPValues(struct cs_card *card) { unsigned i, offset; CS_DBGOUT(CS_FUNCTION, 8, printk("cs46xx: SetCaptureSPValues()+\n") ); @@ -1191,7 +1166,7 @@ static int alloc_dmabuf(struct cs_state *state) dmabuf->buforder = order; dmabuf->rawbuf = rawbuf; // Now mark the pages as reserved; otherwise the - // remap_page_range() in cs46xx_mmap doesn't work. + // remap_pfn_range() in cs46xx_mmap doesn't work. // 1. get index to last page in mem_map array for rawbuf. mapend = virt_to_page(dmabuf->rawbuf + (PAGE_SIZE << dmabuf->buforder) - 1); @@ -1228,7 +1203,7 @@ static int alloc_dmabuf(struct cs_state *state) dmabuf->buforder_tmpbuff = order; // Now mark the pages as reserved; otherwise the - // remap_page_range() in cs46xx_mmap doesn't work. + // remap_pfn_range() in cs46xx_mmap doesn't work. // 1. get index to last page in mem_map array for rawbuf. mapend = virt_to_page(dmabuf->tmpbuff + (PAGE_SIZE << dmabuf->buforder_tmpbuff) - 1); @@ -1454,9 +1429,9 @@ static int prog_dmabuf(struct cs_state *state) { int ret; - down(&state->sem); + mutex_lock(&state->sem); ret = __prog_dmabuf(state); - up(&state->sem); + mutex_unlock(&state->sem); return ret; } @@ -1857,17 +1832,17 @@ static int cs_midi_open(struct inode *inode, struct file *file) file->private_data = card; /* wait for device to become free */ - down(&card->midi.open_sem); + mutex_lock(&card->midi.open_mutex); while (card->midi.open_mode & file->f_mode) { if (file->f_flags & O_NONBLOCK) { - up(&card->midi.open_sem); + mutex_unlock(&card->midi.open_mutex); return -EBUSY; } - up(&card->midi.open_sem); + mutex_unlock(&card->midi.open_mutex); interruptible_sleep_on(&card->midi.open_wait); if (signal_pending(current)) return -ERESTARTSYS; - down(&card->midi.open_sem); + mutex_lock(&card->midi.open_mutex); } spin_lock_irqsave(&card->midi.lock, flags); if (!(card->midi.open_mode & (FMODE_READ | FMODE_WRITE))) { @@ -1885,7 +1860,7 @@ static int cs_midi_open(struct inode *inode, struct file *file) } spin_unlock_irqrestore(&card->midi.lock, flags); card->midi.open_mode |= (file->f_mode & (FMODE_READ | FMODE_WRITE)); - up(&card->midi.open_sem); + mutex_unlock(&card->midi.open_mutex); return 0; } @@ -1917,9 +1892,9 @@ static int cs_midi_release(struct inode *inode, struct file *file) remove_wait_queue(&card->midi.owait, &wait); current->state = TASK_RUNNING; } - down(&card->midi.open_sem); + mutex_lock(&card->midi.open_mutex); card->midi.open_mode &= (~(file->f_mode & (FMODE_READ | FMODE_WRITE))); - up(&card->midi.open_sem); + mutex_unlock(&card->midi.open_mutex); wake_up(&card->midi.open_wait); return 0; } @@ -2096,7 +2071,7 @@ static ssize_t cs_read(struct file *file, char __user *buffer, size_t count, lof unsigned copied=0; CS_DBGOUT(CS_WAVE_READ | CS_FUNCTION, 4, - printk("cs46xx: cs_read()+ %d\n",count) ); + printk("cs46xx: cs_read()+ %zd\n",count) ); state = (struct cs_state *)card->states[0]; if(!state) return -ENODEV; @@ -2107,7 +2082,7 @@ static ssize_t cs_read(struct file *file, char __user *buffer, size_t count, lof if (!access_ok(VERIFY_WRITE, buffer, count)) return -EFAULT; - down(&state->sem); + mutex_lock(&state->sem); if (!dmabuf->ready && (ret = __prog_dmabuf(state))) goto out2; @@ -2140,13 +2115,13 @@ static ssize_t cs_read(struct file *file, char __user *buffer, size_t count, lof if (!ret) ret = -EAGAIN; goto out; } - up(&state->sem); + mutex_unlock(&state->sem); schedule(); if (signal_pending(current)) { if(!ret) ret = -ERESTARTSYS; goto out; } - down(&state->sem); + mutex_lock(&state->sem); if (dmabuf->mapped) { if(!ret) @@ -2157,9 +2132,9 @@ static ssize_t cs_read(struct file *file, char __user *buffer, size_t count, lof } CS_DBGOUT(CS_WAVE_READ, 2, printk(KERN_INFO - "_read() copy_to cnt=%d count=%d ", cnt,count) ); + "_read() copy_to cnt=%d count=%zd ", cnt,count) ); CS_DBGOUT(CS_WAVE_READ, 8, printk(KERN_INFO - " .dmasize=%d .count=%d buffer=%p ret=%d\n", + " .dmasize=%d .count=%d buffer=%p ret=%zd\n", dmabuf->dmasize,dmabuf->count,buffer,ret) ); if (cs_copy_to_user(state, buffer, @@ -2181,10 +2156,10 @@ static ssize_t cs_read(struct file *file, char __user *buffer, size_t count, lof out: remove_wait_queue(&state->dmabuf.wait, &wait); out2: - up(&state->sem); + mutex_unlock(&state->sem); set_current_state(TASK_RUNNING); CS_DBGOUT(CS_WAVE_READ | CS_FUNCTION, 4, - printk("cs46xx: cs_read()- %d\n",ret) ); + printk("cs46xx: cs_read()- %zd\n",ret) ); return ret; } @@ -2202,7 +2177,7 @@ static ssize_t cs_write(struct file *file, const char __user *buffer, size_t cou int cnt; CS_DBGOUT(CS_WAVE_WRITE | CS_FUNCTION, 4, - printk("cs46xx: cs_write called, count = %d\n", count) ); + printk("cs46xx: cs_write called, count = %zd\n", count) ); state = (struct cs_state *)card->states[1]; if(!state) return -ENODEV; @@ -2210,7 +2185,7 @@ static ssize_t cs_write(struct file *file, const char __user *buffer, size_t cou return -EFAULT; dmabuf = &state->dmabuf; - down(&state->sem); + mutex_lock(&state->sem); if (dmabuf->mapped) { ret = -ENXIO; @@ -2266,13 +2241,13 @@ static ssize_t cs_write(struct file *file, const char __user *buffer, size_t cou if (!ret) ret = -EAGAIN; goto out; } - up(&state->sem); + mutex_unlock(&state->sem); schedule(); if (signal_pending(current)) { if(!ret) ret = -ERESTARTSYS; goto out; } - down(&state->sem); + mutex_lock(&state->sem); if (dmabuf->mapped) { if(!ret) @@ -2304,12 +2279,12 @@ static ssize_t cs_write(struct file *file, const char __user *buffer, size_t cou start_dac(state); } out: - up(&state->sem); + mutex_unlock(&state->sem); remove_wait_queue(&state->dmabuf.wait, &wait); set_current_state(TASK_RUNNING); CS_DBGOUT(CS_WAVE_WRITE | CS_FUNCTION, 2, - printk("cs46xx: cs_write()- ret=0x%x\n", ret) ); + printk("cs46xx: cs_write()- ret=%zd\n", ret) ); return ret; } @@ -2437,7 +2412,7 @@ static int cs_mmap(struct file *file, struct vm_area_struct *vma) goto out; } - down(&state->sem); + mutex_lock(&state->sem); dmabuf = &state->dmabuf; if (cs4x_pgoff(vma) != 0) { @@ -2453,7 +2428,8 @@ static int cs_mmap(struct file *file, struct vm_area_struct *vma) ret = -EINVAL; goto out; } - if (remap_page_range(vma, vma->vm_start, virt_to_phys(dmabuf->rawbuf), + if (remap_pfn_range(vma, vma->vm_start, + virt_to_phys(dmabuf->rawbuf) >> PAGE_SHIFT, size, vma->vm_page_prot)) { ret = -EAGAIN; @@ -2463,7 +2439,7 @@ static int cs_mmap(struct file *file, struct vm_area_struct *vma) CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_mmap()-\n") ); out: - up(&state->sem); + mutex_unlock(&state->sem); return ret; } @@ -3225,7 +3201,7 @@ static int cs_open(struct inode *inode, struct file *file) if (state == NULL) return -ENOMEM; memset(state, 0, sizeof(struct cs_state)); - init_MUTEX(&state->sem); + mutex_init(&state->sem); dmabuf = &state->dmabuf; dmabuf->pbuf = (void *)get_zeroed_page(GFP_KERNEL | GFP_DMA); if(dmabuf->pbuf==NULL) @@ -3266,10 +3242,10 @@ static int cs_open(struct inode *inode, struct file *file) state->virt = 0; state->magic = CS_STATE_MAGIC; init_waitqueue_head(&dmabuf->wait); - init_MUTEX(&state->open_sem); + mutex_init(&state->open_mutex); file->private_data = card; - down(&state->open_sem); + mutex_lock(&state->open_mutex); /* set default sample format. According to OSS Programmer's Guide /dev/dsp should be default to unsigned 8-bits, mono, with sample rate 8kHz and @@ -3285,7 +3261,7 @@ static int cs_open(struct inode *inode, struct file *file) cs_set_divisor(dmabuf); state->open_mode |= FMODE_READ; - up(&state->open_sem); + mutex_unlock(&state->open_mutex); } if(file->f_mode & FMODE_WRITE) { @@ -3296,7 +3272,7 @@ static int cs_open(struct inode *inode, struct file *file) if (state == NULL) return -ENOMEM; memset(state, 0, sizeof(struct cs_state)); - init_MUTEX(&state->sem); + mutex_init(&state->sem); dmabuf = &state->dmabuf; dmabuf->pbuf = (void *)get_zeroed_page(GFP_KERNEL | GFP_DMA); if(dmabuf->pbuf==NULL) @@ -3337,10 +3313,10 @@ static int cs_open(struct inode *inode, struct file *file) state->virt = 1; state->magic = CS_STATE_MAGIC; init_waitqueue_head(&dmabuf->wait); - init_MUTEX(&state->open_sem); + mutex_init(&state->open_mutex); file->private_data = card; - down(&state->open_sem); + mutex_lock(&state->open_mutex); /* set default sample format. According to OSS Programmer's Guide /dev/dsp should be default to unsigned 8-bits, mono, with sample rate 8kHz and @@ -3356,7 +3332,7 @@ static int cs_open(struct inode *inode, struct file *file) cs_set_divisor(dmabuf); state->open_mode |= FMODE_WRITE; - up(&state->open_sem); + mutex_unlock(&state->open_mutex); if((ret = prog_dmabuf(state))) return ret; } @@ -3388,14 +3364,14 @@ static int cs_release(struct inode *inode, struct file *file) cs_clear_tail(state); drain_dac(state, file->f_flags & O_NONBLOCK); /* stop DMA state machine and free DMA buffers/channels */ - down(&state->open_sem); + mutex_lock(&state->open_mutex); stop_dac(state); dealloc_dmabuf(state); state->card->free_pcm_channel(state->card, dmabuf->channel->num); free_page((unsigned long)state->dmabuf.pbuf); - /* we're covered by the open_sem */ - up(&state->open_sem); + /* we're covered by the open_mutex */ + mutex_unlock(&state->open_mutex); state->card->states[state->virt] = NULL; state->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE); @@ -3420,14 +3396,14 @@ static int cs_release(struct inode *inode, struct file *file) { CS_DBGOUT(CS_RELEASE, 2, printk("cs46xx: cs_release() FMODE_READ\n") ); dmabuf = &state->dmabuf; - down(&state->open_sem); + mutex_lock(&state->open_mutex); stop_adc(state); dealloc_dmabuf(state); state->card->free_pcm_channel(state->card, dmabuf->channel->num); free_page((unsigned long)state->dmabuf.pbuf); - /* we're covered by the open_sem */ - up(&state->open_sem); + /* we're covered by the open_mutex */ + mutex_unlock(&state->open_mutex); state->card->states[state->virt] = NULL; state->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE); @@ -3490,7 +3466,7 @@ static void printpm(struct cs_card *s) * Suspend - save the ac97 regs, mute the outputs and power down the part. * ****************************************************************************/ -void cs46xx_ac97_suspend(struct cs_card *card) +static void cs46xx_ac97_suspend(struct cs_card *card) { int Count,i; struct ac97_codec *dev=card->ac97_codec[0]; @@ -3561,7 +3537,7 @@ void cs46xx_ac97_suspend(struct cs_card *card) * Resume - power up the part and restore its registers.. * ****************************************************************************/ -void cs46xx_ac97_resume(struct cs_card *card) +static void cs46xx_ac97_resume(struct cs_card *card) { int Count,i; struct ac97_codec *dev=card->ac97_codec[0]; @@ -3661,7 +3637,7 @@ static int cs46xx_restart_part(struct cs_card *card) static void cs461x_reset(struct cs_card *card); static void cs461x_proc_stop(struct cs_card *card); -static int cs46xx_suspend(struct cs_card *card, u32 state) +static int cs46xx_suspend(struct cs_card *card, pm_message_t state) { unsigned int tmp; CS_DBGOUT(CS_PM | CS_FUNCTION, 4, @@ -4149,7 +4125,6 @@ match: return 0; } -void __exit cs46xx_cleanup_module(void); static int cs_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { @@ -4196,7 +4171,7 @@ static int cs_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int list_for_each(entry, &cs46xx_devs) { card = list_entry(entry, struct cs_card, list); - cs46xx_suspend(card, 0); + cs46xx_suspend(card, PMSG_ON); } } @@ -4309,7 +4284,7 @@ static int __init cs_ac97_init(struct cs_card *card) static void cs461x_download_image(struct cs_card *card) { unsigned i, j, temp1, temp2, offset, count; - unsigned char *pBA1 = ioremap(card->ba1_addr, 0x40000); + unsigned char __iomem *pBA1 = ioremap(card->ba1_addr, 0x40000); for( i=0; i < CLEAR__COUNT; i++) { offset = ClrStat[i].BA1__DestByteOffset; @@ -5342,7 +5317,6 @@ static const char fndmsg[] = KERN_INFO "cs46xx: Found %d audio device(s).\n"; static int __devinit cs46xx_probe(struct pci_dev *pci_dev, const struct pci_device_id *pciid) { - struct pm_dev *pmdev; int i,j; u16 ss_card, ss_vendor; struct cs_card *card; @@ -5534,7 +5508,7 @@ static int __devinit cs46xx_probe(struct pci_dev *pci_dev, } init_waitqueue_head(&card->midi.open_wait); - init_MUTEX(&card->midi.open_sem); + mutex_init(&card->midi.open_mutex); init_waitqueue_head(&card->midi.iwait); init_waitqueue_head(&card->midi.owait); cs461x_pokeBA0(card, BA0_MIDCR, MIDCR_MRST); @@ -5552,22 +5526,6 @@ static int __devinit cs46xx_probe(struct pci_dev *pci_dev, PCI_SET_DMA_MASK(pci_dev, dma_mask); list_add(&card->list, &cs46xx_devs); - pmdev = cs_pm_register(PM_PCI_DEV, PM_PCI_ID(pci_dev), cs46xx_pm_callback); - if (pmdev) - { - CS_DBGOUT(CS_INIT | CS_PM, 4, printk(KERN_INFO - "cs46xx: probe() pm_register() succeeded (%p).\n", - pmdev)); - pmdev->data = card; - } - else - { - CS_DBGOUT(CS_INIT | CS_PM | CS_ERROR, 2, printk(KERN_INFO - "cs46xx: probe() pm_register() failed (%p).\n", - pmdev)); - card->pm.flags |= CS46XX_PM_NOT_REGISTERED; - } - CS_DBGOUT(CS_PM, 9, printk(KERN_INFO "cs46xx: pm.flags=0x%x card=%p\n", (unsigned)card->pm.flags,card)); @@ -5719,7 +5677,7 @@ static struct pci_device_id cs46xx_pci_tbl[] = { MODULE_DEVICE_TABLE(pci, cs46xx_pci_tbl); -struct pci_driver cs46xx_pci_driver = { +static struct pci_driver cs46xx_pci_driver = { .name = "cs46xx", .id_table = cs46xx_pci_tbl, .probe = cs46xx_probe, @@ -5728,12 +5686,12 @@ struct pci_driver cs46xx_pci_driver = { .resume = CS46XX_RESUME_TBL, }; -int __init cs46xx_init_module(void) +static int __init cs46xx_init_module(void) { int rtn = 0; CS_DBGOUT(CS_INIT | CS_FUNCTION, 2, printk(KERN_INFO "cs46xx: cs46xx_init_module()+ \n")); - rtn = pci_module_init(&cs46xx_pci_driver); + rtn = pci_register_driver(&cs46xx_pci_driver); if(rtn == -ENODEV) { @@ -5746,10 +5704,9 @@ int __init cs46xx_init_module(void) return rtn; } -void __exit cs46xx_cleanup_module(void) +static void __exit cs46xx_cleanup_module(void) { pci_unregister_driver(&cs46xx_pci_driver); - cs_pm_unregister_all(cs46xx_pm_callback); CS_DBGOUT(CS_INIT | CS_FUNCTION, 2, printk(KERN_INFO "cs46xx: cleanup_cs46xx() finished\n")); } @@ -5757,49 +5714,13 @@ void __exit cs46xx_cleanup_module(void) module_init(cs46xx_init_module); module_exit(cs46xx_cleanup_module); -int cs46xx_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data) -{ - struct cs_card *card; - - CS_DBGOUT(CS_PM, 2, printk(KERN_INFO - "cs46xx: cs46xx_pm_callback dev=%p rqst=0x%x card=%p\n", - dev,(unsigned)rqst,data)); - card = (struct cs_card *) dev->data; - if (card) { - switch(rqst) { - case PM_SUSPEND: - CS_DBGOUT(CS_PM, 2, printk(KERN_INFO - "cs46xx: PM suspend request\n")); - if(cs46xx_suspend(card, 0)) - { - CS_DBGOUT(CS_ERROR, 2, printk(KERN_INFO - "cs46xx: PM suspend request refused\n")); - return 1; - } - break; - case PM_RESUME: - CS_DBGOUT(CS_PM, 2, printk(KERN_INFO - "cs46xx: PM resume request\n")); - if(cs46xx_resume(card)) - { - CS_DBGOUT(CS_ERROR, 2, printk(KERN_INFO - "cs46xx: PM resume request refused\n")); - return 1; - } - break; - } - } - - return 0; -} - #if CS46XX_ACPI_SUPPORT -static int cs46xx_suspend_tbl(struct pci_dev *pcidev, u32 state) +static int cs46xx_suspend_tbl(struct pci_dev *pcidev, pm_message_t state) { struct cs_card *s = PCI_GET_DRIVER_DATA(pcidev); CS_DBGOUT(CS_PM | CS_FUNCTION, 2, printk(KERN_INFO "cs46xx: cs46xx_suspend_tbl request\n")); - cs46xx_suspend(s, 0); + cs46xx_suspend(s, state); return 0; }