diff options
Diffstat (limited to 'arch/arm/plat-omap/include/plat/mcbsp.h')
-rw-r--r-- | arch/arm/plat-omap/include/plat/mcbsp.h | 208 |
1 files changed, 65 insertions, 143 deletions
diff --git a/arch/arm/plat-omap/include/plat/mcbsp.h b/arch/arm/plat-omap/include/plat/mcbsp.h index 9882c657b2d4..8fa74e2c9d6e 100644 --- a/arch/arm/plat-omap/include/plat/mcbsp.h +++ b/arch/arm/plat-omap/include/plat/mcbsp.h | |||
@@ -25,9 +25,7 @@ | |||
25 | #define __ASM_ARCH_OMAP_MCBSP_H | 25 | #define __ASM_ARCH_OMAP_MCBSP_H |
26 | 26 | ||
27 | #include <linux/spinlock.h> | 27 | #include <linux/spinlock.h> |
28 | 28 | #include <linux/clk.h> | |
29 | #include <mach/hardware.h> | ||
30 | #include <plat/clock.h> | ||
31 | 29 | ||
32 | /* macro for building platform_device for McBSP ports */ | 30 | /* macro for building platform_device for McBSP ports */ |
33 | #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ | 31 | #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ |
@@ -40,104 +38,60 @@ static struct platform_device omap_mcbsp##port_nr = { \ | |||
40 | #define MCBSP_CONFIG_TYPE3 0x3 | 38 | #define MCBSP_CONFIG_TYPE3 0x3 |
41 | #define MCBSP_CONFIG_TYPE4 0x4 | 39 | #define MCBSP_CONFIG_TYPE4 0x4 |
42 | 40 | ||
43 | #define OMAP7XX_MCBSP1_BASE 0xfffb1000 | 41 | /* McBSP register numbers. Register address offset = num * reg_step */ |
44 | #define OMAP7XX_MCBSP2_BASE 0xfffb1800 | 42 | enum { |
45 | 43 | /* Common registers */ | |
46 | #define OMAP1510_MCBSP1_BASE 0xe1011800 | 44 | OMAP_MCBSP_REG_SPCR2 = 4, |
47 | #define OMAP1510_MCBSP2_BASE 0xfffb1000 | 45 | OMAP_MCBSP_REG_SPCR1, |
48 | #define OMAP1510_MCBSP3_BASE 0xe1017000 | 46 | OMAP_MCBSP_REG_RCR2, |
49 | 47 | OMAP_MCBSP_REG_RCR1, | |
50 | #define OMAP1610_MCBSP1_BASE 0xe1011800 | 48 | OMAP_MCBSP_REG_XCR2, |
51 | #define OMAP1610_MCBSP2_BASE 0xfffb1000 | 49 | OMAP_MCBSP_REG_XCR1, |
52 | #define OMAP1610_MCBSP3_BASE 0xe1017000 | 50 | OMAP_MCBSP_REG_SRGR2, |
53 | 51 | OMAP_MCBSP_REG_SRGR1, | |
54 | #ifdef CONFIG_ARCH_OMAP1 | 52 | OMAP_MCBSP_REG_MCR2, |
55 | 53 | OMAP_MCBSP_REG_MCR1, | |
56 | #define OMAP_MCBSP_REG_DRR2 0x00 | 54 | OMAP_MCBSP_REG_RCERA, |
57 | #define OMAP_MCBSP_REG_DRR1 0x02 | 55 | OMAP_MCBSP_REG_RCERB, |
58 | #define OMAP_MCBSP_REG_DXR2 0x04 | 56 | OMAP_MCBSP_REG_XCERA, |
59 | #define OMAP_MCBSP_REG_DXR1 0x06 | 57 | OMAP_MCBSP_REG_XCERB, |
60 | #define OMAP_MCBSP_REG_DRR 0x02 | 58 | OMAP_MCBSP_REG_PCR0, |
61 | #define OMAP_MCBSP_REG_DXR 0x06 | 59 | OMAP_MCBSP_REG_RCERC, |
62 | #define OMAP_MCBSP_REG_SPCR2 0x08 | 60 | OMAP_MCBSP_REG_RCERD, |
63 | #define OMAP_MCBSP_REG_SPCR1 0x0a | 61 | OMAP_MCBSP_REG_XCERC, |
64 | #define OMAP_MCBSP_REG_RCR2 0x0c | 62 | OMAP_MCBSP_REG_XCERD, |
65 | #define OMAP_MCBSP_REG_RCR1 0x0e | 63 | OMAP_MCBSP_REG_RCERE, |
66 | #define OMAP_MCBSP_REG_XCR2 0x10 | 64 | OMAP_MCBSP_REG_RCERF, |
67 | #define OMAP_MCBSP_REG_XCR1 0x12 | 65 | OMAP_MCBSP_REG_XCERE, |
68 | #define OMAP_MCBSP_REG_SRGR2 0x14 | 66 | OMAP_MCBSP_REG_XCERF, |
69 | #define OMAP_MCBSP_REG_SRGR1 0x16 | 67 | OMAP_MCBSP_REG_RCERG, |
70 | #define OMAP_MCBSP_REG_MCR2 0x18 | 68 | OMAP_MCBSP_REG_RCERH, |
71 | #define OMAP_MCBSP_REG_MCR1 0x1a | 69 | OMAP_MCBSP_REG_XCERG, |
72 | #define OMAP_MCBSP_REG_RCERA 0x1c | 70 | OMAP_MCBSP_REG_XCERH, |
73 | #define OMAP_MCBSP_REG_RCERB 0x1e | 71 | |
74 | #define OMAP_MCBSP_REG_XCERA 0x20 | 72 | /* OMAP1-OMAP2420 registers */ |
75 | #define OMAP_MCBSP_REG_XCERB 0x22 | 73 | OMAP_MCBSP_REG_DRR2 = 0, |
76 | #define OMAP_MCBSP_REG_PCR0 0x24 | 74 | OMAP_MCBSP_REG_DRR1, |
77 | #define OMAP_MCBSP_REG_RCERC 0x26 | 75 | OMAP_MCBSP_REG_DXR2, |
78 | #define OMAP_MCBSP_REG_RCERD 0x28 | 76 | OMAP_MCBSP_REG_DXR1, |
79 | #define OMAP_MCBSP_REG_XCERC 0x2A | 77 | |
80 | #define OMAP_MCBSP_REG_XCERD 0x2C | 78 | /* OMAP2430 and onwards */ |
81 | #define OMAP_MCBSP_REG_RCERE 0x2E | 79 | OMAP_MCBSP_REG_DRR = 0, |
82 | #define OMAP_MCBSP_REG_RCERF 0x30 | 80 | OMAP_MCBSP_REG_DXR = 2, |
83 | #define OMAP_MCBSP_REG_XCERE 0x32 | 81 | OMAP_MCBSP_REG_SYSCON = 35, |
84 | #define OMAP_MCBSP_REG_XCERF 0x34 | 82 | OMAP_MCBSP_REG_THRSH2, |
85 | #define OMAP_MCBSP_REG_RCERG 0x36 | 83 | OMAP_MCBSP_REG_THRSH1, |
86 | #define OMAP_MCBSP_REG_RCERH 0x38 | 84 | OMAP_MCBSP_REG_IRQST = 40, |
87 | #define OMAP_MCBSP_REG_XCERG 0x3A | 85 | OMAP_MCBSP_REG_IRQEN, |
88 | #define OMAP_MCBSP_REG_XCERH 0x3C | 86 | OMAP_MCBSP_REG_WAKEUPEN, |
89 | 87 | OMAP_MCBSP_REG_XCCR, | |
90 | /* Dummy defines, these are not available on omap1 */ | 88 | OMAP_MCBSP_REG_RCCR, |
91 | #define OMAP_MCBSP_REG_XCCR 0x00 | 89 | OMAP_MCBSP_REG_XBUFFSTAT, |
92 | #define OMAP_MCBSP_REG_RCCR 0x00 | 90 | OMAP_MCBSP_REG_RBUFFSTAT, |
93 | 91 | OMAP_MCBSP_REG_SSELCR, | |
94 | #else | 92 | }; |
95 | |||
96 | #define OMAP_MCBSP_REG_DRR2 0x00 | ||
97 | #define OMAP_MCBSP_REG_DRR1 0x04 | ||
98 | #define OMAP_MCBSP_REG_DXR2 0x08 | ||
99 | #define OMAP_MCBSP_REG_DXR1 0x0C | ||
100 | #define OMAP_MCBSP_REG_DRR 0x00 | ||
101 | #define OMAP_MCBSP_REG_DXR 0x08 | ||
102 | #define OMAP_MCBSP_REG_SPCR2 0x10 | ||
103 | #define OMAP_MCBSP_REG_SPCR1 0x14 | ||
104 | #define OMAP_MCBSP_REG_RCR2 0x18 | ||
105 | #define OMAP_MCBSP_REG_RCR1 0x1C | ||
106 | #define OMAP_MCBSP_REG_XCR2 0x20 | ||
107 | #define OMAP_MCBSP_REG_XCR1 0x24 | ||
108 | #define OMAP_MCBSP_REG_SRGR2 0x28 | ||
109 | #define OMAP_MCBSP_REG_SRGR1 0x2C | ||
110 | #define OMAP_MCBSP_REG_MCR2 0x30 | ||
111 | #define OMAP_MCBSP_REG_MCR1 0x34 | ||
112 | #define OMAP_MCBSP_REG_RCERA 0x38 | ||
113 | #define OMAP_MCBSP_REG_RCERB 0x3C | ||
114 | #define OMAP_MCBSP_REG_XCERA 0x40 | ||
115 | #define OMAP_MCBSP_REG_XCERB 0x44 | ||
116 | #define OMAP_MCBSP_REG_PCR0 0x48 | ||
117 | #define OMAP_MCBSP_REG_RCERC 0x4C | ||
118 | #define OMAP_MCBSP_REG_RCERD 0x50 | ||
119 | #define OMAP_MCBSP_REG_XCERC 0x54 | ||
120 | #define OMAP_MCBSP_REG_XCERD 0x58 | ||
121 | #define OMAP_MCBSP_REG_RCERE 0x5C | ||
122 | #define OMAP_MCBSP_REG_RCERF 0x60 | ||
123 | #define OMAP_MCBSP_REG_XCERE 0x64 | ||
124 | #define OMAP_MCBSP_REG_XCERF 0x68 | ||
125 | #define OMAP_MCBSP_REG_RCERG 0x6C | ||
126 | #define OMAP_MCBSP_REG_RCERH 0x70 | ||
127 | #define OMAP_MCBSP_REG_XCERG 0x74 | ||
128 | #define OMAP_MCBSP_REG_XCERH 0x78 | ||
129 | #define OMAP_MCBSP_REG_SYSCON 0x8C | ||
130 | #define OMAP_MCBSP_REG_THRSH2 0x90 | ||
131 | #define OMAP_MCBSP_REG_THRSH1 0x94 | ||
132 | #define OMAP_MCBSP_REG_IRQST 0xA0 | ||
133 | #define OMAP_MCBSP_REG_IRQEN 0xA4 | ||
134 | #define OMAP_MCBSP_REG_WAKEUPEN 0xA8 | ||
135 | #define OMAP_MCBSP_REG_XCCR 0xAC | ||
136 | #define OMAP_MCBSP_REG_RCCR 0xB0 | ||
137 | #define OMAP_MCBSP_REG_XBUFFSTAT 0xB4 | ||
138 | #define OMAP_MCBSP_REG_RBUFFSTAT 0xB8 | ||
139 | #define OMAP_MCBSP_REG_SSELCR 0xBC | ||
140 | 93 | ||
94 | /* OMAP3 sidetone control registers */ | ||
141 | #define OMAP_ST_REG_REV 0x00 | 95 | #define OMAP_ST_REG_REV 0x00 |
142 | #define OMAP_ST_REG_SYSCONFIG 0x10 | 96 | #define OMAP_ST_REG_SYSCONFIG 0x10 |
143 | #define OMAP_ST_REG_IRQSTATUS 0x18 | 97 | #define OMAP_ST_REG_IRQSTATUS 0x18 |
@@ -146,8 +100,6 @@ static struct platform_device omap_mcbsp##port_nr = { \ | |||
146 | #define OMAP_ST_REG_SFIRCR 0x28 | 100 | #define OMAP_ST_REG_SFIRCR 0x28 |
147 | #define OMAP_ST_REG_SSELCR 0x2C | 101 | #define OMAP_ST_REG_SSELCR 0x2C |
148 | 102 | ||
149 | #endif | ||
150 | |||
151 | /************************** McBSP SPCR1 bit definitions ***********************/ | 103 | /************************** McBSP SPCR1 bit definitions ***********************/ |
152 | #define RRST 0x0001 | 104 | #define RRST 0x0001 |
153 | #define RRDY 0x0002 | 105 | #define RRDY 0x0002 |
@@ -344,20 +296,20 @@ typedef enum { | |||
344 | struct omap_mcbsp_ops { | 296 | struct omap_mcbsp_ops { |
345 | void (*request)(unsigned int); | 297 | void (*request)(unsigned int); |
346 | void (*free)(unsigned int); | 298 | void (*free)(unsigned int); |
347 | int (*set_clks_src)(u8, u8); | ||
348 | }; | 299 | }; |
349 | 300 | ||
350 | struct omap_mcbsp_platform_data { | 301 | struct omap_mcbsp_platform_data { |
351 | unsigned long phys_base; | ||
352 | u8 dma_rx_sync, dma_tx_sync; | ||
353 | u16 rx_irq, tx_irq; | ||
354 | struct omap_mcbsp_ops *ops; | 302 | struct omap_mcbsp_ops *ops; |
355 | #ifdef CONFIG_ARCH_OMAP3 | ||
356 | /* Sidetone block for McBSP 2 and 3 */ | ||
357 | unsigned long phys_base_st; | ||
358 | #endif | ||
359 | u16 buffer_size; | 303 | u16 buffer_size; |
360 | unsigned int mcbsp_config_type; | 304 | u8 reg_size; |
305 | u8 reg_step; | ||
306 | |||
307 | /* McBSP platform and instance specific features */ | ||
308 | bool has_wakeup; /* Wakeup capability */ | ||
309 | bool has_ccr; /* Transceiver has configuration control registers */ | ||
310 | int (*enable_st_clock)(unsigned int, bool); | ||
311 | int (*set_clk_src)(struct device *dev, struct clk *clk, const char *src); | ||
312 | int (*mux_signal)(struct device *dev, const char *signal, const char *src); | ||
361 | }; | 313 | }; |
362 | 314 | ||
363 | struct omap_mcbsp_st_data { | 315 | struct omap_mcbsp_st_data { |
@@ -389,14 +341,12 @@ struct omap_mcbsp { | |||
389 | spinlock_t lock; | 341 | spinlock_t lock; |
390 | struct omap_mcbsp_platform_data *pdata; | 342 | struct omap_mcbsp_platform_data *pdata; |
391 | struct clk *fclk; | 343 | struct clk *fclk; |
392 | #ifdef CONFIG_ARCH_OMAP3 | ||
393 | struct omap_mcbsp_st_data *st_data; | 344 | struct omap_mcbsp_st_data *st_data; |
394 | int dma_op_mode; | 345 | int dma_op_mode; |
395 | u16 max_tx_thres; | 346 | u16 max_tx_thres; |
396 | u16 max_rx_thres; | 347 | u16 max_rx_thres; |
397 | #endif | ||
398 | void *reg_cache; | 348 | void *reg_cache; |
399 | unsigned int mcbsp_config_type; | 349 | int reg_cache_size; |
400 | }; | 350 | }; |
401 | 351 | ||
402 | /** | 352 | /** |
@@ -408,16 +358,10 @@ struct omap_mcbsp_dev_attr { | |||
408 | }; | 358 | }; |
409 | 359 | ||
410 | extern struct omap_mcbsp **mcbsp_ptr; | 360 | extern struct omap_mcbsp **mcbsp_ptr; |
411 | extern int omap_mcbsp_count, omap_mcbsp_cache_size; | 361 | extern int omap_mcbsp_count; |
412 | |||
413 | #define omap_mcbsp_check_valid_id(id) (id < omap_mcbsp_count) | ||
414 | #define id_to_mcbsp_ptr(id) mcbsp_ptr[id]; | ||
415 | 362 | ||
416 | int omap_mcbsp_init(void); | 363 | int omap_mcbsp_init(void); |
417 | void omap_mcbsp_register_board_cfg(struct resource *res, int res_count, | ||
418 | struct omap_mcbsp_platform_data *config, int size); | ||
419 | void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config); | 364 | void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config); |
420 | #ifdef CONFIG_ARCH_OMAP3 | ||
421 | void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold); | 365 | void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold); |
422 | void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold); | 366 | void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold); |
423 | u16 omap_mcbsp_get_max_tx_threshold(unsigned int id); | 367 | u16 omap_mcbsp_get_max_tx_threshold(unsigned int id); |
@@ -426,18 +370,6 @@ u16 omap_mcbsp_get_fifo_size(unsigned int id); | |||
426 | u16 omap_mcbsp_get_tx_delay(unsigned int id); | 370 | u16 omap_mcbsp_get_tx_delay(unsigned int id); |
427 | u16 omap_mcbsp_get_rx_delay(unsigned int id); | 371 | u16 omap_mcbsp_get_rx_delay(unsigned int id); |
428 | int omap_mcbsp_get_dma_op_mode(unsigned int id); | 372 | int omap_mcbsp_get_dma_op_mode(unsigned int id); |
429 | #else | ||
430 | static inline void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold) | ||
431 | { } | ||
432 | static inline void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold) | ||
433 | { } | ||
434 | static inline u16 omap_mcbsp_get_max_tx_threshold(unsigned int id) { return 0; } | ||
435 | static inline u16 omap_mcbsp_get_max_rx_threshold(unsigned int id) { return 0; } | ||
436 | static inline u16 omap_mcbsp_get_fifo_size(unsigned int id) { return 0; } | ||
437 | static inline u16 omap_mcbsp_get_tx_delay(unsigned int id) { return 0; } | ||
438 | static inline u16 omap_mcbsp_get_rx_delay(unsigned int id) { return 0; } | ||
439 | static inline int omap_mcbsp_get_dma_op_mode(unsigned int id) { return 0; } | ||
440 | #endif | ||
441 | int omap_mcbsp_request(unsigned int id); | 373 | int omap_mcbsp_request(unsigned int id); |
442 | void omap_mcbsp_free(unsigned int id); | 374 | void omap_mcbsp_free(unsigned int id); |
443 | void omap_mcbsp_start(unsigned int id, int tx, int rx); | 375 | void omap_mcbsp_start(unsigned int id, int tx, int rx); |
@@ -453,21 +385,11 @@ void omap2_mcbsp1_mux_fsr_src(u8 mux); | |||
453 | int omap_mcbsp_dma_ch_params(unsigned int id, unsigned int stream); | 385 | int omap_mcbsp_dma_ch_params(unsigned int id, unsigned int stream); |
454 | int omap_mcbsp_dma_reg_params(unsigned int id, unsigned int stream); | 386 | int omap_mcbsp_dma_reg_params(unsigned int id, unsigned int stream); |
455 | 387 | ||
456 | #ifdef CONFIG_ARCH_OMAP3 | ||
457 | /* Sidetone specific API */ | 388 | /* Sidetone specific API */ |
458 | int omap_st_set_chgain(unsigned int id, int channel, s16 chgain); | 389 | int omap_st_set_chgain(unsigned int id, int channel, s16 chgain); |
459 | int omap_st_get_chgain(unsigned int id, int channel, s16 *chgain); | 390 | int omap_st_get_chgain(unsigned int id, int channel, s16 *chgain); |
460 | int omap_st_enable(unsigned int id); | 391 | int omap_st_enable(unsigned int id); |
461 | int omap_st_disable(unsigned int id); | 392 | int omap_st_disable(unsigned int id); |
462 | int omap_st_is_enabled(unsigned int id); | 393 | int omap_st_is_enabled(unsigned int id); |
463 | #else | ||
464 | static inline int omap_st_set_chgain(unsigned int id, int channel, | ||
465 | s16 chgain) { return 0; } | ||
466 | static inline int omap_st_get_chgain(unsigned int id, int channel, | ||
467 | s16 *chgain) { return 0; } | ||
468 | static inline int omap_st_enable(unsigned int id) { return 0; } | ||
469 | static inline int omap_st_disable(unsigned int id) { return 0; } | ||
470 | static inline int omap_st_is_enabled(unsigned int id) { return 0; } | ||
471 | #endif | ||
472 | 394 | ||
473 | #endif | 395 | #endif |