xref: /rk3399_rockchip-uboot/drivers/serial/serial_pxa.c (revision 379be585eb2343d8814a5cee5fb3da930d846bee)
1*379be585SJean-Christophe PLAGNIOL-VILLARD /*
2*379be585SJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2002
3*379be585SJean-Christophe PLAGNIOL-VILLARD  * Wolfgang Denk, DENX Software Engineering, <wd@denx.de>
4*379be585SJean-Christophe PLAGNIOL-VILLARD  *
5*379be585SJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2002
6*379be585SJean-Christophe PLAGNIOL-VILLARD  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
7*379be585SJean-Christophe PLAGNIOL-VILLARD  * Marius Groeger <mgroeger@sysgo.de>
8*379be585SJean-Christophe PLAGNIOL-VILLARD  *
9*379be585SJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2002
10*379be585SJean-Christophe PLAGNIOL-VILLARD  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
11*379be585SJean-Christophe PLAGNIOL-VILLARD  * Alex Zuepke <azu@sysgo.de>
12*379be585SJean-Christophe PLAGNIOL-VILLARD  *
13*379be585SJean-Christophe PLAGNIOL-VILLARD  * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl)
14*379be585SJean-Christophe PLAGNIOL-VILLARD  *
15*379be585SJean-Christophe PLAGNIOL-VILLARD  * This program is free software; you can redistribute it and/or modify
16*379be585SJean-Christophe PLAGNIOL-VILLARD  * it under the terms of the GNU General Public License as published by
17*379be585SJean-Christophe PLAGNIOL-VILLARD  * the Free Software Foundation; either version 2 of the License, or
18*379be585SJean-Christophe PLAGNIOL-VILLARD  * (at your option) any later version.
19*379be585SJean-Christophe PLAGNIOL-VILLARD  *
20*379be585SJean-Christophe PLAGNIOL-VILLARD  * This program is distributed in the hope that it will be useful,
21*379be585SJean-Christophe PLAGNIOL-VILLARD  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22*379be585SJean-Christophe PLAGNIOL-VILLARD  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23*379be585SJean-Christophe PLAGNIOL-VILLARD  * GNU General Public License for more details.
24*379be585SJean-Christophe PLAGNIOL-VILLARD  *
25*379be585SJean-Christophe PLAGNIOL-VILLARD  * You should have received a copy of the GNU General Public License
26*379be585SJean-Christophe PLAGNIOL-VILLARD  * along with this program; if not, write to the Free Software
27*379be585SJean-Christophe PLAGNIOL-VILLARD  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28*379be585SJean-Christophe PLAGNIOL-VILLARD  *
29*379be585SJean-Christophe PLAGNIOL-VILLARD  */
30*379be585SJean-Christophe PLAGNIOL-VILLARD 
31*379be585SJean-Christophe PLAGNIOL-VILLARD #include <common.h>
32*379be585SJean-Christophe PLAGNIOL-VILLARD #include <watchdog.h>
33*379be585SJean-Christophe PLAGNIOL-VILLARD #include <serial.h>
34*379be585SJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/pxa-regs.h>
35*379be585SJean-Christophe PLAGNIOL-VILLARD 
36*379be585SJean-Christophe PLAGNIOL-VILLARD DECLARE_GLOBAL_DATA_PTR;
37*379be585SJean-Christophe PLAGNIOL-VILLARD 
38*379be585SJean-Christophe PLAGNIOL-VILLARD #define FFUART_INDEX	0
39*379be585SJean-Christophe PLAGNIOL-VILLARD #define BTUART_INDEX	1
40*379be585SJean-Christophe PLAGNIOL-VILLARD #define STUART_INDEX	2
41*379be585SJean-Christophe PLAGNIOL-VILLARD 
42*379be585SJean-Christophe PLAGNIOL-VILLARD #ifndef CONFIG_SERIAL_MULTI
43*379be585SJean-Christophe PLAGNIOL-VILLARD #if defined (CONFIG_FFUART)
44*379be585SJean-Christophe PLAGNIOL-VILLARD #define UART_INDEX	FFUART_INDEX
45*379be585SJean-Christophe PLAGNIOL-VILLARD #elif defined (CONFIG_BTUART)
46*379be585SJean-Christophe PLAGNIOL-VILLARD #define UART_INDEX	BTUART_INDEX
47*379be585SJean-Christophe PLAGNIOL-VILLARD #elif defined (CONFIG_STUART)
48*379be585SJean-Christophe PLAGNIOL-VILLARD #define UART_INDEX	STUART_INDEX
49*379be585SJean-Christophe PLAGNIOL-VILLARD #else
50*379be585SJean-Christophe PLAGNIOL-VILLARD #error "Bad: you didn't configure serial ..."
51*379be585SJean-Christophe PLAGNIOL-VILLARD #endif
52*379be585SJean-Christophe PLAGNIOL-VILLARD #endif
53*379be585SJean-Christophe PLAGNIOL-VILLARD 
54*379be585SJean-Christophe PLAGNIOL-VILLARD void pxa_setbrg_dev (unsigned int uart_index)
55*379be585SJean-Christophe PLAGNIOL-VILLARD {
56*379be585SJean-Christophe PLAGNIOL-VILLARD 	unsigned int quot = 0;
57*379be585SJean-Christophe PLAGNIOL-VILLARD 
58*379be585SJean-Christophe PLAGNIOL-VILLARD 	if (gd->baudrate == 1200)
59*379be585SJean-Christophe PLAGNIOL-VILLARD 		quot = 768;
60*379be585SJean-Christophe PLAGNIOL-VILLARD 	else if (gd->baudrate == 9600)
61*379be585SJean-Christophe PLAGNIOL-VILLARD 		quot = 96;
62*379be585SJean-Christophe PLAGNIOL-VILLARD 	else if (gd->baudrate == 19200)
63*379be585SJean-Christophe PLAGNIOL-VILLARD 		quot = 48;
64*379be585SJean-Christophe PLAGNIOL-VILLARD 	else if (gd->baudrate == 38400)
65*379be585SJean-Christophe PLAGNIOL-VILLARD 		quot = 24;
66*379be585SJean-Christophe PLAGNIOL-VILLARD 	else if (gd->baudrate == 57600)
67*379be585SJean-Christophe PLAGNIOL-VILLARD 		quot = 16;
68*379be585SJean-Christophe PLAGNIOL-VILLARD 	else if (gd->baudrate == 115200)
69*379be585SJean-Christophe PLAGNIOL-VILLARD 		quot = 8;
70*379be585SJean-Christophe PLAGNIOL-VILLARD 	else
71*379be585SJean-Christophe PLAGNIOL-VILLARD 		hang ();
72*379be585SJean-Christophe PLAGNIOL-VILLARD 
73*379be585SJean-Christophe PLAGNIOL-VILLARD 	switch (uart_index) {
74*379be585SJean-Christophe PLAGNIOL-VILLARD 		case FFUART_INDEX:
75*379be585SJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_CPU_MONAHANS
76*379be585SJean-Christophe PLAGNIOL-VILLARD 			CKENA |= CKENA_22_FFUART;
77*379be585SJean-Christophe PLAGNIOL-VILLARD #else
78*379be585SJean-Christophe PLAGNIOL-VILLARD 			CKEN |= CKEN6_FFUART;
79*379be585SJean-Christophe PLAGNIOL-VILLARD #endif /* CONFIG_CPU_MONAHANS */
80*379be585SJean-Christophe PLAGNIOL-VILLARD 
81*379be585SJean-Christophe PLAGNIOL-VILLARD 			FFIER = 0;	/* Disable for now */
82*379be585SJean-Christophe PLAGNIOL-VILLARD 			FFFCR = 0;	/* No fifos enabled */
83*379be585SJean-Christophe PLAGNIOL-VILLARD 
84*379be585SJean-Christophe PLAGNIOL-VILLARD 			/* set baud rate */
85*379be585SJean-Christophe PLAGNIOL-VILLARD 			FFLCR = LCR_WLS0 | LCR_WLS1 | LCR_DLAB;
86*379be585SJean-Christophe PLAGNIOL-VILLARD 			FFDLL = quot & 0xff;
87*379be585SJean-Christophe PLAGNIOL-VILLARD 			FFDLH = quot >> 8;
88*379be585SJean-Christophe PLAGNIOL-VILLARD 			FFLCR = LCR_WLS0 | LCR_WLS1;
89*379be585SJean-Christophe PLAGNIOL-VILLARD 
90*379be585SJean-Christophe PLAGNIOL-VILLARD 			FFIER = IER_UUE;	/* Enable FFUART */
91*379be585SJean-Christophe PLAGNIOL-VILLARD 		break;
92*379be585SJean-Christophe PLAGNIOL-VILLARD 
93*379be585SJean-Christophe PLAGNIOL-VILLARD 		case BTUART_INDEX:
94*379be585SJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_CPU_MONAHANS
95*379be585SJean-Christophe PLAGNIOL-VILLARD 			CKENA |= CKENA_21_BTUART;
96*379be585SJean-Christophe PLAGNIOL-VILLARD #else
97*379be585SJean-Christophe PLAGNIOL-VILLARD 			CKEN |= CKEN7_BTUART;
98*379be585SJean-Christophe PLAGNIOL-VILLARD #endif /*  CONFIG_CPU_MONAHANS */
99*379be585SJean-Christophe PLAGNIOL-VILLARD 
100*379be585SJean-Christophe PLAGNIOL-VILLARD 			BTIER = 0;
101*379be585SJean-Christophe PLAGNIOL-VILLARD 			BTFCR = 0;
102*379be585SJean-Christophe PLAGNIOL-VILLARD 
103*379be585SJean-Christophe PLAGNIOL-VILLARD 			/* set baud rate */
104*379be585SJean-Christophe PLAGNIOL-VILLARD 			BTLCR = LCR_DLAB;
105*379be585SJean-Christophe PLAGNIOL-VILLARD 			BTDLL = quot & 0xff;
106*379be585SJean-Christophe PLAGNIOL-VILLARD 			BTDLH = quot >> 8;
107*379be585SJean-Christophe PLAGNIOL-VILLARD 			BTLCR = LCR_WLS0 | LCR_WLS1;
108*379be585SJean-Christophe PLAGNIOL-VILLARD 
109*379be585SJean-Christophe PLAGNIOL-VILLARD 			BTIER = IER_UUE;	/* Enable BFUART */
110*379be585SJean-Christophe PLAGNIOL-VILLARD 
111*379be585SJean-Christophe PLAGNIOL-VILLARD 		break;
112*379be585SJean-Christophe PLAGNIOL-VILLARD 
113*379be585SJean-Christophe PLAGNIOL-VILLARD 		case STUART_INDEX:
114*379be585SJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_CPU_MONAHANS
115*379be585SJean-Christophe PLAGNIOL-VILLARD 			CKENA |= CKENA_23_STUART;
116*379be585SJean-Christophe PLAGNIOL-VILLARD #else
117*379be585SJean-Christophe PLAGNIOL-VILLARD 			CKEN |= CKEN5_STUART;
118*379be585SJean-Christophe PLAGNIOL-VILLARD #endif /* CONFIG_CPU_MONAHANS */
119*379be585SJean-Christophe PLAGNIOL-VILLARD 
120*379be585SJean-Christophe PLAGNIOL-VILLARD 			STIER = 0;
121*379be585SJean-Christophe PLAGNIOL-VILLARD 			STFCR = 0;
122*379be585SJean-Christophe PLAGNIOL-VILLARD 
123*379be585SJean-Christophe PLAGNIOL-VILLARD 			/* set baud rate */
124*379be585SJean-Christophe PLAGNIOL-VILLARD 			STLCR = LCR_DLAB;
125*379be585SJean-Christophe PLAGNIOL-VILLARD 			STDLL = quot & 0xff;
126*379be585SJean-Christophe PLAGNIOL-VILLARD 			STDLH = quot >> 8;
127*379be585SJean-Christophe PLAGNIOL-VILLARD 			STLCR = LCR_WLS0 | LCR_WLS1;
128*379be585SJean-Christophe PLAGNIOL-VILLARD 
129*379be585SJean-Christophe PLAGNIOL-VILLARD 			STIER = IER_UUE;			/* Enable STUART */
130*379be585SJean-Christophe PLAGNIOL-VILLARD 			break;
131*379be585SJean-Christophe PLAGNIOL-VILLARD 
132*379be585SJean-Christophe PLAGNIOL-VILLARD 		default:
133*379be585SJean-Christophe PLAGNIOL-VILLARD 			hang();
134*379be585SJean-Christophe PLAGNIOL-VILLARD 	}
135*379be585SJean-Christophe PLAGNIOL-VILLARD }
136*379be585SJean-Christophe PLAGNIOL-VILLARD 
137*379be585SJean-Christophe PLAGNIOL-VILLARD 
138*379be585SJean-Christophe PLAGNIOL-VILLARD /*
139*379be585SJean-Christophe PLAGNIOL-VILLARD  * Initialise the serial port with the given baudrate. The settings
140*379be585SJean-Christophe PLAGNIOL-VILLARD  * are always 8 data bits, no parity, 1 stop bit, no start bits.
141*379be585SJean-Christophe PLAGNIOL-VILLARD  *
142*379be585SJean-Christophe PLAGNIOL-VILLARD  */
143*379be585SJean-Christophe PLAGNIOL-VILLARD int pxa_init_dev (unsigned int uart_index)
144*379be585SJean-Christophe PLAGNIOL-VILLARD {
145*379be585SJean-Christophe PLAGNIOL-VILLARD 	pxa_setbrg_dev (uart_index);
146*379be585SJean-Christophe PLAGNIOL-VILLARD 
147*379be585SJean-Christophe PLAGNIOL-VILLARD 	return (0);
148*379be585SJean-Christophe PLAGNIOL-VILLARD }
149*379be585SJean-Christophe PLAGNIOL-VILLARD 
150*379be585SJean-Christophe PLAGNIOL-VILLARD 
151*379be585SJean-Christophe PLAGNIOL-VILLARD /*
152*379be585SJean-Christophe PLAGNIOL-VILLARD  * Output a single byte to the serial port.
153*379be585SJean-Christophe PLAGNIOL-VILLARD  */
154*379be585SJean-Christophe PLAGNIOL-VILLARD void pxa_putc_dev (unsigned int uart_index,const char c)
155*379be585SJean-Christophe PLAGNIOL-VILLARD {
156*379be585SJean-Christophe PLAGNIOL-VILLARD 	switch (uart_index) {
157*379be585SJean-Christophe PLAGNIOL-VILLARD 		case FFUART_INDEX:
158*379be585SJean-Christophe PLAGNIOL-VILLARD 		/* wait for room in the tx FIFO on FFUART */
159*379be585SJean-Christophe PLAGNIOL-VILLARD 			while ((FFLSR & LSR_TEMT) == 0)
160*379be585SJean-Christophe PLAGNIOL-VILLARD 				WATCHDOG_RESET ();	/* Reset HW Watchdog, if needed */
161*379be585SJean-Christophe PLAGNIOL-VILLARD 			FFTHR = c;
162*379be585SJean-Christophe PLAGNIOL-VILLARD 			break;
163*379be585SJean-Christophe PLAGNIOL-VILLARD 
164*379be585SJean-Christophe PLAGNIOL-VILLARD 		case BTUART_INDEX:
165*379be585SJean-Christophe PLAGNIOL-VILLARD 			while ((BTLSR & LSR_TEMT ) == 0 )
166*379be585SJean-Christophe PLAGNIOL-VILLARD 				WATCHDOG_RESET ();	/* Reset HW Watchdog, if needed */
167*379be585SJean-Christophe PLAGNIOL-VILLARD 			BTTHR = c;
168*379be585SJean-Christophe PLAGNIOL-VILLARD 			break;
169*379be585SJean-Christophe PLAGNIOL-VILLARD 
170*379be585SJean-Christophe PLAGNIOL-VILLARD 		case STUART_INDEX:
171*379be585SJean-Christophe PLAGNIOL-VILLARD 			while ((STLSR & LSR_TEMT ) == 0 )
172*379be585SJean-Christophe PLAGNIOL-VILLARD 				WATCHDOG_RESET ();	/* Reset HW Watchdog, if needed */
173*379be585SJean-Christophe PLAGNIOL-VILLARD 			STTHR = c;
174*379be585SJean-Christophe PLAGNIOL-VILLARD 			break;
175*379be585SJean-Christophe PLAGNIOL-VILLARD 	}
176*379be585SJean-Christophe PLAGNIOL-VILLARD 
177*379be585SJean-Christophe PLAGNIOL-VILLARD 	/* If \n, also do \r */
178*379be585SJean-Christophe PLAGNIOL-VILLARD 	if (c == '\n')
179*379be585SJean-Christophe PLAGNIOL-VILLARD 		pxa_putc_dev (uart_index,'\r');
180*379be585SJean-Christophe PLAGNIOL-VILLARD }
181*379be585SJean-Christophe PLAGNIOL-VILLARD 
182*379be585SJean-Christophe PLAGNIOL-VILLARD /*
183*379be585SJean-Christophe PLAGNIOL-VILLARD  * Read a single byte from the serial port. Returns 1 on success, 0
184*379be585SJean-Christophe PLAGNIOL-VILLARD  * otherwise. When the function is succesfull, the character read is
185*379be585SJean-Christophe PLAGNIOL-VILLARD  * written into its argument c.
186*379be585SJean-Christophe PLAGNIOL-VILLARD  */
187*379be585SJean-Christophe PLAGNIOL-VILLARD int pxa_tstc_dev (unsigned int uart_index)
188*379be585SJean-Christophe PLAGNIOL-VILLARD {
189*379be585SJean-Christophe PLAGNIOL-VILLARD 	switch (uart_index) {
190*379be585SJean-Christophe PLAGNIOL-VILLARD 		case FFUART_INDEX:
191*379be585SJean-Christophe PLAGNIOL-VILLARD 			return FFLSR & LSR_DR;
192*379be585SJean-Christophe PLAGNIOL-VILLARD 		case BTUART_INDEX:
193*379be585SJean-Christophe PLAGNIOL-VILLARD 			return BTLSR & LSR_DR;
194*379be585SJean-Christophe PLAGNIOL-VILLARD 		case STUART_INDEX:
195*379be585SJean-Christophe PLAGNIOL-VILLARD 			return STLSR & LSR_DR;
196*379be585SJean-Christophe PLAGNIOL-VILLARD 	}
197*379be585SJean-Christophe PLAGNIOL-VILLARD 	return -1;
198*379be585SJean-Christophe PLAGNIOL-VILLARD }
199*379be585SJean-Christophe PLAGNIOL-VILLARD 
200*379be585SJean-Christophe PLAGNIOL-VILLARD /*
201*379be585SJean-Christophe PLAGNIOL-VILLARD  * Read a single byte from the serial port. Returns 1 on success, 0
202*379be585SJean-Christophe PLAGNIOL-VILLARD  * otherwise. When the function is succesfull, the character read is
203*379be585SJean-Christophe PLAGNIOL-VILLARD  * written into its argument c.
204*379be585SJean-Christophe PLAGNIOL-VILLARD  */
205*379be585SJean-Christophe PLAGNIOL-VILLARD int pxa_getc_dev (unsigned int uart_index)
206*379be585SJean-Christophe PLAGNIOL-VILLARD {
207*379be585SJean-Christophe PLAGNIOL-VILLARD 	switch (uart_index) {
208*379be585SJean-Christophe PLAGNIOL-VILLARD 		case FFUART_INDEX:
209*379be585SJean-Christophe PLAGNIOL-VILLARD 			while (!(FFLSR & LSR_DR))
210*379be585SJean-Christophe PLAGNIOL-VILLARD 			WATCHDOG_RESET ();	/* Reset HW Watchdog, if needed */
211*379be585SJean-Christophe PLAGNIOL-VILLARD 			return (char) FFRBR & 0xff;
212*379be585SJean-Christophe PLAGNIOL-VILLARD 
213*379be585SJean-Christophe PLAGNIOL-VILLARD 		case BTUART_INDEX:
214*379be585SJean-Christophe PLAGNIOL-VILLARD 			while (!(BTLSR & LSR_DR))
215*379be585SJean-Christophe PLAGNIOL-VILLARD 			WATCHDOG_RESET ();	/* Reset HW Watchdog, if needed */
216*379be585SJean-Christophe PLAGNIOL-VILLARD 			return (char) BTRBR & 0xff;
217*379be585SJean-Christophe PLAGNIOL-VILLARD 		case STUART_INDEX:
218*379be585SJean-Christophe PLAGNIOL-VILLARD 			while (!(STLSR & LSR_DR))
219*379be585SJean-Christophe PLAGNIOL-VILLARD 			WATCHDOG_RESET ();	/* Reset HW Watchdog, if needed */
220*379be585SJean-Christophe PLAGNIOL-VILLARD 			return (char) STRBR & 0xff;
221*379be585SJean-Christophe PLAGNIOL-VILLARD 	}
222*379be585SJean-Christophe PLAGNIOL-VILLARD 	return -1;
223*379be585SJean-Christophe PLAGNIOL-VILLARD }
224*379be585SJean-Christophe PLAGNIOL-VILLARD 
225*379be585SJean-Christophe PLAGNIOL-VILLARD void
226*379be585SJean-Christophe PLAGNIOL-VILLARD pxa_puts_dev (unsigned int uart_index,const char *s)
227*379be585SJean-Christophe PLAGNIOL-VILLARD {
228*379be585SJean-Christophe PLAGNIOL-VILLARD 	while (*s) {
229*379be585SJean-Christophe PLAGNIOL-VILLARD 		pxa_putc_dev (uart_index,*s++);
230*379be585SJean-Christophe PLAGNIOL-VILLARD 	}
231*379be585SJean-Christophe PLAGNIOL-VILLARD }
232*379be585SJean-Christophe PLAGNIOL-VILLARD 
233*379be585SJean-Christophe PLAGNIOL-VILLARD #if defined (CONFIG_FFUART)
234*379be585SJean-Christophe PLAGNIOL-VILLARD static int ffuart_init(void)
235*379be585SJean-Christophe PLAGNIOL-VILLARD {
236*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_init_dev(FFUART_INDEX);
237*379be585SJean-Christophe PLAGNIOL-VILLARD }
238*379be585SJean-Christophe PLAGNIOL-VILLARD 
239*379be585SJean-Christophe PLAGNIOL-VILLARD static void ffuart_setbrg(void)
240*379be585SJean-Christophe PLAGNIOL-VILLARD {
241*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_setbrg_dev(FFUART_INDEX);
242*379be585SJean-Christophe PLAGNIOL-VILLARD }
243*379be585SJean-Christophe PLAGNIOL-VILLARD 
244*379be585SJean-Christophe PLAGNIOL-VILLARD static void ffuart_putc(const char c)
245*379be585SJean-Christophe PLAGNIOL-VILLARD {
246*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_putc_dev(FFUART_INDEX,c);
247*379be585SJean-Christophe PLAGNIOL-VILLARD }
248*379be585SJean-Christophe PLAGNIOL-VILLARD 
249*379be585SJean-Christophe PLAGNIOL-VILLARD static void ffuart_puts(const char *s)
250*379be585SJean-Christophe PLAGNIOL-VILLARD {
251*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_puts_dev(FFUART_INDEX,s);
252*379be585SJean-Christophe PLAGNIOL-VILLARD }
253*379be585SJean-Christophe PLAGNIOL-VILLARD 
254*379be585SJean-Christophe PLAGNIOL-VILLARD static int ffuart_getc(void)
255*379be585SJean-Christophe PLAGNIOL-VILLARD {
256*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_getc_dev(FFUART_INDEX);
257*379be585SJean-Christophe PLAGNIOL-VILLARD }
258*379be585SJean-Christophe PLAGNIOL-VILLARD 
259*379be585SJean-Christophe PLAGNIOL-VILLARD static int ffuart_tstc(void)
260*379be585SJean-Christophe PLAGNIOL-VILLARD {
261*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_tstc_dev(FFUART_INDEX);
262*379be585SJean-Christophe PLAGNIOL-VILLARD }
263*379be585SJean-Christophe PLAGNIOL-VILLARD 
264*379be585SJean-Christophe PLAGNIOL-VILLARD struct serial_device serial_ffuart_device =
265*379be585SJean-Christophe PLAGNIOL-VILLARD {
266*379be585SJean-Christophe PLAGNIOL-VILLARD 	"serial_ffuart",
267*379be585SJean-Christophe PLAGNIOL-VILLARD 	"PXA",
268*379be585SJean-Christophe PLAGNIOL-VILLARD 	ffuart_init,
269*379be585SJean-Christophe PLAGNIOL-VILLARD 	ffuart_setbrg,
270*379be585SJean-Christophe PLAGNIOL-VILLARD 	ffuart_getc,
271*379be585SJean-Christophe PLAGNIOL-VILLARD 	ffuart_tstc,
272*379be585SJean-Christophe PLAGNIOL-VILLARD 	ffuart_putc,
273*379be585SJean-Christophe PLAGNIOL-VILLARD 	ffuart_puts,
274*379be585SJean-Christophe PLAGNIOL-VILLARD };
275*379be585SJean-Christophe PLAGNIOL-VILLARD #endif
276*379be585SJean-Christophe PLAGNIOL-VILLARD 
277*379be585SJean-Christophe PLAGNIOL-VILLARD #if defined (CONFIG_BTUART)
278*379be585SJean-Christophe PLAGNIOL-VILLARD static int btuart_init(void)
279*379be585SJean-Christophe PLAGNIOL-VILLARD {
280*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_init_dev(BTUART_INDEX);
281*379be585SJean-Christophe PLAGNIOL-VILLARD }
282*379be585SJean-Christophe PLAGNIOL-VILLARD 
283*379be585SJean-Christophe PLAGNIOL-VILLARD static void btuart_setbrg(void)
284*379be585SJean-Christophe PLAGNIOL-VILLARD {
285*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_setbrg_dev(BTUART_INDEX);
286*379be585SJean-Christophe PLAGNIOL-VILLARD }
287*379be585SJean-Christophe PLAGNIOL-VILLARD 
288*379be585SJean-Christophe PLAGNIOL-VILLARD static void btuart_putc(const char c)
289*379be585SJean-Christophe PLAGNIOL-VILLARD {
290*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_putc_dev(BTUART_INDEX,c);
291*379be585SJean-Christophe PLAGNIOL-VILLARD }
292*379be585SJean-Christophe PLAGNIOL-VILLARD 
293*379be585SJean-Christophe PLAGNIOL-VILLARD static void btuart_puts(const char *s)
294*379be585SJean-Christophe PLAGNIOL-VILLARD {
295*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_puts_dev(BTUART_INDEX,s);
296*379be585SJean-Christophe PLAGNIOL-VILLARD }
297*379be585SJean-Christophe PLAGNIOL-VILLARD 
298*379be585SJean-Christophe PLAGNIOL-VILLARD static int btuart_getc(void)
299*379be585SJean-Christophe PLAGNIOL-VILLARD {
300*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_getc_dev(BTUART_INDEX);
301*379be585SJean-Christophe PLAGNIOL-VILLARD }
302*379be585SJean-Christophe PLAGNIOL-VILLARD 
303*379be585SJean-Christophe PLAGNIOL-VILLARD static int btuart_tstc(void)
304*379be585SJean-Christophe PLAGNIOL-VILLARD {
305*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_tstc_dev(BTUART_INDEX);
306*379be585SJean-Christophe PLAGNIOL-VILLARD }
307*379be585SJean-Christophe PLAGNIOL-VILLARD 
308*379be585SJean-Christophe PLAGNIOL-VILLARD struct serial_device serial_btuart_device =
309*379be585SJean-Christophe PLAGNIOL-VILLARD {
310*379be585SJean-Christophe PLAGNIOL-VILLARD 	"serial_btuart",
311*379be585SJean-Christophe PLAGNIOL-VILLARD 	"PXA",
312*379be585SJean-Christophe PLAGNIOL-VILLARD 	btuart_init,
313*379be585SJean-Christophe PLAGNIOL-VILLARD 	btuart_setbrg,
314*379be585SJean-Christophe PLAGNIOL-VILLARD 	btuart_getc,
315*379be585SJean-Christophe PLAGNIOL-VILLARD 	btuart_tstc,
316*379be585SJean-Christophe PLAGNIOL-VILLARD 	btuart_putc,
317*379be585SJean-Christophe PLAGNIOL-VILLARD 	btuart_puts,
318*379be585SJean-Christophe PLAGNIOL-VILLARD };
319*379be585SJean-Christophe PLAGNIOL-VILLARD #endif
320*379be585SJean-Christophe PLAGNIOL-VILLARD 
321*379be585SJean-Christophe PLAGNIOL-VILLARD #if defined (CONFIG_STUART)
322*379be585SJean-Christophe PLAGNIOL-VILLARD static int stuart_init(void)
323*379be585SJean-Christophe PLAGNIOL-VILLARD {
324*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_init_dev(STUART_INDEX);
325*379be585SJean-Christophe PLAGNIOL-VILLARD }
326*379be585SJean-Christophe PLAGNIOL-VILLARD 
327*379be585SJean-Christophe PLAGNIOL-VILLARD static void stuart_setbrg(void)
328*379be585SJean-Christophe PLAGNIOL-VILLARD {
329*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_setbrg_dev(STUART_INDEX);
330*379be585SJean-Christophe PLAGNIOL-VILLARD }
331*379be585SJean-Christophe PLAGNIOL-VILLARD 
332*379be585SJean-Christophe PLAGNIOL-VILLARD static void stuart_putc(const char c)
333*379be585SJean-Christophe PLAGNIOL-VILLARD {
334*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_putc_dev(STUART_INDEX,c);
335*379be585SJean-Christophe PLAGNIOL-VILLARD }
336*379be585SJean-Christophe PLAGNIOL-VILLARD 
337*379be585SJean-Christophe PLAGNIOL-VILLARD static void stuart_puts(const char *s)
338*379be585SJean-Christophe PLAGNIOL-VILLARD {
339*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_puts_dev(STUART_INDEX,s);
340*379be585SJean-Christophe PLAGNIOL-VILLARD }
341*379be585SJean-Christophe PLAGNIOL-VILLARD 
342*379be585SJean-Christophe PLAGNIOL-VILLARD static int stuart_getc(void)
343*379be585SJean-Christophe PLAGNIOL-VILLARD {
344*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_getc_dev(STUART_INDEX);
345*379be585SJean-Christophe PLAGNIOL-VILLARD }
346*379be585SJean-Christophe PLAGNIOL-VILLARD 
347*379be585SJean-Christophe PLAGNIOL-VILLARD static int stuart_tstc(void)
348*379be585SJean-Christophe PLAGNIOL-VILLARD {
349*379be585SJean-Christophe PLAGNIOL-VILLARD 	return pxa_tstc_dev(STUART_INDEX);
350*379be585SJean-Christophe PLAGNIOL-VILLARD }
351*379be585SJean-Christophe PLAGNIOL-VILLARD 
352*379be585SJean-Christophe PLAGNIOL-VILLARD struct serial_device serial_stuart_device =
353*379be585SJean-Christophe PLAGNIOL-VILLARD {
354*379be585SJean-Christophe PLAGNIOL-VILLARD 	"serial_stuart",
355*379be585SJean-Christophe PLAGNIOL-VILLARD 	"PXA",
356*379be585SJean-Christophe PLAGNIOL-VILLARD 	stuart_init,
357*379be585SJean-Christophe PLAGNIOL-VILLARD 	stuart_setbrg,
358*379be585SJean-Christophe PLAGNIOL-VILLARD 	stuart_getc,
359*379be585SJean-Christophe PLAGNIOL-VILLARD 	stuart_tstc,
360*379be585SJean-Christophe PLAGNIOL-VILLARD 	stuart_putc,
361*379be585SJean-Christophe PLAGNIOL-VILLARD 	stuart_puts,
362*379be585SJean-Christophe PLAGNIOL-VILLARD };
363*379be585SJean-Christophe PLAGNIOL-VILLARD #endif
364*379be585SJean-Christophe PLAGNIOL-VILLARD 
365*379be585SJean-Christophe PLAGNIOL-VILLARD 
366*379be585SJean-Christophe PLAGNIOL-VILLARD #ifndef CONFIG_SERIAL_MULTI
367*379be585SJean-Christophe PLAGNIOL-VILLARD inline int serial_init(void) {
368*379be585SJean-Christophe PLAGNIOL-VILLARD 	return (pxa_init_dev(UART_INDEX));
369*379be585SJean-Christophe PLAGNIOL-VILLARD }
370*379be585SJean-Christophe PLAGNIOL-VILLARD void serial_setbrg(void) {
371*379be585SJean-Christophe PLAGNIOL-VILLARD 	pxa_setbrg_dev(UART_INDEX);
372*379be585SJean-Christophe PLAGNIOL-VILLARD }
373*379be585SJean-Christophe PLAGNIOL-VILLARD int serial_getc(void) {
374*379be585SJean-Christophe PLAGNIOL-VILLARD 	return(pxa_getc_dev(UART_INDEX));
375*379be585SJean-Christophe PLAGNIOL-VILLARD }
376*379be585SJean-Christophe PLAGNIOL-VILLARD int serial_tstc(void) {
377*379be585SJean-Christophe PLAGNIOL-VILLARD 	return(pxa_tstc_dev(UART_INDEX));
378*379be585SJean-Christophe PLAGNIOL-VILLARD }
379*379be585SJean-Christophe PLAGNIOL-VILLARD void serial_putc(const char c) {
380*379be585SJean-Christophe PLAGNIOL-VILLARD 	pxa_putc_dev(UART_INDEX,c);
381*379be585SJean-Christophe PLAGNIOL-VILLARD }
382*379be585SJean-Christophe PLAGNIOL-VILLARD void serial_puts(const char *s) {
383*379be585SJean-Christophe PLAGNIOL-VILLARD 	pxa_puts_dev(UART_INDEX,s);
384*379be585SJean-Christophe PLAGNIOL-VILLARD }
385*379be585SJean-Christophe PLAGNIOL-VILLARD #endif	/* CONFIG_SERIAL_MULTI */
386