diff options
Diffstat (limited to 'include/asm-blackfin/mach-bf548/bfin_serial_5xx.h')
-rw-r--r-- | include/asm-blackfin/mach-bf548/bfin_serial_5xx.h | 84 |
1 files changed, 65 insertions, 19 deletions
diff --git a/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h index 8f5d9c4d8d5b..2f4afc90db11 100644 --- a/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h +++ b/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h | |||
@@ -1,34 +1,35 @@ | |||
1 | #include <linux/serial.h> | 1 | #include <linux/serial.h> |
2 | #include <asm/dma.h> | 2 | #include <asm/dma.h> |
3 | 3 | ||
4 | #define NR_PORTS 2 | 4 | #define NR_PORTS 4 |
5 | 5 | ||
6 | #define OFFSET_THR 0x00 /* Transmit Holding register */ | ||
7 | #define OFFSET_RBR 0x00 /* Receive Buffer register */ | ||
8 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | 6 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ |
9 | #define OFFSET_IER 0x04 /* Interrupt Enable Register */ | ||
10 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | 7 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ |
11 | #define OFFSET_IIR 0x08 /* Interrupt Identification Register */ | 8 | #define OFFSET_GCTL 0x08 /* Global Control Register */ |
12 | #define OFFSET_LCR 0x0C /* Line Control Register */ | 9 | #define OFFSET_LCR 0x0C /* Line Control Register */ |
13 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | 10 | #define OFFSET_MCR 0x10 /* Modem Control Register */ |
14 | #define OFFSET_LSR 0x14 /* Line Status Register */ | 11 | #define OFFSET_LSR 0x14 /* Line Status Register */ |
15 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | 12 | #define OFFSET_MSR 0x18 /* Modem Status Register */ |
16 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | 13 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ |
17 | #define OFFSET_GCTL 0x24 /* Global Control Register */ | 14 | #define OFFSET_IER_SET 0x20 /* Set Interrupt Enable Register */ |
15 | #define OFFSET_IER_CLEAR 0x24 /* Clear Interrupt Enable Register */ | ||
16 | #define OFFSET_THR 0x28 /* Transmit Holding register */ | ||
17 | #define OFFSET_RBR 0x2C /* Receive Buffer register */ | ||
18 | 18 | ||
19 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) | 19 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) |
20 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) | 20 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) |
21 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER)) | ||
22 | #define UART_GET_DLH(uart) bfin_read16(((uart)->port.membase + OFFSET_DLH)) | 21 | #define UART_GET_DLH(uart) bfin_read16(((uart)->port.membase + OFFSET_DLH)) |
23 | #define UART_GET_IIR(uart) bfin_read16(((uart)->port.membase + OFFSET_IIR)) | 22 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER_SET)) |
24 | #define UART_GET_LCR(uart) bfin_read16(((uart)->port.membase + OFFSET_LCR)) | 23 | #define UART_GET_LCR(uart) bfin_read16(((uart)->port.membase + OFFSET_LCR)) |
25 | #define UART_GET_LSR(uart) bfin_read16(((uart)->port.membase + OFFSET_LSR)) | 24 | #define UART_GET_LSR(uart) bfin_read16(((uart)->port.membase + OFFSET_LSR)) |
26 | #define UART_GET_GCTL(uart) bfin_read16(((uart)->port.membase + OFFSET_GCTL)) | 25 | #define UART_GET_GCTL(uart) bfin_read16(((uart)->port.membase + OFFSET_GCTL)) |
27 | 26 | ||
28 | #define UART_PUT_CHAR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_THR),v) | 27 | #define UART_PUT_CHAR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_THR),v) |
29 | #define UART_PUT_DLL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLL),v) | 28 | #define UART_PUT_DLL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLL),v) |
30 | #define UART_PUT_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER),v) | 29 | #define UART_SET_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_SET),v) |
30 | #define UART_CLEAR_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_CLEAR),v) | ||
31 | #define UART_PUT_DLH(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLH),v) | 31 | #define UART_PUT_DLH(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLH),v) |
32 | #define UART_PUT_LSR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LSR),v) | ||
32 | #define UART_PUT_LCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LCR),v) | 33 | #define UART_PUT_LCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LCR),v) |
33 | #define UART_PUT_GCTL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_GCTL),v) | 34 | #define UART_PUT_GCTL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_GCTL),v) |
34 | 35 | ||
@@ -112,9 +113,29 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
112 | CH_UART1_TX, | 113 | CH_UART1_TX, |
113 | CH_UART1_RX, | 114 | CH_UART1_RX, |
114 | #endif | 115 | #endif |
115 | #ifdef CONFIG_BFIN_UART1_CTSRTS | 116 | }, |
116 | CONFIG_UART1_CTS_PIN, | 117 | #endif |
117 | CONFIG_UART1_RTS_PIN, | 118 | #ifdef CONFIG_SERIAL_BFIN_UART2 |
119 | { | ||
120 | 0xFFC02100, | ||
121 | IRQ_UART2_RX, | ||
122 | #ifdef CONFIG_SERIAL_BFIN_DMA | ||
123 | CH_UART2_TX, | ||
124 | CH_UART2_RX, | ||
125 | #endif | ||
126 | #ifdef CONFIG_BFIN_UART2_CTSRTS | ||
127 | CONFIG_UART2_CTS_PIN, | ||
128 | CONFIG_UART2_RTS_PIN, | ||
129 | #endif | ||
130 | }, | ||
131 | #endif | ||
132 | #ifdef CONFIG_SERIAL_BFIN_UART3 | ||
133 | { | ||
134 | 0xFFC03100, | ||
135 | IRQ_UART3_RX, | ||
136 | #ifdef CONFIG_SERIAL_BFIN_DMA | ||
137 | CH_UART3_TX, | ||
138 | CH_UART3_RX, | ||
118 | #endif | 139 | #endif |
119 | }, | 140 | }, |
120 | #endif | 141 | #endif |
@@ -124,15 +145,40 @@ int nr_ports = ARRAY_SIZE(bfin_serial_resource); | |||
124 | 145 | ||
125 | static void bfin_serial_hw_init(struct bfin_serial_port *uart) | 146 | static void bfin_serial_hw_init(struct bfin_serial_port *uart) |
126 | { | 147 | { |
127 | unsigned short val; | 148 | #ifdef CONFIG_SERIAL_BFIN_UART0 |
128 | val = bfin_read16(BFIN_PORT_MUX); | 149 | /* Enable UART0 RX and TX on pin 7 & 8 of PORT E */ |
129 | val &= ~(PFDE | PFTE); | 150 | bfin_write_PORTE_FER(0x180 | bfin_read_PORTE_FER()); |
130 | bfin_write16(BFIN_PORT_MUX, val); | 151 | bfin_write_PORTE_MUX(0x3C000 | bfin_read_PORTE_MUX()); |
152 | #endif | ||
153 | |||
154 | #ifdef CONFIG_SERIAL_BFIN_UART1 | ||
155 | /* Enable UART1 RX and TX on pin 0 & 1 of PORT H */ | ||
156 | bfin_write_PORTH_FER(0x3 | bfin_read_PORTH_FER()); | ||
157 | bfin_write_PORTH_MUX(~0xF & bfin_read_PORTH_MUX()); | ||
158 | #ifdef CONFIG_BFIN_UART1_CTSRTS | ||
159 | /* Enable UART1 RTS and CTS on pin 9 & 10 of PORT E */ | ||
160 | bfin_write_PORTE_FER(0x600 | bfin_read_PORTE_FER()); | ||
161 | bfin_write_PORTE_MUX(~0x3C0000 & bfin_read_PORTE_MUX()); | ||
162 | #endif | ||
163 | #endif | ||
131 | 164 | ||
132 | val = bfin_read16(PORTF_FER); | 165 | #ifdef CONFIG_SERIAL_BFIN_UART2 |
133 | val |= 0xF; | 166 | /* Enable UART2 RX and TX on pin 4 & 5 of PORT B */ |
134 | bfin_write16(PORTF_FER, val); | 167 | bfin_write_PORTB_FER(0x30 | bfin_read_PORTB_FER()); |
168 | bfin_write_PORTB_MUX(~0xF00 & bfin_read_PORTB_MUX()); | ||
169 | #endif | ||
135 | 170 | ||
171 | #ifdef CONFIG_SERIAL_BFIN_UART3 | ||
172 | /* Enable UART3 RX and TX on pin 6 & 7 of PORT B */ | ||
173 | bfin_write_PORTB_FER(0xC0 | bfin_read_PORTB_FER()); | ||
174 | bfin_write_PORTB_MUX(~0xF000 | bfin_read_PORTB_MUX()); | ||
175 | #ifdef CONFIG_BFIN_UART3_CTSRTS | ||
176 | /* Enable UART3 RTS and CTS on pin 2 & 3 of PORT B */ | ||
177 | bfin_write_PORTB_FER(0xC | bfin_read_PORTB_FER()); | ||
178 | bfin_write_PORTB_MUX(~0xF0 | bfin_read_PORTB_MUX()); | ||
179 | #endif | ||
180 | #endif | ||
181 | SSYNC(); | ||
136 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS | 182 | #ifdef CONFIG_SERIAL_BFIN_CTSRTS |
137 | if (uart->cts_pin >= 0) { | 183 | if (uart->cts_pin >= 0) { |
138 | gpio_request(uart->cts_pin, NULL); | 184 | gpio_request(uart->cts_pin, NULL); |