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.7-rc6 912 lines 20 kB view raw
1/* 2 * mrst_max3110.c - spi uart protocol driver for Maxim 3110 3 * 4 * Copyright (c) 2008-2010, Intel Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms and conditions of the GNU General Public License, 8 * version 2, as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 * 15 * You should have received a copy of the GNU General Public License along with 16 * this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 20/* 21 * Note: 22 * 1. From Max3110 spec, the Rx FIFO has 8 words, while the Tx FIFO only has 23 * 1 word. If SPI master controller doesn't support sclk frequency change, 24 * then the char need be sent out one by one with some delay 25 * 26 * 2. Currently only RX available interrupt is used, no need for waiting TXE 27 * interrupt for a low speed UART device 28 */ 29 30#ifdef CONFIG_MAGIC_SYSRQ 31#define SUPPORT_SYSRQ 32#endif 33 34#include <linux/module.h> 35#include <linux/ioport.h> 36#include <linux/irq.h> 37#include <linux/init.h> 38#include <linux/console.h> 39#include <linux/tty.h> 40#include <linux/tty_flip.h> 41#include <linux/serial_core.h> 42#include <linux/serial_reg.h> 43 44#include <linux/kthread.h> 45#include <linux/spi/spi.h> 46 47#include "mrst_max3110.h" 48 49#define PR_FMT "mrst_max3110: " 50 51#define UART_TX_NEEDED 1 52#define CON_TX_NEEDED 2 53#define BIT_IRQ_PENDING 3 54 55struct uart_max3110 { 56 struct uart_port port; 57 struct spi_device *spi; 58 char name[SPI_NAME_SIZE]; 59 60 wait_queue_head_t wq; 61 struct task_struct *main_thread; 62 struct task_struct *read_thread; 63 struct mutex thread_mutex; 64 65 u32 baud; 66 u16 cur_conf; 67 u8 clock; 68 u8 parity, word_7bits; 69 u16 irq; 70 71 unsigned long uart_flags; 72 73 /* console related */ 74 struct circ_buf con_xmit; 75}; 76 77/* global data structure, may need be removed */ 78static struct uart_max3110 *pmax; 79 80static int receive_chars(struct uart_max3110 *max, 81 unsigned short *str, int len); 82static int max3110_read_multi(struct uart_max3110 *max); 83static void max3110_con_receive(struct uart_max3110 *max); 84 85static int max3110_write_then_read(struct uart_max3110 *max, 86 const void *txbuf, void *rxbuf, unsigned len, int always_fast) 87{ 88 struct spi_device *spi = max->spi; 89 struct spi_message message; 90 struct spi_transfer x; 91 int ret; 92 93 spi_message_init(&message); 94 memset(&x, 0, sizeof x); 95 x.len = len; 96 x.tx_buf = txbuf; 97 x.rx_buf = rxbuf; 98 spi_message_add_tail(&x, &message); 99 100 if (always_fast) 101 x.speed_hz = spi->max_speed_hz; 102 else if (max->baud) 103 x.speed_hz = max->baud; 104 105 /* Do the i/o */ 106 ret = spi_sync(spi, &message); 107 return ret; 108} 109 110/* Write a 16b word to the device */ 111static int max3110_out(struct uart_max3110 *max, const u16 out) 112{ 113 void *buf; 114 u16 *obuf, *ibuf; 115 int ret; 116 117 buf = kzalloc(8, GFP_KERNEL | GFP_DMA); 118 if (!buf) 119 return -ENOMEM; 120 121 obuf = buf; 122 ibuf = buf + 4; 123 *obuf = out; 124 ret = max3110_write_then_read(max, obuf, ibuf, 2, 1); 125 if (ret) { 126 pr_warning(PR_FMT "%s(): get err msg %d when sending 0x%x\n", 127 __func__, ret, out); 128 goto exit; 129 } 130 131 receive_chars(max, ibuf, 1); 132 133exit: 134 kfree(buf); 135 return ret; 136} 137 138/* 139 * This is usually used to read data from SPIC RX FIFO, which doesn't 140 * need any delay like flushing character out. 141 * 142 * Return how many valide bytes are read back 143 */ 144static int max3110_read_multi(struct uart_max3110 *max) 145{ 146 void *buf; 147 u16 *obuf, *ibuf; 148 int ret, blen; 149 150 blen = M3110_RX_FIFO_DEPTH * sizeof(u16); 151 buf = kzalloc(blen * 2, GFP_KERNEL | GFP_DMA); 152 if (!buf) { 153 pr_warning(PR_FMT "%s(): fail to alloc dma buffer\n", __func__); 154 return 0; 155 } 156 157 /* tx/rx always have the same length */ 158 obuf = buf; 159 ibuf = buf + blen; 160 161 if (max3110_write_then_read(max, obuf, ibuf, blen, 1)) { 162 kfree(buf); 163 return 0; 164 } 165 166 ret = receive_chars(max, ibuf, M3110_RX_FIFO_DEPTH); 167 168 kfree(buf); 169 return ret; 170} 171 172static void serial_m3110_con_putchar(struct uart_port *port, int ch) 173{ 174 struct uart_max3110 *max = 175 container_of(port, struct uart_max3110, port); 176 struct circ_buf *xmit = &max->con_xmit; 177 178 if (uart_circ_chars_free(xmit)) { 179 xmit->buf[xmit->head] = (char)ch; 180 xmit->head = (xmit->head + 1) & (PAGE_SIZE - 1); 181 } 182} 183 184/* 185 * Print a string to the serial port trying not to disturb 186 * any possible real use of the port... 187 * 188 * The console_lock must be held when we get here. 189 */ 190static void serial_m3110_con_write(struct console *co, 191 const char *s, unsigned int count) 192{ 193 if (!pmax) 194 return; 195 196 uart_console_write(&pmax->port, s, count, serial_m3110_con_putchar); 197 198 if (!test_and_set_bit(CON_TX_NEEDED, &pmax->uart_flags)) 199 wake_up(&pmax->wq); 200} 201 202static int __init 203serial_m3110_con_setup(struct console *co, char *options) 204{ 205 struct uart_max3110 *max = pmax; 206 int baud = 115200; 207 int bits = 8; 208 int parity = 'n'; 209 int flow = 'n'; 210 211 pr_info(PR_FMT "setting up console\n"); 212 213 if (co->index == -1) 214 co->index = 0; 215 216 if (!max) { 217 pr_err(PR_FMT "pmax is NULL, return"); 218 return -ENODEV; 219 } 220 221 if (options) 222 uart_parse_options(options, &baud, &parity, &bits, &flow); 223 224 return uart_set_options(&max->port, co, baud, parity, bits, flow); 225} 226 227static struct tty_driver *serial_m3110_con_device(struct console *co, 228 int *index) 229{ 230 struct uart_driver *p = co->data; 231 *index = co->index; 232 return p->tty_driver; 233} 234 235static struct uart_driver serial_m3110_reg; 236static struct console serial_m3110_console = { 237 .name = "ttyS", 238 .write = serial_m3110_con_write, 239 .device = serial_m3110_con_device, 240 .setup = serial_m3110_con_setup, 241 .flags = CON_PRINTBUFFER, 242 .index = -1, 243 .data = &serial_m3110_reg, 244}; 245 246static unsigned int serial_m3110_tx_empty(struct uart_port *port) 247{ 248 return 1; 249} 250 251static void serial_m3110_stop_tx(struct uart_port *port) 252{ 253 return; 254} 255 256/* stop_rx will be called in spin_lock env */ 257static void serial_m3110_stop_rx(struct uart_port *port) 258{ 259 return; 260} 261 262#define WORDS_PER_XFER 128 263static void send_circ_buf(struct uart_max3110 *max, 264 struct circ_buf *xmit) 265{ 266 void *buf; 267 u16 *obuf, *ibuf; 268 int i, len, blen, dma_size, left, ret = 0; 269 270 271 dma_size = WORDS_PER_XFER * sizeof(u16) * 2; 272 buf = kzalloc(dma_size, GFP_KERNEL | GFP_DMA); 273 if (!buf) 274 return; 275 obuf = buf; 276 ibuf = buf + dma_size/2; 277 278 while (!uart_circ_empty(xmit)) { 279 left = uart_circ_chars_pending(xmit); 280 while (left) { 281 len = min(left, WORDS_PER_XFER); 282 blen = len * sizeof(u16); 283 memset(ibuf, 0, blen); 284 285 for (i = 0; i < len; i++) { 286 obuf[i] = (u8)xmit->buf[xmit->tail] | WD_TAG; 287 xmit->tail = (xmit->tail + 1) & 288 (UART_XMIT_SIZE - 1); 289 } 290 291 /* Fail to send msg to console is not very critical */ 292 293 ret = max3110_write_then_read(max, obuf, ibuf, blen, 0); 294 if (ret) 295 pr_warning(PR_FMT "%s(): get err msg %d\n", 296 __func__, ret); 297 298 receive_chars(max, ibuf, len); 299 300 max->port.icount.tx += len; 301 left -= len; 302 } 303 } 304 305 kfree(buf); 306} 307 308static void transmit_char(struct uart_max3110 *max) 309{ 310 struct uart_port *port = &max->port; 311 struct circ_buf *xmit = &port->state->xmit; 312 313 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) 314 return; 315 316 send_circ_buf(max, xmit); 317 318 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) 319 uart_write_wakeup(port); 320 321 if (uart_circ_empty(xmit)) 322 serial_m3110_stop_tx(port); 323} 324 325/* 326 * This will be called by uart_write() and tty_write, can't 327 * go to sleep 328 */ 329static void serial_m3110_start_tx(struct uart_port *port) 330{ 331 struct uart_max3110 *max = 332 container_of(port, struct uart_max3110, port); 333 334 if (!test_and_set_bit(UART_TX_NEEDED, &max->uart_flags)) 335 wake_up(&max->wq); 336} 337 338static int 339receive_chars(struct uart_max3110 *max, unsigned short *str, int len) 340{ 341 struct uart_port *port = &max->port; 342 struct tty_struct *tty; 343 char buf[M3110_RX_FIFO_DEPTH]; 344 int r, w, usable; 345 346 /* If uart is not opened, just return */ 347 if (!port->state) 348 return 0; 349 350 tty = tty_port_tty_get(&port->state->port); 351 if (!tty) 352 return 0; 353 354 for (r = 0, w = 0; r < len; r++) { 355 if (str[r] & MAX3110_BREAK && 356 uart_handle_break(port)) 357 continue; 358 359 if (str[r] & MAX3110_READ_DATA_AVAILABLE) { 360 if (uart_handle_sysrq_char(port, str[r] & 0xff)) 361 continue; 362 363 buf[w++] = str[r] & 0xff; 364 } 365 } 366 367 if (!w) { 368 tty_kref_put(tty); 369 return 0; 370 } 371 372 for (r = 0; w; r += usable, w -= usable) { 373 usable = tty_buffer_request_room(tty, w); 374 if (usable) { 375 tty_insert_flip_string(tty, buf + r, usable); 376 port->icount.rx += usable; 377 } 378 } 379 tty_flip_buffer_push(tty); 380 tty_kref_put(tty); 381 382 return r; 383} 384 385/* 386 * This routine will be used in read_thread or RX IRQ handling, 387 * it will first do one round buffer read(8 words), if there is some 388 * valid RX data, will try to read 5 more rounds till all data 389 * is read out. 390 * 391 * Use stack space as data buffer to save some system load, and chose 392 * 504 Btyes as a threadhold to do a bulk push to upper tty layer when 393 * receiving bulk data, a much bigger buffer may cause stack overflow 394 */ 395static void max3110_con_receive(struct uart_max3110 *max) 396{ 397 int loop = 1, num; 398 399 do { 400 num = max3110_read_multi(max); 401 402 if (num) { 403 loop = 5; 404 } 405 } while (--loop); 406} 407 408static int max3110_main_thread(void *_max) 409{ 410 struct uart_max3110 *max = _max; 411 wait_queue_head_t *wq = &max->wq; 412 int ret = 0; 413 struct circ_buf *xmit = &max->con_xmit; 414 415 pr_info(PR_FMT "start main thread\n"); 416 417 do { 418 wait_event_interruptible(*wq, 419 max->uart_flags || kthread_should_stop()); 420 421 mutex_lock(&max->thread_mutex); 422 423 if (test_and_clear_bit(BIT_IRQ_PENDING, &max->uart_flags)) 424 max3110_con_receive(max); 425 426 /* first handle console output */ 427 if (test_and_clear_bit(CON_TX_NEEDED, &max->uart_flags)) 428 send_circ_buf(max, xmit); 429 430 /* handle uart output */ 431 if (test_and_clear_bit(UART_TX_NEEDED, &max->uart_flags)) 432 transmit_char(max); 433 434 mutex_unlock(&max->thread_mutex); 435 436 } while (!kthread_should_stop()); 437 438 return ret; 439} 440 441static irqreturn_t serial_m3110_irq(int irq, void *dev_id) 442{ 443 struct uart_max3110 *max = dev_id; 444 445 /* max3110's irq is a falling edge, not level triggered, 446 * so no need to disable the irq */ 447 448 if (!test_and_set_bit(BIT_IRQ_PENDING, &max->uart_flags)) 449 wake_up(&max->wq); 450 451 return IRQ_HANDLED; 452} 453 454/* if don't use RX IRQ, then need a thread to polling read */ 455static int max3110_read_thread(void *_max) 456{ 457 struct uart_max3110 *max = _max; 458 459 pr_info(PR_FMT "start read thread\n"); 460 do { 461 /* 462 * If can't acquire the mutex, it means the main thread 463 * is running which will also perform the rx job 464 */ 465 if (mutex_trylock(&max->thread_mutex)) { 466 max3110_con_receive(max); 467 mutex_unlock(&max->thread_mutex); 468 } 469 470 set_current_state(TASK_INTERRUPTIBLE); 471 schedule_timeout(HZ / 20); 472 } while (!kthread_should_stop()); 473 474 return 0; 475} 476 477static int serial_m3110_startup(struct uart_port *port) 478{ 479 struct uart_max3110 *max = 480 container_of(port, struct uart_max3110, port); 481 u16 config = 0; 482 int ret = 0; 483 484 if (port->line != 0) { 485 pr_err(PR_FMT "uart port startup failed\n"); 486 return -1; 487 } 488 489 /* Disable all IRQ and config it to 115200, 8n1 */ 490 config = WC_TAG | WC_FIFO_ENABLE 491 | WC_1_STOPBITS 492 | WC_8BIT_WORD 493 | WC_BAUD_DR2; 494 495 /* as we use thread to handle tx/rx, need set low latency */ 496 port->state->port.tty->low_latency = 1; 497 498 if (max->irq) { 499 max->read_thread = NULL; 500 ret = request_irq(max->irq, serial_m3110_irq, 501 IRQ_TYPE_EDGE_FALLING, "max3110", max); 502 if (ret) { 503 max->irq = 0; 504 pr_err(PR_FMT "unable to allocate IRQ, polling\n"); 505 } else { 506 /* Enable RX IRQ only */ 507 config |= WC_RXA_IRQ_ENABLE; 508 } 509 } 510 511 if (max->irq == 0) { 512 /* If IRQ is disabled, start a read thread for input data */ 513 max->read_thread = 514 kthread_run(max3110_read_thread, max, "max3110_read"); 515 if (IS_ERR(max->read_thread)) { 516 ret = PTR_ERR(max->read_thread); 517 max->read_thread = NULL; 518 pr_err(PR_FMT "Can't create read thread!\n"); 519 return ret; 520 } 521 } 522 523 ret = max3110_out(max, config); 524 if (ret) { 525 if (max->irq) 526 free_irq(max->irq, max); 527 if (max->read_thread) 528 kthread_stop(max->read_thread); 529 max->read_thread = NULL; 530 return ret; 531 } 532 533 max->cur_conf = config; 534 return 0; 535} 536 537static void serial_m3110_shutdown(struct uart_port *port) 538{ 539 struct uart_max3110 *max = 540 container_of(port, struct uart_max3110, port); 541 u16 config; 542 543 if (max->read_thread) { 544 kthread_stop(max->read_thread); 545 max->read_thread = NULL; 546 } 547 548 if (max->irq) 549 free_irq(max->irq, max); 550 551 /* Disable interrupts from this port */ 552 config = WC_TAG | WC_SW_SHDI; 553 max3110_out(max, config); 554} 555 556static void serial_m3110_release_port(struct uart_port *port) 557{ 558} 559 560static int serial_m3110_request_port(struct uart_port *port) 561{ 562 return 0; 563} 564 565static void serial_m3110_config_port(struct uart_port *port, int flags) 566{ 567 port->type = PORT_MAX3100; 568} 569 570static int 571serial_m3110_verify_port(struct uart_port *port, struct serial_struct *ser) 572{ 573 /* we don't want the core code to modify any port params */ 574 return -EINVAL; 575} 576 577 578static const char *serial_m3110_type(struct uart_port *port) 579{ 580 struct uart_max3110 *max = 581 container_of(port, struct uart_max3110, port); 582 return max->name; 583} 584 585static void 586serial_m3110_set_termios(struct uart_port *port, struct ktermios *termios, 587 struct ktermios *old) 588{ 589 struct uart_max3110 *max = 590 container_of(port, struct uart_max3110, port); 591 unsigned char cval; 592 unsigned int baud, parity = 0; 593 int clk_div = -1; 594 u16 new_conf = max->cur_conf; 595 596 switch (termios->c_cflag & CSIZE) { 597 case CS7: 598 cval = UART_LCR_WLEN7; 599 new_conf |= WC_7BIT_WORD; 600 break; 601 default: 602 /* We only support CS7 & CS8 */ 603 termios->c_cflag &= ~CSIZE; 604 termios->c_cflag |= CS8; 605 case CS8: 606 cval = UART_LCR_WLEN8; 607 new_conf |= WC_8BIT_WORD; 608 break; 609 } 610 611 baud = uart_get_baud_rate(port, termios, old, 0, 230400); 612 613 /* First calc the div for 1.8MHZ clock case */ 614 switch (baud) { 615 case 300: 616 clk_div = WC_BAUD_DR384; 617 break; 618 case 600: 619 clk_div = WC_BAUD_DR192; 620 break; 621 case 1200: 622 clk_div = WC_BAUD_DR96; 623 break; 624 case 2400: 625 clk_div = WC_BAUD_DR48; 626 break; 627 case 4800: 628 clk_div = WC_BAUD_DR24; 629 break; 630 case 9600: 631 clk_div = WC_BAUD_DR12; 632 break; 633 case 19200: 634 clk_div = WC_BAUD_DR6; 635 break; 636 case 38400: 637 clk_div = WC_BAUD_DR3; 638 break; 639 case 57600: 640 clk_div = WC_BAUD_DR2; 641 break; 642 case 115200: 643 clk_div = WC_BAUD_DR1; 644 break; 645 case 230400: 646 if (max->clock & MAX3110_HIGH_CLK) 647 break; 648 default: 649 /* Pick the previous baud rate */ 650 baud = max->baud; 651 clk_div = max->cur_conf & WC_BAUD_DIV_MASK; 652 tty_termios_encode_baud_rate(termios, baud, baud); 653 } 654 655 if (max->clock & MAX3110_HIGH_CLK) { 656 clk_div += 1; 657 /* High clk version max3110 doesn't support B300 */ 658 if (baud == 300) { 659 baud = 600; 660 clk_div = WC_BAUD_DR384; 661 } 662 if (baud == 230400) 663 clk_div = WC_BAUD_DR1; 664 tty_termios_encode_baud_rate(termios, baud, baud); 665 } 666 667 new_conf = (new_conf & ~WC_BAUD_DIV_MASK) | clk_div; 668 669 if (unlikely(termios->c_cflag & CMSPAR)) 670 termios->c_cflag &= ~CMSPAR; 671 672 if (termios->c_cflag & CSTOPB) 673 new_conf |= WC_2_STOPBITS; 674 else 675 new_conf &= ~WC_2_STOPBITS; 676 677 if (termios->c_cflag & PARENB) { 678 new_conf |= WC_PARITY_ENABLE; 679 parity |= UART_LCR_PARITY; 680 } else 681 new_conf &= ~WC_PARITY_ENABLE; 682 683 if (!(termios->c_cflag & PARODD)) 684 parity |= UART_LCR_EPAR; 685 max->parity = parity; 686 687 uart_update_timeout(port, termios->c_cflag, baud); 688 689 new_conf |= WC_TAG; 690 if (new_conf != max->cur_conf) { 691 if (!max3110_out(max, new_conf)) { 692 max->cur_conf = new_conf; 693 max->baud = baud; 694 } 695 } 696} 697 698/* Don't handle hw handshaking */ 699static unsigned int serial_m3110_get_mctrl(struct uart_port *port) 700{ 701 return TIOCM_DSR | TIOCM_CAR | TIOCM_DSR; 702} 703 704static void serial_m3110_set_mctrl(struct uart_port *port, unsigned int mctrl) 705{ 706} 707 708static void serial_m3110_break_ctl(struct uart_port *port, int break_state) 709{ 710} 711 712static void serial_m3110_pm(struct uart_port *port, unsigned int state, 713 unsigned int oldstate) 714{ 715} 716 717static void serial_m3110_enable_ms(struct uart_port *port) 718{ 719} 720 721struct uart_ops serial_m3110_ops = { 722 .tx_empty = serial_m3110_tx_empty, 723 .set_mctrl = serial_m3110_set_mctrl, 724 .get_mctrl = serial_m3110_get_mctrl, 725 .stop_tx = serial_m3110_stop_tx, 726 .start_tx = serial_m3110_start_tx, 727 .stop_rx = serial_m3110_stop_rx, 728 .enable_ms = serial_m3110_enable_ms, 729 .break_ctl = serial_m3110_break_ctl, 730 .startup = serial_m3110_startup, 731 .shutdown = serial_m3110_shutdown, 732 .set_termios = serial_m3110_set_termios, 733 .pm = serial_m3110_pm, 734 .type = serial_m3110_type, 735 .release_port = serial_m3110_release_port, 736 .request_port = serial_m3110_request_port, 737 .config_port = serial_m3110_config_port, 738 .verify_port = serial_m3110_verify_port, 739}; 740 741static struct uart_driver serial_m3110_reg = { 742 .owner = THIS_MODULE, 743 .driver_name = "MRST serial", 744 .dev_name = "ttyS", 745 .major = TTY_MAJOR, 746 .minor = 64, 747 .nr = 1, 748 .cons = &serial_m3110_console, 749}; 750 751#ifdef CONFIG_PM 752static int serial_m3110_suspend(struct spi_device *spi, pm_message_t state) 753{ 754 struct uart_max3110 *max = spi_get_drvdata(spi); 755 756 disable_irq(max->irq); 757 uart_suspend_port(&serial_m3110_reg, &max->port); 758 max3110_out(max, max->cur_conf | WC_SW_SHDI); 759 return 0; 760} 761 762static int serial_m3110_resume(struct spi_device *spi) 763{ 764 struct uart_max3110 *max = spi_get_drvdata(spi); 765 766 max3110_out(max, max->cur_conf); 767 uart_resume_port(&serial_m3110_reg, &max->port); 768 enable_irq(max->irq); 769 return 0; 770} 771#else 772#define serial_m3110_suspend NULL 773#define serial_m3110_resume NULL 774#endif 775 776static int __devinit serial_m3110_probe(struct spi_device *spi) 777{ 778 struct uart_max3110 *max; 779 void *buffer; 780 u16 res; 781 int ret = 0; 782 783 max = kzalloc(sizeof(*max), GFP_KERNEL); 784 if (!max) 785 return -ENOMEM; 786 787 /* Set spi info */ 788 spi->bits_per_word = 16; 789 max->clock = MAX3110_HIGH_CLK; 790 791 spi_setup(spi); 792 793 max->port.type = PORT_MAX3100; 794 max->port.fifosize = 2; /* Only have 16b buffer */ 795 max->port.ops = &serial_m3110_ops; 796 max->port.line = 0; 797 max->port.dev = &spi->dev; 798 max->port.uartclk = 115200; 799 800 max->spi = spi; 801 strcpy(max->name, spi->modalias); 802 max->irq = (u16)spi->irq; 803 804 mutex_init(&max->thread_mutex); 805 806 max->word_7bits = 0; 807 max->parity = 0; 808 max->baud = 0; 809 810 max->cur_conf = 0; 811 max->uart_flags = 0; 812 813 /* Check if reading configuration register returns something sane */ 814 815 res = RC_TAG; 816 ret = max3110_write_then_read(max, (u8 *)&res, (u8 *)&res, 2, 0); 817 if (ret < 0 || res == 0 || res == 0xffff) { 818 dev_dbg(&spi->dev, "MAX3111 deemed not present (conf reg %04x)", 819 res); 820 ret = -ENODEV; 821 goto err_get_page; 822 } 823 824 buffer = (void *)__get_free_page(GFP_KERNEL); 825 if (!buffer) { 826 ret = -ENOMEM; 827 goto err_get_page; 828 } 829 max->con_xmit.buf = buffer; 830 max->con_xmit.head = 0; 831 max->con_xmit.tail = 0; 832 833 init_waitqueue_head(&max->wq); 834 835 max->main_thread = kthread_run(max3110_main_thread, 836 max, "max3110_main"); 837 if (IS_ERR(max->main_thread)) { 838 ret = PTR_ERR(max->main_thread); 839 goto err_kthread; 840 } 841 842 spi_set_drvdata(spi, max); 843 pmax = max; 844 845 /* Give membase a psudo value to pass serial_core's check */ 846 max->port.membase = (void *)0xff110000; 847 uart_add_one_port(&serial_m3110_reg, &max->port); 848 849 return 0; 850 851err_kthread: 852 free_page((unsigned long)buffer); 853err_get_page: 854 kfree(max); 855 return ret; 856} 857 858static int __devexit serial_m3110_remove(struct spi_device *dev) 859{ 860 struct uart_max3110 *max = spi_get_drvdata(dev); 861 862 if (!max) 863 return 0; 864 865 uart_remove_one_port(&serial_m3110_reg, &max->port); 866 867 free_page((unsigned long)max->con_xmit.buf); 868 869 if (max->main_thread) 870 kthread_stop(max->main_thread); 871 872 kfree(max); 873 return 0; 874} 875 876static struct spi_driver uart_max3110_driver = { 877 .driver = { 878 .name = "spi_max3111", 879 .owner = THIS_MODULE, 880 }, 881 .probe = serial_m3110_probe, 882 .remove = __devexit_p(serial_m3110_remove), 883 .suspend = serial_m3110_suspend, 884 .resume = serial_m3110_resume, 885}; 886 887static int __init serial_m3110_init(void) 888{ 889 int ret = 0; 890 891 ret = uart_register_driver(&serial_m3110_reg); 892 if (ret) 893 return ret; 894 895 ret = spi_register_driver(&uart_max3110_driver); 896 if (ret) 897 uart_unregister_driver(&serial_m3110_reg); 898 899 return ret; 900} 901 902static void __exit serial_m3110_exit(void) 903{ 904 spi_unregister_driver(&uart_max3110_driver); 905 uart_unregister_driver(&serial_m3110_reg); 906} 907 908module_init(serial_m3110_init); 909module_exit(serial_m3110_exit); 910 911MODULE_LICENSE("GPL v2"); 912MODULE_ALIAS("spi:max3110-uart");