Lines Matching refs:spidev
99 spidev_sync(struct spidev_data *spidev, struct spi_message *message) in spidev_sync() argument
105 spin_lock_irq(&spidev->spi_lock); in spidev_sync()
106 spi = spidev->spi; in spidev_sync()
107 spin_unlock_irq(&spidev->spi_lock); in spidev_sync()
121 spidev_sync_write(struct spidev_data *spidev, size_t len) in spidev_sync_write() argument
124 .tx_buf = spidev->tx_buffer, in spidev_sync_write()
126 .speed_hz = spidev->speed_hz, in spidev_sync_write()
132 return spidev_sync(spidev, &m); in spidev_sync_write()
136 spidev_sync_read(struct spidev_data *spidev, size_t len) in spidev_sync_read() argument
139 .rx_buf = spidev->rx_buffer, in spidev_sync_read()
141 .speed_hz = spidev->speed_hz, in spidev_sync_read()
147 return spidev_sync(spidev, &m); in spidev_sync_read()
156 struct spidev_data *spidev; in spidev_read() local
163 spidev = filp->private_data; in spidev_read()
165 mutex_lock(&spidev->buf_lock); in spidev_read()
166 status = spidev_sync_read(spidev, count); in spidev_read()
170 missing = copy_to_user(buf, spidev->rx_buffer, status); in spidev_read()
176 mutex_unlock(&spidev->buf_lock); in spidev_read()
186 struct spidev_data *spidev; in spidev_write() local
194 spidev = filp->private_data; in spidev_write()
196 mutex_lock(&spidev->buf_lock); in spidev_write()
197 missing = copy_from_user(spidev->tx_buffer, buf, count); in spidev_write()
199 status = spidev_sync_write(spidev, count); in spidev_write()
202 mutex_unlock(&spidev->buf_lock); in spidev_write()
207 static int spidev_message(struct spidev_data *spidev, in spidev_message() argument
227 tx_buf = spidev->tx_buffer; in spidev_message()
228 rx_buf = spidev->rx_buffer; in spidev_message()
284 k_tmp->speed_hz = spidev->speed_hz; in spidev_message()
286 dev_dbg(&spidev->spi->dev, in spidev_message()
292 u_tmp->bits_per_word ? : spidev->spi->bits_per_word, in spidev_message()
294 u_tmp->speed_hz ? : spidev->spi->max_speed_hz); in spidev_message()
299 status = spidev_sync(spidev, &msg); in spidev_message()
304 rx_buf = spidev->rx_buffer; in spidev_message()
359 struct spidev_data *spidev; in spidev_ioctl() local
385 spidev = filp->private_data; in spidev_ioctl()
386 spin_lock_irq(&spidev->spi_lock); in spidev_ioctl()
387 spi = spi_dev_get(spidev->spi); in spidev_ioctl()
388 spin_unlock_irq(&spidev->spi_lock); in spidev_ioctl()
399 mutex_lock(&spidev->buf_lock); in spidev_ioctl()
419 retval = __put_user(spidev->speed_hz, (__u32 __user *)arg); in spidev_ioctl()
484 spidev->speed_hz = tmp; in spidev_ioctl()
504 retval = spidev_message(spidev, ioc, n_ioc); in spidev_ioctl()
509 mutex_unlock(&spidev->buf_lock); in spidev_ioctl()
521 struct spidev_data *spidev; in spidev_compat_ioc_message() local
533 spidev = filp->private_data; in spidev_compat_ioc_message()
534 spin_lock_irq(&spidev->spi_lock); in spidev_compat_ioc_message()
535 spi = spi_dev_get(spidev->spi); in spidev_compat_ioc_message()
536 spin_unlock_irq(&spidev->spi_lock); in spidev_compat_ioc_message()
542 mutex_lock(&spidev->buf_lock); in spidev_compat_ioc_message()
560 retval = spidev_message(spidev, ioc, n_ioc); in spidev_compat_ioc_message()
564 mutex_unlock(&spidev->buf_lock); in spidev_compat_ioc_message()
585 struct spidev_data *spidev; in spidev_open() local
590 list_for_each_entry(spidev, &device_list, device_entry) { in spidev_open()
591 if (spidev->devt == inode->i_rdev) { in spidev_open()
602 if (!spidev->tx_buffer) { in spidev_open()
603 spidev->tx_buffer = kmalloc(bufsiz, GFP_KERNEL); in spidev_open()
604 if (!spidev->tx_buffer) { in spidev_open()
605 dev_dbg(&spidev->spi->dev, "open/ENOMEM\n"); in spidev_open()
611 if (!spidev->rx_buffer) { in spidev_open()
612 spidev->rx_buffer = kmalloc(bufsiz, GFP_KERNEL); in spidev_open()
613 if (!spidev->rx_buffer) { in spidev_open()
614 dev_dbg(&spidev->spi->dev, "open/ENOMEM\n"); in spidev_open()
620 spidev->users++; in spidev_open()
621 filp->private_data = spidev; in spidev_open()
628 kfree(spidev->tx_buffer); in spidev_open()
629 spidev->tx_buffer = NULL; in spidev_open()
637 struct spidev_data *spidev; in spidev_release() local
640 spidev = filp->private_data; in spidev_release()
644 spidev->users--; in spidev_release()
645 if (!spidev->users) { in spidev_release()
648 kfree(spidev->tx_buffer); in spidev_release()
649 spidev->tx_buffer = NULL; in spidev_release()
651 kfree(spidev->rx_buffer); in spidev_release()
652 spidev->rx_buffer = NULL; in spidev_release()
654 spin_lock_irq(&spidev->spi_lock); in spidev_release()
655 if (spidev->spi) in spidev_release()
656 spidev->speed_hz = spidev->spi->max_speed_hz; in spidev_release()
659 dofree = (spidev->spi == NULL); in spidev_release()
660 spin_unlock_irq(&spidev->spi_lock); in spidev_release()
663 kfree(spidev); in spidev_release()
707 struct spidev_data *spidev; in spidev_probe() local
723 spidev = kzalloc(sizeof(*spidev), GFP_KERNEL); in spidev_probe()
724 if (!spidev) in spidev_probe()
728 spidev->spi = spi; in spidev_probe()
729 spin_lock_init(&spidev->spi_lock); in spidev_probe()
730 mutex_init(&spidev->buf_lock); in spidev_probe()
732 INIT_LIST_HEAD(&spidev->device_entry); in spidev_probe()
742 spidev->devt = MKDEV(SPIDEV_MAJOR, minor); in spidev_probe()
743 dev = device_create(spidev_class, &spi->dev, spidev->devt, in spidev_probe()
744 spidev, "spidev%d.%d", in spidev_probe()
753 list_add(&spidev->device_entry, &device_list); in spidev_probe()
757 spidev->speed_hz = spi->max_speed_hz; in spidev_probe()
760 spi_set_drvdata(spi, spidev); in spidev_probe()
762 kfree(spidev); in spidev_probe()
769 struct spidev_data *spidev = spi_get_drvdata(spi); in spidev_remove() local
772 spin_lock_irq(&spidev->spi_lock); in spidev_remove()
773 spidev->spi = NULL; in spidev_remove()
774 spin_unlock_irq(&spidev->spi_lock); in spidev_remove()
778 list_del(&spidev->device_entry); in spidev_remove()
779 device_destroy(spidev_class, spidev->devt); in spidev_remove()
780 clear_bit(MINOR(spidev->devt), minors); in spidev_remove()
781 if (spidev->users == 0) in spidev_remove()
782 kfree(spidev); in spidev_remove()