Commit dbcc3475 authored by Jon Smirl's avatar Jon Smirl Committed by Mark Brown

ASoC: Main rewite of the mpc5200 audio DMA code

Rewrite the mpc5200 audio DMA code to support both I2S and AC97.
Signed-off-by: default avatarJon Smirl <jonsmirl@gmail.com>
Acked-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 0f89bdca
...@@ -25,7 +25,6 @@ config SND_SOC_MPC8610_HPCD ...@@ -25,7 +25,6 @@ config SND_SOC_MPC8610_HPCD
config SND_SOC_MPC5200_I2S config SND_SOC_MPC5200_I2S
tristate "Freescale MPC5200 PSC in I2S mode driver" tristate "Freescale MPC5200 PSC in I2S mode driver"
depends on PPC_MPC52xx && PPC_BESTCOMM depends on PPC_MPC52xx && PPC_BESTCOMM
select SND_SOC_OF_SIMPLE
select SND_MPC52xx_DMA select SND_MPC52xx_DMA
select PPC_BESTCOMM_GEN_BD select PPC_BESTCOMM_GEN_BD
help help
......
This diff is collapsed.
...@@ -5,8 +5,10 @@ ...@@ -5,8 +5,10 @@
#ifndef __SOUND_SOC_FSL_MPC5200_DMA_H__ #ifndef __SOUND_SOC_FSL_MPC5200_DMA_H__
#define __SOUND_SOC_FSL_MPC5200_DMA_H__ #define __SOUND_SOC_FSL_MPC5200_DMA_H__
#define PSC_STREAM_NAME_LEN 32
/** /**
* psc_dma_stream - Data specific to a single stream (playback or capture) * psc_ac97_stream - Data specific to a single stream (playback or capture)
* @active: flag indicating if the stream is active * @active: flag indicating if the stream is active
* @psc_dma: pointer back to parent psc_dma data structure * @psc_dma: pointer back to parent psc_dma data structure
* @bcom_task: bestcomm task structure * @bcom_task: bestcomm task structure
...@@ -17,6 +19,9 @@ ...@@ -17,6 +19,9 @@
* @period_bytes: size of DMA period in bytes * @period_bytes: size of DMA period in bytes
*/ */
struct psc_dma_stream { struct psc_dma_stream {
struct snd_pcm_runtime *runtime;
snd_pcm_uframes_t appl_ptr;
int active; int active;
struct psc_dma *psc_dma; struct psc_dma *psc_dma;
struct bcom_task *bcom_task; struct bcom_task *bcom_task;
...@@ -27,6 +32,7 @@ struct psc_dma_stream { ...@@ -27,6 +32,7 @@ struct psc_dma_stream {
dma_addr_t period_next_pt; dma_addr_t period_next_pt;
dma_addr_t period_current_pt; dma_addr_t period_current_pt;
int period_bytes; int period_bytes;
int period_size;
}; };
/** /**
...@@ -48,9 +54,12 @@ struct psc_dma { ...@@ -48,9 +54,12 @@ struct psc_dma {
struct mpc52xx_psc_fifo __iomem *fifo_regs; struct mpc52xx_psc_fifo __iomem *fifo_regs;
unsigned int irq; unsigned int irq;
struct device *dev; struct device *dev;
struct snd_soc_dai dai;
spinlock_t lock; spinlock_t lock;
u32 sicr; u32 sicr;
uint sysclk;
int imr;
int id;
unsigned int slots;
/* per-stream data */ /* per-stream data */
struct psc_dma_stream playback; struct psc_dma_stream playback;
...@@ -58,24 +67,14 @@ struct psc_dma { ...@@ -58,24 +67,14 @@ struct psc_dma {
/* Statistics */ /* Statistics */
struct { struct {
int overrun_count; unsigned long overrun_count;
int underrun_count; unsigned long underrun_count;
} stats; } stats;
}; };
int mpc5200_audio_dma_create(struct of_device *op);
int mpc5200_audio_dma_destroy(struct of_device *op);
int psc_dma_startup(struct snd_pcm_substream *substream, extern struct snd_soc_platform mpc5200_audio_dma_platform;
struct snd_soc_dai *dai);
int psc_dma_hw_free(struct snd_pcm_substream *substream,
struct snd_soc_dai *dai);
void psc_dma_shutdown(struct snd_pcm_substream *substream,
struct snd_soc_dai *dai);
int psc_dma_trigger(struct snd_pcm_substream *substream, int cmd,
struct snd_soc_dai *dai);
extern struct snd_soc_platform psc_dma_pcm_soc_platform;
#endif /* __SOUND_SOC_FSL_MPC5200_DMA_H__ */ #endif /* __SOUND_SOC_FSL_MPC5200_DMA_H__ */
This diff is collapsed.
/*
* Freescale MPC5200 PSC in I2S mode
* ALSA SoC Digital Audio Interface (DAI) driver
*
*/
#ifndef __SOUND_SOC_FSL_MPC52xx_PSC_I2S_H__
#define __SOUND_SOC_FSL_MPC52xx_PSC_I2S_H__
extern struct snd_soc_dai psc_i2s_dai[];
#endif /* __SOUND_SOC_FSL_MPC52xx_PSC_I2S_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment