blob: b12c69edeea5f29734b7ed75c38f797c89478381 [file] [log] [blame]
David Brownellf492ec92009-05-14 13:01:59 -07001/*
2 * <mach/asp.h> - DaVinci Audio Serial Port support
3 */
4#ifndef __ASM_ARCH_DAVINCI_ASP_H
5#define __ASM_ARCH_DAVINCI_ASP_H
6
7#include <mach/irqs.h>
Chaithrika U S25acf552009-06-05 06:28:08 -04008#include <mach/edma.h>
David Brownellf492ec92009-05-14 13:01:59 -07009
Chaithrika U S25acf552009-06-05 06:28:08 -040010/* Bases of dm644x and dm355 register banks */
David Brownellf492ec92009-05-14 13:01:59 -070011#define DAVINCI_ASP0_BASE 0x01E02000
12#define DAVINCI_ASP1_BASE 0x01E04000
13
Miguel Aguilare9ab3212009-09-02 15:33:29 -060014/* Bases of dm365 register banks */
15#define DAVINCI_DM365_ASP0_BASE 0x01D02000
16
Chaithrika U S25acf552009-06-05 06:28:08 -040017/* Bases of dm646x register banks */
18#define DAVINCI_DM646X_MCASP0_REG_BASE 0x01D01000
19#define DAVINCI_DM646X_MCASP1_REG_BASE 0x01D01800
20
Chaithrika U S491214e2009-08-11 17:03:25 -040021/* Bases of da850/da830 McASP0 register banks */
22#define DAVINCI_DA8XX_MCASP0_REG_BASE 0x01D00000
23
Chaithrika U Se33ef5e2009-08-11 17:01:59 -040024/* Bases of da830 McASP1 register banks */
25#define DAVINCI_DA830_MCASP1_REG_BASE 0x01D04000
26
Chaithrika U S25acf552009-06-05 06:28:08 -040027/* EDMA channels of dm644x and dm355 */
David Brownellf492ec92009-05-14 13:01:59 -070028#define DAVINCI_DMA_ASP0_TX 2
29#define DAVINCI_DMA_ASP0_RX 3
30#define DAVINCI_DMA_ASP1_TX 8
31#define DAVINCI_DMA_ASP1_RX 9
32
Chaithrika U S25acf552009-06-05 06:28:08 -040033/* EDMA channels of dm646x */
34#define DAVINCI_DM646X_DMA_MCASP0_AXEVT0 6
35#define DAVINCI_DM646X_DMA_MCASP0_AREVT0 9
36#define DAVINCI_DM646X_DMA_MCASP1_AXEVT1 12
37
Chaithrika U S491214e2009-08-11 17:03:25 -040038/* EDMA channels of da850/da830 McASP0 */
39#define DAVINCI_DA8XX_DMA_MCASP0_AREVT 0
40#define DAVINCI_DA8XX_DMA_MCASP0_AXEVT 1
41
Chaithrika U Se33ef5e2009-08-11 17:01:59 -040042/* EDMA channels of da830 McASP1 */
43#define DAVINCI_DA830_DMA_MCASP1_AREVT 2
44#define DAVINCI_DA830_DMA_MCASP1_AXEVT 3
45
David Brownellf492ec92009-05-14 13:01:59 -070046/* Interrupts */
47#define DAVINCI_ASP0_RX_INT IRQ_MBRINT
48#define DAVINCI_ASP0_TX_INT IRQ_MBXINT
49#define DAVINCI_ASP1_RX_INT IRQ_MBRINT
50#define DAVINCI_ASP1_TX_INT IRQ_MBXINT
51
Chaithrika U S25acf552009-06-05 06:28:08 -040052struct snd_platform_data {
Chaithrika U S25acf552009-06-05 06:28:08 -040053 u32 tx_dma_offset;
54 u32 rx_dma_offset;
55 enum dma_event_q eventq_no; /* event queue number */
56 unsigned int codec_fmt;
Troy Kisky0d6c9772009-11-18 17:49:51 -070057 /*
58 * Allowing this is more efficient and eliminates left and right swaps
59 * caused by underruns, but will swap the left and right channels
60 * when compared to previous behavior.
61 */
62 unsigned enable_channel_combine:1;
Troy Kisky1e224f32009-11-18 17:49:53 -070063 unsigned sram_size_playback;
64 unsigned sram_size_capture;
Chaithrika U S25acf552009-06-05 06:28:08 -040065
Raffaele Recalcatiec637552010-07-06 10:39:03 +020066 /*
67 * If McBSP peripheral gets the clock from an external pin,
68 * there are three chooses, that are MCBSP_CLKX, MCBSP_CLKR
69 * and MCBSP_CLKS.
70 * Depending on different hardware connections it is possible
71 * to use this setting to change the behaviour of McBSP
72 * driver. The dm365_clk_input_pin enum is available for dm365
73 */
74 int clk_input_pin;
75
Raffaele Recalcatid9823ed2010-07-06 10:39:04 +020076 /*
77 * This flag works when both clock and FS are outputs for the cpu
78 * and makes clock more accurate (FS is not symmetrical and the
79 * clock is very fast.
80 * The clock becoming faster is named
81 * i2s continuous serial clock (I2S_SCK) and it is an externally
82 * visible bit clock.
83 *
84 * first line : WordSelect
85 * second line : ContinuousSerialClock
86 * third line: SerialData
87 *
88 * SYMMETRICAL APPROACH:
89 * _______________________ LEFT
90 * _| RIGHT |______________________|
91 * _ _ _ _ _ _ _ _
92 * _| |_| |_ x16 _| |_| |_| |_| |_ x16 _| |_| |_
93 * _ _ _ _ _ _ _ _
94 * _/ \_/ \_ ... _/ \_/ \_/ \_/ \_ ... _/ \_/ \_
95 * \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
96 *
97 * ACCURATE CLOCK APPROACH:
98 * ______________ LEFT
99 * _| RIGHT |_______________________________|
100 * _ _ _ _ _ _ _ _ _
101 * _| |_ x16 _| |_| |_ x16 _| |_| |_| |_| |_| |_| |
102 * _ _ _ _ dummy cycles
103 * _/ \_ ... _/ \_/ \_ ... _/ \__________________
104 * \_/ \_/ \_/ \_/
105 *
106 */
107 bool i2s_accurate_sck;
108
Chaithrika U S25acf552009-06-05 06:28:08 -0400109 /* McASP specific fields */
110 int tdm_slots;
111 u8 op_mode;
112 u8 num_serializer;
113 u8 *serial_dir;
Chaithrika U Se33ef5e2009-08-11 17:01:59 -0400114 u8 version;
115 u8 txnumevt;
116 u8 rxnumevt;
117};
118
119enum {
120 MCASP_VERSION_1 = 0, /* DM646x */
121 MCASP_VERSION_2, /* DA8xx/OMAPL1x */
Chaithrika U S25acf552009-06-05 06:28:08 -0400122};
123
Raffaele Recalcatiec637552010-07-06 10:39:03 +0200124enum dm365_clk_input_pin {
125 MCBSP_CLKR = 0, /* DM365 */
126 MCBSP_CLKS,
127};
128
Chaithrika U S25acf552009-06-05 06:28:08 -0400129#define INACTIVE_MODE 0
130#define TX_MODE 1
131#define RX_MODE 2
132
133#define DAVINCI_MCASP_IIS_MODE 0
134#define DAVINCI_MCASP_DIT_MODE 1
135
David Brownellf492ec92009-05-14 13:01:59 -0700136#endif /* __ASM_ARCH_DAVINCI_ASP_H */