Merge commit 'gcl/next' into next
[deliverable/linux.git] / arch / blackfin / include / asm / bfin_sport.h
1 /*
2 * File: include/asm-blackfin/bfin_sport.h
3 * Based on:
4 * Author: Roy Huang (roy.huang@analog.com)
5 *
6 * Created: Thu Aug. 24 2006
7 * Description:
8 *
9 * Modified:
10 * Copyright 2004-2006 Analog Devices Inc.
11 *
12 * Bugs: Enter bugs at http://blackfin.uclinux.org/
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 as published by
16 * the Free Software Foundation; either version 2 of the License, or
17 * (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, see the file COPYING, or write
26 * to the Free Software Foundation, Inc.,
27 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
28 */
29
30 #ifndef __BFIN_SPORT_H__
31 #define __BFIN_SPORT_H__
32
33 #define SPORT_MAJOR 237
34 #define SPORT_NR_DEVS 2
35
36 /* Sport mode: it can be set to TDM, i2s or others */
37 #define NORM_MODE 0x0
38 #define TDM_MODE 0x1
39 #define I2S_MODE 0x2
40
41 /* Data format, normal, a-law or u-law */
42 #define NORM_FORMAT 0x0
43 #define ALAW_FORMAT 0x2
44 #define ULAW_FORMAT 0x3
45 struct sport_register;
46
47 /* Function driver which use sport must initialize the structure */
48 struct sport_config {
49 /*TDM (multichannels), I2S or other mode */
50 unsigned int mode:3;
51
52 /* if TDM mode is selected, channels must be set */
53 int channels; /* Must be in 8 units */
54 unsigned int frame_delay:4; /* Delay between frame sync pulse and first bit */
55
56 /* I2S mode */
57 unsigned int right_first:1; /* Right stereo channel first */
58
59 /* In mormal mode, the following item need to be set */
60 unsigned int lsb_first:1; /* order of transmit or receive data */
61 unsigned int fsync:1; /* Frame sync required */
62 unsigned int data_indep:1; /* data independent frame sync generated */
63 unsigned int act_low:1; /* Active low TFS */
64 unsigned int late_fsync:1; /* Late frame sync */
65 unsigned int tckfe:1;
66 unsigned int sec_en:1; /* Secondary side enabled */
67
68 /* Choose clock source */
69 unsigned int int_clk:1; /* Internal or external clock */
70
71 /* If external clock is used, the following fields are ignored */
72 int serial_clk;
73 int fsync_clk;
74
75 unsigned int data_format:2; /*Normal, u-law or a-law */
76
77 int word_len; /* How length of the word in bits, 3-32 bits */
78 int dma_enabled;
79 };
80
81 struct sport_register {
82 unsigned short tcr1;
83 unsigned short reserved0;
84 unsigned short tcr2;
85 unsigned short reserved1;
86 unsigned short tclkdiv;
87 unsigned short reserved2;
88 unsigned short tfsdiv;
89 unsigned short reserved3;
90 unsigned long tx;
91 unsigned long reserved_l0;
92 unsigned long rx;
93 unsigned long reserved_l1;
94 unsigned short rcr1;
95 unsigned short reserved4;
96 unsigned short rcr2;
97 unsigned short reserved5;
98 unsigned short rclkdiv;
99 unsigned short reserved6;
100 unsigned short rfsdiv;
101 unsigned short reserved7;
102 unsigned short stat;
103 unsigned short reserved8;
104 unsigned short chnl;
105 unsigned short reserved9;
106 unsigned short mcmc1;
107 unsigned short reserved10;
108 unsigned short mcmc2;
109 unsigned short reserved11;
110 unsigned long mtcs0;
111 unsigned long mtcs1;
112 unsigned long mtcs2;
113 unsigned long mtcs3;
114 unsigned long mrcs0;
115 unsigned long mrcs1;
116 unsigned long mrcs2;
117 unsigned long mrcs3;
118 };
119
120 #define SPORT_IOC_MAGIC 'P'
121 #define SPORT_IOC_CONFIG _IOWR('P', 0x01, struct sport_config)
122
123 struct sport_dev {
124 struct cdev cdev; /* Char device structure */
125
126 int sport_num;
127
128 int dma_rx_chan;
129 int dma_tx_chan;
130
131 int rx_irq;
132 unsigned char *rx_buf; /* Buffer store the received data */
133 int rx_len; /* How many bytes will be received */
134 int rx_received; /* How many bytes has been received */
135
136 int tx_irq;
137 const unsigned char *tx_buf;
138 int tx_len;
139 int tx_sent;
140
141 int sport_err_irq;
142
143 struct mutex mutex; /* mutual exclusion semaphore */
144 struct task_struct *task;
145
146 wait_queue_head_t waitq;
147 int wait_con;
148 struct sport_register *regs;
149 struct sport_config config;
150 };
151
152 #define SPORT_TCR1 0
153 #define SPORT_TCR2 1
154 #define SPORT_TCLKDIV 2
155 #define SPORT_TFSDIV 3
156 #define SPORT_RCR1 8
157 #define SPORT_RCR2 9
158 #define SPORT_RCLKDIV 10
159 #define SPORT_RFSDIV 11
160 #define SPORT_CHANNEL 13
161 #define SPORT_MCMC1 14
162 #define SPORT_MCMC2 15
163 #define SPORT_MTCS0 16
164 #define SPORT_MTCS1 17
165 #define SPORT_MTCS2 18
166 #define SPORT_MTCS3 19
167 #define SPORT_MRCS0 20
168 #define SPORT_MRCS1 21
169 #define SPORT_MRCS2 22
170 #define SPORT_MRCS3 23
171
172 #endif /*__BFIN_SPORT_H__*/
This page took 0.035363 seconds and 5 git commands to generate.