linux/drivers/mfd/cros_ec_spi.c
<<
>>
Prefs
   1/*
   2 * ChromeOS EC multi-function device (SPI)
   3 *
   4 * Copyright (C) 2012 Google, Inc
   5 *
   6 * This software is licensed under the terms of the GNU General Public
   7 * License version 2, as published by the Free Software Foundation, and
   8 * may be copied, distributed, and modified under those terms.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 */
  15
  16#include <linux/delay.h>
  17#include <linux/kernel.h>
  18#include <linux/module.h>
  19#include <linux/mfd/cros_ec.h>
  20#include <linux/mfd/cros_ec_commands.h>
  21#include <linux/of.h>
  22#include <linux/platform_device.h>
  23#include <linux/slab.h>
  24#include <linux/spi/spi.h>
  25
  26
  27/* The header byte, which follows the preamble */
  28#define EC_MSG_HEADER                   0xec
  29
  30/*
  31 * Number of EC preamble bytes we read at a time. Since it takes
  32 * about 400-500us for the EC to respond there is not a lot of
  33 * point in tuning this. If the EC could respond faster then
  34 * we could increase this so that might expect the preamble and
  35 * message to occur in a single transaction. However, the maximum
  36 * SPI transfer size is 256 bytes, so at 5MHz we need a response
  37 * time of perhaps <320us (200 bytes / 1600 bits).
  38 */
  39#define EC_MSG_PREAMBLE_COUNT           32
  40
  41/*
  42 * Allow for a long time for the EC to respond.  We support i2c
  43 * tunneling and support fairly long messages for the tunnel (249
  44 * bytes long at the moment).  If we're talking to a 100 kHz device
  45 * on the other end and need to transfer ~256 bytes, then we need:
  46 *  10 us/bit * ~10 bits/byte * ~256 bytes = ~25ms
  47 *
  48 * We'll wait 8 times that to handle clock stretching and other
  49 * paranoia.  Note that some battery gas gauge ICs claim to have a
  50 * clock stretch of 144ms in rare situations.  That's incentive for
  51 * not directly passing i2c through, but it's too late for that for
  52 * existing hardware.
  53 *
  54 * It's pretty unlikely that we'll really see a 249 byte tunnel in
  55 * anything other than testing.  If this was more common we might
  56 * consider having slow commands like this require a GET_STATUS
  57 * wait loop.  The 'flash write' command would be another candidate
  58 * for this, clocking in at 2-3ms.
  59 */
  60#define EC_MSG_DEADLINE_MS              200
  61
  62/*
  63  * Time between raising the SPI chip select (for the end of a
  64  * transaction) and dropping it again (for the next transaction).
  65  * If we go too fast, the EC will miss the transaction. We know that we
  66  * need at least 70 us with the 16 MHz STM32 EC, so go with 200 us to be
  67  * safe.
  68  */
  69#define EC_SPI_RECOVERY_TIME_NS (200 * 1000)
  70
  71/**
  72 * struct cros_ec_spi - information about a SPI-connected EC
  73 *
  74 * @spi: SPI device we are connected to
  75 * @last_transfer_ns: time that we last finished a transfer, or 0 if there
  76 *      if no record
  77 * @start_of_msg_delay: used to set the delay_usecs on the spi_transfer that
  78 *      is sent when we want to turn on CS at the start of a transaction.
  79 * @end_of_msg_delay: used to set the delay_usecs on the spi_transfer that
  80 *      is sent when we want to turn off CS at the end of a transaction.
  81 */
  82struct cros_ec_spi {
  83        struct spi_device *spi;
  84        s64 last_transfer_ns;
  85        unsigned int start_of_msg_delay;
  86        unsigned int end_of_msg_delay;
  87};
  88
  89static void debug_packet(struct device *dev, const char *name, u8 *ptr,
  90                         int len)
  91{
  92#ifdef DEBUG
  93        int i;
  94
  95        dev_dbg(dev, "%s: ", name);
  96        for (i = 0; i < len; i++)
  97                pr_cont(" %02x", ptr[i]);
  98
  99        pr_cont("\n");
 100#endif
 101}
 102
 103static int terminate_request(struct cros_ec_device *ec_dev)
 104{
 105        struct cros_ec_spi *ec_spi = ec_dev->priv;
 106        struct spi_message msg;
 107        struct spi_transfer trans;
 108        int ret;
 109
 110        /*
 111         * Turn off CS, possibly adding a delay to ensure the rising edge
 112         * doesn't come too soon after the end of the data.
 113         */
 114        spi_message_init(&msg);
 115        memset(&trans, 0, sizeof(trans));
 116        trans.delay_usecs = ec_spi->end_of_msg_delay;
 117        spi_message_add_tail(&trans, &msg);
 118
 119        ret = spi_sync_locked(ec_spi->spi, &msg);
 120
 121        /* Reset end-of-response timer */
 122        ec_spi->last_transfer_ns = ktime_get_ns();
 123        if (ret < 0) {
 124                dev_err(ec_dev->dev,
 125                        "cs-deassert spi transfer failed: %d\n",
 126                        ret);
 127        }
 128
 129        return ret;
 130}
 131
 132/**
 133 * receive_n_bytes - receive n bytes from the EC.
 134 *
 135 * Assumes buf is a pointer into the ec_dev->din buffer
 136 */
 137static int receive_n_bytes(struct cros_ec_device *ec_dev, u8 *buf, int n)
 138{
 139        struct cros_ec_spi *ec_spi = ec_dev->priv;
 140        struct spi_transfer trans;
 141        struct spi_message msg;
 142        int ret;
 143
 144        BUG_ON(buf - ec_dev->din + n > ec_dev->din_size);
 145
 146        memset(&trans, 0, sizeof(trans));
 147        trans.cs_change = 1;
 148        trans.rx_buf = buf;
 149        trans.len = n;
 150
 151        spi_message_init(&msg);
 152        spi_message_add_tail(&trans, &msg);
 153        ret = spi_sync_locked(ec_spi->spi, &msg);
 154        if (ret < 0)
 155                dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret);
 156
 157        return ret;
 158}
 159
 160/**
 161 * cros_ec_spi_receive_packet - Receive a packet from the EC.
 162 *
 163 * This function has two phases: reading the preamble bytes (since if we read
 164 * data from the EC before it is ready to send, we just get preamble) and
 165 * reading the actual message.
 166 *
 167 * The received data is placed into ec_dev->din.
 168 *
 169 * @ec_dev: ChromeOS EC device
 170 * @need_len: Number of message bytes we need to read
 171 */
 172static int cros_ec_spi_receive_packet(struct cros_ec_device *ec_dev,
 173                                      int need_len)
 174{
 175        struct ec_host_response *response;
 176        u8 *ptr, *end;
 177        int ret;
 178        unsigned long deadline;
 179        int todo;
 180
 181        BUG_ON(ec_dev->din_size < EC_MSG_PREAMBLE_COUNT);
 182
 183        /* Receive data until we see the header byte */
 184        deadline = jiffies + msecs_to_jiffies(EC_MSG_DEADLINE_MS);
 185        while (true) {
 186                unsigned long start_jiffies = jiffies;
 187
 188                ret = receive_n_bytes(ec_dev,
 189                                      ec_dev->din,
 190                                      EC_MSG_PREAMBLE_COUNT);
 191                if (ret < 0)
 192                        return ret;
 193
 194                ptr = ec_dev->din;
 195                for (end = ptr + EC_MSG_PREAMBLE_COUNT; ptr != end; ptr++) {
 196                        if (*ptr == EC_SPI_FRAME_START) {
 197                                dev_dbg(ec_dev->dev, "msg found at %zd\n",
 198                                        ptr - ec_dev->din);
 199                                break;
 200                        }
 201                }
 202                if (ptr != end)
 203                        break;
 204
 205                /*
 206                 * Use the time at the start of the loop as a timeout.  This
 207                 * gives us one last shot at getting the transfer and is useful
 208                 * in case we got context switched out for a while.
 209                 */
 210                if (time_after(start_jiffies, deadline)) {
 211                        dev_warn(ec_dev->dev, "EC failed to respond in time\n");
 212                        return -ETIMEDOUT;
 213                }
 214        }
 215
 216        /*
 217         * ptr now points to the header byte. Copy any valid data to the
 218         * start of our buffer
 219         */
 220        todo = end - ++ptr;
 221        BUG_ON(todo < 0 || todo > ec_dev->din_size);
 222        todo = min(todo, need_len);
 223        memmove(ec_dev->din, ptr, todo);
 224        ptr = ec_dev->din + todo;
 225        dev_dbg(ec_dev->dev, "need %d, got %d bytes from preamble\n",
 226                need_len, todo);
 227        need_len -= todo;
 228
 229        /* If the entire response struct wasn't read, get the rest of it. */
 230        if (todo < sizeof(*response)) {
 231                ret = receive_n_bytes(ec_dev, ptr, sizeof(*response) - todo);
 232                if (ret < 0)
 233                        return -EBADMSG;
 234                ptr += (sizeof(*response) - todo);
 235                todo = sizeof(*response);
 236        }
 237
 238        response = (struct ec_host_response *)ec_dev->din;
 239
 240        /* Abort if data_len is too large. */
 241        if (response->data_len > ec_dev->din_size)
 242                return -EMSGSIZE;
 243
 244        /* Receive data until we have it all */
 245        while (need_len > 0) {
 246                /*
 247                 * We can't support transfers larger than the SPI FIFO size
 248                 * unless we have DMA. We don't have DMA on the ISP SPI ports
 249                 * for Exynos. We need a way of asking SPI driver for
 250                 * maximum-supported transfer size.
 251                 */
 252                todo = min(need_len, 256);
 253                dev_dbg(ec_dev->dev, "loop, todo=%d, need_len=%d, ptr=%zd\n",
 254                        todo, need_len, ptr - ec_dev->din);
 255
 256                ret = receive_n_bytes(ec_dev, ptr, todo);
 257                if (ret < 0)
 258                        return ret;
 259
 260                ptr += todo;
 261                need_len -= todo;
 262        }
 263
 264        dev_dbg(ec_dev->dev, "loop done, ptr=%zd\n", ptr - ec_dev->din);
 265
 266        return 0;
 267}
 268
 269/**
 270 * cros_ec_spi_receive_response - Receive a response from the EC.
 271 *
 272 * This function has two phases: reading the preamble bytes (since if we read
 273 * data from the EC before it is ready to send, we just get preamble) and
 274 * reading the actual message.
 275 *
 276 * The received data is placed into ec_dev->din.
 277 *
 278 * @ec_dev: ChromeOS EC device
 279 * @need_len: Number of message bytes we need to read
 280 */
 281static int cros_ec_spi_receive_response(struct cros_ec_device *ec_dev,
 282                                        int need_len)
 283{
 284        u8 *ptr, *end;
 285        int ret;
 286        unsigned long deadline;
 287        int todo;
 288
 289        BUG_ON(ec_dev->din_size < EC_MSG_PREAMBLE_COUNT);
 290
 291        /* Receive data until we see the header byte */
 292        deadline = jiffies + msecs_to_jiffies(EC_MSG_DEADLINE_MS);
 293        while (true) {
 294                unsigned long start_jiffies = jiffies;
 295
 296                ret = receive_n_bytes(ec_dev,
 297                                      ec_dev->din,
 298                                      EC_MSG_PREAMBLE_COUNT);
 299                if (ret < 0)
 300                        return ret;
 301
 302                ptr = ec_dev->din;
 303                for (end = ptr + EC_MSG_PREAMBLE_COUNT; ptr != end; ptr++) {
 304                        if (*ptr == EC_SPI_FRAME_START) {
 305                                dev_dbg(ec_dev->dev, "msg found at %zd\n",
 306                                        ptr - ec_dev->din);
 307                                break;
 308                        }
 309                }
 310                if (ptr != end)
 311                        break;
 312
 313                /*
 314                 * Use the time at the start of the loop as a timeout.  This
 315                 * gives us one last shot at getting the transfer and is useful
 316                 * in case we got context switched out for a while.
 317                 */
 318                if (time_after(start_jiffies, deadline)) {
 319                        dev_warn(ec_dev->dev, "EC failed to respond in time\n");
 320                        return -ETIMEDOUT;
 321                }
 322        }
 323
 324        /*
 325         * ptr now points to the header byte. Copy any valid data to the
 326         * start of our buffer
 327         */
 328        todo = end - ++ptr;
 329        BUG_ON(todo < 0 || todo > ec_dev->din_size);
 330        todo = min(todo, need_len);
 331        memmove(ec_dev->din, ptr, todo);
 332        ptr = ec_dev->din + todo;
 333        dev_dbg(ec_dev->dev, "need %d, got %d bytes from preamble\n",
 334                 need_len, todo);
 335        need_len -= todo;
 336
 337        /* Receive data until we have it all */
 338        while (need_len > 0) {
 339                /*
 340                 * We can't support transfers larger than the SPI FIFO size
 341                 * unless we have DMA. We don't have DMA on the ISP SPI ports
 342                 * for Exynos. We need a way of asking SPI driver for
 343                 * maximum-supported transfer size.
 344                 */
 345                todo = min(need_len, 256);
 346                dev_dbg(ec_dev->dev, "loop, todo=%d, need_len=%d, ptr=%zd\n",
 347                        todo, need_len, ptr - ec_dev->din);
 348
 349                ret = receive_n_bytes(ec_dev, ptr, todo);
 350                if (ret < 0)
 351                        return ret;
 352
 353                debug_packet(ec_dev->dev, "interim", ptr, todo);
 354                ptr += todo;
 355                need_len -= todo;
 356        }
 357
 358        dev_dbg(ec_dev->dev, "loop done, ptr=%zd\n", ptr - ec_dev->din);
 359
 360        return 0;
 361}
 362
 363/**
 364 * cros_ec_pkt_xfer_spi - Transfer a packet over SPI and receive the reply
 365 *
 366 * @ec_dev: ChromeOS EC device
 367 * @ec_msg: Message to transfer
 368 */
 369static int cros_ec_pkt_xfer_spi(struct cros_ec_device *ec_dev,
 370                                struct cros_ec_command *ec_msg)
 371{
 372        struct ec_host_response *response;
 373        struct cros_ec_spi *ec_spi = ec_dev->priv;
 374        struct spi_transfer trans, trans_delay;
 375        struct spi_message msg;
 376        int i, len;
 377        u8 *ptr;
 378        u8 *rx_buf;
 379        u8 sum;
 380        int ret = 0, final_ret;
 381
 382        len = cros_ec_prepare_tx(ec_dev, ec_msg);
 383        dev_dbg(ec_dev->dev, "prepared, len=%d\n", len);
 384
 385        /* If it's too soon to do another transaction, wait */
 386        if (ec_spi->last_transfer_ns) {
 387                unsigned long delay;    /* The delay completed so far */
 388
 389                delay = ktime_get_ns() - ec_spi->last_transfer_ns;
 390                if (delay < EC_SPI_RECOVERY_TIME_NS)
 391                        ndelay(EC_SPI_RECOVERY_TIME_NS - delay);
 392        }
 393
 394        rx_buf = kzalloc(len, GFP_KERNEL);
 395        if (!rx_buf)
 396                return -ENOMEM;
 397
 398        spi_bus_lock(ec_spi->spi->master);
 399
 400        /*
 401         * Leave a gap between CS assertion and clocking of data to allow the
 402         * EC time to wakeup.
 403         */
 404        spi_message_init(&msg);
 405        if (ec_spi->start_of_msg_delay) {
 406                memset(&trans_delay, 0, sizeof(trans_delay));
 407                trans_delay.delay_usecs = ec_spi->start_of_msg_delay;
 408                spi_message_add_tail(&trans_delay, &msg);
 409        }
 410
 411        /* Transmit phase - send our message */
 412        memset(&trans, 0, sizeof(trans));
 413        trans.tx_buf = ec_dev->dout;
 414        trans.rx_buf = rx_buf;
 415        trans.len = len;
 416        trans.cs_change = 1;
 417        spi_message_add_tail(&trans, &msg);
 418        ret = spi_sync_locked(ec_spi->spi, &msg);
 419
 420        /* Get the response */
 421        if (!ret) {
 422                /* Verify that EC can process command */
 423                for (i = 0; i < len; i++) {
 424                        switch (rx_buf[i]) {
 425                        case EC_SPI_PAST_END:
 426                        case EC_SPI_RX_BAD_DATA:
 427                        case EC_SPI_NOT_READY:
 428                                ret = -EAGAIN;
 429                                ec_msg->result = EC_RES_IN_PROGRESS;
 430                        default:
 431                                break;
 432                        }
 433                        if (ret)
 434                                break;
 435                }
 436                if (!ret)
 437                        ret = cros_ec_spi_receive_packet(ec_dev,
 438                                        ec_msg->insize + sizeof(*response));
 439        } else {
 440                dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret);
 441        }
 442
 443        final_ret = terminate_request(ec_dev);
 444
 445        spi_bus_unlock(ec_spi->spi->master);
 446
 447        if (!ret)
 448                ret = final_ret;
 449        if (ret < 0)
 450                goto exit;
 451
 452        ptr = ec_dev->din;
 453
 454        /* check response error code */
 455        response = (struct ec_host_response *)ptr;
 456        ec_msg->result = response->result;
 457
 458        ret = cros_ec_check_result(ec_dev, ec_msg);
 459        if (ret)
 460                goto exit;
 461
 462        len = response->data_len;
 463        sum = 0;
 464        if (len > ec_msg->insize) {
 465                dev_err(ec_dev->dev, "packet too long (%d bytes, expected %d)",
 466                        len, ec_msg->insize);
 467                ret = -EMSGSIZE;
 468                goto exit;
 469        }
 470
 471        for (i = 0; i < sizeof(*response); i++)
 472                sum += ptr[i];
 473
 474        /* copy response packet payload and compute checksum */
 475        memcpy(ec_msg->data, ptr + sizeof(*response), len);
 476        for (i = 0; i < len; i++)
 477                sum += ec_msg->data[i];
 478
 479        if (sum) {
 480                dev_err(ec_dev->dev,
 481                        "bad packet checksum, calculated %x\n",
 482                        sum);
 483                ret = -EBADMSG;
 484                goto exit;
 485        }
 486
 487        ret = len;
 488exit:
 489        kfree(rx_buf);
 490        if (ec_msg->command == EC_CMD_REBOOT_EC)
 491                msleep(EC_REBOOT_DELAY_MS);
 492
 493        return ret;
 494}
 495
 496/**
 497 * cros_ec_cmd_xfer_spi - Transfer a message over SPI and receive the reply
 498 *
 499 * @ec_dev: ChromeOS EC device
 500 * @ec_msg: Message to transfer
 501 */
 502static int cros_ec_cmd_xfer_spi(struct cros_ec_device *ec_dev,
 503                                struct cros_ec_command *ec_msg)
 504{
 505        struct cros_ec_spi *ec_spi = ec_dev->priv;
 506        struct spi_transfer trans;
 507        struct spi_message msg;
 508        int i, len;
 509        u8 *ptr;
 510        u8 *rx_buf;
 511        int sum;
 512        int ret = 0, final_ret;
 513
 514        len = cros_ec_prepare_tx(ec_dev, ec_msg);
 515        dev_dbg(ec_dev->dev, "prepared, len=%d\n", len);
 516
 517        /* If it's too soon to do another transaction, wait */
 518        if (ec_spi->last_transfer_ns) {
 519                unsigned long delay;    /* The delay completed so far */
 520
 521                delay = ktime_get_ns() - ec_spi->last_transfer_ns;
 522                if (delay < EC_SPI_RECOVERY_TIME_NS)
 523                        ndelay(EC_SPI_RECOVERY_TIME_NS - delay);
 524        }
 525
 526        rx_buf = kzalloc(len, GFP_KERNEL);
 527        if (!rx_buf)
 528                return -ENOMEM;
 529
 530        spi_bus_lock(ec_spi->spi->master);
 531
 532        /* Transmit phase - send our message */
 533        debug_packet(ec_dev->dev, "out", ec_dev->dout, len);
 534        memset(&trans, 0, sizeof(trans));
 535        trans.tx_buf = ec_dev->dout;
 536        trans.rx_buf = rx_buf;
 537        trans.len = len;
 538        trans.cs_change = 1;
 539        spi_message_init(&msg);
 540        spi_message_add_tail(&trans, &msg);
 541        ret = spi_sync_locked(ec_spi->spi, &msg);
 542
 543        /* Get the response */
 544        if (!ret) {
 545                /* Verify that EC can process command */
 546                for (i = 0; i < len; i++) {
 547                        switch (rx_buf[i]) {
 548                        case EC_SPI_PAST_END:
 549                        case EC_SPI_RX_BAD_DATA:
 550                        case EC_SPI_NOT_READY:
 551                                ret = -EAGAIN;
 552                                ec_msg->result = EC_RES_IN_PROGRESS;
 553                        default:
 554                                break;
 555                        }
 556                        if (ret)
 557                                break;
 558                }
 559                if (!ret)
 560                        ret = cros_ec_spi_receive_response(ec_dev,
 561                                        ec_msg->insize + EC_MSG_TX_PROTO_BYTES);
 562        } else {
 563                dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret);
 564        }
 565
 566        final_ret = terminate_request(ec_dev);
 567
 568        spi_bus_unlock(ec_spi->spi->master);
 569
 570        if (!ret)
 571                ret = final_ret;
 572        if (ret < 0)
 573                goto exit;
 574
 575        ptr = ec_dev->din;
 576
 577        /* check response error code */
 578        ec_msg->result = ptr[0];
 579        ret = cros_ec_check_result(ec_dev, ec_msg);
 580        if (ret)
 581                goto exit;
 582
 583        len = ptr[1];
 584        sum = ptr[0] + ptr[1];
 585        if (len > ec_msg->insize) {
 586                dev_err(ec_dev->dev, "packet too long (%d bytes, expected %d)",
 587                        len, ec_msg->insize);
 588                ret = -ENOSPC;
 589                goto exit;
 590        }
 591
 592        /* copy response packet payload and compute checksum */
 593        for (i = 0; i < len; i++) {
 594                sum += ptr[i + 2];
 595                if (ec_msg->insize)
 596                        ec_msg->data[i] = ptr[i + 2];
 597        }
 598        sum &= 0xff;
 599
 600        debug_packet(ec_dev->dev, "in", ptr, len + 3);
 601
 602        if (sum != ptr[len + 2]) {
 603                dev_err(ec_dev->dev,
 604                        "bad packet checksum, expected %02x, got %02x\n",
 605                        sum, ptr[len + 2]);
 606                ret = -EBADMSG;
 607                goto exit;
 608        }
 609
 610        ret = len;
 611exit:
 612        kfree(rx_buf);
 613        if (ec_msg->command == EC_CMD_REBOOT_EC)
 614                msleep(EC_REBOOT_DELAY_MS);
 615
 616        return ret;
 617}
 618
 619static void cros_ec_spi_dt_probe(struct cros_ec_spi *ec_spi, struct device *dev)
 620{
 621        struct device_node *np = dev->of_node;
 622        u32 val;
 623        int ret;
 624
 625        ret = of_property_read_u32(np, "google,cros-ec-spi-pre-delay", &val);
 626        if (!ret)
 627                ec_spi->start_of_msg_delay = val;
 628
 629        ret = of_property_read_u32(np, "google,cros-ec-spi-msg-delay", &val);
 630        if (!ret)
 631                ec_spi->end_of_msg_delay = val;
 632}
 633
 634static int cros_ec_spi_probe(struct spi_device *spi)
 635{
 636        struct device *dev = &spi->dev;
 637        struct cros_ec_device *ec_dev;
 638        struct cros_ec_spi *ec_spi;
 639        int err;
 640
 641        spi->bits_per_word = 8;
 642        spi->mode = SPI_MODE_0;
 643        err = spi_setup(spi);
 644        if (err < 0)
 645                return err;
 646
 647        ec_spi = devm_kzalloc(dev, sizeof(*ec_spi), GFP_KERNEL);
 648        if (ec_spi == NULL)
 649                return -ENOMEM;
 650        ec_spi->spi = spi;
 651        ec_dev = devm_kzalloc(dev, sizeof(*ec_dev), GFP_KERNEL);
 652        if (!ec_dev)
 653                return -ENOMEM;
 654
 655        /* Check for any DT properties */
 656        cros_ec_spi_dt_probe(ec_spi, dev);
 657
 658        spi_set_drvdata(spi, ec_dev);
 659        ec_dev->dev = dev;
 660        ec_dev->priv = ec_spi;
 661        ec_dev->irq = spi->irq;
 662        ec_dev->cmd_xfer = cros_ec_cmd_xfer_spi;
 663        ec_dev->pkt_xfer = cros_ec_pkt_xfer_spi;
 664        ec_dev->phys_name = dev_name(&ec_spi->spi->dev);
 665        ec_dev->din_size = EC_MSG_PREAMBLE_COUNT +
 666                           sizeof(struct ec_host_response) +
 667                           sizeof(struct ec_response_get_protocol_info);
 668        ec_dev->dout_size = sizeof(struct ec_host_request);
 669
 670
 671        err = cros_ec_register(ec_dev);
 672        if (err) {
 673                dev_err(dev, "cannot register EC\n");
 674                return err;
 675        }
 676
 677        device_init_wakeup(&spi->dev, true);
 678
 679        return 0;
 680}
 681
 682static int cros_ec_spi_remove(struct spi_device *spi)
 683{
 684        struct cros_ec_device *ec_dev;
 685
 686        ec_dev = spi_get_drvdata(spi);
 687        cros_ec_remove(ec_dev);
 688
 689        return 0;
 690}
 691
 692#ifdef CONFIG_PM_SLEEP
 693static int cros_ec_spi_suspend(struct device *dev)
 694{
 695        struct cros_ec_device *ec_dev = dev_get_drvdata(dev);
 696
 697        return cros_ec_suspend(ec_dev);
 698}
 699
 700static int cros_ec_spi_resume(struct device *dev)
 701{
 702        struct cros_ec_device *ec_dev = dev_get_drvdata(dev);
 703
 704        return cros_ec_resume(ec_dev);
 705}
 706#endif
 707
 708static SIMPLE_DEV_PM_OPS(cros_ec_spi_pm_ops, cros_ec_spi_suspend,
 709                         cros_ec_spi_resume);
 710
 711static const struct of_device_id cros_ec_spi_of_match[] = {
 712        { .compatible = "google,cros-ec-spi", },
 713        { /* sentinel */ },
 714};
 715MODULE_DEVICE_TABLE(of, cros_ec_spi_of_match);
 716
 717static const struct spi_device_id cros_ec_spi_id[] = {
 718        { "cros-ec-spi", 0 },
 719        { }
 720};
 721MODULE_DEVICE_TABLE(spi, cros_ec_spi_id);
 722
 723static struct spi_driver cros_ec_driver_spi = {
 724        .driver = {
 725                .name   = "cros-ec-spi",
 726                .of_match_table = of_match_ptr(cros_ec_spi_of_match),
 727                .pm     = &cros_ec_spi_pm_ops,
 728        },
 729        .probe          = cros_ec_spi_probe,
 730        .remove         = cros_ec_spi_remove,
 731        .id_table       = cros_ec_spi_id,
 732};
 733
 734module_spi_driver(cros_ec_driver_spi);
 735
 736MODULE_LICENSE("GPL v2");
 737MODULE_DESCRIPTION("ChromeOS EC multi function device (SPI)");
 738