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