Lines Matching refs:spidev

45 static int spidev_slv_write(struct spidev_rkslv_data *spidev, const void *txbuf, size_t n)  in spidev_slv_write()  argument
48 struct spi_device *spi = spidev->spi; in spidev_slv_write()
63 static int spidev_slv_read(struct spidev_rkslv_data *spidev, void *rxbuf, size_t n) in spidev_slv_read() argument
66 struct spi_device *spi = spidev->spi; in spidev_slv_read()
81 static int spidev_slv_write_and_read(struct spidev_rkslv_data *spidev, const void *tx_buf, in spidev_slv_write_and_read() argument
84 struct spi_device *spi = spidev->spi; in spidev_slv_write_and_read()
100 struct spidev_rkslv_data *spidev; in spidev_rkslv_misc_write() local
110 spidev = filp->private_data; in spidev_rkslv_misc_write()
112 if (!spidev) in spidev_rkslv_misc_write()
115 spi = spidev->spi; in spidev_rkslv_misc_write()
145 spidev->verbose = true; in spidev_rkslv_misc_write()
147 spidev->verbose = false; in spidev_rkslv_misc_write()
173 spidev->appmem + addr, in spidev_rkslv_misc_write()
186 struct spidev_rkslv_data *spidev; in spidev_rkslv_misc_open() local
188 spidev = container_of(miscdev, struct spidev_rkslv_data, misc_dev); in spidev_rkslv_misc_open()
189 filp->private_data = spidev; in spidev_rkslv_misc_open()
199 static int spidev_rkslv_xfer(struct spidev_rkslv_data *spidev) in spidev_rkslv_xfer() argument
201 char *ctrlbuf = spidev->ctrlbuf, *appmem = spidev->appmem, *tempbuf = spidev->tempbuf; in spidev_rkslv_xfer()
203 struct spi_device *spi = spidev->spi; in spidev_rkslv_xfer()
207 memset(spidev->ctrlbuf, 0, SPI_OBJ_CTRL_MSG_SIZE); in spidev_rkslv_xfer()
208 ret = spidev_slv_read(spidev, spidev->ctrlbuf, SPI_OBJ_CTRL_MSG_SIZE); in spidev_rkslv_xfer()
215 if (spidev->verbose) in spidev_rkslv_xfer()
224 ret = spidev_slv_write(spidev, appmem + ctrl->addr, len); in spidev_rkslv_xfer()
233 ret = spidev_slv_read(spidev, appmem + ctrl->addr, len); in spidev_rkslv_xfer()
239 if (spidev->verbose) { in spidev_rkslv_xfer()
251 ret = spidev_slv_write_and_read(spidev, appmem + ctrl->addr, tempbuf, len); in spidev_rkslv_xfer()
257 if (spidev->verbose) { in spidev_rkslv_xfer()
276 if (spidev->verbose) in spidev_rkslv_xfer()
281 if (spidev->verbose) in spidev_rkslv_xfer()
289 struct spidev_rkslv_data *spidev = (struct spidev_rkslv_data *)p; in spidev_rkslv_ctrl_receiver_thread() local
291 while (spidev->tsk_run) in spidev_rkslv_ctrl_receiver_thread()
292 spidev_rkslv_xfer(spidev); in spidev_rkslv_ctrl_receiver_thread()
299 struct spidev_rkslv_data *spidev = NULL; in spidev_rkslv_probe() local
305 spidev = devm_kzalloc(&spi->dev, sizeof(struct spidev_rkslv_data), GFP_KERNEL); in spidev_rkslv_probe()
306 if (!spidev) in spidev_rkslv_probe()
309 spidev->ctrlbuf = devm_kzalloc(&spi->dev, SPI_OBJ_MAX_XFER_SIZE, GFP_KERNEL); in spidev_rkslv_probe()
310 if (!spidev->ctrlbuf) in spidev_rkslv_probe()
313 spidev->appmem = devm_kzalloc(&spi->dev, SPI_OBJ_APP_RAM_SIZE, GFP_KERNEL | GFP_DMA); in spidev_rkslv_probe()
314 if (!spidev->appmem) in spidev_rkslv_probe()
317 spidev->tempbuf = devm_kzalloc(&spi->dev, SPI_OBJ_MAX_XFER_SIZE, GFP_KERNEL); in spidev_rkslv_probe()
318 if (!spidev->tempbuf) in spidev_rkslv_probe()
321 spidev->spi = spi; in spidev_rkslv_probe()
322 spidev->dev = &spi->dev; in spidev_rkslv_probe()
323 dev_set_drvdata(&spi->dev, spidev); in spidev_rkslv_probe()
327 spidev->misc_dev.minor = MISC_DYNAMIC_MINOR; in spidev_rkslv_probe()
328 spidev->misc_dev.name = "spidev_rkslv_misc"; in spidev_rkslv_probe()
329 spidev->misc_dev.fops = &spidev_rkslv_misc_fops; in spidev_rkslv_probe()
330 spidev->misc_dev.parent = &spi->dev; in spidev_rkslv_probe()
331 ret = misc_register(&spidev->misc_dev); in spidev_rkslv_probe()
337 spidev->tsk_run = true; in spidev_rkslv_probe()
338 spidev->tsk = kthread_run(spidev_rkslv_ctrl_receiver_thread, spidev, "spidev-rkslv"); in spidev_rkslv_probe()
339 if (IS_ERR(spidev->tsk)) { in spidev_rkslv_probe()
341 return PTR_ERR(spidev->tsk); in spidev_rkslv_probe()
349 struct spidev_rkslv_data *spidev = dev_get_drvdata(&spi->dev); in spidev_rkslv_remove() local
351 spidev->tsk_run = false; in spidev_rkslv_remove()
353 kthread_stop(spidev->tsk); in spidev_rkslv_remove()
354 misc_deregister(&spidev->misc_dev); in spidev_rkslv_remove()