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 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_port *tport;
 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        tport = &port->state->port;
 351
 352        for (r = 0, w = 0; r < len; r++) {
 353                if (str[r] & MAX3110_BREAK &&
 354                    uart_handle_break(port))
 355                        continue;
 356
 357                if (str[r] & MAX3110_READ_DATA_AVAILABLE) {
 358                        if (uart_handle_sysrq_char(port, str[r] & 0xff))
 359                                continue;
 360
 361                        buf[w++] = str[r] & 0xff;
 362                }
 363        }
 364
 365        if (!w)
 366                return 0;
 367
 368        for (r = 0; w; r += usable, w -= usable) {
 369                usable = tty_buffer_request_room(tport, w);
 370                if (usable) {
 371                        tty_insert_flip_string(tport, buf + r, usable);
 372                        port->icount.rx += usable;
 373                }
 374        }
 375        tty_flip_buffer_push(tport);
 376
 377        return r;
 378}
 379
 380/*
 381 * This routine will be used in read_thread or RX IRQ handling,
 382 * it will first do one round buffer read(8 words), if there is some
 383 * valid RX data, will try to read 5 more rounds till all data
 384 * is read out.
 385 *
 386 * Use stack space as data buffer to save some system load, and chose
 387 * 504 Btyes as a threadhold to do a bulk push to upper tty layer when
 388 * receiving bulk data, a much bigger buffer may cause stack overflow
 389 */
 390static void max3110_con_receive(struct uart_max3110 *max)
 391{
 392        int loop = 1, num;
 393
 394        do {
 395                num = max3110_read_multi(max);
 396
 397                if (num) {
 398                        loop = 5;
 399                }
 400        } while (--loop);
 401}
 402
 403static int max3110_main_thread(void *_max)
 404{
 405        struct uart_max3110 *max = _max;
 406        wait_queue_head_t *wq = &max->wq;
 407        int ret = 0;
 408        struct circ_buf *xmit = &max->con_xmit;
 409
 410        pr_info(PR_FMT "start main thread\n");
 411
 412        do {
 413                wait_event_interruptible(*wq,
 414                                max->uart_flags || kthread_should_stop());
 415
 416                mutex_lock(&max->thread_mutex);
 417
 418                if (test_and_clear_bit(BIT_IRQ_PENDING, &max->uart_flags))
 419                        max3110_con_receive(max);
 420
 421                /* first handle console output */
 422                if (test_and_clear_bit(CON_TX_NEEDED, &max->uart_flags))
 423                        send_circ_buf(max, xmit);
 424
 425                /* handle uart output */
 426                if (test_and_clear_bit(UART_TX_NEEDED, &max->uart_flags))
 427                        transmit_char(max);
 428
 429                mutex_unlock(&max->thread_mutex);
 430
 431        } while (!kthread_should_stop());
 432
 433        return ret;
 434}
 435
 436static irqreturn_t serial_m3110_irq(int irq, void *dev_id)
 437{
 438        struct uart_max3110 *max = dev_id;
 439
 440        /* max3110's irq is a falling edge, not level triggered,
 441         * so no need to disable the irq */
 442
 443        if (!test_and_set_bit(BIT_IRQ_PENDING, &max->uart_flags))
 444                wake_up(&max->wq);
 445
 446        return IRQ_HANDLED;
 447}
 448
 449/* if don't use RX IRQ, then need a thread to polling read */
 450static int max3110_read_thread(void *_max)
 451{
 452        struct uart_max3110 *max = _max;
 453
 454        pr_info(PR_FMT "start read thread\n");
 455        do {
 456                /*
 457                 * If can't acquire the mutex, it means the main thread
 458                 * is running which will also perform the rx job
 459                 */
 460                if (mutex_trylock(&max->thread_mutex)) {
 461                        max3110_con_receive(max);
 462                        mutex_unlock(&max->thread_mutex);
 463                }
 464
 465                set_current_state(TASK_INTERRUPTIBLE);
 466                schedule_timeout(HZ / 20);
 467        } while (!kthread_should_stop());
 468
 469        return 0;
 470}
 471
 472static int serial_m3110_startup(struct uart_port *port)
 473{
 474        struct uart_max3110 *max =
 475                container_of(port, struct uart_max3110, port);
 476        u16 config = 0;
 477        int ret = 0;
 478
 479        if (port->line != 0) {
 480                pr_err(PR_FMT "uart port startup failed\n");
 481                return -1;
 482        }
 483
 484        /* Disable all IRQ and config it to 115200, 8n1 */
 485        config = WC_TAG | WC_FIFO_ENABLE
 486                        | WC_1_STOPBITS
 487                        | WC_8BIT_WORD
 488                        | WC_BAUD_DR2;
 489
 490        /* as we use thread to handle tx/rx, need set low latency */
 491        port->state->port.low_latency = 1;
 492
 493        if (max->irq) {
 494                max->read_thread = NULL;
 495                ret = request_irq(max->irq, serial_m3110_irq,
 496                                IRQ_TYPE_EDGE_FALLING, "max3110", max);
 497                if (ret) {
 498                        max->irq = 0;
 499                        pr_err(PR_FMT "unable to allocate IRQ, polling\n");
 500                }  else {
 501                        /* Enable RX IRQ only */
 502                        config |= WC_RXA_IRQ_ENABLE;
 503                }
 504        }
 505
 506        if (max->irq == 0) {
 507                /* If IRQ is disabled, start a read thread for input data */
 508                max->read_thread =
 509                        kthread_run(max3110_read_thread, max, "max3110_read");
 510                if (IS_ERR(max->read_thread)) {
 511                        ret = PTR_ERR(max->read_thread);
 512                        max->read_thread = NULL;
 513                        pr_err(PR_FMT "Can't create read thread!\n");
 514                        return ret;
 515                }
 516        }
 517
 518        ret = max3110_out(max, config);
 519        if (ret) {
 520                if (max->irq)
 521                        free_irq(max->irq, max);
 522                if (max->read_thread)
 523                        kthread_stop(max->read_thread);
 524                max->read_thread = NULL;
 525                return ret;
 526        }
 527
 528        max->cur_conf = config;
 529        return 0;
 530}
 531
 532static void serial_m3110_shutdown(struct uart_port *port)
 533{
 534        struct uart_max3110 *max =
 535                container_of(port, struct uart_max3110, port);
 536        u16 config;
 537
 538        if (max->read_thread) {
 539                kthread_stop(max->read_thread);
 540                max->read_thread = NULL;
 541        }
 542
 543        if (max->irq)
 544                free_irq(max->irq, max);
 545
 546        /* Disable interrupts from this port */
 547        config = WC_TAG | WC_SW_SHDI;
 548        max3110_out(max, config);
 549}
 550
 551static void serial_m3110_release_port(struct uart_port *port)
 552{
 553}
 554
 555static int serial_m3110_request_port(struct uart_port *port)
 556{
 557        return 0;
 558}
 559
 560static void serial_m3110_config_port(struct uart_port *port, int flags)
 561{
 562        port->type = PORT_MAX3100;
 563}
 564
 565static int
 566serial_m3110_verify_port(struct uart_port *port, struct serial_struct *ser)
 567{
 568        /* we don't want the core code to modify any port params */
 569        return -EINVAL;
 570}
 571
 572
 573static const char *serial_m3110_type(struct uart_port *port)
 574{
 575        struct uart_max3110 *max =
 576                container_of(port, struct uart_max3110, port);
 577        return max->name;
 578}
 579
 580static void
 581serial_m3110_set_termios(struct uart_port *port, struct ktermios *termios,
 582                       struct ktermios *old)
 583{
 584        struct uart_max3110 *max =
 585                container_of(port, struct uart_max3110, port);
 586        unsigned char cval;
 587        unsigned int baud, parity = 0;
 588        int clk_div = -1;
 589        u16 new_conf = max->cur_conf;
 590
 591        switch (termios->c_cflag & CSIZE) {
 592        case CS7:
 593                cval = UART_LCR_WLEN7;
 594                new_conf |= WC_7BIT_WORD;
 595                break;
 596        default:
 597                /* We only support CS7 & CS8 */
 598                termios->c_cflag &= ~CSIZE;
 599                termios->c_cflag |= CS8;
 600        case CS8:
 601                cval = UART_LCR_WLEN8;
 602                new_conf |= WC_8BIT_WORD;
 603                break;
 604        }
 605
 606        baud = uart_get_baud_rate(port, termios, old, 0, 230400);
 607
 608        /* First calc the div for 1.8MHZ clock case */
 609        switch (baud) {
 610        case 300:
 611                clk_div = WC_BAUD_DR384;
 612                break;
 613        case 600:
 614                clk_div = WC_BAUD_DR192;
 615                break;
 616        case 1200:
 617                clk_div = WC_BAUD_DR96;
 618                break;
 619        case 2400:
 620                clk_div = WC_BAUD_DR48;
 621                break;
 622        case 4800:
 623                clk_div = WC_BAUD_DR24;
 624                break;
 625        case 9600:
 626                clk_div = WC_BAUD_DR12;
 627                break;
 628        case 19200:
 629                clk_div = WC_BAUD_DR6;
 630                break;
 631        case 38400:
 632                clk_div = WC_BAUD_DR3;
 633                break;
 634        case 57600:
 635                clk_div = WC_BAUD_DR2;
 636                break;
 637        case 115200:
 638                clk_div = WC_BAUD_DR1;
 639                break;
 640        case 230400:
 641                if (max->clock & MAX3110_HIGH_CLK)
 642                        break;
 643        default:
 644                /* Pick the previous baud rate */
 645                baud = max->baud;
 646                clk_div = max->cur_conf & WC_BAUD_DIV_MASK;
 647                tty_termios_encode_baud_rate(termios, baud, baud);
 648        }
 649
 650        if (max->clock & MAX3110_HIGH_CLK) {
 651                clk_div += 1;
 652                /* High clk version max3110 doesn't support B300 */
 653                if (baud == 300) {
 654                        baud = 600;
 655                        clk_div = WC_BAUD_DR384;
 656                }
 657                if (baud == 230400)
 658                        clk_div = WC_BAUD_DR1;
 659                tty_termios_encode_baud_rate(termios, baud, baud);
 660        }
 661
 662        new_conf = (new_conf & ~WC_BAUD_DIV_MASK) | clk_div;
 663
 664        if (unlikely(termios->c_cflag & CMSPAR))
 665                termios->c_cflag &= ~CMSPAR;
 666
 667        if (termios->c_cflag & CSTOPB)
 668                new_conf |= WC_2_STOPBITS;
 669        else
 670                new_conf &= ~WC_2_STOPBITS;
 671
 672        if (termios->c_cflag & PARENB) {
 673                new_conf |= WC_PARITY_ENABLE;
 674                parity |= UART_LCR_PARITY;
 675        } else
 676                new_conf &= ~WC_PARITY_ENABLE;
 677
 678        if (!(termios->c_cflag & PARODD))
 679                parity |= UART_LCR_EPAR;
 680        max->parity = parity;
 681
 682        uart_update_timeout(port, termios->c_cflag, baud);
 683
 684        new_conf |= WC_TAG;
 685        if (new_conf != max->cur_conf) {
 686                if (!max3110_out(max, new_conf)) {
 687                        max->cur_conf = new_conf;
 688                        max->baud = baud;
 689                }
 690        }
 691}
 692
 693/* Don't handle hw handshaking */
 694static unsigned int serial_m3110_get_mctrl(struct uart_port *port)
 695{
 696        return TIOCM_DSR | TIOCM_CAR | TIOCM_DSR;
 697}
 698
 699static void serial_m3110_set_mctrl(struct uart_port *port, unsigned int mctrl)
 700{
 701}
 702
 703static void serial_m3110_break_ctl(struct uart_port *port, int break_state)
 704{
 705}
 706
 707static void serial_m3110_pm(struct uart_port *port, unsigned int state,
 708                        unsigned int oldstate)
 709{
 710}
 711
 712static void serial_m3110_enable_ms(struct uart_port *port)
 713{
 714}
 715
 716static struct uart_ops serial_m3110_ops = {
 717        .tx_empty       = serial_m3110_tx_empty,
 718        .set_mctrl      = serial_m3110_set_mctrl,
 719        .get_mctrl      = serial_m3110_get_mctrl,
 720        .stop_tx        = serial_m3110_stop_tx,
 721        .start_tx       = serial_m3110_start_tx,
 722        .stop_rx        = serial_m3110_stop_rx,
 723        .enable_ms      = serial_m3110_enable_ms,
 724        .break_ctl      = serial_m3110_break_ctl,
 725        .startup        = serial_m3110_startup,
 726        .shutdown       = serial_m3110_shutdown,
 727        .set_termios    = serial_m3110_set_termios,
 728        .pm             = serial_m3110_pm,
 729        .type           = serial_m3110_type,
 730        .release_port   = serial_m3110_release_port,
 731        .request_port   = serial_m3110_request_port,
 732        .config_port    = serial_m3110_config_port,
 733        .verify_port    = serial_m3110_verify_port,
 734};
 735
 736static struct uart_driver serial_m3110_reg = {
 737        .owner          = THIS_MODULE,
 738        .driver_name    = "MRST serial",
 739        .dev_name       = "ttyS",
 740        .major          = TTY_MAJOR,
 741        .minor          = 64,
 742        .nr             = 1,
 743        .cons           = &serial_m3110_console,
 744};
 745
 746#ifdef CONFIG_PM_SLEEP
 747static int serial_m3110_suspend(struct device *dev)
 748{
 749        struct spi_device *spi = to_spi_device(dev);
 750        struct uart_max3110 *max = spi_get_drvdata(spi);
 751
 752        disable_irq(max->irq);
 753        uart_suspend_port(&serial_m3110_reg, &max->port);
 754        max3110_out(max, max->cur_conf | WC_SW_SHDI);
 755        return 0;
 756}
 757
 758static int serial_m3110_resume(struct device *dev)
 759{
 760        struct spi_device *spi = to_spi_device(dev);
 761        struct uart_max3110 *max = spi_get_drvdata(spi);
 762
 763        max3110_out(max, max->cur_conf);
 764        uart_resume_port(&serial_m3110_reg, &max->port);
 765        enable_irq(max->irq);
 766        return 0;
 767}
 768
 769static SIMPLE_DEV_PM_OPS(serial_m3110_pm_ops, serial_m3110_suspend,
 770                        serial_m3110_resume);
 771#define SERIAL_M3110_PM_OPS (&serial_m3110_pm_ops)
 772
 773#else
 774#define SERIAL_M3110_PM_OPS NULL
 775#endif
 776
 777static int serial_m3110_probe(struct spi_device *spi)
 778{
 779        struct uart_max3110 *max;
 780        void *buffer;
 781        u16 res;
 782        int ret = 0;
 783
 784        max = kzalloc(sizeof(*max), GFP_KERNEL);
 785        if (!max)
 786                return -ENOMEM;
 787
 788        /* Set spi info */
 789        spi->bits_per_word = 16;
 790        max->clock = MAX3110_HIGH_CLK;
 791
 792        spi_setup(spi);
 793
 794        max->port.type = PORT_MAX3100;
 795        max->port.fifosize = 2;         /* Only have 16b buffer */
 796        max->port.ops = &serial_m3110_ops;
 797        max->port.line = 0;
 798        max->port.dev = &spi->dev;
 799        max->port.uartclk = 115200;
 800
 801        max->spi = spi;
 802        strcpy(max->name, spi->modalias);
 803        max->irq = (u16)spi->irq;
 804
 805        mutex_init(&max->thread_mutex);
 806
 807        max->word_7bits = 0;
 808        max->parity = 0;
 809        max->baud = 0;
 810
 811        max->cur_conf = 0;
 812        max->uart_flags = 0;
 813
 814        /* Check if reading configuration register returns something sane */
 815
 816        res = RC_TAG;
 817        ret = max3110_write_then_read(max, (u8 *)&res, (u8 *)&res, 2, 0);
 818        if (ret < 0 || res == 0 || res == 0xffff) {
 819                dev_dbg(&spi->dev, "MAX3111 deemed not present (conf reg %04x)",
 820                                                                        res);
 821                ret = -ENODEV;
 822                goto err_get_page;
 823        }
 824
 825        buffer = (void *)__get_free_page(GFP_KERNEL);
 826        if (!buffer) {
 827                ret = -ENOMEM;
 828                goto err_get_page;
 829        }
 830        max->con_xmit.buf = buffer;
 831        max->con_xmit.head = 0;
 832        max->con_xmit.tail = 0;
 833
 834        init_waitqueue_head(&max->wq);
 835
 836        max->main_thread = kthread_run(max3110_main_thread,
 837                                        max, "max3110_main");
 838        if (IS_ERR(max->main_thread)) {
 839                ret = PTR_ERR(max->main_thread);
 840                goto err_kthread;
 841        }
 842
 843        spi_set_drvdata(spi, max);
 844        pmax = max;
 845
 846        /* Give membase a psudo value to pass serial_core's check */
 847        max->port.membase = (unsigned char __iomem *)0xff110000;
 848        uart_add_one_port(&serial_m3110_reg, &max->port);
 849
 850        return 0;
 851
 852err_kthread:
 853        free_page((unsigned long)buffer);
 854err_get_page:
 855        kfree(max);
 856        return ret;
 857}
 858
 859static int serial_m3110_remove(struct spi_device *dev)
 860{
 861        struct uart_max3110 *max = spi_get_drvdata(dev);
 862
 863        if (!max)
 864                return 0;
 865
 866        uart_remove_one_port(&serial_m3110_reg, &max->port);
 867
 868        free_page((unsigned long)max->con_xmit.buf);
 869
 870        if (max->main_thread)
 871                kthread_stop(max->main_thread);
 872
 873        kfree(max);
 874        return 0;
 875}
 876
 877static struct spi_driver uart_max3110_driver = {
 878        .driver = {
 879                        .name   = "spi_max3111",
 880                        .owner  = THIS_MODULE,
 881                        .pm     = SERIAL_M3110_PM_OPS,
 882        },
 883        .probe          = serial_m3110_probe,
 884        .remove         = serial_m3110_remove,
 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");
 913