Lines Matching refs:spidev
26 #include <linux/spi/spidev.h>
92 spidev_sync(struct spidev_data *spidev, struct spi_message *message)
97 spin_lock_irq(&spidev->spi_lock);
98 spi = spidev->spi;
99 spin_unlock_irq(&spidev->spi_lock);
113 spidev_sync_write(struct spidev_data *spidev, size_t len)
116 .tx_buf = spidev->tx_buffer,
118 .speed_hz = spidev->speed_hz,
124 return spidev_sync(spidev, &m);
128 spidev_sync_read(struct spidev_data *spidev, size_t len)
131 .rx_buf = spidev->rx_buffer,
133 .speed_hz = spidev->speed_hz,
139 return spidev_sync(spidev, &m);
148 struct spidev_data *spidev;
155 spidev = filp->private_data;
157 mutex_lock(&spidev->buf_lock);
158 status = spidev_sync_read(spidev, count);
162 missing = copy_to_user(buf, spidev->rx_buffer, status);
168 mutex_unlock(&spidev->buf_lock);
178 struct spidev_data *spidev;
186 spidev = filp->private_data;
188 mutex_lock(&spidev->buf_lock);
189 missing = copy_from_user(spidev->tx_buffer, buf, count);
191 status = spidev_sync_write(spidev, count);
194 mutex_unlock(&spidev->buf_lock);
199 static int spidev_message(struct spidev_data *spidev,
219 tx_buf = spidev->tx_buffer;
220 rx_buf = spidev->rx_buffer;
280 k_tmp->speed_hz = spidev->speed_hz;
282 dev_dbg(&spidev->spi->dev,
288 k_tmp->bits_per_word ? : spidev->spi->bits_per_word,
291 k_tmp->speed_hz ? : spidev->spi->max_speed_hz);
296 status = spidev_sync(spidev, &msg);
347 struct spidev_data *spidev;
360 spidev = filp->private_data;
361 spin_lock_irq(&spidev->spi_lock);
362 spi = spi_dev_get(spidev->spi);
363 spin_unlock_irq(&spidev->spi_lock);
374 mutex_lock(&spidev->buf_lock);
405 retval = put_user(spidev->speed_hz, (__u32 __user *)arg);
475 spidev->speed_hz = tmp;
477 spidev->speed_hz);
496 retval = spidev_message(spidev, ioc, n_ioc);
501 mutex_unlock(&spidev->buf_lock);
513 struct spidev_data *spidev;
523 spidev = filp->private_data;
524 spin_lock_irq(&spidev->spi_lock);
525 spi = spi_dev_get(spidev->spi);
526 spin_unlock_irq(&spidev->spi_lock);
532 mutex_lock(&spidev->buf_lock);
550 retval = spidev_message(spidev, ioc, n_ioc);
554 mutex_unlock(&spidev->buf_lock);
575 struct spidev_data *spidev;
580 list_for_each_entry(spidev, &device_list, device_entry) {
581 if (spidev->devt == inode->i_rdev) {
588 pr_debug("spidev: nothing for minor %d\n", iminor(inode));
592 if (!spidev->tx_buffer) {
593 spidev->tx_buffer = kmalloc(bufsiz, GFP_KERNEL);
594 if (!spidev->tx_buffer) {
600 if (!spidev->rx_buffer) {
601 spidev->rx_buffer = kmalloc(bufsiz, GFP_KERNEL);
602 if (!spidev->rx_buffer) {
608 spidev->users++;
609 filp->private_data = spidev;
616 kfree(spidev->tx_buffer);
617 spidev->tx_buffer = NULL;
625 struct spidev_data *spidev;
629 spidev = filp->private_data;
632 spin_lock_irq(&spidev->spi_lock);
634 dofree = (spidev->spi == NULL);
635 spin_unlock_irq(&spidev->spi_lock);
638 spidev->users--;
639 if (!spidev->users) {
641 kfree(spidev->tx_buffer);
642 spidev->tx_buffer = NULL;
644 kfree(spidev->rx_buffer);
645 spidev->rx_buffer = NULL;
648 kfree(spidev);
650 spidev->speed_hz = spidev->spi->max_speed_hz;
654 spi_slave_abort(spidev->spi);
740 struct spidev_data *spidev;
745 * spidev should never be referenced in DT without a specific
750 of_device_is_compatible(spi->dev.of_node, "spidev"),
751 "%pOF: buggy DT: spidev listed directly in DT\n", spi->dev.of_node);
756 spidev = kzalloc(sizeof(*spidev), GFP_KERNEL);
757 if (!spidev)
761 spidev->spi = spi;
762 spin_lock_init(&spidev->spi_lock);
763 mutex_init(&spidev->buf_lock);
765 INIT_LIST_HEAD(&spidev->device_entry);
775 spidev->devt = MKDEV(SPIDEV_MAJOR, minor);
776 dev = device_create(spidev_class, &spi->dev, spidev->devt,
777 spidev, "spidev%d.%d",
786 list_add(&spidev->device_entry, &device_list);
790 spidev->speed_hz = spi->max_speed_hz;
793 spi_set_drvdata(spi, spidev);
795 kfree(spidev);
802 struct spidev_data *spidev = spi_get_drvdata(spi);
807 spin_lock_irq(&spidev->spi_lock);
808 spidev->spi = NULL;
809 spin_unlock_irq(&spidev->spi_lock);
811 list_del(&spidev->device_entry);
812 device_destroy(spidev_class, spidev->devt);
813 clear_bit(MINOR(spidev->devt), minors);
814 if (spidev->users == 0)
815 kfree(spidev);
823 .name = "spidev",
852 spidev_class = class_create(THIS_MODULE, "spidev");
878 MODULE_ALIAS("spi:spidev");