diff options
Diffstat (limited to 'sound/pci/cs5535audio')
| -rw-r--r-- | sound/pci/cs5535audio/Makefile | 2 | ||||
| -rw-r--r-- | sound/pci/cs5535audio/cs5535audio.c | 82 | ||||
| -rw-r--r-- | sound/pci/cs5535audio/cs5535audio.h | 15 | ||||
| -rw-r--r-- | sound/pci/cs5535audio/cs5535audio_olpc.c | 21 | ||||
| -rw-r--r-- | sound/pci/cs5535audio/cs5535audio_pcm.c | 14 | ||||
| -rw-r--r-- | sound/pci/cs5535audio/cs5535audio_pm.c | 27 | 
6 files changed, 74 insertions, 87 deletions
diff --git a/sound/pci/cs5535audio/Makefile b/sound/pci/cs5535audio/Makefile index ccc642269b9..a8f75f8dfda 100644 --- a/sound/pci/cs5535audio/Makefile +++ b/sound/pci/cs5535audio/Makefile @@ -3,7 +3,7 @@  #  snd-cs5535audio-y := cs5535audio.o cs5535audio_pcm.o -snd-cs5535audio-$(CONFIG_PM) += cs5535audio_pm.o +snd-cs5535audio-$(CONFIG_PM_SLEEP) += cs5535audio_pm.o  snd-cs5535audio-$(CONFIG_OLPC) += cs5535audio_olpc.o  # Toplevel Module Dependency diff --git a/sound/pci/cs5535audio/cs5535audio.c b/sound/pci/cs5535audio/cs5535audio.c index afb80370841..edcbbda5c48 100644 --- a/sound/pci/cs5535audio/cs5535audio.c +++ b/sound/pci/cs5535audio/cs5535audio.c @@ -26,7 +26,7 @@  #include <linux/init.h>  #include <linux/pci.h>  #include <linux/slab.h> -#include <linux/moduleparam.h> +#include <linux/module.h>  #include <asm/io.h>  #include <sound/core.h>  #include <sound/control.h> @@ -43,7 +43,7 @@ static char *ac97_quirk;  module_param(ac97_quirk, charp, 0444);  MODULE_PARM_DESC(ac97_quirk, "AC'97 board specific workarounds."); -static struct ac97_quirk ac97_quirks[] __devinitdata = { +static struct ac97_quirk ac97_quirks[] = {  #if 0 /* Not yet confirmed if all 5536 boards are HP only */  	{  		.subvendor = PCI_VENDOR_ID_AMD,  @@ -57,7 +57,7 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {  static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;  static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; -static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; +static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;  module_param_array(index, int, NULL, 0444);  MODULE_PARM_DESC(index, "Index value for " DRIVER_NAME); @@ -84,7 +84,8 @@ static void wait_till_cmd_acked(struct cs5535audio *cs5535au, unsigned long time  		udelay(1);  	} while (--timeout);  	if (!timeout) -		snd_printk(KERN_ERR "Failure writing to cs5535 codec\n"); +		dev_err(cs5535au->card->dev, +			"Failure writing to cs5535 codec\n");  }  static unsigned short snd_cs5535audio_codec_read(struct cs5535audio *cs5535au, @@ -109,8 +110,9 @@ static unsigned short snd_cs5535audio_codec_read(struct cs5535audio *cs5535au,  		udelay(1);  	} while (--timeout);  	if (!timeout) -		snd_printk(KERN_ERR "Failure reading codec reg 0x%x," -					"Last value=0x%x\n", reg, val); +		dev_err(cs5535au->card->dev, +			"Failure reading codec reg 0x%x, Last value=0x%x\n", +			reg, val);  	return (unsigned short) val;  } @@ -144,7 +146,7 @@ static unsigned short snd_cs5535audio_ac97_codec_read(struct snd_ac97 *ac97,  	return snd_cs5535audio_codec_read(cs5535au, reg);  } -static int __devinit snd_cs5535audio_mixer(struct cs5535audio *cs5535au) +static int snd_cs5535audio_mixer(struct cs5535audio *cs5535au)  {  	struct snd_card *card = cs5535au->card;  	struct snd_ac97_bus *pbus; @@ -168,7 +170,7 @@ static int __devinit snd_cs5535audio_mixer(struct cs5535audio *cs5535au)  	olpc_prequirks(card, &ac97);  	if ((err = snd_ac97_mixer(pbus, &ac97, &cs5535au->ac97)) < 0) { -		snd_printk(KERN_ERR "mixer failed\n"); +		dev_err(card->dev, "mixer failed\n");  		return err;  	} @@ -176,7 +178,7 @@ static int __devinit snd_cs5535audio_mixer(struct cs5535audio *cs5535au)  	err = olpc_quirks(card, cs5535au->ac97);  	if (err < 0) { -		snd_printk(KERN_ERR "olpc quirks failed\n"); +		dev_err(card->dev, "olpc quirks failed\n");  		return err;  	} @@ -194,8 +196,9 @@ static void process_bm0_irq(struct cs5535audio *cs5535au)  		dma = cs5535au->playback_substream->runtime->private_data;  		snd_pcm_period_elapsed(cs5535au->playback_substream);  	} else { -		snd_printk(KERN_ERR "unexpected bm0 irq src, bm_stat=%x\n", -					bm_stat); +		dev_err(cs5535au->card->dev, +			"unexpected bm0 irq src, bm_stat=%x\n", +			bm_stat);  	}  } @@ -241,8 +244,9 @@ static irqreturn_t snd_cs5535audio_interrupt(int irq, void *dev_id)  				process_bm1_irq(cs5535au);  				break;  			default: -				snd_printk(KERN_ERR "Unexpected irq src: " -						"0x%x\n", acc_irq_stat); +				dev_err(cs5535au->card->dev, +					"Unexpected irq src: 0x%x\n", +					acc_irq_stat);  				break;  			}  		} @@ -253,7 +257,7 @@ static irqreturn_t snd_cs5535audio_interrupt(int irq, void *dev_id)  static int snd_cs5535audio_free(struct cs5535audio *cs5535au)  {  	synchronize_irq(cs5535au->irq); -	pci_set_power_state(cs5535au->pci, 3); +	pci_set_power_state(cs5535au->pci, PCI_D3hot);  	if (cs5535au->irq >= 0)  		free_irq(cs5535au->irq, cs5535au); @@ -270,9 +274,9 @@ static int snd_cs5535audio_dev_free(struct snd_device *device)  	return snd_cs5535audio_free(cs5535au);  } -static int __devinit snd_cs5535audio_create(struct snd_card *card, -					    struct pci_dev *pci, -					    struct cs5535audio **rcs5535au) +static int snd_cs5535audio_create(struct snd_card *card, +				  struct pci_dev *pci, +				  struct cs5535audio **rcs5535au)  {  	struct cs5535audio *cs5535au; @@ -287,7 +291,7 @@ static int __devinit snd_cs5535audio_create(struct snd_card *card,  	if (pci_set_dma_mask(pci, DMA_BIT_MASK(32)) < 0 ||  	    pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)) < 0) { -		printk(KERN_WARNING "unable to get 32bit dma\n"); +		dev_warn(card->dev, "unable to get 32bit dma\n");  		err = -ENXIO;  		goto pcifail;  	} @@ -311,8 +315,8 @@ static int __devinit snd_cs5535audio_create(struct snd_card *card,  	cs5535au->port = pci_resource_start(pci, 0);  	if (request_irq(pci->irq, snd_cs5535audio_interrupt, -			IRQF_SHARED, "CS5535 Audio", cs5535au)) { -		snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); +			IRQF_SHARED, KBUILD_MODNAME, cs5535au)) { +		dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);  		err = -EBUSY;  		goto sndfail;  	} @@ -324,8 +328,6 @@ static int __devinit snd_cs5535audio_create(struct snd_card *card,  				  cs5535au, &ops)) < 0)  		goto sndfail; -	snd_card_set_dev(card, &pci->dev); -  	*rcs5535au = cs5535au;  	return 0; @@ -338,8 +340,8 @@ pcifail:  	return err;  } -static int __devinit snd_cs5535audio_probe(struct pci_dev *pci, -					   const struct pci_device_id *pci_id) +static int snd_cs5535audio_probe(struct pci_dev *pci, +				 const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -353,7 +355,8 @@ static int __devinit snd_cs5535audio_probe(struct pci_dev *pci,  		return -ENOENT;  	} -	err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card); +	err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, +			   0, &card);  	if (err < 0)  		return err; @@ -387,36 +390,25 @@ probefail_out:  	return err;  } -static void __devexit snd_cs5535audio_remove(struct pci_dev *pci) +static void snd_cs5535audio_remove(struct pci_dev *pci)  {  	olpc_quirks_cleanup();  	snd_card_free(pci_get_drvdata(pci)); -	pci_set_drvdata(pci, NULL);  } -static struct pci_driver driver = { -	.name = DRIVER_NAME, +static struct pci_driver cs5535audio_driver = { +	.name = KBUILD_MODNAME,  	.id_table = snd_cs5535audio_ids,  	.probe = snd_cs5535audio_probe, -	.remove = __devexit_p(snd_cs5535audio_remove), -#ifdef CONFIG_PM -	.suspend = snd_cs5535audio_suspend, -	.resume = snd_cs5535audio_resume, +	.remove = snd_cs5535audio_remove, +#ifdef CONFIG_PM_SLEEP +	.driver = { +		.pm = &snd_cs5535audio_pm, +	},  #endif  }; -static int __init alsa_card_cs5535audio_init(void) -{ -	return pci_register_driver(&driver); -} - -static void __exit alsa_card_cs5535audio_exit(void) -{ -	pci_unregister_driver(&driver); -} - -module_init(alsa_card_cs5535audio_init) -module_exit(alsa_card_cs5535audio_exit) +module_pci_driver(cs5535audio_driver);  MODULE_AUTHOR("Jaya Kumar");  MODULE_LICENSE("GPL"); diff --git a/sound/pci/cs5535audio/cs5535audio.h b/sound/pci/cs5535audio/cs5535audio.h index 51966d782a3..0579daa6221 100644 --- a/sound/pci/cs5535audio/cs5535audio.h +++ b/sound/pci/cs5535audio/cs5535audio.h @@ -94,16 +94,13 @@ struct cs5535audio {  	struct cs5535audio_dma dmas[NUM_CS5535AUDIO_DMAS];  }; -#ifdef CONFIG_PM -int snd_cs5535audio_suspend(struct pci_dev *pci, pm_message_t state); -int snd_cs5535audio_resume(struct pci_dev *pci); -#endif +extern const struct dev_pm_ops snd_cs5535audio_pm;  #ifdef CONFIG_OLPC -void __devinit olpc_prequirks(struct snd_card *card, -		struct snd_ac97_template *ac97); -int __devinit olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97); -void __devexit olpc_quirks_cleanup(void); +void olpc_prequirks(struct snd_card *card, +		    struct snd_ac97_template *ac97); +int olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97); +void olpc_quirks_cleanup(void);  void olpc_analog_input(struct snd_ac97 *ac97, int on);  void olpc_mic_bias(struct snd_ac97 *ac97, int on); @@ -136,7 +133,7 @@ static inline void olpc_capture_open(struct snd_ac97 *ac97) { }  static inline void olpc_capture_close(struct snd_ac97 *ac97) { }  #endif -int __devinit snd_cs5535audio_pcm(struct cs5535audio *cs5535audio); +int snd_cs5535audio_pcm(struct cs5535audio *cs5535audio);  #endif /* __SOUND_CS5535AUDIO_H */ diff --git a/sound/pci/cs5535audio/cs5535audio_olpc.c b/sound/pci/cs5535audio/cs5535audio_olpc.c index 50da49be9ae..3b0fdaca8dc 100644 --- a/sound/pci/cs5535audio/cs5535audio_olpc.c +++ b/sound/pci/cs5535audio/cs5535audio_olpc.c @@ -36,7 +36,8 @@ void olpc_analog_input(struct snd_ac97 *ac97, int on)  	err = snd_ac97_update_bits(ac97, AC97_AD_TEST2,  			1 << AC97_AD_HPFD_SHIFT, on << AC97_AD_HPFD_SHIFT);  	if (err < 0) { -		snd_printk(KERN_ERR "setting High Pass Filter - %d\n", err); +		dev_err(ac97->bus->card->dev, +			"setting High Pass Filter - %d\n", err);  		return;  	} @@ -58,7 +59,7 @@ void olpc_mic_bias(struct snd_ac97 *ac97, int on)  	err = snd_ac97_update_bits(ac97, AC97_AD_MISC,  			1 << AC97_AD_VREFD_SHIFT, on << AC97_AD_VREFD_SHIFT);  	if (err < 0) -		snd_printk(KERN_ERR "setting MIC Bias - %d\n", err); +		dev_err(ac97->bus->card->dev, "setting MIC Bias - %d\n", err);  }  static int olpc_dc_info(struct snd_kcontrol *kctl, @@ -114,7 +115,7 @@ static int olpc_mic_put(struct snd_kcontrol *kctl, struct snd_ctl_elem_value *v)  	return 1;  } -static struct snd_kcontrol_new olpc_cs5535audio_ctls[] __devinitdata = { +static struct snd_kcontrol_new olpc_cs5535audio_ctls[] = {  {  	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,  	.name = "DC Mode Enable", @@ -133,8 +134,8 @@ static struct snd_kcontrol_new olpc_cs5535audio_ctls[] __devinitdata = {  },  }; -void __devinit olpc_prequirks(struct snd_card *card, -		struct snd_ac97_template *ac97) +void olpc_prequirks(struct snd_card *card, +		    struct snd_ac97_template *ac97)  {  	if (!machine_is_olpc())  		return; @@ -144,7 +145,7 @@ void __devinit olpc_prequirks(struct snd_card *card,  		ac97->scaps |= AC97_SCAP_INV_EAPD;  } -int __devinit olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97) +int olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97)  {  	struct snd_ctl_elem_id elem;  	int i, err; @@ -153,7 +154,7 @@ int __devinit olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97)  		return 0;  	if (gpio_request(OLPC_GPIO_MIC_AC, DRV_NAME)) { -		printk(KERN_ERR DRV_NAME ": unable to allocate MIC GPIO\n"); +		dev_err(card->dev, "unable to allocate MIC GPIO\n");  		return -EIO;  	}  	gpio_direction_output(OLPC_GPIO_MIC_AC, 0); @@ -161,13 +162,13 @@ int __devinit olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97)  	/* drop the original AD1888 HPF control */  	memset(&elem, 0, sizeof(elem));  	elem.iface = SNDRV_CTL_ELEM_IFACE_MIXER; -	strncpy(elem.name, "High Pass Filter Enable", sizeof(elem.name)); +	strlcpy(elem.name, "High Pass Filter Enable", sizeof(elem.name));  	snd_ctl_remove_id(card, &elem);  	/* drop the original V_REFOUT control */  	memset(&elem, 0, sizeof(elem));  	elem.iface = SNDRV_CTL_ELEM_IFACE_MIXER; -	strncpy(elem.name, "V_REFOUT Enable", sizeof(elem.name)); +	strlcpy(elem.name, "V_REFOUT Enable", sizeof(elem.name));  	snd_ctl_remove_id(card, &elem);  	/* add the OLPC-specific controls */ @@ -185,7 +186,7 @@ int __devinit olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97)  	return 0;  } -void __devexit olpc_quirks_cleanup(void) +void olpc_quirks_cleanup(void)  {  	gpio_free(OLPC_GPIO_MIC_AC);  } diff --git a/sound/pci/cs5535audio/cs5535audio_pcm.c b/sound/pci/cs5535audio/cs5535audio_pcm.c index f16bc8aad6e..9c2dc911d8d 100644 --- a/sound/pci/cs5535audio/cs5535audio_pcm.c +++ b/sound/pci/cs5535audio/cs5535audio_pcm.c @@ -148,8 +148,8 @@ static int cs5535audio_build_dma_packets(struct cs5535audio *cs5535au,  		struct cs5535audio_dma_desc *desc =  			&((struct cs5535audio_dma_desc *) dma->desc_buf.area)[i];  		desc->addr = cpu_to_le32(addr); -		desc->size = cpu_to_le32(period_bytes); -		desc->ctlreserved = cpu_to_le32(PRD_EOP); +		desc->size = cpu_to_le16(period_bytes); +		desc->ctlreserved = cpu_to_le16(PRD_EOP);  		desc_addr += sizeof(struct cs5535audio_dma_desc);  		addr += period_bytes;  	} @@ -157,7 +157,7 @@ static int cs5535audio_build_dma_packets(struct cs5535audio *cs5535au,  	lastdesc = &((struct cs5535audio_dma_desc *) dma->desc_buf.area)[periods];  	lastdesc->addr = cpu_to_le32((u32) dma->desc_buf.addr);  	lastdesc->size = 0; -	lastdesc->ctlreserved = cpu_to_le32(PRD_JMP); +	lastdesc->ctlreserved = cpu_to_le16(PRD_JMP);  	jmpprd_addr = cpu_to_le32(lastdesc->addr +  				  (sizeof(struct cs5535audio_dma_desc)*periods)); @@ -317,7 +317,7 @@ static int snd_cs5535audio_trigger(struct snd_pcm_substream *substream, int cmd)  		dma->ops->disable_dma(cs5535au);  		break;  	default: -		snd_printk(KERN_ERR "unhandled trigger\n"); +		dev_err(cs5535au->card->dev, "unhandled trigger\n");  		err = -EINVAL;  		break;  	} @@ -335,13 +335,13 @@ static snd_pcm_uframes_t snd_cs5535audio_pcm_pointer(struct snd_pcm_substream  	dma = substream->runtime->private_data;  	curdma = dma->ops->read_dma_pntr(cs5535au);  	if (curdma < dma->buf_addr) { -		snd_printk(KERN_ERR "curdma=%x < %x bufaddr.\n", +		dev_err(cs5535au->card->dev, "curdma=%x < %x bufaddr.\n",  					curdma, dma->buf_addr);  		return 0;  	}  	curdma -= dma->buf_addr;  	if (curdma >= dma->buf_bytes) { -		snd_printk(KERN_ERR "diff=%x >= %x buf_bytes.\n", +		dev_err(cs5535au->card->dev, "diff=%x >= %x buf_bytes.\n",  					curdma, dma->buf_bytes);  		return 0;  	} @@ -422,7 +422,7 @@ static struct cs5535audio_dma_ops snd_cs5535audio_capture_dma_ops = {          .read_dma_pntr = cs5535audio_capture_read_dma_pntr,  }; -int __devinit snd_cs5535audio_pcm(struct cs5535audio *cs5535au) +int snd_cs5535audio_pcm(struct cs5535audio *cs5535au)  {  	struct snd_pcm *pcm;  	int err; diff --git a/sound/pci/cs5535audio/cs5535audio_pm.c b/sound/pci/cs5535audio/cs5535audio_pm.c index a3301cc4ab8..34cc60057d0 100644 --- a/sound/pci/cs5535audio/cs5535audio_pm.c +++ b/sound/pci/cs5535audio/cs5535audio_pm.c @@ -55,9 +55,10 @@ static void snd_cs5535audio_stop_hardware(struct cs5535audio *cs5535au)  } -int snd_cs5535audio_suspend(struct pci_dev *pci, pm_message_t state) +static int snd_cs5535audio_suspend(struct device *dev)  { -	struct snd_card *card = pci_get_drvdata(pci); +	struct pci_dev *pci = to_pci_dev(dev); +	struct snd_card *card = dev_get_drvdata(dev);  	struct cs5535audio *cs5535au = card->private_data;  	int i; @@ -73,32 +74,27 @@ int snd_cs5535audio_suspend(struct pci_dev *pci, pm_message_t state)  	snd_cs5535audio_stop_hardware(cs5535au);  	if (pci_save_state(pci)) { -		printk(KERN_ERR "cs5535audio: pci_save_state failed!\n"); +		dev_err(dev, "pci_save_state failed!\n");  		return -EIO;  	}  	pci_disable_device(pci); -	pci_set_power_state(pci, pci_choose_state(pci, state)); +	pci_set_power_state(pci, PCI_D3hot);  	return 0;  } -int snd_cs5535audio_resume(struct pci_dev *pci) +static int snd_cs5535audio_resume(struct device *dev)  { -	struct snd_card *card = pci_get_drvdata(pci); +	struct pci_dev *pci = to_pci_dev(dev); +	struct snd_card *card = dev_get_drvdata(dev);  	struct cs5535audio *cs5535au = card->private_data;  	u32 tmp;  	int timeout;  	int i;  	pci_set_power_state(pci, PCI_D0); -	if (pci_restore_state(pci) < 0) { -		printk(KERN_ERR "cs5535audio: pci_restore_state failed, " -		       "disabling device\n"); -		snd_card_disconnect(card); -		return -EIO; -	} +	pci_restore_state(pci);  	if (pci_enable_device(pci) < 0) { -		printk(KERN_ERR "cs5535audio: pci_enable_device failed, " -		       "disabling device\n"); +		dev_err(dev, "pci_enable_device failed, disabling device\n");  		snd_card_disconnect(card);  		return -EIO;  	} @@ -116,7 +112,7 @@ int snd_cs5535audio_resume(struct pci_dev *pci)  	} while (--timeout);  	if (!timeout) -		snd_printk(KERN_ERR "Failure getting AC Link ready\n"); +		dev_err(cs5535au->card->dev, "Failure getting AC Link ready\n");  	/* set up rate regs, dma. actual initiation is done in trig */  	for (i = 0; i < NUM_CS5535AUDIO_DMAS; i++) { @@ -134,3 +130,4 @@ int snd_cs5535audio_resume(struct pci_dev *pci)  	return 0;  } +SIMPLE_DEV_PM_OPS(snd_cs5535audio_pm, snd_cs5535audio_suspend, snd_cs5535audio_resume);  | 
