diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2006-01-07 14:40:05 +0000 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-01-07 14:40:05 +0000 |
commit | 123656d4cc8c946f578ebd18c2050f5251720428 (patch) | |
tree | 3d5432eff034a3b9cfdc98b37e245abe5695342d /sound/arm | |
parent | a62c80e559809e6c7851ec04d30575e85ad6f6ed (diff) | |
parent | 0aec63e67c69545ca757a73a66f5dcf05fa484bf (diff) |
Merge with Linus' kernel.
Diffstat (limited to 'sound/arm')
-rw-r--r-- | sound/arm/Kconfig | 1 | ||||
-rw-r--r-- | sound/arm/aaci.c | 84 | ||||
-rw-r--r-- | sound/arm/aaci.h | 6 | ||||
-rw-r--r-- | sound/arm/devdma.c | 12 | ||||
-rw-r--r-- | sound/arm/devdma.h | 6 | ||||
-rw-r--r-- | sound/arm/pxa2xx-ac97.c | 119 | ||||
-rw-r--r-- | sound/arm/pxa2xx-pcm.c | 59 | ||||
-rw-r--r-- | sound/arm/pxa2xx-pcm.h | 20 | ||||
-rw-r--r-- | sound/arm/sa11xx-uda1341.c | 209 |
9 files changed, 272 insertions, 244 deletions
diff --git a/sound/arm/Kconfig b/sound/arm/Kconfig index 0864a7ce414..2e4a5e0d16d 100644 --- a/sound/arm/Kconfig +++ b/sound/arm/Kconfig @@ -7,7 +7,6 @@ config SND_SA11XX_UDA1341 tristate "SA11xx UDA1341TS driver (iPaq H3600)" depends on ARCH_SA1100 && SND && L3 select SND_PCM - select SND_GENERIC_DRIVER help Say Y here if you have a Compaq iPaq H3x00 handheld computer and want to use its Philips UDA 1341 audio chip. diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index 5b6cae50d0d..54147c1f636 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c @@ -40,7 +40,7 @@ */ #undef CONFIG_PM -static void aaci_ac97_select_codec(struct aaci *aaci, ac97_t *ac97) +static void aaci_ac97_select_codec(struct aaci *aaci, struct snd_ac97 *ac97) { u32 v, maincr = aaci->maincr | MAINCR_SCRA(ac97->num); @@ -65,7 +65,7 @@ static void aaci_ac97_select_codec(struct aaci *aaci, ac97_t *ac97) * SI1TxEn, SI2TxEn and SI12TxEn bits are set in the AACI_MAINCR * register. */ -static void aaci_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short val) +static void aaci_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val) { struct aaci *aaci = ac97->private_data; u32 v; @@ -97,7 +97,7 @@ static void aaci_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short val /* * Read an AC'97 register. */ -static unsigned short aaci_ac97_read(ac97_t *ac97, unsigned short reg) +static unsigned short aaci_ac97_read(struct snd_ac97 *ac97, unsigned short reg) { struct aaci *aaci = ac97->private_data; u32 v; @@ -284,11 +284,11 @@ static unsigned int rate_list[] = { * (unimplemented) */ static int -aaci_rule_rate_by_channels(snd_pcm_hw_params_t *p, snd_pcm_hw_rule_t *rule) +aaci_rule_rate_by_channels(struct snd_pcm_hw_params *p, struct snd_pcm_hw_rule *rule) { struct aaci *aaci = rule->private; unsigned int rate_mask = SNDRV_PCM_RATE_8000_48000|SNDRV_PCM_RATE_5512; - snd_interval_t *c = hw_param_interval(p, SNDRV_PCM_HW_PARAM_CHANNELS); + struct snd_interval *c = hw_param_interval(p, SNDRV_PCM_HW_PARAM_CHANNELS); switch (c->max) { case 6: @@ -304,7 +304,7 @@ aaci_rule_rate_by_channels(snd_pcm_hw_params_t *p, snd_pcm_hw_rule_t *rule) rate_mask); } -static snd_pcm_hardware_t aaci_hw_info = { +static struct snd_pcm_hardware aaci_hw_info = { .info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_INTERLEAVED | @@ -330,10 +330,10 @@ static snd_pcm_hardware_t aaci_hw_info = { .periods_max = PAGE_SIZE / 16, }; -static int aaci_pcm_open(struct aaci *aaci, snd_pcm_substream_t *substream, +static int aaci_pcm_open(struct aaci *aaci, struct snd_pcm_substream *substream, struct aaci_runtime *aacirun) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; int ret; aacirun->substream = substream; @@ -375,7 +375,7 @@ static int aaci_pcm_open(struct aaci *aaci, snd_pcm_substream_t *substream, /* * Common ALSA stuff */ -static int aaci_pcm_close(snd_pcm_substream_t *substream) +static int aaci_pcm_close(struct snd_pcm_substream *substream) { struct aaci *aaci = substream->private_data; struct aaci_runtime *aacirun = substream->runtime->private_data; @@ -388,7 +388,7 @@ static int aaci_pcm_close(snd_pcm_substream_t *substream) return 0; } -static int aaci_pcm_hw_free(snd_pcm_substream_t *substream) +static int aaci_pcm_hw_free(struct snd_pcm_substream *substream) { struct aaci_runtime *aacirun = substream->runtime->private_data; @@ -409,9 +409,9 @@ static int aaci_pcm_hw_free(snd_pcm_substream_t *substream) return 0; } -static int aaci_pcm_hw_params(snd_pcm_substream_t *substream, +static int aaci_pcm_hw_params(struct snd_pcm_substream *substream, struct aaci_runtime *aacirun, - snd_pcm_hw_params_t *params) + struct snd_pcm_hw_params *params) { int err; @@ -434,9 +434,9 @@ static int aaci_pcm_hw_params(snd_pcm_substream_t *substream, return err; } -static int aaci_pcm_prepare(snd_pcm_substream_t *substream) +static int aaci_pcm_prepare(struct snd_pcm_substream *substream) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; struct aaci_runtime *aacirun = runtime->private_data; aacirun->start = (void *)runtime->dma_area; @@ -448,16 +448,16 @@ static int aaci_pcm_prepare(snd_pcm_substream_t *substream) return 0; } -static snd_pcm_uframes_t aaci_pcm_pointer(snd_pcm_substream_t *substream) +static snd_pcm_uframes_t aaci_pcm_pointer(struct snd_pcm_substream *substream) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; struct aaci_runtime *aacirun = runtime->private_data; ssize_t bytes = aacirun->ptr - aacirun->start; return bytes_to_frames(runtime, bytes); } -static int aaci_pcm_mmap(snd_pcm_substream_t *substream, struct vm_area_struct *vma) +static int aaci_pcm_mmap(struct snd_pcm_substream *substream, struct vm_area_struct *vma) { return devdma_mmap(NULL, substream, vma); } @@ -484,7 +484,7 @@ static const u32 channels_to_txmask[] = { static unsigned int channel_list[] = { 2, 4, 6 }; static int -aaci_rule_channels(snd_pcm_hw_params_t *p, snd_pcm_hw_rule_t *rule) +aaci_rule_channels(struct snd_pcm_hw_params *p, struct snd_pcm_hw_rule *rule) { struct aaci *aaci = rule->private; unsigned int chan_mask = 1 << 0, slots; @@ -504,7 +504,7 @@ aaci_rule_channels(snd_pcm_hw_params_t *p, snd_pcm_hw_rule_t *rule) chan_mask); } -static int aaci_pcm_playback_open(snd_pcm_substream_t *substream) +static int aaci_pcm_playback_open(struct snd_pcm_substream *substream) { struct aaci *aaci = substream->private_data; int ret; @@ -522,8 +522,8 @@ static int aaci_pcm_playback_open(snd_pcm_substream_t *substream) return aaci_pcm_open(aaci, substream, &aaci->playback); } -static int aaci_pcm_playback_hw_params(snd_pcm_substream_t *substream, - snd_pcm_hw_params_t *params) +static int aaci_pcm_playback_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) { struct aaci *aaci = substream->private_data; struct aaci_runtime *aacirun = substream->runtime->private_data; @@ -575,7 +575,7 @@ static void aaci_pcm_playback_start(struct aaci_runtime *aacirun) writel(aacirun->cr, aacirun->base + AACI_TXCR); } -static int aaci_pcm_playback_trigger(snd_pcm_substream_t *substream, int cmd) +static int aaci_pcm_playback_trigger(struct snd_pcm_substream *substream, int cmd) { struct aaci *aaci = substream->private_data; struct aaci_runtime *aacirun = substream->runtime->private_data; @@ -614,7 +614,7 @@ static int aaci_pcm_playback_trigger(snd_pcm_substream_t *substream, int cmd) return ret; } -static snd_pcm_ops_t aaci_playback_ops = { +static struct snd_pcm_ops aaci_playback_ops = { .open = aaci_pcm_playback_open, .close = aaci_pcm_close, .ioctl = snd_pcm_lib_ioctl, @@ -632,34 +632,29 @@ static snd_pcm_ops_t aaci_playback_ops = { * Power Management. */ #ifdef CONFIG_PM -static int aaci_do_suspend(snd_card_t *card, unsigned int state) +static int aaci_do_suspend(struct snd_card *card, unsigned int state) { struct aaci *aaci = card->private_data; - if (aaci->card->power_state != SNDRV_CTL_POWER_D3cold) { - snd_pcm_suspend_all(aaci->pcm); - snd_power_change_state(aaci->card, SNDRV_CTL_POWER_D3cold); - } + snd_power_change_state(card, SNDRV_CTL_POWER_D3cold); + snd_pcm_suspend_all(aaci->pcm); return 0; } -static int aaci_do_resume(snd_card_t *card, unsigned int state) +static int aaci_do_resume(struct snd_card *card, unsigned int state) { - struct aaci *aaci = card->private_data; - if (aaci->card->power_state != SNDRV_CTL_POWER_D0) { - snd_power_change_state(aaci->card, SNDRV_CTL_POWER_D0); - } + snd_power_change_state(card, SNDRV_CTL_POWER_D0); return 0; } static int aaci_suspend(struct amba_device *dev, pm_message_t state) { - snd_card_t *card = amba_get_drvdata(dev); + struct snd_card *card = amba_get_drvdata(dev); return card ? aaci_do_suspend(card) : 0; } static int aaci_resume(struct amba_device *dev) { - snd_card_t *card = amba_get_drvdata(dev); + struct snd_card *card = amba_get_drvdata(dev); return card ? aaci_do_resume(card) : 0; } #else @@ -705,16 +700,16 @@ static struct ac97_pcm ac97_defs[] __devinitdata = { } }; -static ac97_bus_ops_t aaci_bus_ops = { +static struct snd_ac97_bus_ops aaci_bus_ops = { .write = aaci_ac97_write, .read = aaci_ac97_read, }; static int __devinit aaci_probe_ac97(struct aaci *aaci) { - ac97_template_t ac97_template; - ac97_bus_t *ac97_bus; - ac97_t *ac97; + struct snd_ac97_template ac97_template; + struct snd_ac97_bus *ac97_bus; + struct snd_ac97 *ac97; int ret; /* @@ -737,7 +732,7 @@ static int __devinit aaci_probe_ac97(struct aaci *aaci) ac97_bus->clock = 48000; aaci->ac97_bus = ac97_bus; - memset(&ac97_template, 0, sizeof(ac97_template_t)); + memset(&ac97_template, 0, sizeof(struct snd_ac97_template)); ac97_template.private_data = aaci; ac97_template.num = 0; ac97_template.scaps = AC97_SCAP_SKIP_MODEM; @@ -762,7 +757,7 @@ static int __devinit aaci_probe_ac97(struct aaci *aaci) return ret; } -static void aaci_free_card(snd_card_t *card) +static void aaci_free_card(struct snd_card *card) { struct aaci *aaci = card->private_data; if (aaci->base) @@ -772,7 +767,7 @@ static void aaci_free_card(snd_card_t *card) static struct aaci * __devinit aaci_init_card(struct amba_device *dev) { struct aaci *aaci; - snd_card_t *card; + struct snd_card *card; card = snd_card_new(SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1, THIS_MODULE, sizeof(struct aaci)); @@ -780,7 +775,6 @@ static struct aaci * __devinit aaci_init_card(struct amba_device *dev) return ERR_PTR(-ENOMEM); card->private_free = aaci_free_card; - snd_card_set_pm_callback(card, aaci_do_suspend, aaci_do_resume, NULL); strlcpy(card->driver, DRIVER_NAME, sizeof(card->driver)); strlcpy(card->shortname, "ARM AC'97 Interface", sizeof(card->shortname)); @@ -803,7 +797,7 @@ static struct aaci * __devinit aaci_init_card(struct amba_device *dev) static int __devinit aaci_init_pcm(struct aaci *aaci) { - snd_pcm_t *pcm; + struct snd_pcm *pcm; int ret; ret = snd_pcm_new(aaci->card, "AACI AC'97", 0, 1, 0, &pcm); @@ -920,7 +914,7 @@ static int __devinit aaci_probe(struct amba_device *dev, void *id) static int __devexit aaci_remove(struct amba_device *dev) { - snd_card_t *card = amba_get_drvdata(dev); + struct snd_card *card = amba_get_drvdata(dev); amba_set_drvdata(dev, NULL); diff --git a/sound/arm/aaci.h b/sound/arm/aaci.h index b2f969bc784..83f73c2505c 100644 --- a/sound/arm/aaci.h +++ b/sound/arm/aaci.h @@ -207,7 +207,7 @@ struct aaci_runtime { int pcm_open; u32 cr; - snd_pcm_substream_t *substream; + struct snd_pcm_substream *substream; /* * PIO support @@ -222,7 +222,7 @@ struct aaci_runtime { struct aaci { struct amba_device *dev; - snd_card_t *card; + struct snd_card *card; void __iomem *base; unsigned int fifosize; @@ -236,7 +236,7 @@ struct aaci { struct aaci_runtime playback; struct aaci_runtime capture; - snd_pcm_t *pcm; + struct snd_pcm *pcm; }; #define ACSTREAM_FRONT 0 diff --git a/sound/arm/devdma.c b/sound/arm/devdma.c index 60826a5324b..ca3bf4ee05a 100644 --- a/sound/arm/devdma.c +++ b/sound/arm/devdma.c @@ -18,9 +18,9 @@ #include "devdma.h" -void devdma_hw_free(struct device *dev, snd_pcm_substream_t *substream) +void devdma_hw_free(struct device *dev, struct snd_pcm_substream *substream) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; struct snd_dma_buffer *buf = runtime->dma_buffer_p; if (runtime->dma_area == NULL) @@ -34,9 +34,9 @@ void devdma_hw_free(struct device *dev, snd_pcm_substream_t *substream) snd_pcm_set_runtime_buffer(substream, NULL); } -int devdma_hw_alloc(struct device *dev, snd_pcm_substream_t *substream, size_t size) +int devdma_hw_alloc(struct device *dev, struct snd_pcm_substream *substream, size_t size) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; struct snd_dma_buffer *buf = runtime->dma_buffer_p; int ret = 0; @@ -74,8 +74,8 @@ int devdma_hw_alloc(struct device *dev, snd_pcm_substream_t *substream, size_t s return -ENOMEM; } -int devdma_mmap(struct device *dev, snd_pcm_substream_t *substream, struct vm_area_struct *vma) +int devdma_mmap(struct device *dev, struct snd_pcm_substream *substream, struct vm_area_struct *vma) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; return dma_mmap_coherent(dev, vma, runtime->dma_area, runtime->dma_addr, runtime->dma_bytes); } diff --git a/sound/arm/devdma.h b/sound/arm/devdma.h index 5a33b6bacc3..d025329c8a0 100644 --- a/sound/arm/devdma.h +++ b/sound/arm/devdma.h @@ -1,3 +1,3 @@ -void devdma_hw_free(struct device *dev, snd_pcm_substream_t *substream); -int devdma_hw_alloc(struct device *dev, snd_pcm_substream_t *substream, size_t size); -int devdma_mmap(struct device *dev, snd_pcm_substream_t *substream, struct vm_area_struct *vma); +void devdma_hw_free(struct device *dev, struct snd_pcm_substream *substream); +int devdma_hw_alloc(struct device *dev, struct snd_pcm_substream *substream, size_t size); +int devdma_mmap(struct device *dev, struct snd_pcm_substream *substream, struct vm_area_struct *vma); diff --git a/sound/arm/pxa2xx-ac97.c b/sound/arm/pxa2xx-ac97.c index c96c8a2aa1c..3acbc6023d1 100644 --- a/sound/arm/pxa2xx-ac97.c +++ b/sound/arm/pxa2xx-ac97.c @@ -37,69 +37,74 @@ static DECLARE_MUTEX(car_mutex); static DECLARE_WAIT_QUEUE_HEAD(gsr_wq); static volatile long gsr_bits; -static unsigned short pxa2xx_ac97_read(ac97_t *ac97, unsigned short reg) +/* + * Beware PXA27x bugs: + * + * o Slot 12 read from modem space will hang controller. + * o CDONE, SDONE interrupt fails after any slot 12 IO. + * + * We therefore have an hybrid approach for waiting on SDONE (interrupt or + * 1 jiffy timeout if interrupt never comes). + */ + +static unsigned short pxa2xx_ac97_read(struct snd_ac97 *ac97, unsigned short reg) { unsigned short val = -1; volatile u32 *reg_addr; down(&car_mutex); - if (CAR & CAR_CAIP) { - printk(KERN_CRIT"%s: CAR_CAIP already set\n", __FUNCTION__); - goto out; - } /* set up primary or secondary codec space */ reg_addr = (ac97->num & 1) ? &SAC_REG_BASE : &PAC_REG_BASE; reg_addr += (reg >> 1); /* start read access across the ac97 link */ + GSR = GSR_CDONE | GSR_SDONE; gsr_bits = 0; val = *reg_addr; if (reg == AC97_GPIO_STATUS) goto out; - wait_event_timeout(gsr_wq, gsr_bits & GSR_SDONE, 1); - if (!gsr_bits & GSR_SDONE) { + if (wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_SDONE, 1) <= 0 && + !((GSR | gsr_bits) & GSR_SDONE)) { printk(KERN_ERR "%s: read error (ac97_reg=%d GSR=%#lx)\n", - __FUNCTION__, reg, gsr_bits); + __FUNCTION__, reg, GSR | gsr_bits); val = -1; goto out; } /* valid data now */ + GSR = GSR_CDONE | GSR_SDONE; gsr_bits = 0; val = *reg_addr; /* but we've just started another cycle... */ - wait_event_timeout(gsr_wq, gsr_bits & GSR_SDONE, 1); + wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_SDONE, 1); out: up(&car_mutex); return val; } -static void pxa2xx_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short val) +static void pxa2xx_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val) { volatile u32 *reg_addr; down(&car_mutex); - if (CAR & CAR_CAIP) { - printk(KERN_CRIT "%s: CAR_CAIP already set\n", __FUNCTION__); - goto out; - } - /* set up primary or secondary codec space */ reg_addr = (ac97->num & 1) ? &SAC_REG_BASE : &PAC_REG_BASE; reg_addr += (reg >> 1); + + GSR = GSR_CDONE | GSR_SDONE; gsr_bits = 0; *reg_addr = val; - wait_event_timeout(gsr_wq, gsr_bits & GSR_CDONE, 1); - if (!gsr_bits & GSR_SDONE) + if (wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_CDONE, 1) <= 0 && + !((GSR | gsr_bits) & GSR_CDONE)) printk(KERN_ERR "%s: write error (ac97_reg=%d GSR=%#lx)\n", - __FUNCTION__, reg, gsr_bits); + __FUNCTION__, reg, GSR | gsr_bits); -out: up(&car_mutex); + up(&car_mutex); } -static void pxa2xx_ac97_reset(ac97_t *ac97) +static void pxa2xx_ac97_reset(struct snd_ac97 *ac97) { /* First, try cold reset */ GCR &= GCR_COLD_RST; /* clear everything but nCRST */ @@ -172,13 +177,13 @@ static irqreturn_t pxa2xx_ac97_irq(int irq, void *dev_id, struct pt_regs *regs) return IRQ_NONE; } -static ac97_bus_ops_t pxa2xx_ac97_ops = { +static struct snd_ac97_bus_ops pxa2xx_ac97_ops = { .read = pxa2xx_ac97_read, .write = pxa2xx_ac97_write, .reset = pxa2xx_ac97_reset, }; -static pxa2xx_pcm_dma_params_t pxa2xx_ac97_pcm_out = { +static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_out = { .name = "AC97 PCM out", .dev_addr = __PREG(PCDR), .drcmr = &DRCMRTXPCDR, @@ -186,7 +191,7 @@ static pxa2xx_pcm_dma_params_t pxa2xx_ac97_pcm_out = { DCMD_BURST32 | DCMD_WIDTH4, }; -static pxa2xx_pcm_dma_params_t pxa2xx_ac97_pcm_in = { +static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_in = { .name = "AC97 PCM in", .dev_addr = __PREG(PCDR), .drcmr = &DRCMRRXPCDR, @@ -194,12 +199,12 @@ static pxa2xx_pcm_dma_params_t pxa2xx_ac97_pcm_in = { DCMD_BURST32 | DCMD_WIDTH4, }; -static snd_pcm_t *pxa2xx_ac97_pcm; -static ac97_t *pxa2xx_ac97_ac97; +static struct snd_pcm *pxa2xx_ac97_pcm; +static struct snd_ac97 *pxa2xx_ac97_ac97; -static int pxa2xx_ac97_pcm_startup(snd_pcm_substream_t *substream) +static int pxa2xx_ac97_pcm_startup(struct snd_pcm_substream *substream) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; pxa2xx_audio_ops_t *platform_ops; int r; @@ -218,7 +223,7 @@ static int pxa2xx_ac97_pcm_startup(snd_pcm_substream_t *substream) return 0; } -static void pxa2xx_ac97_pcm_shutdown(snd_pcm_substream_t *substream) +static void pxa2xx_ac97_pcm_shutdown(struct snd_pcm_substream *substream) { pxa2xx_audio_ops_t *platform_ops; @@ -227,15 +232,15 @@ static void pxa2xx_ac97_pcm_shutdown(snd_pcm_substream_t *substream) platform_ops->shutdown(substream, platform_ops->priv); } -static int pxa2xx_ac97_pcm_prepare(snd_pcm_substream_t *substream) +static int pxa2xx_ac97_pcm_prepare(struct snd_pcm_substream *substream) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; int reg = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ? AC97_PCM_FRONT_DAC_RATE : AC97_PCM_LR_ADC_RATE; return snd_ac97_set_rate(pxa2xx_ac97_ac97, reg, runtime->rate); } -static pxa2xx_pcm_client_t pxa2xx_ac97_pcm_client = { +static struct pxa2xx_pcm_client pxa2xx_ac97_pcm_client = { .playback_params = &pxa2xx_ac97_pcm_out, .capture_params = &pxa2xx_ac97_pcm_in, .startup = pxa2xx_ac97_pcm_startup, @@ -245,39 +250,37 @@ static pxa2xx_pcm_client_t pxa2xx_ac97_pcm_client = { #ifdef CONFIG_PM -static int pxa2xx_ac97_do_suspend(snd_card_t *card, pm_message_t state) +static int pxa2xx_ac97_do_suspend(struct snd_card *card, pm_message_t state) { - if (card->power_state != SNDRV_CTL_POWER_D3cold) { - pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data; - snd_pcm_suspend_all(pxa2xx_ac97_pcm); - snd_ac97_suspend(pxa2xx_ac97_ac97); - snd_power_change_state(card, SNDRV_CTL_POWER_D3cold); - if (platform_ops && platform_ops->suspend) - platform_ops->suspend(platform_ops->priv); - GCR |= GCR_ACLINK_OFF; - pxa_set_cken(CKEN2_AC97, 0); - } + pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data; + + snd_power_change_state(card, SNDRV_CTL_POWER_D3cold); + snd_pcm_suspend_all(pxa2xx_ac97_pcm); + snd_ac97_suspend(pxa2xx_ac97_ac97); + if (platform_ops && platform_ops->suspend) + platform_ops->suspend(platform_ops->priv); + GCR |= GCR_ACLINK_OFF; + pxa_set_cken(CKEN2_AC97, 0); return 0; } -static int pxa2xx_ac97_do_resume(snd_card_t *card) +static int pxa2xx_ac97_do_resume(struct snd_card *card) { - if (card->power_state != SNDRV_CTL_POWER_D0) { - pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data; - pxa_set_cken(CKEN2_AC97, 1); - if (platform_ops && platform_ops->resume) - platform_ops->resume(platform_ops->priv); - snd_ac97_resume(pxa2xx_ac97_ac97); - snd_power_change_state(card, SNDRV_CTL_POWER_D0); - } + pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data; + + pxa_set_cken(CKEN2_AC97, 1); + if (platform_ops && platform_ops->resume) + platform_ops->resume(platform_ops->priv); + snd_ac97_resume(pxa2xx_ac97_ac97); + snd_power_change_state(card, SNDRV_CTL_POWER_D0); return 0; } static int pxa2xx_ac97_suspend(struct platform_device *dev, pm_message_t state) { - snd_card_t *card = platform_get_drvdata(dev); + struct snd_card *card = platform_get_drvdata(dev); int ret = 0; if (card) @@ -288,7 +291,7 @@ static int pxa2xx_ac97_suspend(struct platform_device *dev, pm_message_t state) static int pxa2xx_ac97_resume(struct platform_device *dev) { - snd_card_t *card = platform_get_drvdata(dev); + struct snd_card *card = platform_get_drvdata(dev); int ret = 0; if (card) @@ -304,9 +307,9 @@ static int pxa2xx_ac97_resume(struct platform_device *dev) static int pxa2xx_ac97_probe(struct platform_device *dev) { - snd_card_t *card; - ac97_bus_t *ac97_bus; - ac97_template_t ac97_template; + struct snd_card *card; + struct snd_ac97_bus *ac97_bus; + struct snd_ac97_template ac97_template; int ret; ret = -ENOMEM; @@ -349,8 +352,6 @@ static int pxa2xx_ac97_probe(struct platform_device *dev) snprintf(card->longname, sizeof(card->longname), "%s (%s)", dev->dev.driver->name, card->mixername); - snd_card_set_pm_callback(card, pxa2xx_ac97_do_suspend, - pxa2xx_ac97_do_resume, NULL); ret = snd_card_register(card); if (ret == 0) { platform_set_drvdata(dev, card); @@ -370,7 +371,7 @@ static int pxa2xx_ac97_probe(struct platform_device *dev) static int pxa2xx_ac97_remove(struct platform_device *dev) { - snd_card_t *card = platform_get_drvdata(dev); + struct snd_card *card = platform_get_drvdata(dev); if (card) { snd_card_free(card); diff --git a/sound/arm/pxa2xx-pcm.c b/sound/arm/pxa2xx-pcm.c index b1eb53b02ea..4938ef10b81 100644 --- a/sound/arm/pxa2xx-pcm.c +++ b/sound/arm/pxa2xx-pcm.c @@ -28,7 +28,7 @@ #include "pxa2xx-pcm.h" -static const snd_pcm_hardware_t pxa2xx_pcm_hardware = { +static const struct snd_pcm_hardware pxa2xx_pcm_hardware = { .info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_INTERLEAVED | @@ -44,15 +44,15 @@ static const snd_pcm_hardware_t pxa2xx_pcm_hardware = { struct pxa2xx_runtime_data { int dma_ch; - pxa2xx_pcm_dma_params_t *params; + struct pxa2xx_pcm_dma_params *params; pxa_dma_desc *dma_desc_array; dma_addr_t dma_desc_array_phys; }; -static int pxa2xx_pcm_hw_params(snd_pcm_substream_t *substream, - snd_pcm_hw_params_t *params) +static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; struct pxa2xx_runtime_data *rtd = runtime->private_data; size_t totsize = params_buffer_bytes(params); size_t period = params_period_bytes(params); @@ -86,7 +86,7 @@ static int pxa2xx_pcm_hw_params(snd_pcm_substream_t *substream, return 0; } -static int pxa2xx_pcm_hw_free(snd_pcm_substream_t *substream) +static int pxa2xx_pcm_hw_free(struct snd_pcm_substream *substream) { struct pxa2xx_runtime_data *rtd = substream->runtime->private_data; @@ -95,10 +95,10 @@ static int pxa2xx_pcm_hw_free(snd_pcm_substream_t *substream) return 0; } -static int pxa2xx_pcm_prepare(snd_pcm_substream_t *substream) +static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream) { - pxa2xx_pcm_client_t *client = substream->private_data; - snd_pcm_runtime_t *runtime = substream->runtime; + struct pxa2xx_pcm_client *client = substream->private_data; + struct snd_pcm_runtime *runtime = substream->runtime; struct pxa2xx_runtime_data *rtd = runtime->private_data; DCSR(rtd->dma_ch) &= ~DCSR_RUN; @@ -109,7 +109,7 @@ static int pxa2xx_pcm_prepare(snd_pcm_substream_t *substream) return client->prepare(substream); } -static int pxa2xx_pcm_trigger(snd_pcm_substream_t *substream, int cmd) +static int pxa2xx_pcm_trigger(struct snd_pcm_substream *substream, int cmd) { struct pxa2xx_runtime_data *rtd = substream->runtime->private_data; int ret = 0; @@ -139,7 +139,7 @@ static int pxa2xx_pcm_trigger(snd_pcm_substream_t *substream, int cmd) static void pxa2xx_pcm_dma_irq(int dma_ch, void *dev_id, struct pt_regs *regs) { - snd_pcm_substream_t *substream = dev_id; + struct snd_pcm_substream *substream = dev_id; struct pxa2xx_runtime_data *rtd = substream->runtime->private_data; int dcsr; @@ -155,9 +155,9 @@ static void pxa2xx_pcm_dma_irq(int dma_ch, void *dev_id, struct pt_regs *regs) } } -static snd_pcm_uframes_t pxa2xx_pcm_pointer(snd_pcm_substream_t *substream) +static snd_pcm_uframes_t pxa2xx_pcm_pointer(struct snd_pcm_substream *substream) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; struct pxa2xx_runtime_data *rtd = runtime->private_data; dma_addr_t ptr = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ? DSADR(rtd->dma_ch) : DTADR(rtd->dma_ch); @@ -168,9 +168,9 @@ static snd_pcm_uframes_t pxa2xx_pcm_pointer(snd_pcm_substream_t *substream) } static int -pxa2xx_pcm_hw_rule_mult32(snd_pcm_hw_params_t *params, snd_pcm_hw_rule_t *rule) +pxa2xx_pcm_hw_rule_mult32(struct snd_pcm_hw_params *params, struct snd_pcm_hw_rule *rule) { - snd_interval_t *i = hw_param_interval(params, rule->var); + struct snd_interval *i = hw_param_interval(params, rule->var); int changed = 0; if (i->min & 31) { @@ -188,10 +188,10 @@ pxa2xx_pcm_hw_rule_mult32(snd_pcm_hw_params_t *params, snd_pcm_hw_rule_t *rule) return changed; } -static int pxa2xx_pcm_open(snd_pcm_substream_t *substream) +static int pxa2xx_pcm_open(struct snd_pcm_substream *substream) { - pxa2xx_pcm_client_t *client = substream->private_data; - snd_pcm_runtime_t *runtime = substream->runtime; + struct pxa2xx_pcm_client *client = substream->private_data; + struct snd_pcm_runtime *runtime = substream->runtime; struct pxa2xx_runtime_data *rtd; int ret; @@ -246,9 +246,9 @@ static int pxa2xx_pcm_open(snd_pcm_substream_t *substream) return ret; } -static int pxa2xx_pcm_close(snd_pcm_substream_t *substream) +static int pxa2xx_pcm_close(struct snd_pcm_substream *substream) { - pxa2xx_pcm_client_t *client = substream->private_data; + struct pxa2xx_pcm_client *client = substream->private_data; struct pxa2xx_runtime_data *rtd = substream->runtime->private_data; pxa_free_dma(rtd->dma_ch); @@ -260,16 +260,16 @@ static int pxa2xx_pcm_close(snd_pcm_substream_t *substream) } static int -pxa2xx_pcm_mmap(snd_pcm_substream_t *substream, struct vm_area_struct *vma) +pxa2xx_pcm_mmap(struct snd_pcm_substream *substream, struct vm_area_struct *vma) { - snd_pcm_runtime_t *runtime = substream->runtime; + struct snd_pcm_runtime *runtime = substream->runtime; return dma_mmap_writecombine(substream->pcm->card->dev, vma, runtime->dma_area, runtime->dma_addr, runtime->dma_bytes); } -static snd_pcm_ops_t pxa2xx_pcm_ops = { +static struct snd_pcm_ops pxa2xx_pcm_ops = { .open = pxa2xx_pcm_open, .close = pxa2xx_pcm_close, .ioctl = snd_pcm_lib_ioctl, @@ -281,9 +281,9 @@ static snd_pcm_ops_t pxa2xx_pcm_ops = { .mmap = pxa2xx_pcm_mmap, }; -static int pxa2xx_pcm_preallocate_dma_buffer(snd_pcm_t *pcm, int stream) +static int pxa2xx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream) { - snd_pcm_substream_t *substream = pcm->streams[stream].substream; + struct snd_pcm_substream *substream = pcm->streams[stream].substream; struct snd_dma_buffer *buf = &substream->dma_buffer; size_t size = pxa2xx_pcm_hardware.buffer_bytes_max; buf->dev.type = SNDRV_DMA_TYPE_DEV; @@ -297,9 +297,9 @@ static int pxa2xx_pcm_preallocate_dma_buffer(snd_pcm_t *pcm, int stream) return 0; } -static void pxa2xx_pcm_free_dma_buffers(snd_pcm_t *pcm) +static void pxa2xx_pcm_free_dma_buffers(struct snd_pcm *pcm) { - snd_pcm_substream_t *substream; + struct snd_pcm_substream *substream; struct snd_dma_buffer *buf; int stream; @@ -318,9 +318,10 @@ static void pxa2xx_pcm_free_dma_buffers(snd_pcm_t *pcm) static u64 pxa2xx_pcm_dmamask = 0xffffffff; -int pxa2xx_pcm_new(snd_card_t *card, pxa2xx_pcm_client_t *client, snd_pcm_t **rpcm) +int pxa2xx_pcm_new(struct snd_card *card, struct pxa2xx_pcm_client *client, + struct snd_pcm **rpcm) { - snd_pcm_t *pcm; + struct snd_pcm *pcm; int play = client->playback_params ? 1 : 0; int capt = client->capture_params ? 1 : 0; int ret; diff --git a/sound/arm/pxa2xx-pcm.h b/sound/arm/pxa2xx-pcm.h index 43517597cab..b79f1e80378 100644 --- a/sound/arm/pxa2xx-pcm.h +++ b/sound/arm/pxa2xx-pcm.h @@ -10,20 +10,20 @@ * published by the Free Software Foundation. */ -typedef struct { +struct pxa2xx_pcm_dma_params { char *name; /* stream identifier */ u32 dcmd; /* DMA descriptor dcmd field */ volatile u32 *drcmr; /* the DMA request channel to use */ u32 dev_addr; /* device physical address for DMA */ -} pxa2xx_pcm_dma_params_t; +}; -typedef struct { - pxa2xx_pcm_dma_params_t *playback_params; - pxa2xx_pcm_dma_params_t *capture_params; - int (*startup)(snd_pcm_substream_t *); - void (*shutdown)(snd_pcm_substream_t *); - int (*prepare)(snd_pcm_substream_t *); -} pxa2xx_pcm_client_t; +struct pxa2xx_pcm_client { + struct pxa2xx_pcm_dma_params *playback_params; + struct pxa2xx_pcm_dma_params *capture_params; + int (*startup)(struct snd_pcm_substream *); + void (*shutdown)(struct snd_pcm_substream *); + int (*prepare)(struct snd_pcm_substream *); +}; -extern int pxa2xx_pcm_new(snd_card_t *, pxa2xx_pcm_client_t *, snd_pcm_t **); +extern int pxa2xx_pcm_new(struct snd_card *, struct pxa2xx_pcm_client *, struct snd_pcm **); diff --git a/sound/arm/sa11xx-uda1341.c b/sound/arm/sa11xx-uda1341.c index 6ee912259cc..13057d92f08 100644 --- a/sound/arm/sa11xx-uda1341.c +++ b/sound/arm/sa11xx-uda1341.c @@ -21,7 +21,7 @@ * merged HAL layer (patches from Brian) */ -/* $Id: sa11xx-uda1341.c,v 1.23 2005/09/09 13:22:34 tiwai Exp $ */ +/* $Id: sa11xx-uda1341.c,v 1.27 2005/12/07 09:13:42 cladisch Exp $ */ /*************************************************************************************************** * @@ -64,6 +64,8 @@ #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/init.h> +#include <linux/err.h> +#include <linux/platform_device.h> #include <linux/errno.h> #include <linux/ioctl.h> #include <linux/delay.h> @@ -115,7 +117,7 @@ static char *id = NULL; /* ID for this card */ module_param(id, charp, 0444); MODULE_PARM_DESC(id, "ID string for SA1100/SA1111 + UDA1341TS soundcard."); -typedef struct audio_stream { +struct audio_stream { char *id; /* identification string */ int stream_id; /* numeric identification */ dma_device_t dma_dev; /* device identifier for DMA */ @@ -130,18 +132,16 @@ typedef struct audio_stream { int tx_spin; /* are we recoding - flag used to do DMA trans. for sync */ unsigned int old_offset; spinlock_t dma_lock; /* for locking in DMA operations (see dma-sa1100.c in the kernel) */ - snd_pcm_substream_t *stream; -}audio_stream_t; + struct snd_pcm_substream *stream; +}; -typedef struct snd_card_sa11xx_uda1341 { - snd_card_t *card; +struct sa11xx_uda1341 { + struct snd_card *card; struct l3_client *uda1341; - snd_pcm_t *pcm; + struct snd_pcm *pcm; long samplerate; - audio_stream_t s[2]; /* playback & capture */ -} sa11xx_uda1341_t; - -static struct snd_card_sa11xx_uda1341 *sa11xx_uda1341 = NULL; + struct audio_stream s[2]; /* playback & capture */ +}; static unsigned int rates[] = { 8000, 10666, 10985, 14647, @@ -149,12 +149,14 @@ static unsigned int rates[] = { 29400, 32000, 44100, 48000, }; -static snd_pcm_hw_constraint_list_t hw_constraints_rates = { +static struct snd_pcm_hw_constraint_list hw_constraints_rates = { .count = ARRAY_SIZE(rates), .list = rates, .mask = 0, }; +static struct platform_device *device |