Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.8-rc6 830 lines 21 kB view raw
1#if defined(CONFIG_SERIAL_EFM32_UART_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 2#define SUPPORT_SYSRQ 3#endif 4 5#include <linux/kernel.h> 6#include <linux/module.h> 7#include <linux/io.h> 8#include <linux/platform_device.h> 9#include <linux/console.h> 10#include <linux/sysrq.h> 11#include <linux/serial_core.h> 12#include <linux/tty_flip.h> 13#include <linux/slab.h> 14#include <linux/clk.h> 15#include <linux/of.h> 16#include <linux/of_device.h> 17 18#include <linux/platform_data/efm32-uart.h> 19 20#define DRIVER_NAME "efm32-uart" 21#define DEV_NAME "ttyefm" 22 23#define UARTn_CTRL 0x00 24#define UARTn_CTRL_SYNC 0x0001 25#define UARTn_CTRL_TXBIL 0x1000 26 27#define UARTn_FRAME 0x04 28#define UARTn_FRAME_DATABITS__MASK 0x000f 29#define UARTn_FRAME_DATABITS(n) ((n) - 3) 30#define UARTn_FRAME_PARITY_NONE 0x0000 31#define UARTn_FRAME_PARITY_EVEN 0x0200 32#define UARTn_FRAME_PARITY_ODD 0x0300 33#define UARTn_FRAME_STOPBITS_HALF 0x0000 34#define UARTn_FRAME_STOPBITS_ONE 0x1000 35#define UARTn_FRAME_STOPBITS_TWO 0x3000 36 37#define UARTn_CMD 0x0c 38#define UARTn_CMD_RXEN 0x0001 39#define UARTn_CMD_RXDIS 0x0002 40#define UARTn_CMD_TXEN 0x0004 41#define UARTn_CMD_TXDIS 0x0008 42 43#define UARTn_STATUS 0x10 44#define UARTn_STATUS_TXENS 0x0002 45#define UARTn_STATUS_TXC 0x0020 46#define UARTn_STATUS_TXBL 0x0040 47#define UARTn_STATUS_RXDATAV 0x0080 48 49#define UARTn_CLKDIV 0x14 50 51#define UARTn_RXDATAX 0x18 52#define UARTn_RXDATAX_RXDATA__MASK 0x01ff 53#define UARTn_RXDATAX_PERR 0x4000 54#define UARTn_RXDATAX_FERR 0x8000 55/* 56 * This is a software only flag used for ignore_status_mask and 57 * read_status_mask! It's used for breaks that the hardware doesn't report 58 * explicitly. 59 */ 60#define SW_UARTn_RXDATAX_BERR 0x2000 61 62#define UARTn_TXDATA 0x34 63 64#define UARTn_IF 0x40 65#define UARTn_IF_TXC 0x0001 66#define UARTn_IF_TXBL 0x0002 67#define UARTn_IF_RXDATAV 0x0004 68#define UARTn_IF_RXOF 0x0010 69 70#define UARTn_IFS 0x44 71#define UARTn_IFC 0x48 72#define UARTn_IEN 0x4c 73 74#define UARTn_ROUTE 0x54 75#define UARTn_ROUTE_LOCATION__MASK 0x0700 76#define UARTn_ROUTE_LOCATION(n) (((n) << 8) & UARTn_ROUTE_LOCATION__MASK) 77#define UARTn_ROUTE_RXPEN 0x0001 78#define UARTn_ROUTE_TXPEN 0x0002 79 80struct efm32_uart_port { 81 struct uart_port port; 82 unsigned int txirq; 83 struct clk *clk; 84}; 85#define to_efm_port(_port) container_of(_port, struct efm32_uart_port, port) 86#define efm_debug(efm_port, format, arg...) \ 87 dev_dbg(efm_port->port.dev, format, ##arg) 88 89static void efm32_uart_write32(struct efm32_uart_port *efm_port, 90 u32 value, unsigned offset) 91{ 92 writel_relaxed(value, efm_port->port.membase + offset); 93} 94 95static u32 efm32_uart_read32(struct efm32_uart_port *efm_port, 96 unsigned offset) 97{ 98 return readl_relaxed(efm_port->port.membase + offset); 99} 100 101static unsigned int efm32_uart_tx_empty(struct uart_port *port) 102{ 103 struct efm32_uart_port *efm_port = to_efm_port(port); 104 u32 status = efm32_uart_read32(efm_port, UARTn_STATUS); 105 106 if (status & UARTn_STATUS_TXC) 107 return TIOCSER_TEMT; 108 else 109 return 0; 110} 111 112static void efm32_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) 113{ 114 /* sorry, neither handshaking lines nor loop functionallity */ 115} 116 117static unsigned int efm32_uart_get_mctrl(struct uart_port *port) 118{ 119 /* sorry, no handshaking lines available */ 120 return TIOCM_CAR | TIOCM_CTS | TIOCM_DSR; 121} 122 123static void efm32_uart_stop_tx(struct uart_port *port) 124{ 125 struct efm32_uart_port *efm_port = to_efm_port(port); 126 u32 ien = efm32_uart_read32(efm_port, UARTn_IEN); 127 128 efm32_uart_write32(efm_port, UARTn_CMD_TXDIS, UARTn_CMD); 129 ien &= ~(UARTn_IF_TXC | UARTn_IF_TXBL); 130 efm32_uart_write32(efm_port, ien, UARTn_IEN); 131} 132 133static void efm32_uart_tx_chars(struct efm32_uart_port *efm_port) 134{ 135 struct uart_port *port = &efm_port->port; 136 struct circ_buf *xmit = &port->state->xmit; 137 138 while (efm32_uart_read32(efm_port, UARTn_STATUS) & 139 UARTn_STATUS_TXBL) { 140 if (port->x_char) { 141 port->icount.tx++; 142 efm32_uart_write32(efm_port, port->x_char, 143 UARTn_TXDATA); 144 port->x_char = 0; 145 continue; 146 } 147 if (!uart_circ_empty(xmit) && !uart_tx_stopped(port)) { 148 port->icount.tx++; 149 efm32_uart_write32(efm_port, xmit->buf[xmit->tail], 150 UARTn_TXDATA); 151 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); 152 } else 153 break; 154 } 155 156 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) 157 uart_write_wakeup(port); 158 159 if (!port->x_char && uart_circ_empty(xmit) && 160 efm32_uart_read32(efm_port, UARTn_STATUS) & 161 UARTn_STATUS_TXC) 162 efm32_uart_stop_tx(port); 163} 164 165static void efm32_uart_start_tx(struct uart_port *port) 166{ 167 struct efm32_uart_port *efm_port = to_efm_port(port); 168 u32 ien; 169 170 efm32_uart_write32(efm_port, 171 UARTn_IF_TXBL | UARTn_IF_TXC, UARTn_IFC); 172 ien = efm32_uart_read32(efm_port, UARTn_IEN); 173 efm32_uart_write32(efm_port, 174 ien | UARTn_IF_TXBL | UARTn_IF_TXC, UARTn_IEN); 175 efm32_uart_write32(efm_port, UARTn_CMD_TXEN, UARTn_CMD); 176 177 efm32_uart_tx_chars(efm_port); 178} 179 180static void efm32_uart_stop_rx(struct uart_port *port) 181{ 182 struct efm32_uart_port *efm_port = to_efm_port(port); 183 184 efm32_uart_write32(efm_port, UARTn_CMD_RXDIS, UARTn_CMD); 185} 186 187static void efm32_uart_enable_ms(struct uart_port *port) 188{ 189 /* no handshake lines, no modem status interrupts */ 190} 191 192static void efm32_uart_break_ctl(struct uart_port *port, int ctl) 193{ 194 /* not possible without fiddling with gpios */ 195} 196 197static void efm32_uart_rx_chars(struct efm32_uart_port *efm_port, 198 struct tty_struct *tty) 199{ 200 struct uart_port *port = &efm_port->port; 201 202 while (efm32_uart_read32(efm_port, UARTn_STATUS) & 203 UARTn_STATUS_RXDATAV) { 204 u32 rxdata = efm32_uart_read32(efm_port, UARTn_RXDATAX); 205 int flag = 0; 206 207 /* 208 * This is a reserved bit and I only saw it read as 0. But to be 209 * sure not to be confused too much by new devices adhere to the 210 * warning in the reference manual that reserverd bits might 211 * read as 1 in the future. 212 */ 213 rxdata &= ~SW_UARTn_RXDATAX_BERR; 214 215 port->icount.rx++; 216 217 if ((rxdata & UARTn_RXDATAX_FERR) && 218 !(rxdata & UARTn_RXDATAX_RXDATA__MASK)) { 219 rxdata |= SW_UARTn_RXDATAX_BERR; 220 port->icount.brk++; 221 if (uart_handle_break(port)) 222 continue; 223 } else if (rxdata & UARTn_RXDATAX_PERR) 224 port->icount.parity++; 225 else if (rxdata & UARTn_RXDATAX_FERR) 226 port->icount.frame++; 227 228 rxdata &= port->read_status_mask; 229 230 if (rxdata & SW_UARTn_RXDATAX_BERR) 231 flag = TTY_BREAK; 232 else if (rxdata & UARTn_RXDATAX_PERR) 233 flag = TTY_PARITY; 234 else if (rxdata & UARTn_RXDATAX_FERR) 235 flag = TTY_FRAME; 236 else if (uart_handle_sysrq_char(port, 237 rxdata & UARTn_RXDATAX_RXDATA__MASK)) 238 continue; 239 240 if (tty && (rxdata & port->ignore_status_mask) == 0) 241 tty_insert_flip_char(tty, 242 rxdata & UARTn_RXDATAX_RXDATA__MASK, flag); 243 } 244} 245 246static irqreturn_t efm32_uart_rxirq(int irq, void *data) 247{ 248 struct efm32_uart_port *efm_port = data; 249 u32 irqflag = efm32_uart_read32(efm_port, UARTn_IF); 250 int handled = IRQ_NONE; 251 struct uart_port *port = &efm_port->port; 252 struct tty_struct *tty; 253 254 spin_lock(&port->lock); 255 256 tty = tty_kref_get(port->state->port.tty); 257 258 if (irqflag & UARTn_IF_RXDATAV) { 259 efm32_uart_write32(efm_port, UARTn_IF_RXDATAV, UARTn_IFC); 260 efm32_uart_rx_chars(efm_port, tty); 261 262 handled = IRQ_HANDLED; 263 } 264 265 if (irqflag & UARTn_IF_RXOF) { 266 efm32_uart_write32(efm_port, UARTn_IF_RXOF, UARTn_IFC); 267 port->icount.overrun++; 268 if (tty) 269 tty_insert_flip_char(tty, 0, TTY_OVERRUN); 270 271 handled = IRQ_HANDLED; 272 } 273 274 if (tty) { 275 tty_flip_buffer_push(tty); 276 tty_kref_put(tty); 277 } 278 279 spin_unlock(&port->lock); 280 281 return handled; 282} 283 284static irqreturn_t efm32_uart_txirq(int irq, void *data) 285{ 286 struct efm32_uart_port *efm_port = data; 287 u32 irqflag = efm32_uart_read32(efm_port, UARTn_IF); 288 289 /* TXBL doesn't need to be cleared */ 290 if (irqflag & UARTn_IF_TXC) 291 efm32_uart_write32(efm_port, UARTn_IF_TXC, UARTn_IFC); 292 293 if (irqflag & (UARTn_IF_TXC | UARTn_IF_TXBL)) { 294 efm32_uart_tx_chars(efm_port); 295 return IRQ_HANDLED; 296 } else 297 return IRQ_NONE; 298} 299 300static int efm32_uart_startup(struct uart_port *port) 301{ 302 struct efm32_uart_port *efm_port = to_efm_port(port); 303 u32 location = 0; 304 struct efm32_uart_pdata *pdata = dev_get_platdata(port->dev); 305 int ret; 306 307 if (pdata) 308 location = UARTn_ROUTE_LOCATION(pdata->location); 309 310 ret = clk_enable(efm_port->clk); 311 if (ret) { 312 efm_debug(efm_port, "failed to enable clk\n"); 313 goto err_clk_enable; 314 } 315 port->uartclk = clk_get_rate(efm_port->clk); 316 317 /* Enable pins at configured location */ 318 efm32_uart_write32(efm_port, location | UARTn_ROUTE_RXPEN | UARTn_ROUTE_TXPEN, 319 UARTn_ROUTE); 320 321 ret = request_irq(port->irq, efm32_uart_rxirq, 0, 322 DRIVER_NAME, efm_port); 323 if (ret) { 324 efm_debug(efm_port, "failed to register rxirq\n"); 325 goto err_request_irq_rx; 326 } 327 328 /* disable all irqs */ 329 efm32_uart_write32(efm_port, 0, UARTn_IEN); 330 331 ret = request_irq(efm_port->txirq, efm32_uart_txirq, 0, 332 DRIVER_NAME, efm_port); 333 if (ret) { 334 efm_debug(efm_port, "failed to register txirq\n"); 335 free_irq(port->irq, efm_port); 336err_request_irq_rx: 337 338 clk_disable(efm_port->clk); 339 } else { 340 efm32_uart_write32(efm_port, 341 UARTn_IF_RXDATAV | UARTn_IF_RXOF, UARTn_IEN); 342 efm32_uart_write32(efm_port, UARTn_CMD_RXEN, UARTn_CMD); 343 } 344 345err_clk_enable: 346 return ret; 347} 348 349static void efm32_uart_shutdown(struct uart_port *port) 350{ 351 struct efm32_uart_port *efm_port = to_efm_port(port); 352 353 efm32_uart_write32(efm_port, 0, UARTn_IEN); 354 free_irq(port->irq, efm_port); 355 356 clk_disable(efm_port->clk); 357} 358 359static void efm32_uart_set_termios(struct uart_port *port, 360 struct ktermios *new, struct ktermios *old) 361{ 362 struct efm32_uart_port *efm_port = to_efm_port(port); 363 unsigned long flags; 364 unsigned baud; 365 u32 clkdiv; 366 u32 frame = 0; 367 368 /* no modem control lines */ 369 new->c_cflag &= ~(CRTSCTS | CMSPAR); 370 371 baud = uart_get_baud_rate(port, new, old, 372 DIV_ROUND_CLOSEST(port->uartclk, 16 * 8192), 373 DIV_ROUND_CLOSEST(port->uartclk, 16)); 374 375 switch (new->c_cflag & CSIZE) { 376 case CS5: 377 frame |= UARTn_FRAME_DATABITS(5); 378 break; 379 case CS6: 380 frame |= UARTn_FRAME_DATABITS(6); 381 break; 382 case CS7: 383 frame |= UARTn_FRAME_DATABITS(7); 384 break; 385 case CS8: 386 frame |= UARTn_FRAME_DATABITS(8); 387 break; 388 } 389 390 if (new->c_cflag & CSTOPB) 391 /* the receiver only verifies the first stop bit */ 392 frame |= UARTn_FRAME_STOPBITS_TWO; 393 else 394 frame |= UARTn_FRAME_STOPBITS_ONE; 395 396 if (new->c_cflag & PARENB) { 397 if (new->c_cflag & PARODD) 398 frame |= UARTn_FRAME_PARITY_ODD; 399 else 400 frame |= UARTn_FRAME_PARITY_EVEN; 401 } else 402 frame |= UARTn_FRAME_PARITY_NONE; 403 404 /* 405 * the 6 lowest bits of CLKDIV are dc, bit 6 has value 0.25. 406 * port->uartclk <= 14e6, so 4 * port->uartclk doesn't overflow. 407 */ 408 clkdiv = (DIV_ROUND_CLOSEST(4 * port->uartclk, 16 * baud) - 4) << 6; 409 410 spin_lock_irqsave(&port->lock, flags); 411 412 efm32_uart_write32(efm_port, 413 UARTn_CMD_TXDIS | UARTn_CMD_RXDIS, UARTn_CMD); 414 415 port->read_status_mask = UARTn_RXDATAX_RXDATA__MASK; 416 if (new->c_iflag & INPCK) 417 port->read_status_mask |= 418 UARTn_RXDATAX_FERR | UARTn_RXDATAX_PERR; 419 if (new->c_iflag & (BRKINT | PARMRK)) 420 port->read_status_mask |= SW_UARTn_RXDATAX_BERR; 421 422 port->ignore_status_mask = 0; 423 if (new->c_iflag & IGNPAR) 424 port->ignore_status_mask |= 425 UARTn_RXDATAX_FERR | UARTn_RXDATAX_PERR; 426 if (new->c_iflag & IGNBRK) 427 port->ignore_status_mask |= SW_UARTn_RXDATAX_BERR; 428 429 uart_update_timeout(port, new->c_cflag, baud); 430 431 efm32_uart_write32(efm_port, UARTn_CTRL_TXBIL, UARTn_CTRL); 432 efm32_uart_write32(efm_port, frame, UARTn_FRAME); 433 efm32_uart_write32(efm_port, clkdiv, UARTn_CLKDIV); 434 435 efm32_uart_write32(efm_port, UARTn_CMD_TXEN | UARTn_CMD_RXEN, 436 UARTn_CMD); 437 438 spin_unlock_irqrestore(&port->lock, flags); 439} 440 441static const char *efm32_uart_type(struct uart_port *port) 442{ 443 return port->type == PORT_EFMUART ? "efm32-uart" : NULL; 444} 445 446static void efm32_uart_release_port(struct uart_port *port) 447{ 448 struct efm32_uart_port *efm_port = to_efm_port(port); 449 450 clk_unprepare(efm_port->clk); 451 clk_put(efm_port->clk); 452 iounmap(port->membase); 453} 454 455static int efm32_uart_request_port(struct uart_port *port) 456{ 457 struct efm32_uart_port *efm_port = to_efm_port(port); 458 int ret; 459 460 port->membase = ioremap(port->mapbase, 60); 461 if (!efm_port->port.membase) { 462 ret = -ENOMEM; 463 efm_debug(efm_port, "failed to remap\n"); 464 goto err_ioremap; 465 } 466 467 efm_port->clk = clk_get(port->dev, NULL); 468 if (IS_ERR(efm_port->clk)) { 469 ret = PTR_ERR(efm_port->clk); 470 efm_debug(efm_port, "failed to get clock\n"); 471 goto err_clk_get; 472 } 473 474 ret = clk_prepare(efm_port->clk); 475 if (ret) { 476 clk_put(efm_port->clk); 477err_clk_get: 478 479 iounmap(port->membase); 480err_ioremap: 481 return ret; 482 } 483 return 0; 484} 485 486static void efm32_uart_config_port(struct uart_port *port, int type) 487{ 488 if (type & UART_CONFIG_TYPE && 489 !efm32_uart_request_port(port)) 490 port->type = PORT_EFMUART; 491} 492 493static int efm32_uart_verify_port(struct uart_port *port, 494 struct serial_struct *serinfo) 495{ 496 int ret = 0; 497 498 if (serinfo->type != PORT_UNKNOWN && serinfo->type != PORT_EFMUART) 499 ret = -EINVAL; 500 501 return ret; 502} 503 504static struct uart_ops efm32_uart_pops = { 505 .tx_empty = efm32_uart_tx_empty, 506 .set_mctrl = efm32_uart_set_mctrl, 507 .get_mctrl = efm32_uart_get_mctrl, 508 .stop_tx = efm32_uart_stop_tx, 509 .start_tx = efm32_uart_start_tx, 510 .stop_rx = efm32_uart_stop_rx, 511 .enable_ms = efm32_uart_enable_ms, 512 .break_ctl = efm32_uart_break_ctl, 513 .startup = efm32_uart_startup, 514 .shutdown = efm32_uart_shutdown, 515 .set_termios = efm32_uart_set_termios, 516 .type = efm32_uart_type, 517 .release_port = efm32_uart_release_port, 518 .request_port = efm32_uart_request_port, 519 .config_port = efm32_uart_config_port, 520 .verify_port = efm32_uart_verify_port, 521}; 522 523static struct efm32_uart_port *efm32_uart_ports[5]; 524 525#ifdef CONFIG_SERIAL_EFM32_UART_CONSOLE 526static void efm32_uart_console_putchar(struct uart_port *port, int ch) 527{ 528 struct efm32_uart_port *efm_port = to_efm_port(port); 529 unsigned int timeout = 0x400; 530 u32 status; 531 532 while (1) { 533 status = efm32_uart_read32(efm_port, UARTn_STATUS); 534 535 if (status & UARTn_STATUS_TXBL) 536 break; 537 if (!timeout--) 538 return; 539 } 540 efm32_uart_write32(efm_port, ch, UARTn_TXDATA); 541} 542 543static void efm32_uart_console_write(struct console *co, const char *s, 544 unsigned int count) 545{ 546 struct efm32_uart_port *efm_port = efm32_uart_ports[co->index]; 547 u32 status = efm32_uart_read32(efm_port, UARTn_STATUS); 548 unsigned int timeout = 0x400; 549 550 if (!(status & UARTn_STATUS_TXENS)) 551 efm32_uart_write32(efm_port, UARTn_CMD_TXEN, UARTn_CMD); 552 553 uart_console_write(&efm_port->port, s, count, 554 efm32_uart_console_putchar); 555 556 /* Wait for the transmitter to become empty */ 557 while (1) { 558 u32 status = efm32_uart_read32(efm_port, UARTn_STATUS); 559 if (status & UARTn_STATUS_TXC) 560 break; 561 if (!timeout--) 562 break; 563 } 564 565 if (!(status & UARTn_STATUS_TXENS)) 566 efm32_uart_write32(efm_port, UARTn_CMD_TXDIS, UARTn_CMD); 567} 568 569static void efm32_uart_console_get_options(struct efm32_uart_port *efm_port, 570 int *baud, int *parity, int *bits) 571{ 572 u32 ctrl = efm32_uart_read32(efm_port, UARTn_CTRL); 573 u32 route, clkdiv, frame; 574 575 if (ctrl & UARTn_CTRL_SYNC) 576 /* not operating in async mode */ 577 return; 578 579 route = efm32_uart_read32(efm_port, UARTn_ROUTE); 580 if (!(route & UARTn_ROUTE_TXPEN)) 581 /* tx pin not routed */ 582 return; 583 584 clkdiv = efm32_uart_read32(efm_port, UARTn_CLKDIV); 585 586 *baud = DIV_ROUND_CLOSEST(4 * efm_port->port.uartclk, 587 16 * (4 + (clkdiv >> 6))); 588 589 frame = efm32_uart_read32(efm_port, UARTn_FRAME); 590 if (frame & UARTn_FRAME_PARITY_ODD) 591 *parity = 'o'; 592 else if (frame & UARTn_FRAME_PARITY_EVEN) 593 *parity = 'e'; 594 else 595 *parity = 'n'; 596 597 *bits = (frame & UARTn_FRAME_DATABITS__MASK) - 598 UARTn_FRAME_DATABITS(4) + 4; 599 600 efm_debug(efm_port, "get_opts: options=%d%c%d\n", 601 *baud, *parity, *bits); 602} 603 604static int efm32_uart_console_setup(struct console *co, char *options) 605{ 606 struct efm32_uart_port *efm_port; 607 int baud = 115200; 608 int bits = 8; 609 int parity = 'n'; 610 int flow = 'n'; 611 int ret; 612 613 if (co->index < 0 || co->index >= ARRAY_SIZE(efm32_uart_ports)) { 614 unsigned i; 615 for (i = 0; i < ARRAY_SIZE(efm32_uart_ports); ++i) { 616 if (efm32_uart_ports[i]) { 617 pr_warn("efm32-console: fall back to console index %u (from %hhi)\n", 618 i, co->index); 619 co->index = i; 620 break; 621 } 622 } 623 } 624 625 efm_port = efm32_uart_ports[co->index]; 626 if (!efm_port) { 627 pr_warn("efm32-console: No port at %d\n", co->index); 628 return -ENODEV; 629 } 630 631 ret = clk_prepare(efm_port->clk); 632 if (ret) { 633 dev_warn(efm_port->port.dev, 634 "console: clk_prepare failed: %d\n", ret); 635 return ret; 636 } 637 638 efm_port->port.uartclk = clk_get_rate(efm_port->clk); 639 640 if (options) 641 uart_parse_options(options, &baud, &parity, &bits, &flow); 642 else 643 efm32_uart_console_get_options(efm_port, 644 &baud, &parity, &bits); 645 646 return uart_set_options(&efm_port->port, co, baud, parity, bits, flow); 647} 648 649static struct uart_driver efm32_uart_reg; 650 651static struct console efm32_uart_console = { 652 .name = DEV_NAME, 653 .write = efm32_uart_console_write, 654 .device = uart_console_device, 655 .setup = efm32_uart_console_setup, 656 .flags = CON_PRINTBUFFER, 657 .index = -1, 658 .data = &efm32_uart_reg, 659}; 660 661#else 662#define efm32_uart_console (*(struct console *)NULL) 663#endif /* ifdef CONFIG_SERIAL_EFM32_UART_CONSOLE / else */ 664 665static struct uart_driver efm32_uart_reg = { 666 .owner = THIS_MODULE, 667 .driver_name = DRIVER_NAME, 668 .dev_name = DEV_NAME, 669 .nr = ARRAY_SIZE(efm32_uart_ports), 670 .cons = &efm32_uart_console, 671}; 672 673static int efm32_uart_probe_dt(struct platform_device *pdev, 674 struct efm32_uart_port *efm_port) 675{ 676 struct device_node *np = pdev->dev.of_node; 677 int ret; 678 679 if (!np) 680 return 1; 681 682 ret = of_alias_get_id(np, "serial"); 683 if (ret < 0) { 684 dev_err(&pdev->dev, "failed to get alias id: %d\n", ret); 685 return ret; 686 } else { 687 efm_port->port.line = ret; 688 return 0; 689 } 690 691} 692 693static int efm32_uart_probe(struct platform_device *pdev) 694{ 695 struct efm32_uart_port *efm_port; 696 struct resource *res; 697 int ret; 698 699 efm_port = kzalloc(sizeof(*efm_port), GFP_KERNEL); 700 if (!efm_port) { 701 dev_dbg(&pdev->dev, "failed to allocate private data\n"); 702 return -ENOMEM; 703 } 704 705 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 706 if (!res) { 707 ret = -ENODEV; 708 dev_dbg(&pdev->dev, "failed to determine base address\n"); 709 goto err_get_base; 710 } 711 712 if (resource_size(res) < 60) { 713 ret = -EINVAL; 714 dev_dbg(&pdev->dev, "memory resource too small\n"); 715 goto err_too_small; 716 } 717 718 ret = platform_get_irq(pdev, 0); 719 if (ret <= 0) { 720 dev_dbg(&pdev->dev, "failed to get rx irq\n"); 721 goto err_get_rxirq; 722 } 723 724 efm_port->port.irq = ret; 725 726 ret = platform_get_irq(pdev, 1); 727 if (ret <= 0) 728 ret = efm_port->port.irq + 1; 729 730 efm_port->txirq = ret; 731 732 efm_port->port.dev = &pdev->dev; 733 efm_port->port.mapbase = res->start; 734 efm_port->port.type = PORT_EFMUART; 735 efm_port->port.iotype = UPIO_MEM32; 736 efm_port->port.fifosize = 2; 737 efm_port->port.ops = &efm32_uart_pops; 738 efm_port->port.flags = UPF_BOOT_AUTOCONF; 739 740 ret = efm32_uart_probe_dt(pdev, efm_port); 741 if (ret > 0) 742 /* not created by device tree */ 743 efm_port->port.line = pdev->id; 744 745 if (efm_port->port.line >= 0 && 746 efm_port->port.line < ARRAY_SIZE(efm32_uart_ports)) 747 efm32_uart_ports[efm_port->port.line] = efm_port; 748 749 ret = uart_add_one_port(&efm32_uart_reg, &efm_port->port); 750 if (ret) { 751 dev_dbg(&pdev->dev, "failed to add port: %d\n", ret); 752 753 if (pdev->id >= 0 && pdev->id < ARRAY_SIZE(efm32_uart_ports)) 754 efm32_uart_ports[pdev->id] = NULL; 755err_get_rxirq: 756err_too_small: 757err_get_base: 758 kfree(efm_port); 759 } else { 760 platform_set_drvdata(pdev, efm_port); 761 dev_dbg(&pdev->dev, "\\o/\n"); 762 } 763 764 return ret; 765} 766 767static int efm32_uart_remove(struct platform_device *pdev) 768{ 769 struct efm32_uart_port *efm_port = platform_get_drvdata(pdev); 770 771 platform_set_drvdata(pdev, NULL); 772 773 uart_remove_one_port(&efm32_uart_reg, &efm_port->port); 774 775 if (pdev->id >= 0 && pdev->id < ARRAY_SIZE(efm32_uart_ports)) 776 efm32_uart_ports[pdev->id] = NULL; 777 778 kfree(efm_port); 779 780 return 0; 781} 782 783static struct of_device_id efm32_uart_dt_ids[] = { 784 { 785 .compatible = "efm32,uart", 786 }, { 787 /* sentinel */ 788 } 789}; 790MODULE_DEVICE_TABLE(of, efm32_uart_dt_ids); 791 792static struct platform_driver efm32_uart_driver = { 793 .probe = efm32_uart_probe, 794 .remove = efm32_uart_remove, 795 796 .driver = { 797 .name = DRIVER_NAME, 798 .owner = THIS_MODULE, 799 .of_match_table = efm32_uart_dt_ids, 800 }, 801}; 802 803static int __init efm32_uart_init(void) 804{ 805 int ret; 806 807 ret = uart_register_driver(&efm32_uart_reg); 808 if (ret) 809 return ret; 810 811 ret = platform_driver_register(&efm32_uart_driver); 812 if (ret) 813 uart_unregister_driver(&efm32_uart_reg); 814 815 pr_info("EFM32 UART/USART driver\n"); 816 817 return ret; 818} 819module_init(efm32_uart_init); 820 821static void __exit efm32_uart_exit(void) 822{ 823 platform_driver_unregister(&efm32_uart_driver); 824 uart_unregister_driver(&efm32_uart_reg); 825} 826 827MODULE_AUTHOR("Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>"); 828MODULE_DESCRIPTION("EFM32 UART/USART driver"); 829MODULE_LICENSE("GPL v2"); 830MODULE_ALIAS("platform:" DRIVER_NAME);