linux/drivers/spi/spidev.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * Simple synchronous userspace interface to SPI devices
   4 *
   5 * Copyright (C) 2006 SWAPP
   6 *      Andrea Paterniani <a.paterniani@swapp-eng.it>
   7 * Copyright (C) 2007 David Brownell (simplification, cleanup)
   8 */
   9
  10#include <linux/init.h>
  11#include <linux/module.h>
  12#include <linux/ioctl.h>
  13#include <linux/fs.h>
  14#include <linux/device.h>
  15#include <linux/err.h>
  16#include <linux/list.h>
  17#include <linux/errno.h>
  18#include <linux/mutex.h>
  19#include <linux/slab.h>
  20#include <linux/compat.h>
  21#include <linux/of.h>
  22#include <linux/of_device.h>
  23#include <linux/acpi.h>
  24
  25#include <linux/spi/spi.h>
  26#include <linux/spi/spidev.h>
  27
  28#include <linux/uaccess.h>
  29
  30
  31/*
  32 * This supports access to SPI devices using normal userspace I/O calls.
  33 * Note that while traditional UNIX/POSIX I/O semantics are half duplex,
  34 * and often mask message boundaries, full SPI support requires full duplex
  35 * transfers.  There are several kinds of internal message boundaries to
  36 * handle chipselect management and other protocol options.
  37 *
  38 * SPI has a character major number assigned.  We allocate minor numbers
  39 * dynamically using a bitmask.  You must use hotplug tools, such as udev
  40 * (or mdev with busybox) to create and destroy the /dev/spidevB.C device
  41 * nodes, since there is no fixed association of minor numbers with any
  42 * particular SPI bus or device.
  43 */
  44#define SPIDEV_MAJOR                    153     /* assigned */
  45#define N_SPI_MINORS                    32      /* ... up to 256 */
  46
  47static DECLARE_BITMAP(minors, N_SPI_MINORS);
  48
  49
  50/* Bit masks for spi_device.mode management.  Note that incorrect
  51 * settings for some settings can cause *lots* of trouble for other
  52 * devices on a shared bus:
  53 *
  54 *  - CS_HIGH ... this device will be active when it shouldn't be
  55 *  - 3WIRE ... when active, it won't behave as it should
  56 *  - NO_CS ... there will be no explicit message boundaries; this
  57 *      is completely incompatible with the shared bus model
  58 *  - READY ... transfers may proceed when they shouldn't.
  59 *
  60 * REVISIT should changing those flags be privileged?
  61 */
  62#define SPI_MODE_MASK           (SPI_CPHA | SPI_CPOL | SPI_CS_HIGH \
  63                                | SPI_LSB_FIRST | SPI_3WIRE | SPI_LOOP \
  64                                | SPI_NO_CS | SPI_READY | SPI_TX_DUAL \
  65                                | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD)
  66
  67struct spidev_data {
  68        dev_t                   devt;
  69        spinlock_t              spi_lock;
  70        struct spi_device       *spi;
  71        struct list_head        device_entry;
  72
  73        /* TX/RX buffers are NULL unless this device is open (users > 0) */
  74        struct mutex            buf_lock;
  75        unsigned                users;
  76        u8                      *tx_buffer;
  77        u8                      *rx_buffer;
  78        u32                     speed_hz;
  79};
  80
  81static LIST_HEAD(device_list);
  82static DEFINE_MUTEX(device_list_lock);
  83
  84static unsigned bufsiz = 4096;
  85module_param(bufsiz, uint, S_IRUGO);
  86MODULE_PARM_DESC(bufsiz, "data bytes in biggest supported SPI message");
  87
  88/*-------------------------------------------------------------------------*/
  89
  90static ssize_t
  91spidev_sync(struct spidev_data *spidev, struct spi_message *message)
  92{
  93        int status;
  94        struct spi_device *spi;
  95
  96        spin_lock_irq(&spidev->spi_lock);
  97        spi = spidev->spi;
  98        spin_unlock_irq(&spidev->spi_lock);
  99
 100        if (spi == NULL)
 101                status = -ESHUTDOWN;
 102        else
 103                status = spi_sync(spi, message);
 104
 105        if (status == 0)
 106                status = message->actual_length;
 107
 108        return status;
 109}
 110
 111static inline ssize_t
 112spidev_sync_write(struct spidev_data *spidev, size_t len)
 113{
 114        struct spi_transfer     t = {
 115                        .tx_buf         = spidev->tx_buffer,
 116                        .len            = len,
 117                        .speed_hz       = spidev->speed_hz,
 118                };
 119        struct spi_message      m;
 120
 121        spi_message_init(&m);
 122        spi_message_add_tail(&t, &m);
 123        return spidev_sync(spidev, &m);
 124}
 125
 126static inline ssize_t
 127spidev_sync_read(struct spidev_data *spidev, size_t len)
 128{
 129        struct spi_transfer     t = {
 130                        .rx_buf         = spidev->rx_buffer,
 131                        .len            = len,
 132                        .speed_hz       = spidev->speed_hz,
 133                };
 134        struct spi_message      m;
 135
 136        spi_message_init(&m);
 137        spi_message_add_tail(&t, &m);
 138        return spidev_sync(spidev, &m);
 139}
 140
 141/*-------------------------------------------------------------------------*/
 142
 143/* Read-only message with current device setup */
 144static ssize_t
 145spidev_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
 146{
 147        struct spidev_data      *spidev;
 148        ssize_t                 status = 0;
 149
 150        /* chipselect only toggles at start or end of operation */
 151        if (count > bufsiz)
 152                return -EMSGSIZE;
 153
 154        spidev = filp->private_data;
 155
 156        mutex_lock(&spidev->buf_lock);
 157        status = spidev_sync_read(spidev, count);
 158        if (status > 0) {
 159                unsigned long   missing;
 160
 161                missing = copy_to_user(buf, spidev->rx_buffer, status);
 162                if (missing == status)
 163                        status = -EFAULT;
 164                else
 165                        status = status - missing;
 166        }
 167        mutex_unlock(&spidev->buf_lock);
 168
 169        return status;
 170}
 171
 172/* Write-only message with current device setup */
 173static ssize_t
 174spidev_write(struct file *filp, const char __user *buf,
 175                size_t count, loff_t *f_pos)
 176{
 177        struct spidev_data      *spidev;
 178        ssize_t                 status = 0;
 179        unsigned long           missing;
 180
 181        /* chipselect only toggles at start or end of operation */
 182        if (count > bufsiz)
 183                return -EMSGSIZE;
 184
 185        spidev = filp->private_data;
 186
 187        mutex_lock(&spidev->buf_lock);
 188        missing = copy_from_user(spidev->tx_buffer, buf, count);
 189        if (missing == 0)
 190                status = spidev_sync_write(spidev, count);
 191        else
 192                status = -EFAULT;
 193        mutex_unlock(&spidev->buf_lock);
 194
 195        return status;
 196}
 197
 198static int spidev_message(struct spidev_data *spidev,
 199                struct spi_ioc_transfer *u_xfers, unsigned n_xfers)
 200{
 201        struct spi_message      msg;
 202        struct spi_transfer     *k_xfers;
 203        struct spi_transfer     *k_tmp;
 204        struct spi_ioc_transfer *u_tmp;
 205        unsigned                n, total, tx_total, rx_total;
 206        u8                      *tx_buf, *rx_buf;
 207        int                     status = -EFAULT;
 208
 209        spi_message_init(&msg);
 210        k_xfers = kcalloc(n_xfers, sizeof(*k_tmp), GFP_KERNEL);
 211        if (k_xfers == NULL)
 212                return -ENOMEM;
 213
 214        /* Construct spi_message, copying any tx data to bounce buffer.
 215         * We walk the array of user-provided transfers, using each one
 216         * to initialize a kernel version of the same transfer.
 217         */
 218        tx_buf = spidev->tx_buffer;
 219        rx_buf = spidev->rx_buffer;
 220        total = 0;
 221        tx_total = 0;
 222        rx_total = 0;
 223        for (n = n_xfers, k_tmp = k_xfers, u_tmp = u_xfers;
 224                        n;
 225                        n--, k_tmp++, u_tmp++) {
 226                k_tmp->len = u_tmp->len;
 227
 228                total += k_tmp->len;
 229                /* Since the function returns the total length of transfers
 230                 * on success, restrict the total to positive int values to
 231                 * avoid the return value looking like an error.  Also check
 232                 * each transfer length to avoid arithmetic overflow.
 233                 */
 234                if (total > INT_MAX || k_tmp->len > INT_MAX) {
 235                        status = -EMSGSIZE;
 236                        goto done;
 237                }
 238
 239                if (u_tmp->rx_buf) {
 240                        /* this transfer needs space in RX bounce buffer */
 241                        rx_total += k_tmp->len;
 242                        if (rx_total > bufsiz) {
 243                                status = -EMSGSIZE;
 244                                goto done;
 245                        }
 246                        k_tmp->rx_buf = rx_buf;
 247                        rx_buf += k_tmp->len;
 248                }
 249                if (u_tmp->tx_buf) {
 250                        /* this transfer needs space in TX bounce buffer */
 251                        tx_total += k_tmp->len;
 252                        if (tx_total > bufsiz) {
 253                                status = -EMSGSIZE;
 254                                goto done;
 255                        }
 256                        k_tmp->tx_buf = tx_buf;
 257                        if (copy_from_user(tx_buf, (const u8 __user *)
 258                                                (uintptr_t) u_tmp->tx_buf,
 259                                        u_tmp->len))
 260                                goto done;
 261                        tx_buf += k_tmp->len;
 262                }
 263
 264                k_tmp->cs_change = !!u_tmp->cs_change;
 265                k_tmp->tx_nbits = u_tmp->tx_nbits;
 266                k_tmp->rx_nbits = u_tmp->rx_nbits;
 267                k_tmp->bits_per_word = u_tmp->bits_per_word;
 268                k_tmp->delay_usecs = u_tmp->delay_usecs;
 269                k_tmp->speed_hz = u_tmp->speed_hz;
 270                k_tmp->word_delay_usecs = u_tmp->word_delay_usecs;
 271                if (!k_tmp->speed_hz)
 272                        k_tmp->speed_hz = spidev->speed_hz;
 273#ifdef VERBOSE
 274                dev_dbg(&spidev->spi->dev,
 275                        "  xfer len %u %s%s%s%dbits %u usec %u usec %uHz\n",
 276                        u_tmp->len,
 277                        u_tmp->rx_buf ? "rx " : "",
 278                        u_tmp->tx_buf ? "tx " : "",
 279                        u_tmp->cs_change ? "cs " : "",
 280                        u_tmp->bits_per_word ? : spidev->spi->bits_per_word,
 281                        u_tmp->delay_usecs,
 282                        u_tmp->word_delay_usecs,
 283                        u_tmp->speed_hz ? : spidev->spi->max_speed_hz);
 284#endif
 285                spi_message_add_tail(k_tmp, &msg);
 286        }
 287
 288        status = spidev_sync(spidev, &msg);
 289        if (status < 0)
 290                goto done;
 291
 292        /* copy any rx data out of bounce buffer */
 293        rx_buf = spidev->rx_buffer;
 294        for (n = n_xfers, u_tmp = u_xfers; n; n--, u_tmp++) {
 295                if (u_tmp->rx_buf) {
 296                        if (copy_to_user((u8 __user *)
 297                                        (uintptr_t) u_tmp->rx_buf, rx_buf,
 298                                        u_tmp->len)) {
 299                                status = -EFAULT;
 300                                goto done;
 301                        }
 302                        rx_buf += u_tmp->len;
 303                }
 304        }
 305        status = total;
 306
 307done:
 308        kfree(k_xfers);
 309        return status;
 310}
 311
 312static struct spi_ioc_transfer *
 313spidev_get_ioc_message(unsigned int cmd, struct spi_ioc_transfer __user *u_ioc,
 314                unsigned *n_ioc)
 315{
 316        u32     tmp;
 317
 318        /* Check type, command number and direction */
 319        if (_IOC_TYPE(cmd) != SPI_IOC_MAGIC
 320                        || _IOC_NR(cmd) != _IOC_NR(SPI_IOC_MESSAGE(0))
 321                        || _IOC_DIR(cmd) != _IOC_WRITE)
 322                return ERR_PTR(-ENOTTY);
 323
 324        tmp = _IOC_SIZE(cmd);
 325        if ((tmp % sizeof(struct spi_ioc_transfer)) != 0)
 326                return ERR_PTR(-EINVAL);
 327        *n_ioc = tmp / sizeof(struct spi_ioc_transfer);
 328        if (*n_ioc == 0)
 329                return NULL;
 330
 331        /* copy into scratch area */
 332        return memdup_user(u_ioc, tmp);
 333}
 334
 335static long
 336spidev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 337{
 338        int                     retval = 0;
 339        struct spidev_data      *spidev;
 340        struct spi_device       *spi;
 341        u32                     tmp;
 342        unsigned                n_ioc;
 343        struct spi_ioc_transfer *ioc;
 344
 345        /* Check type and command number */
 346        if (_IOC_TYPE(cmd) != SPI_IOC_MAGIC)
 347                return -ENOTTY;
 348
 349        /* guard against device removal before, or while,
 350         * we issue this ioctl.
 351         */
 352        spidev = filp->private_data;
 353        spin_lock_irq(&spidev->spi_lock);
 354        spi = spi_dev_get(spidev->spi);
 355        spin_unlock_irq(&spidev->spi_lock);
 356
 357        if (spi == NULL)
 358                return -ESHUTDOWN;
 359
 360        /* use the buffer lock here for triple duty:
 361         *  - prevent I/O (from us) so calling spi_setup() is safe;
 362         *  - prevent concurrent SPI_IOC_WR_* from morphing
 363         *    data fields while SPI_IOC_RD_* reads them;
 364         *  - SPI_IOC_MESSAGE needs the buffer locked "normally".
 365         */
 366        mutex_lock(&spidev->buf_lock);
 367
 368        switch (cmd) {
 369        /* read requests */
 370        case SPI_IOC_RD_MODE:
 371                retval = put_user(spi->mode & SPI_MODE_MASK,
 372                                        (__u8 __user *)arg);
 373                break;
 374        case SPI_IOC_RD_MODE32:
 375                retval = put_user(spi->mode & SPI_MODE_MASK,
 376                                        (__u32 __user *)arg);
 377                break;
 378        case SPI_IOC_RD_LSB_FIRST:
 379                retval = put_user((spi->mode & SPI_LSB_FIRST) ?  1 : 0,
 380                                        (__u8 __user *)arg);
 381                break;
 382        case SPI_IOC_RD_BITS_PER_WORD:
 383                retval = put_user(spi->bits_per_word, (__u8 __user *)arg);
 384                break;
 385        case SPI_IOC_RD_MAX_SPEED_HZ:
 386                retval = put_user(spidev->speed_hz, (__u32 __user *)arg);
 387                break;
 388
 389        /* write requests */
 390        case SPI_IOC_WR_MODE:
 391        case SPI_IOC_WR_MODE32:
 392                if (cmd == SPI_IOC_WR_MODE)
 393                        retval = get_user(tmp, (u8 __user *)arg);
 394                else
 395                        retval = get_user(tmp, (u32 __user *)arg);
 396                if (retval == 0) {
 397                        u32     save = spi->mode;
 398
 399                        if (tmp & ~SPI_MODE_MASK) {
 400                                retval = -EINVAL;
 401                                break;
 402                        }
 403
 404                        tmp |= spi->mode & ~SPI_MODE_MASK;
 405                        spi->mode = (u16)tmp;
 406                        retval = spi_setup(spi);
 407                        if (retval < 0)
 408                                spi->mode = save;
 409                        else
 410                                dev_dbg(&spi->dev, "spi mode %x\n", tmp);
 411                }
 412                break;
 413        case SPI_IOC_WR_LSB_FIRST:
 414                retval = get_user(tmp, (__u8 __user *)arg);
 415                if (retval == 0) {
 416                        u32     save = spi->mode;
 417
 418                        if (tmp)
 419                                spi->mode |= SPI_LSB_FIRST;
 420                        else
 421                                spi->mode &= ~SPI_LSB_FIRST;
 422                        retval = spi_setup(spi);
 423                        if (retval < 0)
 424                                spi->mode = save;
 425                        else
 426                                dev_dbg(&spi->dev, "%csb first\n",
 427                                                tmp ? 'l' : 'm');
 428                }
 429                break;
 430        case SPI_IOC_WR_BITS_PER_WORD:
 431                retval = get_user(tmp, (__u8 __user *)arg);
 432                if (retval == 0) {
 433                        u8      save = spi->bits_per_word;
 434
 435                        spi->bits_per_word = tmp;
 436                        retval = spi_setup(spi);
 437                        if (retval < 0)
 438                                spi->bits_per_word = save;
 439                        else
 440                                dev_dbg(&spi->dev, "%d bits per word\n", tmp);
 441                }
 442                break;
 443        case SPI_IOC_WR_MAX_SPEED_HZ:
 444                retval = get_user(tmp, (__u32 __user *)arg);
 445                if (retval == 0) {
 446                        u32     save = spi->max_speed_hz;
 447
 448                        spi->max_speed_hz = tmp;
 449                        retval = spi_setup(spi);
 450                        if (retval >= 0)
 451                                spidev->speed_hz = tmp;
 452                        else
 453                                dev_dbg(&spi->dev, "%d Hz (max)\n", tmp);
 454                        spi->max_speed_hz = save;
 455                }
 456                break;
 457
 458        default:
 459                /* segmented and/or full-duplex I/O request */
 460                /* Check message and copy into scratch area */
 461                ioc = spidev_get_ioc_message(cmd,
 462                                (struct spi_ioc_transfer __user *)arg, &n_ioc);
 463                if (IS_ERR(ioc)) {
 464                        retval = PTR_ERR(ioc);
 465                        break;
 466                }
 467                if (!ioc)
 468                        break;  /* n_ioc is also 0 */
 469
 470                /* translate to spi_message, execute */
 471                retval = spidev_message(spidev, ioc, n_ioc);
 472                kfree(ioc);
 473                break;
 474        }
 475
 476        mutex_unlock(&spidev->buf_lock);
 477        spi_dev_put(spi);
 478        return retval;
 479}
 480
 481#ifdef CONFIG_COMPAT
 482static long
 483spidev_compat_ioc_message(struct file *filp, unsigned int cmd,
 484                unsigned long arg)
 485{
 486        struct spi_ioc_transfer __user  *u_ioc;
 487        int                             retval = 0;
 488        struct spidev_data              *spidev;
 489        struct spi_device               *spi;
 490        unsigned                        n_ioc, n;
 491        struct spi_ioc_transfer         *ioc;
 492
 493        u_ioc = (struct spi_ioc_transfer __user *) compat_ptr(arg);
 494
 495        /* guard against device removal before, or while,
 496         * we issue this ioctl.
 497         */
 498        spidev = filp->private_data;
 499        spin_lock_irq(&spidev->spi_lock);
 500        spi = spi_dev_get(spidev->spi);
 501        spin_unlock_irq(&spidev->spi_lock);
 502
 503        if (spi == NULL)
 504                return -ESHUTDOWN;
 505
 506        /* SPI_IOC_MESSAGE needs the buffer locked "normally" */
 507        mutex_lock(&spidev->buf_lock);
 508
 509        /* Check message and copy into scratch area */
 510        ioc = spidev_get_ioc_message(cmd, u_ioc, &n_ioc);
 511        if (IS_ERR(ioc)) {
 512                retval = PTR_ERR(ioc);
 513                goto done;
 514        }
 515        if (!ioc)
 516                goto done;      /* n_ioc is also 0 */
 517
 518        /* Convert buffer pointers */
 519        for (n = 0; n < n_ioc; n++) {
 520                ioc[n].rx_buf = (uintptr_t) compat_ptr(ioc[n].rx_buf);
 521                ioc[n].tx_buf = (uintptr_t) compat_ptr(ioc[n].tx_buf);
 522        }
 523
 524        /* translate to spi_message, execute */
 525        retval = spidev_message(spidev, ioc, n_ioc);
 526        kfree(ioc);
 527
 528done:
 529        mutex_unlock(&spidev->buf_lock);
 530        spi_dev_put(spi);
 531        return retval;
 532}
 533
 534static long
 535spidev_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 536{
 537        if (_IOC_TYPE(cmd) == SPI_IOC_MAGIC
 538                        && _IOC_NR(cmd) == _IOC_NR(SPI_IOC_MESSAGE(0))
 539                        && _IOC_DIR(cmd) == _IOC_WRITE)
 540                return spidev_compat_ioc_message(filp, cmd, arg);
 541
 542        return spidev_ioctl(filp, cmd, (unsigned long)compat_ptr(arg));
 543}
 544#else
 545#define spidev_compat_ioctl NULL
 546#endif /* CONFIG_COMPAT */
 547
 548static int spidev_open(struct inode *inode, struct file *filp)
 549{
 550        struct spidev_data      *spidev;
 551        int                     status = -ENXIO;
 552
 553        mutex_lock(&device_list_lock);
 554
 555        list_for_each_entry(spidev, &device_list, device_entry) {
 556                if (spidev->devt == inode->i_rdev) {
 557                        status = 0;
 558                        break;
 559                }
 560        }
 561
 562        if (status) {
 563                pr_debug("spidev: nothing for minor %d\n", iminor(inode));
 564                goto err_find_dev;
 565        }
 566
 567        if (!spidev->tx_buffer) {
 568                spidev->tx_buffer = kmalloc(bufsiz, GFP_KERNEL);
 569                if (!spidev->tx_buffer) {
 570                        dev_dbg(&spidev->spi->dev, "open/ENOMEM\n");
 571                        status = -ENOMEM;
 572                        goto err_find_dev;
 573                }
 574        }
 575
 576        if (!spidev->rx_buffer) {
 577                spidev->rx_buffer = kmalloc(bufsiz, GFP_KERNEL);
 578                if (!spidev->rx_buffer) {
 579                        dev_dbg(&spidev->spi->dev, "open/ENOMEM\n");
 580                        status = -ENOMEM;
 581                        goto err_alloc_rx_buf;
 582                }
 583        }
 584
 585        spidev->users++;
 586        filp->private_data = spidev;
 587        stream_open(inode, filp);
 588
 589        mutex_unlock(&device_list_lock);
 590        return 0;
 591
 592err_alloc_rx_buf:
 593        kfree(spidev->tx_buffer);
 594        spidev->tx_buffer = NULL;
 595err_find_dev:
 596        mutex_unlock(&device_list_lock);
 597        return status;
 598}
 599
 600static int spidev_release(struct inode *inode, struct file *filp)
 601{
 602        struct spidev_data      *spidev;
 603
 604        mutex_lock(&device_list_lock);
 605        spidev = filp->private_data;
 606        filp->private_data = NULL;
 607
 608        /* last close? */
 609        spidev->users--;
 610        if (!spidev->users) {
 611                int             dofree;
 612
 613                kfree(spidev->tx_buffer);
 614                spidev->tx_buffer = NULL;
 615
 616                kfree(spidev->rx_buffer);
 617                spidev->rx_buffer = NULL;
 618
 619                spin_lock_irq(&spidev->spi_lock);
 620                if (spidev->spi)
 621                        spidev->speed_hz = spidev->spi->max_speed_hz;
 622
 623                /* ... after we unbound from the underlying device? */
 624                dofree = (spidev->spi == NULL);
 625                spin_unlock_irq(&spidev->spi_lock);
 626
 627                if (dofree)
 628                        kfree(spidev);
 629        }
 630        mutex_unlock(&device_list_lock);
 631
 632        return 0;
 633}
 634
 635static const struct file_operations spidev_fops = {
 636        .owner =        THIS_MODULE,
 637        /* REVISIT switch to aio primitives, so that userspace
 638         * gets more complete API coverage.  It'll simplify things
 639         * too, except for the locking.
 640         */
 641        .write =        spidev_write,
 642        .read =         spidev_read,
 643        .unlocked_ioctl = spidev_ioctl,
 644        .compat_ioctl = spidev_compat_ioctl,
 645        .open =         spidev_open,
 646        .release =      spidev_release,
 647        .llseek =       no_llseek,
 648};
 649
 650/*-------------------------------------------------------------------------*/
 651
 652/* The main reason to have this class is to make mdev/udev create the
 653 * /dev/spidevB.C character device nodes exposing our userspace API.
 654 * It also simplifies memory management.
 655 */
 656
 657static struct class *spidev_class;
 658
 659#ifdef CONFIG_OF
 660static const struct of_device_id spidev_dt_ids[] = {
 661        { .compatible = "rohm,dh2228fv" },
 662        { .compatible = "lineartechnology,ltc2488" },
 663        { .compatible = "ge,achc" },
 664        { .compatible = "semtech,sx1301" },
 665        { .compatible = "lwn,bk4" },
 666        { .compatible = "dh,dhcom-board" },
 667        { .compatible = "menlo,m53cpld" },
 668        {},
 669};
 670MODULE_DEVICE_TABLE(of, spidev_dt_ids);
 671#endif
 672
 673#ifdef CONFIG_ACPI
 674
 675/* Dummy SPI devices not to be used in production systems */
 676#define SPIDEV_ACPI_DUMMY       1
 677
 678static const struct acpi_device_id spidev_acpi_ids[] = {
 679        /*
 680         * The ACPI SPT000* devices are only meant for development and
 681         * testing. Systems used in production should have a proper ACPI
 682         * description of the connected peripheral and they should also use
 683         * a proper driver instead of poking directly to the SPI bus.
 684         */
 685        { "SPT0001", SPIDEV_ACPI_DUMMY },
 686        { "SPT0002", SPIDEV_ACPI_DUMMY },
 687        { "SPT0003", SPIDEV_ACPI_DUMMY },
 688        {},
 689};
 690MODULE_DEVICE_TABLE(acpi, spidev_acpi_ids);
 691
 692static void spidev_probe_acpi(struct spi_device *spi)
 693{
 694        const struct acpi_device_id *id;
 695
 696        if (!has_acpi_companion(&spi->dev))
 697                return;
 698
 699        id = acpi_match_device(spidev_acpi_ids, &spi->dev);
 700        if (WARN_ON(!id))
 701                return;
 702
 703        if (id->driver_data == SPIDEV_ACPI_DUMMY)
 704                dev_warn(&spi->dev, "do not use this driver in production systems!\n");
 705}
 706#else
 707static inline void spidev_probe_acpi(struct spi_device *spi) {}
 708#endif
 709
 710/*-------------------------------------------------------------------------*/
 711
 712static int spidev_probe(struct spi_device *spi)
 713{
 714        struct spidev_data      *spidev;
 715        int                     status;
 716        unsigned long           minor;
 717
 718        /*
 719         * spidev should never be referenced in DT without a specific
 720         * compatible string, it is a Linux implementation thing
 721         * rather than a description of the hardware.
 722         */
 723        WARN(spi->dev.of_node &&
 724             of_device_is_compatible(spi->dev.of_node, "spidev"),
 725             "%pOF: buggy DT: spidev listed directly in DT\n", spi->dev.of_node);
 726
 727        spidev_probe_acpi(spi);
 728
 729        /* Allocate driver data */
 730        spidev = kzalloc(sizeof(*spidev), GFP_KERNEL);
 731        if (!spidev)
 732                return -ENOMEM;
 733
 734        /* Initialize the driver data */
 735        spidev->spi = spi;
 736        spin_lock_init(&spidev->spi_lock);
 737        mutex_init(&spidev->buf_lock);
 738
 739        INIT_LIST_HEAD(&spidev->device_entry);
 740
 741        /* If we can allocate a minor number, hook up this device.
 742         * Reusing minors is fine so long as udev or mdev is working.
 743         */
 744        mutex_lock(&device_list_lock);
 745        minor = find_first_zero_bit(minors, N_SPI_MINORS);
 746        if (minor < N_SPI_MINORS) {
 747                struct device *dev;
 748
 749                spidev->devt = MKDEV(SPIDEV_MAJOR, minor);
 750                dev = device_create(spidev_class, &spi->dev, spidev->devt,
 751                                    spidev, "spidev%d.%d",
 752                                    spi->master->bus_num, spi->chip_select);
 753                status = PTR_ERR_OR_ZERO(dev);
 754        } else {
 755                dev_dbg(&spi->dev, "no minor number available!\n");
 756                status = -ENODEV;
 757        }
 758        if (status == 0) {
 759                set_bit(minor, minors);
 760                list_add(&spidev->device_entry, &device_list);
 761        }
 762        mutex_unlock(&device_list_lock);
 763
 764        spidev->speed_hz = spi->max_speed_hz;
 765
 766        if (status == 0)
 767                spi_set_drvdata(spi, spidev);
 768        else
 769                kfree(spidev);
 770
 771        return status;
 772}
 773
 774static int spidev_remove(struct spi_device *spi)
 775{
 776        struct spidev_data      *spidev = spi_get_drvdata(spi);
 777
 778        /* make sure ops on existing fds can abort cleanly */
 779        spin_lock_irq(&spidev->spi_lock);
 780        spidev->spi = NULL;
 781        spin_unlock_irq(&spidev->spi_lock);
 782
 783        /* prevent new opens */
 784        mutex_lock(&device_list_lock);
 785        list_del(&spidev->device_entry);
 786        device_destroy(spidev_class, spidev->devt);
 787        clear_bit(MINOR(spidev->devt), minors);
 788        if (spidev->users == 0)
 789                kfree(spidev);
 790        mutex_unlock(&device_list_lock);
 791
 792        return 0;
 793}
 794
 795static struct spi_driver spidev_spi_driver = {
 796        .driver = {
 797                .name =         "spidev",
 798                .of_match_table = of_match_ptr(spidev_dt_ids),
 799                .acpi_match_table = ACPI_PTR(spidev_acpi_ids),
 800        },
 801        .probe =        spidev_probe,
 802        .remove =       spidev_remove,
 803
 804        /* NOTE:  suspend/resume methods are not necessary here.
 805         * We don't do anything except pass the requests to/from
 806         * the underlying controller.  The refrigerator handles
 807         * most issues; the controller driver handles the rest.
 808         */
 809};
 810
 811/*-------------------------------------------------------------------------*/
 812
 813static int __init spidev_init(void)
 814{
 815        int status;
 816
 817        /* Claim our 256 reserved device numbers.  Then register a class
 818         * that will key udev/mdev to add/remove /dev nodes.  Last, register
 819         * the driver which manages those device numbers.
 820         */
 821        BUILD_BUG_ON(N_SPI_MINORS > 256);
 822        status = register_chrdev(SPIDEV_MAJOR, "spi", &spidev_fops);
 823        if (status < 0)
 824                return status;
 825
 826        spidev_class = class_create(THIS_MODULE, "spidev");
 827        if (IS_ERR(spidev_class)) {
 828                unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name);
 829                return PTR_ERR(spidev_class);
 830        }
 831
 832        status = spi_register_driver(&spidev_spi_driver);
 833        if (status < 0) {
 834                class_destroy(spidev_class);
 835                unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name);
 836        }
 837        return status;
 838}
 839module_init(spidev_init);
 840
 841static void __exit spidev_exit(void)
 842{
 843        spi_unregister_driver(&spidev_spi_driver);
 844        class_destroy(spidev_class);
 845        unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name);
 846}
 847module_exit(spidev_exit);
 848
 849MODULE_AUTHOR("Andrea Paterniani, <a.paterniani@swapp-eng.it>");
 850MODULE_DESCRIPTION("User mode SPI device interface");
 851MODULE_LICENSE("GPL");
 852MODULE_ALIAS("spi:spidev");
 853