1 /* sound/soc/at32/at32-pcm.h
2 * ASoC PCM interface for Atmel AT32 SoC
4 * Copyright (C) 2008 Long Range Systems
5 * Geoffrey Wossum <gwossum@acm.org>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
12 #ifndef __SOUND_SOC_AT32_AT32_PCM_H
13 #define __SOUND_SOC_AT32_AT32_PCM_H __FILE__
15 #include <linux/atmel-ssc.h>
19 * Registers and status bits that are required by the PCM driver
20 * TODO: Is ptcr really used?
22 struct at32_pdc_regs
{
23 u32 xpr
; /* PDC RX/TX pointer */
24 u32 xcr
; /* PDC RX/TX counter */
25 u32 xnpr
; /* PDC next RX/TX pointer */
26 u32 xncr
; /* PDC next RX/TX counter */
27 u32 ptcr
; /* PDC transfer control */
35 struct at32_ssc_mask
{
36 u32 ssc_enable
; /* SSC RX/TX enable */
37 u32 ssc_disable
; /* SSC RX/TX disable */
38 u32 ssc_endx
; /* SSC ENDTX or ENDRX */
39 u32 ssc_endbuf
; /* SSC TXBUFF or RXBUFF */
40 u32 pdc_enable
; /* PDC RX/TX enable */
41 u32 pdc_disable
; /* PDC RX/TX disable */
47 * This structure, shared between the PCM driver and the interface,
48 * contains all information required by the PCM driver to perform the
49 * PDC DMA operation. All fields except dma_intr_handler() are initialized
50 * by the interface. The dms_intr_handler() pointer is set by the PCM
51 * driver and called by the interface SSC interrupt handler if it is
54 struct at32_pcm_dma_params
{
55 char *name
; /* stream identifier */
56 int pdc_xfer_size
; /* PDC counter increment in bytes */
57 struct ssc_device
*ssc
; /* SSC device for stream */
58 struct at32_pdc_regs
*pdc
; /* PDC register info */
59 struct at32_ssc_mask
*mask
; /* SSC mask info */
60 struct snd_pcm_substream
*substream
;
61 void (*dma_intr_handler
) (u32
, struct snd_pcm_substream
*);
67 * The AT32 ASoC platform driver
69 extern struct snd_soc_platform at32_soc_platform
;
74 * SSC register access (since ssc_writel() / ssc_readl() require literal name)
76 #define ssc_readx(base, reg) (__raw_readl((base) + (reg)))
77 #define ssc_writex(base, reg, value) __raw_writel((value), (base) + (reg))
79 #endif /* __SOUND_SOC_AT32_AT32_PCM_H */