Lines Matching refs:spidev
108 spidev_sync(struct spidev_data *spidev, struct spi_message *message) in spidev_sync() argument
116 spin_lock_irq(&spidev->spi_lock); in spidev_sync()
117 if (spidev->spi == NULL) in spidev_sync()
120 status = spi_async(spidev->spi, message); in spidev_sync()
121 spin_unlock_irq(&spidev->spi_lock); in spidev_sync()
133 spidev_sync_write(struct spidev_data *spidev, size_t len) in spidev_sync_write() argument
136 .tx_buf = spidev->tx_buffer, in spidev_sync_write()
138 .speed_hz = spidev->speed_hz, in spidev_sync_write()
144 return spidev_sync(spidev, &m); in spidev_sync_write()
148 spidev_sync_read(struct spidev_data *spidev, size_t len) in spidev_sync_read() argument
151 .rx_buf = spidev->rx_buffer, in spidev_sync_read()
153 .speed_hz = spidev->speed_hz, in spidev_sync_read()
159 return spidev_sync(spidev, &m); in spidev_sync_read()
168 struct spidev_data *spidev; in spidev_read() local
175 spidev = filp->private_data; in spidev_read()
177 mutex_lock(&spidev->buf_lock); in spidev_read()
178 status = spidev_sync_read(spidev, count); in spidev_read()
182 missing = copy_to_user(buf, spidev->rx_buffer, status); in spidev_read()
188 mutex_unlock(&spidev->buf_lock); in spidev_read()
198 struct spidev_data *spidev; in spidev_write() local
206 spidev = filp->private_data; in spidev_write()
208 mutex_lock(&spidev->buf_lock); in spidev_write()
209 missing = copy_from_user(spidev->tx_buffer, buf, count); in spidev_write()
211 status = spidev_sync_write(spidev, count); in spidev_write()
214 mutex_unlock(&spidev->buf_lock); in spidev_write()
219 static int spidev_message(struct spidev_data *spidev, in spidev_message() argument
239 tx_buf = spidev->tx_buffer; in spidev_message()
240 rx_buf = spidev->rx_buffer; in spidev_message()
296 k_tmp->speed_hz = spidev->speed_hz; in spidev_message()
298 dev_dbg(&spidev->spi->dev, in spidev_message()
304 u_tmp->bits_per_word ? : spidev->spi->bits_per_word, in spidev_message()
306 u_tmp->speed_hz ? : spidev->spi->max_speed_hz); in spidev_message()
311 status = spidev_sync(spidev, &msg); in spidev_message()
316 rx_buf = spidev->rx_buffer; in spidev_message()
371 struct spidev_data *spidev; in spidev_ioctl() local
397 spidev = filp->private_data; in spidev_ioctl()
398 spin_lock_irq(&spidev->spi_lock); in spidev_ioctl()
399 spi = spi_dev_get(spidev->spi); in spidev_ioctl()
400 spin_unlock_irq(&spidev->spi_lock); in spidev_ioctl()
411 mutex_lock(&spidev->buf_lock); in spidev_ioctl()
431 retval = __put_user(spidev->speed_hz, (__u32 __user *)arg); in spidev_ioctl()
496 spidev->speed_hz = tmp; in spidev_ioctl()
516 retval = spidev_message(spidev, ioc, n_ioc); in spidev_ioctl()
521 mutex_unlock(&spidev->buf_lock); in spidev_ioctl()
533 struct spidev_data *spidev; in spidev_compat_ioc_message() local
545 spidev = filp->private_data; in spidev_compat_ioc_message()
546 spin_lock_irq(&spidev->spi_lock); in spidev_compat_ioc_message()
547 spi = spi_dev_get(spidev->spi); in spidev_compat_ioc_message()
548 spin_unlock_irq(&spidev->spi_lock); in spidev_compat_ioc_message()
554 mutex_lock(&spidev->buf_lock); in spidev_compat_ioc_message()
572 retval = spidev_message(spidev, ioc, n_ioc); in spidev_compat_ioc_message()
576 mutex_unlock(&spidev->buf_lock); in spidev_compat_ioc_message()
597 struct spidev_data *spidev; in spidev_open() local
602 list_for_each_entry(spidev, &device_list, device_entry) { in spidev_open()
603 if (spidev->devt == inode->i_rdev) { in spidev_open()
614 if (!spidev->tx_buffer) { in spidev_open()
615 spidev->tx_buffer = kmalloc(bufsiz, GFP_KERNEL); in spidev_open()
616 if (!spidev->tx_buffer) { in spidev_open()
617 dev_dbg(&spidev->spi->dev, "open/ENOMEM\n"); in spidev_open()
623 if (!spidev->rx_buffer) { in spidev_open()
624 spidev->rx_buffer = kmalloc(bufsiz, GFP_KERNEL); in spidev_open()
625 if (!spidev->rx_buffer) { in spidev_open()
626 dev_dbg(&spidev->spi->dev, "open/ENOMEM\n"); in spidev_open()
632 spidev->users++; in spidev_open()
633 filp->private_data = spidev; in spidev_open()
640 kfree(spidev->tx_buffer); in spidev_open()
641 spidev->tx_buffer = NULL; in spidev_open()
649 struct spidev_data *spidev; in spidev_release() local
653 spidev = filp->private_data; in spidev_release()
657 spidev->users--; in spidev_release()
658 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()
667 if (spidev->spi) in spidev_release()
668 spidev->speed_hz = spidev->spi->max_speed_hz; in spidev_release()
671 spin_lock_irq(&spidev->spi_lock); in spidev_release()
672 dofree = (spidev->spi == NULL); in spidev_release()
673 spin_unlock_irq(&spidev->spi_lock); in spidev_release()
676 kfree(spidev); in spidev_release()
719 struct spidev_data *spidev; in spidev_probe() local
735 spidev = kzalloc(sizeof(*spidev), GFP_KERNEL); in spidev_probe()
736 if (!spidev) in spidev_probe()
740 spidev->spi = spi; in spidev_probe()
741 spin_lock_init(&spidev->spi_lock); in spidev_probe()
742 mutex_init(&spidev->buf_lock); in spidev_probe()
744 INIT_LIST_HEAD(&spidev->device_entry); in spidev_probe()
754 spidev->devt = MKDEV(SPIDEV_MAJOR, minor); in spidev_probe()
755 dev = device_create(spidev_class, &spi->dev, spidev->devt, in spidev_probe()
756 spidev, "spidev%d.%d", in spidev_probe()
765 list_add(&spidev->device_entry, &device_list); in spidev_probe()
769 spidev->speed_hz = spi->max_speed_hz; in spidev_probe()
772 spi_set_drvdata(spi, spidev); in spidev_probe()
774 kfree(spidev); in spidev_probe()
781 struct spidev_data *spidev = spi_get_drvdata(spi); in spidev_remove() local
784 spin_lock_irq(&spidev->spi_lock); in spidev_remove()
785 spidev->spi = NULL; in spidev_remove()
786 spin_unlock_irq(&spidev->spi_lock); in spidev_remove()
790 list_del(&spidev->device_entry); in spidev_remove()
791 device_destroy(spidev_class, spidev->devt); in spidev_remove()
792 clear_bit(MINOR(spidev->devt), minors); in spidev_remove()
793 if (spidev->users == 0) in spidev_remove()
794 kfree(spidev); in spidev_remove()