1/* 2 * at91-pcm.h - ALSA PCM interface for the Atmel AT91 SoC 3 * 4 * Author: Frank Mandarino <fmandarino@endrelia.com> 5 * Endrelia Technologies Inc. 6 * Created: Mar 3, 2006 7 * 8 * Based on pxa2xx-pcm.h by: 9 * 10 * Author: Nicolas Pitre 11 * Created: Nov 30, 2004 12 * Copyright: MontaVista Software, Inc. 13 * 14 * This program is free software; you can redistribute it and/or modify 15 * it under the terms of the GNU General Public License version 2 as 16 * published by the Free Software Foundation. 17 */ 18 19#ifndef _AT91_PCM_H 20#define _AT91_PCM_H 21 22#include <asm/arch/hardware.h> 23 24struct at91_ssc_periph { 25 void __iomem *base; 26 u32 pid; 27}; 28 29/* 30 * Registers and status bits that are required by the PCM driver. 31 */ 32struct at91_pdc_regs { 33 unsigned int xpr; /* PDC recv/trans pointer */ 34 unsigned int xcr; /* PDC recv/trans counter */ 35 unsigned int xnpr; /* PDC next recv/trans pointer */ 36 unsigned int xncr; /* PDC next recv/trans counter */ 37 unsigned int ptcr; /* PDC transfer control */ 38}; 39 40struct at91_ssc_mask { 41 u32 ssc_enable; /* SSC recv/trans enable */ 42 u32 ssc_disable; /* SSC recv/trans disable */ 43 u32 ssc_endx; /* SSC ENDTX or ENDRX */ 44 u32 ssc_endbuf; /* SSC TXBUFE or RXBUFF */ 45 u32 pdc_enable; /* PDC recv/trans enable */ 46 u32 pdc_disable; /* PDC recv/trans disable */ 47}; 48 49/* 50 * This structure, shared between the PCM driver and the interface, 51 * contains all information required by the PCM driver to perform the 52 * PDC DMA operation. All fields except dma_intr_handler() are initialized 53 * by the interface. The dms_intr_handler() pointer is set by the PCM 54 * driver and called by the interface SSC interrupt handler if it is 55 * non-NULL. 56 */ 57struct at91_pcm_dma_params { 58 char *name; /* stream identifier */ 59 int pdc_xfer_size; /* PDC counter increment in bytes */ 60 void __iomem *ssc_base; /* SSC base address */ 61 struct at91_pdc_regs *pdc; /* PDC receive or transmit registers */ 62 struct at91_ssc_mask *mask;/* SSC & PDC status bits */ 63 struct snd_pcm_substream *substream; 64 void (*dma_intr_handler)(u32, struct snd_pcm_substream *); 65}; 66 67extern struct snd_soc_platform at91_soc_platform; 68 69#define at91_ssc_read(a) ((unsigned long) __raw_readl(a)) 70#define at91_ssc_write(a,v) __raw_writel((v),(a)) 71 72#endif /* _AT91_PCM_H */ 73