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