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