summaryrefslogtreecommitdiffstats
path: root/include/net/irda/smc-ircc.h
blob: 2c5cbf4fdd37e11abc95731b8d688fd54704a459 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*********************************************************************
 *                
 * Filename:      smc.h
 * Version:       
 * Description:   
 * Status:        Experimental.
 * Author:        Thomas Davis (tadavis@jps.net)
 *
 *     Copyright (c) 1998, 1999 Thomas Davis (tadavis@jps.net>
 *     All Rights Reserved
 *      
 *     This program is free software; you can redistribute it and/or 
 *     modify it under the terms of the GNU General Public License as 
 *     published by the Free Software Foundation; either version 2 of 
 *     the License, or (at your option) any later version.
 *  
 *     I, Thomas Davis, admit no liability nor provide warranty for any
 *     of this software. This material is provided "AS-IS" and at no charge.
 *     
 * Definitions for the SMC IrCC controller.
 *
 ********************************************************************/

#ifndef SMC_IRCC_H
#define SMC_IRCC_H

#define UART_MASTER			0x07
#define UART_MASTER_POWERDOWN	1<<7
#define UART_MASTER_RESET		1<<6
#define UART_MASTER_INT_EN		1<<5
#define UART_MASTER_ERROR_RESET	1<<4

/* Register block 0 */

#define UART_IIR	0x01
#define UART_IER	0x02
#define UART_LSR	0x03
#define UART_LCR_A	0x04
#define UART_LCR_B	0x05
#define UART_BSR	0x06

#define UART_IIR_ACTIVE_FRAME	1<<7
#define UART_IIR_EOM 		1<<6
#define UART_IIR_RAW_MODE		1<<5
#define UART_IIR_FIFO		1<<4

#define UART_IER_ACTIVE_FRAME	1<<7
#define UART_IER_EOM 		1<<6
#define UART_IER_RAW_MODE		1<<5
#define UART_IER_FIFO		1<<4

#define UART_LSR_UNDERRUN		1<<7
#define UART_LSR_OVERRUN		1<<6
#define UART_LSR_FRAME_ERROR 	1<<5
#define UART_LSR_SIZE_ERROR		1<<4
#define UART_LSR_CRC_ERROR		1<<3
#define UART_LSR_FRAME_ABORT 	1<<2

#define UART_LCR_A_FIFO_RESET        1<<7
#define UART_LCR_A_FAST              1<<6
#define UART_LCR_A_GP_DATA           1<<5
#define UART_LCR_A_RAW_TX            1<<4
#define UART_LCR_A_RAW_RX            1<<3
#define UART_LCR_A_ABORT             1<<2
#define UART_LCR_A_DATA_DONE         1<<1

#define UART_LCR_B_SCE_DISABLED 	0x00<<6
#define UART_LCR_B_SCE_TRANSMIT 	0x01<<6
#define UART_LCR_B_SCE_RECEIVE		0x02<<6
#define UART_LCR_B_SCE_UNDEFINED	0x03<<6
#define UART_LCR_B_SIP_ENABLE		1<<5
#define UART_LCR_B_BRICK_WALL		1<<4

#define UART_BSR_NOT_EMPTY	1<<7
#define UART_BSR_FIFO_FULL	1<<6
#define UART_BSR_TIMEOUT	1<<5

/* Register block 1 */

#define UART_SCE_CFGA	0x00
#define UART_SCE_CFGB	0x01
#define UART_FIFO_THRESHOLD	0x02

#define UART_CFGA_AUX_IR		0x01<<7
#define UART_CFGA_HALF_DUPLEX	0x01<<2
#define UART_CFGA_TX_POLARITY	0x01<<1
#define UART_CFGA_RX_POLARITY	0x01

#define UART_CFGA_COM		0x00<<3
#define UART_CFGA_IRDA_SIR_A	0x01<<3
#define UART_CFGA_ASK_SIR		0x02<<3
#define UART_CFGA_IRDA_SIR_B	0x03<<3
#define UART_CFGA_IRDA_HDLC 	0x04<<3
#define UART_CFGA_IRDA_4PPM 	0x05<<3
#define UART_CFGA_CONSUMER		0x06<<3
#define UART_CFGA_RAW_IR		0x07<<3
#define UART_CFGA_OTHER		0x08<<3

#define UART_IR_HDLC			0x04
#define UART_IR_4PPM			0x01
#define UART_IR_CONSUMER		0x02

#define UART_CFGB_LOOPBACK		0x01<<5
#define UART_CFGB_LPBCK_TX_CRC	0x01<<4
#define UART_CFGB_NOWAIT		0x01<<3
#define UART_CFGB_STRING_MOVE	0x01<<2
#define UART_CFGB_DMA_BURST 	0x01<<1
#define UART_CFGB_DMA_ENABLE	0x01

#define UART_CFGB_COM		0x00<<6
#define UART_CFGB_IR		0x01<<6
#define UART_CFGB_AUX		0x02<<6
#define UART_CFGB_INACTIVE		0x03<<6

/* Register block 2 - Consumer IR - not used */

/* Register block 3 - Identification Registers! */

#define UART_ID_HIGH	0x00   /* 0x10 */
#define UART_ID_LOW	0x01   /* 0xB8 */
#define UART_CHIP_ID 	0x02   /* 0xF1 */
#define UART_VERSION	0x03   /* 0x01 */
#define UART_INTERFACE	0x04   /* low 4 = DMA, high 4 = IRQ */

/* Register block 4 - IrDA */
#define UART_CONTROL        0x00
#define UART_BOF_COUNT_LO      0x01
#define UART_BRICKWALL_CNT_LO 0x02
#define UART_BRICKWALL_TX_CNT_HI   0x03
#define UART_TX_SIZE_LO   0x04
#define UART_RX_SIZE_HI   0x05
#define UART_RX_SIZE_LO   0x06

#define UART_1152     0x01<<7
#define UART_CRC      0x01<<6

/* For storing entries in the status FIFO */
struct st_fifo_entry {
	int status;
	int len;
};

struct st_fifo {
	struct st_fifo_entry entries[10];
	int head;
	int tail;
	int len;
};

/* Private data for each instance */
struct ircc_cb {
	struct st_fifo st_fifo;

	int tx_buff_offsets[10]; /* Offsets between frames in tx_buff */
	int tx_len;          /* Number of frames in tx_buff */

	struct irda_device idev;
};

#endif