Lines Matching refs:spidev

105 spidev_sync(struct spidev_data *spidev, struct spi_message *message)  in spidev_sync()  argument
110 mutex_lock(&spidev->spi_lock); in spidev_sync()
111 spi = spidev->spi; in spidev_sync()
118 mutex_unlock(&spidev->spi_lock); in spidev_sync()
123 spidev_sync_write(struct spidev_data *spidev, size_t len) in spidev_sync_write() argument
126 .tx_buf = spidev->tx_buffer, in spidev_sync_write()
128 .speed_hz = spidev->speed_hz, in spidev_sync_write()
134 return spidev_sync(spidev, &m); in spidev_sync_write()
138 spidev_sync_read(struct spidev_data *spidev, size_t len) in spidev_sync_read() argument
141 .rx_buf = spidev->rx_buffer, in spidev_sync_read()
143 .speed_hz = spidev->speed_hz, in spidev_sync_read()
149 return spidev_sync(spidev, &m); in spidev_sync_read()
158 struct spidev_data *spidev; in spidev_read() local
165 spidev = filp->private_data; in spidev_read()
167 mutex_lock(&spidev->buf_lock); in spidev_read()
168 status = spidev_sync_read(spidev, count); in spidev_read()
172 missing = copy_to_user(buf, spidev->rx_buffer, status); in spidev_read()
178 mutex_unlock(&spidev->buf_lock); in spidev_read()
188 struct spidev_data *spidev; in spidev_write() local
196 spidev = filp->private_data; in spidev_write()
198 mutex_lock(&spidev->buf_lock); in spidev_write()
199 missing = copy_from_user(spidev->tx_buffer, buf, count); in spidev_write()
201 status = spidev_sync_write(spidev, count); in spidev_write()
204 mutex_unlock(&spidev->buf_lock); in spidev_write()
209 static int spidev_message(struct spidev_data *spidev, in spidev_message() argument
229 tx_buf = spidev->tx_buffer; in spidev_message()
230 rx_buf = spidev->rx_buffer; in spidev_message()
290 k_tmp->speed_hz = spidev->speed_hz; in spidev_message()
292 dev_dbg(&spidev->spi->dev, in spidev_message()
298 k_tmp->bits_per_word ? : spidev->spi->bits_per_word, in spidev_message()
301 k_tmp->speed_hz ? : spidev->spi->max_speed_hz); in spidev_message()
306 status = spidev_sync_unlocked(spidev->spi, &msg); in spidev_message()
357 struct spidev_data *spidev; in spidev_ioctl() local
370 spidev = filp->private_data; in spidev_ioctl()
371 mutex_lock(&spidev->spi_lock); in spidev_ioctl()
372 spi = spi_dev_get(spidev->spi); in spidev_ioctl()
374 mutex_unlock(&spidev->spi_lock); in spidev_ioctl()
384 mutex_lock(&spidev->buf_lock); in spidev_ioctl()
415 retval = put_user(spidev->speed_hz, (__u32 __user *)arg); in spidev_ioctl()
493 spidev->speed_hz = tmp; in spidev_ioctl()
494 dev_dbg(&spi->dev, "%d Hz (max)\n", spidev->speed_hz); in spidev_ioctl()
513 retval = spidev_message(spidev, ioc, n_ioc); in spidev_ioctl()
518 mutex_unlock(&spidev->buf_lock); in spidev_ioctl()
520 mutex_unlock(&spidev->spi_lock); in spidev_ioctl()
531 struct spidev_data *spidev; in spidev_compat_ioc_message() local
541 spidev = filp->private_data; in spidev_compat_ioc_message()
542 mutex_lock(&spidev->spi_lock); in spidev_compat_ioc_message()
543 spi = spi_dev_get(spidev->spi); in spidev_compat_ioc_message()
545 mutex_unlock(&spidev->spi_lock); in spidev_compat_ioc_message()
550 mutex_lock(&spidev->buf_lock); in spidev_compat_ioc_message()
568 retval = spidev_message(spidev, ioc, n_ioc); in spidev_compat_ioc_message()
572 mutex_unlock(&spidev->buf_lock); in spidev_compat_ioc_message()
574 mutex_unlock(&spidev->spi_lock); in spidev_compat_ioc_message()
594 struct spidev_data *spidev = NULL, *iter; in spidev_open() local
602 spidev = iter; in spidev_open()
607 if (!spidev) { in spidev_open()
612 if (!spidev->tx_buffer) { in spidev_open()
613 spidev->tx_buffer = kmalloc(bufsiz, GFP_KERNEL); in spidev_open()
614 if (!spidev->tx_buffer) { in spidev_open()
620 if (!spidev->rx_buffer) { in spidev_open()
621 spidev->rx_buffer = kmalloc(bufsiz, GFP_KERNEL); in spidev_open()
622 if (!spidev->rx_buffer) { in spidev_open()
628 spidev->users++; in spidev_open()
629 filp->private_data = spidev; in spidev_open()
636 kfree(spidev->tx_buffer); in spidev_open()
637 spidev->tx_buffer = NULL; in spidev_open()
645 struct spidev_data *spidev; in spidev_release() local
649 spidev = filp->private_data; in spidev_release()
652 mutex_lock(&spidev->spi_lock); in spidev_release()
654 dofree = (spidev->spi == NULL); in spidev_release()
655 mutex_unlock(&spidev->spi_lock); in spidev_release()
658 spidev->users--; in spidev_release()
659 if (!spidev->users) { in spidev_release()
661 kfree(spidev->tx_buffer); in spidev_release()
662 spidev->tx_buffer = NULL; in spidev_release()
664 kfree(spidev->rx_buffer); in spidev_release()
665 spidev->rx_buffer = NULL; in spidev_release()
668 kfree(spidev); in spidev_release()
670 spidev->speed_hz = spidev->spi->max_speed_hz; in spidev_release()
674 spi_slave_abort(spidev->spi); in spidev_release()
774 struct spidev_data *spidev; in spidev_probe() local
786 spidev = kzalloc(sizeof(*spidev), GFP_KERNEL); in spidev_probe()
787 if (!spidev) in spidev_probe()
791 spidev->spi = spi; in spidev_probe()
792 mutex_init(&spidev->spi_lock); in spidev_probe()
793 mutex_init(&spidev->buf_lock); in spidev_probe()
795 INIT_LIST_HEAD(&spidev->device_entry); in spidev_probe()
805 spidev->devt = MKDEV(SPIDEV_MAJOR, minor); in spidev_probe()
806 dev = device_create(spidev_class, &spi->dev, spidev->devt, in spidev_probe()
807 spidev, "spidev%d.%d", in spidev_probe()
816 list_add(&spidev->device_entry, &device_list); in spidev_probe()
820 spidev->speed_hz = spi->max_speed_hz; in spidev_probe()
823 spi_set_drvdata(spi, spidev); in spidev_probe()
825 kfree(spidev); in spidev_probe()
832 struct spidev_data *spidev = spi_get_drvdata(spi); in spidev_remove() local
837 mutex_lock(&spidev->spi_lock); in spidev_remove()
838 spidev->spi = NULL; in spidev_remove()
839 mutex_unlock(&spidev->spi_lock); in spidev_remove()
841 list_del(&spidev->device_entry); in spidev_remove()
842 device_destroy(spidev_class, spidev->devt); in spidev_remove()
843 clear_bit(MINOR(spidev->devt), minors); in spidev_remove()
844 if (spidev->users == 0) in spidev_remove()
845 kfree(spidev); in spidev_remove()