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