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