1*19b8fa0bSMarek Vasut /* 2*19b8fa0bSMarek Vasut * (C) Copyright 2000 3*19b8fa0bSMarek Vasut * Rob Taylor, Flying Pig Systems. robt@flyingpig.com. 4*19b8fa0bSMarek Vasut * 5*19b8fa0bSMarek Vasut * See file CREDITS for list of people who contributed to this 6*19b8fa0bSMarek Vasut * project. 7*19b8fa0bSMarek Vasut * 8*19b8fa0bSMarek Vasut * This program is free software; you can redistribute it and/or 9*19b8fa0bSMarek Vasut * modify it under the terms of the GNU General Public License as 10*19b8fa0bSMarek Vasut * published by the Free Software Foundation; either version 2 of 11*19b8fa0bSMarek Vasut * the License, or (at your option) any later version. 12*19b8fa0bSMarek Vasut * 13*19b8fa0bSMarek Vasut * This program is distributed in the hope that it will be useful, 14*19b8fa0bSMarek Vasut * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*19b8fa0bSMarek Vasut * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*19b8fa0bSMarek Vasut * GNU General Public License for more details. 17*19b8fa0bSMarek Vasut * 18*19b8fa0bSMarek Vasut * You should have received a copy of the GNU General Public License 19*19b8fa0bSMarek Vasut * along with this program; if not, write to the Free Software 20*19b8fa0bSMarek Vasut * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*19b8fa0bSMarek Vasut * MA 02111-1307 USA 22*19b8fa0bSMarek Vasut */ 23*19b8fa0bSMarek Vasut 24*19b8fa0bSMarek Vasut #include <common.h> 25*19b8fa0bSMarek Vasut #include <linux/compiler.h> 26*19b8fa0bSMarek Vasut 27*19b8fa0bSMarek Vasut #include <ns16550.h> 28*19b8fa0bSMarek Vasut #ifdef CONFIG_NS87308 29*19b8fa0bSMarek Vasut #include <ns87308.h> 30*19b8fa0bSMarek Vasut #endif 31*19b8fa0bSMarek Vasut 32*19b8fa0bSMarek Vasut #if defined (CONFIG_SERIAL_MULTI) 33*19b8fa0bSMarek Vasut #include <serial.h> 34*19b8fa0bSMarek Vasut #endif 35*19b8fa0bSMarek Vasut 36*19b8fa0bSMarek Vasut DECLARE_GLOBAL_DATA_PTR; 37*19b8fa0bSMarek Vasut 38*19b8fa0bSMarek Vasut #if !defined(CONFIG_CONS_INDEX) 39*19b8fa0bSMarek Vasut #if defined (CONFIG_SERIAL_MULTI) 40*19b8fa0bSMarek Vasut /* with CONFIG_SERIAL_MULTI we might have no console 41*19b8fa0bSMarek Vasut * on these devices 42*19b8fa0bSMarek Vasut */ 43*19b8fa0bSMarek Vasut #else 44*19b8fa0bSMarek Vasut #error "No console index specified." 45*19b8fa0bSMarek Vasut #endif /* CONFIG_SERIAL_MULTI */ 46*19b8fa0bSMarek Vasut #elif (CONFIG_CONS_INDEX < 1) || (CONFIG_CONS_INDEX > 4) 47*19b8fa0bSMarek Vasut #error "Invalid console index value." 48*19b8fa0bSMarek Vasut #endif 49*19b8fa0bSMarek Vasut 50*19b8fa0bSMarek Vasut #if CONFIG_CONS_INDEX == 1 && !defined(CONFIG_SYS_NS16550_COM1) 51*19b8fa0bSMarek Vasut #error "Console port 1 defined but not configured." 52*19b8fa0bSMarek Vasut #elif CONFIG_CONS_INDEX == 2 && !defined(CONFIG_SYS_NS16550_COM2) 53*19b8fa0bSMarek Vasut #error "Console port 2 defined but not configured." 54*19b8fa0bSMarek Vasut #elif CONFIG_CONS_INDEX == 3 && !defined(CONFIG_SYS_NS16550_COM3) 55*19b8fa0bSMarek Vasut #error "Console port 3 defined but not configured." 56*19b8fa0bSMarek Vasut #elif CONFIG_CONS_INDEX == 4 && !defined(CONFIG_SYS_NS16550_COM4) 57*19b8fa0bSMarek Vasut #error "Console port 4 defined but not configured." 58*19b8fa0bSMarek Vasut #endif 59*19b8fa0bSMarek Vasut 60*19b8fa0bSMarek Vasut /* Note: The port number specified in the functions is 1 based. 61*19b8fa0bSMarek Vasut * the array is 0 based. 62*19b8fa0bSMarek Vasut */ 63*19b8fa0bSMarek Vasut static NS16550_t serial_ports[4] = { 64*19b8fa0bSMarek Vasut #ifdef CONFIG_SYS_NS16550_COM1 65*19b8fa0bSMarek Vasut (NS16550_t)CONFIG_SYS_NS16550_COM1, 66*19b8fa0bSMarek Vasut #else 67*19b8fa0bSMarek Vasut NULL, 68*19b8fa0bSMarek Vasut #endif 69*19b8fa0bSMarek Vasut #ifdef CONFIG_SYS_NS16550_COM2 70*19b8fa0bSMarek Vasut (NS16550_t)CONFIG_SYS_NS16550_COM2, 71*19b8fa0bSMarek Vasut #else 72*19b8fa0bSMarek Vasut NULL, 73*19b8fa0bSMarek Vasut #endif 74*19b8fa0bSMarek Vasut #ifdef CONFIG_SYS_NS16550_COM3 75*19b8fa0bSMarek Vasut (NS16550_t)CONFIG_SYS_NS16550_COM3, 76*19b8fa0bSMarek Vasut #else 77*19b8fa0bSMarek Vasut NULL, 78*19b8fa0bSMarek Vasut #endif 79*19b8fa0bSMarek Vasut #ifdef CONFIG_SYS_NS16550_COM4 80*19b8fa0bSMarek Vasut (NS16550_t)CONFIG_SYS_NS16550_COM4 81*19b8fa0bSMarek Vasut #else 82*19b8fa0bSMarek Vasut NULL 83*19b8fa0bSMarek Vasut #endif 84*19b8fa0bSMarek Vasut }; 85*19b8fa0bSMarek Vasut 86*19b8fa0bSMarek Vasut #define PORT serial_ports[port-1] 87*19b8fa0bSMarek Vasut 88*19b8fa0bSMarek Vasut #if defined(CONFIG_SERIAL_MULTI) 89*19b8fa0bSMarek Vasut 90*19b8fa0bSMarek Vasut /* Multi serial device functions */ 91*19b8fa0bSMarek Vasut #define DECLARE_ESERIAL_FUNCTIONS(port) \ 92*19b8fa0bSMarek Vasut int eserial##port##_init (void) {\ 93*19b8fa0bSMarek Vasut int clock_divisor; \ 94*19b8fa0bSMarek Vasut clock_divisor = calc_divisor(serial_ports[port-1]); \ 95*19b8fa0bSMarek Vasut NS16550_init(serial_ports[port-1], clock_divisor); \ 96*19b8fa0bSMarek Vasut return(0);}\ 97*19b8fa0bSMarek Vasut void eserial##port##_setbrg (void) {\ 98*19b8fa0bSMarek Vasut serial_setbrg_dev(port);}\ 99*19b8fa0bSMarek Vasut int eserial##port##_getc (void) {\ 100*19b8fa0bSMarek Vasut return serial_getc_dev(port);}\ 101*19b8fa0bSMarek Vasut int eserial##port##_tstc (void) {\ 102*19b8fa0bSMarek Vasut return serial_tstc_dev(port);}\ 103*19b8fa0bSMarek Vasut void eserial##port##_putc (const char c) {\ 104*19b8fa0bSMarek Vasut serial_putc_dev(port, c);}\ 105*19b8fa0bSMarek Vasut void eserial##port##_puts (const char *s) {\ 106*19b8fa0bSMarek Vasut serial_puts_dev(port, s);} 107*19b8fa0bSMarek Vasut 108*19b8fa0bSMarek Vasut /* Serial device descriptor */ 109*19b8fa0bSMarek Vasut #define INIT_ESERIAL_STRUCTURE(port, __name) { \ 110*19b8fa0bSMarek Vasut .name = __name, \ 111*19b8fa0bSMarek Vasut .start = eserial##port##_init, \ 112*19b8fa0bSMarek Vasut .stop = NULL, \ 113*19b8fa0bSMarek Vasut .setbrg = eserial##port##_setbrg, \ 114*19b8fa0bSMarek Vasut .getc = eserial##port##_getc, \ 115*19b8fa0bSMarek Vasut .tstc = eserial##port##_tstc, \ 116*19b8fa0bSMarek Vasut .putc = eserial##port##_putc, \ 117*19b8fa0bSMarek Vasut .puts = eserial##port##_puts, \ 118*19b8fa0bSMarek Vasut } 119*19b8fa0bSMarek Vasut 120*19b8fa0bSMarek Vasut #endif /* CONFIG_SERIAL_MULTI */ 121*19b8fa0bSMarek Vasut 122*19b8fa0bSMarek Vasut static int calc_divisor (NS16550_t port) 123*19b8fa0bSMarek Vasut { 124*19b8fa0bSMarek Vasut #ifdef CONFIG_OMAP1510 125*19b8fa0bSMarek Vasut /* If can't cleanly clock 115200 set div to 1 */ 126*19b8fa0bSMarek Vasut if ((CONFIG_SYS_NS16550_CLK == 12000000) && (gd->baudrate == 115200)) { 127*19b8fa0bSMarek Vasut port->osc_12m_sel = OSC_12M_SEL; /* enable 6.5 * divisor */ 128*19b8fa0bSMarek Vasut return (1); /* return 1 for base divisor */ 129*19b8fa0bSMarek Vasut } 130*19b8fa0bSMarek Vasut port->osc_12m_sel = 0; /* clear if previsouly set */ 131*19b8fa0bSMarek Vasut #endif 132*19b8fa0bSMarek Vasut #ifdef CONFIG_OMAP1610 133*19b8fa0bSMarek Vasut /* If can't cleanly clock 115200 set div to 1 */ 134*19b8fa0bSMarek Vasut if ((CONFIG_SYS_NS16550_CLK == 48000000) && (gd->baudrate == 115200)) { 135*19b8fa0bSMarek Vasut return (26); /* return 26 for base divisor */ 136*19b8fa0bSMarek Vasut } 137*19b8fa0bSMarek Vasut #endif 138*19b8fa0bSMarek Vasut 139*19b8fa0bSMarek Vasut #ifdef CONFIG_APTIX 140*19b8fa0bSMarek Vasut #define MODE_X_DIV 13 141*19b8fa0bSMarek Vasut #else 142*19b8fa0bSMarek Vasut #define MODE_X_DIV 16 143*19b8fa0bSMarek Vasut #endif 144*19b8fa0bSMarek Vasut 145*19b8fa0bSMarek Vasut /* Compute divisor value. Normally, we should simply return: 146*19b8fa0bSMarek Vasut * CONFIG_SYS_NS16550_CLK) / MODE_X_DIV / gd->baudrate 147*19b8fa0bSMarek Vasut * but we need to round that value by adding 0.5. 148*19b8fa0bSMarek Vasut * Rounding is especially important at high baud rates. 149*19b8fa0bSMarek Vasut */ 150*19b8fa0bSMarek Vasut return (CONFIG_SYS_NS16550_CLK + (gd->baudrate * (MODE_X_DIV / 2))) / 151*19b8fa0bSMarek Vasut (MODE_X_DIV * gd->baudrate); 152*19b8fa0bSMarek Vasut } 153*19b8fa0bSMarek Vasut 154*19b8fa0bSMarek Vasut #if !defined(CONFIG_SERIAL_MULTI) 155*19b8fa0bSMarek Vasut int serial_init (void) 156*19b8fa0bSMarek Vasut { 157*19b8fa0bSMarek Vasut int clock_divisor; 158*19b8fa0bSMarek Vasut 159*19b8fa0bSMarek Vasut #ifdef CONFIG_NS87308 160*19b8fa0bSMarek Vasut initialise_ns87308(); 161*19b8fa0bSMarek Vasut #endif 162*19b8fa0bSMarek Vasut 163*19b8fa0bSMarek Vasut #ifdef CONFIG_SYS_NS16550_COM1 164*19b8fa0bSMarek Vasut clock_divisor = calc_divisor(serial_ports[0]); 165*19b8fa0bSMarek Vasut NS16550_init(serial_ports[0], clock_divisor); 166*19b8fa0bSMarek Vasut #endif 167*19b8fa0bSMarek Vasut #ifdef CONFIG_SYS_NS16550_COM2 168*19b8fa0bSMarek Vasut clock_divisor = calc_divisor(serial_ports[1]); 169*19b8fa0bSMarek Vasut NS16550_init(serial_ports[1], clock_divisor); 170*19b8fa0bSMarek Vasut #endif 171*19b8fa0bSMarek Vasut #ifdef CONFIG_SYS_NS16550_COM3 172*19b8fa0bSMarek Vasut clock_divisor = calc_divisor(serial_ports[2]); 173*19b8fa0bSMarek Vasut NS16550_init(serial_ports[2], clock_divisor); 174*19b8fa0bSMarek Vasut #endif 175*19b8fa0bSMarek Vasut #ifdef CONFIG_SYS_NS16550_COM4 176*19b8fa0bSMarek Vasut clock_divisor = calc_divisor(serial_ports[3]); 177*19b8fa0bSMarek Vasut NS16550_init(serial_ports[3], clock_divisor); 178*19b8fa0bSMarek Vasut #endif 179*19b8fa0bSMarek Vasut 180*19b8fa0bSMarek Vasut return (0); 181*19b8fa0bSMarek Vasut } 182*19b8fa0bSMarek Vasut #endif 183*19b8fa0bSMarek Vasut 184*19b8fa0bSMarek Vasut void 185*19b8fa0bSMarek Vasut _serial_putc(const char c,const int port) 186*19b8fa0bSMarek Vasut { 187*19b8fa0bSMarek Vasut if (c == '\n') 188*19b8fa0bSMarek Vasut NS16550_putc(PORT, '\r'); 189*19b8fa0bSMarek Vasut 190*19b8fa0bSMarek Vasut NS16550_putc(PORT, c); 191*19b8fa0bSMarek Vasut } 192*19b8fa0bSMarek Vasut 193*19b8fa0bSMarek Vasut void 194*19b8fa0bSMarek Vasut _serial_putc_raw(const char c,const int port) 195*19b8fa0bSMarek Vasut { 196*19b8fa0bSMarek Vasut NS16550_putc(PORT, c); 197*19b8fa0bSMarek Vasut } 198*19b8fa0bSMarek Vasut 199*19b8fa0bSMarek Vasut void 200*19b8fa0bSMarek Vasut _serial_puts (const char *s,const int port) 201*19b8fa0bSMarek Vasut { 202*19b8fa0bSMarek Vasut while (*s) { 203*19b8fa0bSMarek Vasut _serial_putc (*s++,port); 204*19b8fa0bSMarek Vasut } 205*19b8fa0bSMarek Vasut } 206*19b8fa0bSMarek Vasut 207*19b8fa0bSMarek Vasut 208*19b8fa0bSMarek Vasut int 209*19b8fa0bSMarek Vasut _serial_getc(const int port) 210*19b8fa0bSMarek Vasut { 211*19b8fa0bSMarek Vasut return NS16550_getc(PORT); 212*19b8fa0bSMarek Vasut } 213*19b8fa0bSMarek Vasut 214*19b8fa0bSMarek Vasut int 215*19b8fa0bSMarek Vasut _serial_tstc(const int port) 216*19b8fa0bSMarek Vasut { 217*19b8fa0bSMarek Vasut return NS16550_tstc(PORT); 218*19b8fa0bSMarek Vasut } 219*19b8fa0bSMarek Vasut 220*19b8fa0bSMarek Vasut void 221*19b8fa0bSMarek Vasut _serial_setbrg (const int port) 222*19b8fa0bSMarek Vasut { 223*19b8fa0bSMarek Vasut int clock_divisor; 224*19b8fa0bSMarek Vasut 225*19b8fa0bSMarek Vasut clock_divisor = calc_divisor(PORT); 226*19b8fa0bSMarek Vasut NS16550_reinit(PORT, clock_divisor); 227*19b8fa0bSMarek Vasut } 228*19b8fa0bSMarek Vasut 229*19b8fa0bSMarek Vasut #if defined(CONFIG_SERIAL_MULTI) 230*19b8fa0bSMarek Vasut static inline void 231*19b8fa0bSMarek Vasut serial_putc_dev(unsigned int dev_index,const char c) 232*19b8fa0bSMarek Vasut { 233*19b8fa0bSMarek Vasut _serial_putc(c,dev_index); 234*19b8fa0bSMarek Vasut } 235*19b8fa0bSMarek Vasut #else 236*19b8fa0bSMarek Vasut void 237*19b8fa0bSMarek Vasut serial_putc(const char c) 238*19b8fa0bSMarek Vasut { 239*19b8fa0bSMarek Vasut _serial_putc(c,CONFIG_CONS_INDEX); 240*19b8fa0bSMarek Vasut } 241*19b8fa0bSMarek Vasut #endif 242*19b8fa0bSMarek Vasut 243*19b8fa0bSMarek Vasut #if defined(CONFIG_SERIAL_MULTI) 244*19b8fa0bSMarek Vasut static inline void 245*19b8fa0bSMarek Vasut serial_putc_raw_dev(unsigned int dev_index,const char c) 246*19b8fa0bSMarek Vasut { 247*19b8fa0bSMarek Vasut _serial_putc_raw(c,dev_index); 248*19b8fa0bSMarek Vasut } 249*19b8fa0bSMarek Vasut #else 250*19b8fa0bSMarek Vasut void 251*19b8fa0bSMarek Vasut serial_putc_raw(const char c) 252*19b8fa0bSMarek Vasut { 253*19b8fa0bSMarek Vasut _serial_putc_raw(c,CONFIG_CONS_INDEX); 254*19b8fa0bSMarek Vasut } 255*19b8fa0bSMarek Vasut #endif 256*19b8fa0bSMarek Vasut 257*19b8fa0bSMarek Vasut #if defined(CONFIG_SERIAL_MULTI) 258*19b8fa0bSMarek Vasut static inline void 259*19b8fa0bSMarek Vasut serial_puts_dev(unsigned int dev_index,const char *s) 260*19b8fa0bSMarek Vasut { 261*19b8fa0bSMarek Vasut _serial_puts(s,dev_index); 262*19b8fa0bSMarek Vasut } 263*19b8fa0bSMarek Vasut #else 264*19b8fa0bSMarek Vasut void 265*19b8fa0bSMarek Vasut serial_puts(const char *s) 266*19b8fa0bSMarek Vasut { 267*19b8fa0bSMarek Vasut _serial_puts(s,CONFIG_CONS_INDEX); 268*19b8fa0bSMarek Vasut } 269*19b8fa0bSMarek Vasut #endif 270*19b8fa0bSMarek Vasut 271*19b8fa0bSMarek Vasut #if defined(CONFIG_SERIAL_MULTI) 272*19b8fa0bSMarek Vasut static inline int 273*19b8fa0bSMarek Vasut serial_getc_dev(unsigned int dev_index) 274*19b8fa0bSMarek Vasut { 275*19b8fa0bSMarek Vasut return _serial_getc(dev_index); 276*19b8fa0bSMarek Vasut } 277*19b8fa0bSMarek Vasut #else 278*19b8fa0bSMarek Vasut int 279*19b8fa0bSMarek Vasut serial_getc(void) 280*19b8fa0bSMarek Vasut { 281*19b8fa0bSMarek Vasut return _serial_getc(CONFIG_CONS_INDEX); 282*19b8fa0bSMarek Vasut } 283*19b8fa0bSMarek Vasut #endif 284*19b8fa0bSMarek Vasut 285*19b8fa0bSMarek Vasut #if defined(CONFIG_SERIAL_MULTI) 286*19b8fa0bSMarek Vasut static inline int 287*19b8fa0bSMarek Vasut serial_tstc_dev(unsigned int dev_index) 288*19b8fa0bSMarek Vasut { 289*19b8fa0bSMarek Vasut return _serial_tstc(dev_index); 290*19b8fa0bSMarek Vasut } 291*19b8fa0bSMarek Vasut #else 292*19b8fa0bSMarek Vasut int 293*19b8fa0bSMarek Vasut serial_tstc(void) 294*19b8fa0bSMarek Vasut { 295*19b8fa0bSMarek Vasut return _serial_tstc(CONFIG_CONS_INDEX); 296*19b8fa0bSMarek Vasut } 297*19b8fa0bSMarek Vasut #endif 298*19b8fa0bSMarek Vasut 299*19b8fa0bSMarek Vasut #if defined(CONFIG_SERIAL_MULTI) 300*19b8fa0bSMarek Vasut static inline void 301*19b8fa0bSMarek Vasut serial_setbrg_dev(unsigned int dev_index) 302*19b8fa0bSMarek Vasut { 303*19b8fa0bSMarek Vasut _serial_setbrg(dev_index); 304*19b8fa0bSMarek Vasut } 305*19b8fa0bSMarek Vasut #else 306*19b8fa0bSMarek Vasut void 307*19b8fa0bSMarek Vasut serial_setbrg(void) 308*19b8fa0bSMarek Vasut { 309*19b8fa0bSMarek Vasut _serial_setbrg(CONFIG_CONS_INDEX); 310*19b8fa0bSMarek Vasut } 311*19b8fa0bSMarek Vasut #endif 312*19b8fa0bSMarek Vasut 313*19b8fa0bSMarek Vasut #if defined(CONFIG_SERIAL_MULTI) 314*19b8fa0bSMarek Vasut 315*19b8fa0bSMarek Vasut DECLARE_ESERIAL_FUNCTIONS(1); 316*19b8fa0bSMarek Vasut struct serial_device eserial1_device = 317*19b8fa0bSMarek Vasut INIT_ESERIAL_STRUCTURE(1, "eserial0"); 318*19b8fa0bSMarek Vasut DECLARE_ESERIAL_FUNCTIONS(2); 319*19b8fa0bSMarek Vasut struct serial_device eserial2_device = 320*19b8fa0bSMarek Vasut INIT_ESERIAL_STRUCTURE(2, "eserial1"); 321*19b8fa0bSMarek Vasut DECLARE_ESERIAL_FUNCTIONS(3); 322*19b8fa0bSMarek Vasut struct serial_device eserial3_device = 323*19b8fa0bSMarek Vasut INIT_ESERIAL_STRUCTURE(3, "eserial2"); 324*19b8fa0bSMarek Vasut DECLARE_ESERIAL_FUNCTIONS(4); 325*19b8fa0bSMarek Vasut struct serial_device eserial4_device = 326*19b8fa0bSMarek Vasut INIT_ESERIAL_STRUCTURE(4, "eserial3"); 327*19b8fa0bSMarek Vasut 328*19b8fa0bSMarek Vasut __weak struct serial_device *default_serial_console(void) 329*19b8fa0bSMarek Vasut { 330*19b8fa0bSMarek Vasut #if CONFIG_CONS_INDEX == 1 331*19b8fa0bSMarek Vasut return &eserial1_device; 332*19b8fa0bSMarek Vasut #elif CONFIG_CONS_INDEX == 2 333*19b8fa0bSMarek Vasut return &eserial2_device; 334*19b8fa0bSMarek Vasut #elif CONFIG_CONS_INDEX == 3 335*19b8fa0bSMarek Vasut return &eserial3_device; 336*19b8fa0bSMarek Vasut #elif CONFIG_CONS_INDEX == 4 337*19b8fa0bSMarek Vasut return &eserial4_device; 338*19b8fa0bSMarek Vasut #else 339*19b8fa0bSMarek Vasut #error "Bad CONFIG_CONS_INDEX." 340*19b8fa0bSMarek Vasut #endif 341*19b8fa0bSMarek Vasut } 342*19b8fa0bSMarek Vasut 343*19b8fa0bSMarek Vasut void ns16550_serial_initialize(void) 344*19b8fa0bSMarek Vasut { 345*19b8fa0bSMarek Vasut #if defined(CONFIG_SYS_NS16550_COM1) 346*19b8fa0bSMarek Vasut serial_register(&eserial1_device); 347*19b8fa0bSMarek Vasut #endif 348*19b8fa0bSMarek Vasut #if defined(CONFIG_SYS_NS16550_COM2) 349*19b8fa0bSMarek Vasut serial_register(&eserial2_device); 350*19b8fa0bSMarek Vasut #endif 351*19b8fa0bSMarek Vasut #if defined(CONFIG_SYS_NS16550_COM3) 352*19b8fa0bSMarek Vasut serial_register(&eserial3_device); 353*19b8fa0bSMarek Vasut #endif 354*19b8fa0bSMarek Vasut #if defined(CONFIG_SYS_NS16550_COM4) 355*19b8fa0bSMarek Vasut serial_register(&eserial4_device); 356*19b8fa0bSMarek Vasut #endif 357*19b8fa0bSMarek Vasut } 358*19b8fa0bSMarek Vasut 359*19b8fa0bSMarek Vasut #endif /* CONFIG_SERIAL_MULTI */ 360