Lines Matching refs:spidev

93 spidev_sync(struct spidev_data *spidev, struct spi_message *message)  in spidev_sync()  argument
98 spin_lock_irq(&spidev->spi_lock); in spidev_sync()
99 spi = spidev->spi; in spidev_sync()
100 spin_unlock_irq(&spidev->spi_lock); in spidev_sync()
114 spidev_sync_write(struct spidev_data *spidev, size_t len) in spidev_sync_write() argument
117 .tx_buf = spidev->tx_buffer, in spidev_sync_write()
119 .speed_hz = spidev->speed_hz, in spidev_sync_write()
125 return spidev_sync(spidev, &m); in spidev_sync_write()
129 spidev_sync_read(struct spidev_data *spidev, size_t len) in spidev_sync_read() argument
132 .rx_buf = spidev->rx_buffer, in spidev_sync_read()
134 .speed_hz = spidev->speed_hz, in spidev_sync_read()
140 return spidev_sync(spidev, &m); in spidev_sync_read()
149 struct spidev_data *spidev; in spidev_read() local
156 spidev = filp->private_data; in spidev_read()
158 mutex_lock(&spidev->buf_lock); in spidev_read()
159 status = spidev_sync_read(spidev, count); in spidev_read()
163 missing = copy_to_user(buf, spidev->rx_buffer, status); in spidev_read()
169 mutex_unlock(&spidev->buf_lock); in spidev_read()
179 struct spidev_data *spidev; in spidev_write() local
187 spidev = filp->private_data; in spidev_write()
189 mutex_lock(&spidev->buf_lock); in spidev_write()
190 missing = copy_from_user(spidev->tx_buffer, buf, count); in spidev_write()
192 status = spidev_sync_write(spidev, count); in spidev_write()
195 mutex_unlock(&spidev->buf_lock); in spidev_write()
200 static int spidev_message(struct spidev_data *spidev, in spidev_message() argument
220 tx_buf = spidev->tx_buffer; in spidev_message()
221 rx_buf = spidev->rx_buffer; in spidev_message()
281 k_tmp->speed_hz = spidev->speed_hz; in spidev_message()
283 dev_dbg(&spidev->spi->dev, in spidev_message()
289 k_tmp->bits_per_word ? : spidev->spi->bits_per_word, in spidev_message()
292 k_tmp->speed_hz ? : spidev->spi->max_speed_hz); in spidev_message()
297 status = spidev_sync(spidev, &msg); in spidev_message()
348 struct spidev_data *spidev; in spidev_ioctl() local
361 spidev = filp->private_data; in spidev_ioctl()
362 spin_lock_irq(&spidev->spi_lock); in spidev_ioctl()
363 spi = spi_dev_get(spidev->spi); in spidev_ioctl()
364 spin_unlock_irq(&spidev->spi_lock); in spidev_ioctl()
375 mutex_lock(&spidev->buf_lock); in spidev_ioctl()
395 retval = put_user(spidev->speed_hz, (__u32 __user *)arg); in spidev_ioctl()
473 spidev->speed_hz = tmp; in spidev_ioctl()
474 dev_dbg(&spi->dev, "%d Hz (max)\n", spidev->speed_hz); in spidev_ioctl()
493 retval = spidev_message(spidev, ioc, n_ioc); in spidev_ioctl()
498 mutex_unlock(&spidev->buf_lock); in spidev_ioctl()
510 struct spidev_data *spidev; in spidev_compat_ioc_message() local
520 spidev = filp->private_data; in spidev_compat_ioc_message()
521 spin_lock_irq(&spidev->spi_lock); in spidev_compat_ioc_message()
522 spi = spi_dev_get(spidev->spi); in spidev_compat_ioc_message()
523 spin_unlock_irq(&spidev->spi_lock); in spidev_compat_ioc_message()
529 mutex_lock(&spidev->buf_lock); in spidev_compat_ioc_message()
547 retval = spidev_message(spidev, ioc, n_ioc); in spidev_compat_ioc_message()
551 mutex_unlock(&spidev->buf_lock); in spidev_compat_ioc_message()
572 struct spidev_data *spidev = NULL, *iter; in spidev_open() local
580 spidev = iter; in spidev_open()
585 if (!spidev) { in spidev_open()
590 if (!spidev->tx_buffer) { in spidev_open()
591 spidev->tx_buffer = kmalloc(bufsiz, GFP_KERNEL); in spidev_open()
592 if (!spidev->tx_buffer) { in spidev_open()
593 dev_dbg(&spidev->spi->dev, "open/ENOMEM\n"); in spidev_open()
599 if (!spidev->rx_buffer) { in spidev_open()
600 spidev->rx_buffer = kmalloc(bufsiz, GFP_KERNEL); in spidev_open()
601 if (!spidev->rx_buffer) { in spidev_open()
602 dev_dbg(&spidev->spi->dev, "open/ENOMEM\n"); in spidev_open()
608 spidev->users++; in spidev_open()
609 filp->private_data = spidev; in spidev_open()
616 kfree(spidev->tx_buffer); in spidev_open()
617 spidev->tx_buffer = NULL; in spidev_open()
625 struct spidev_data *spidev; in spidev_release() local
629 spidev = filp->private_data; in spidev_release()
632 spin_lock_irq(&spidev->spi_lock); in spidev_release()
634 dofree = (spidev->spi == NULL); in spidev_release()
635 spin_unlock_irq(&spidev->spi_lock); in spidev_release()
638 spidev->users--; in spidev_release()
639 if (!spidev->users) { in spidev_release()
641 kfree(spidev->tx_buffer); in spidev_release()
642 spidev->tx_buffer = NULL; in spidev_release()
644 kfree(spidev->rx_buffer); in spidev_release()
645 spidev->rx_buffer = NULL; in spidev_release()
648 kfree(spidev); in spidev_release()
650 spidev->speed_hz = spidev->spi->max_speed_hz; in spidev_release()
654 spi_slave_abort(spidev->spi); in spidev_release()
750 struct spidev_data *spidev; in spidev_probe() local
762 spidev = kzalloc(sizeof(*spidev), GFP_KERNEL); in spidev_probe()
763 if (!spidev) in spidev_probe()
767 spidev->spi = spi; in spidev_probe()
768 spin_lock_init(&spidev->spi_lock); in spidev_probe()
769 mutex_init(&spidev->buf_lock); in spidev_probe()
771 INIT_LIST_HEAD(&spidev->device_entry); in spidev_probe()
781 spidev->devt = MKDEV(SPIDEV_MAJOR, minor); in spidev_probe()
782 dev = device_create(spidev_class, &spi->dev, spidev->devt, in spidev_probe()
783 spidev, "spidev%d.%d", in spidev_probe()
792 list_add(&spidev->device_entry, &device_list); in spidev_probe()
796 spidev->speed_hz = spi->max_speed_hz; in spidev_probe()
799 spi_set_drvdata(spi, spidev); in spidev_probe()
801 kfree(spidev); in spidev_probe()
808 struct spidev_data *spidev = spi_get_drvdata(spi); in spidev_remove() local
813 spin_lock_irq(&spidev->spi_lock); in spidev_remove()
814 spidev->spi = NULL; in spidev_remove()
815 spin_unlock_irq(&spidev->spi_lock); in spidev_remove()
817 list_del(&spidev->device_entry); in spidev_remove()
818 device_destroy(spidev_class, spidev->devt); in spidev_remove()
819 clear_bit(MINOR(spidev->devt), minors); in spidev_remove()
820 if (spidev->users == 0) in spidev_remove()
821 kfree(spidev); in spidev_remove()