From 4577e41b615dac4173ef767d4ebf37079c181a9c Mon Sep 17 00:00:00 2001 From: matteo serva Date: Wed, 13 Mar 2024 21:41:38 +0100 Subject: [PATCH] Revert "moved buffers initialization" This reverts commit baccfb4805fc1e9f12ad832e4f2c3186871f94da. --- driver/smi_stream_dev.c | 56 ++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/driver/smi_stream_dev.c b/driver/smi_stream_dev.c index 51ddf61..ef915b6 100644 --- a/driver/smi_stream_dev.c +++ b/driver/smi_stream_dev.c @@ -762,8 +762,17 @@ void transfer_thread_stop(struct bcm2835_smi_dev_instance *inst) * ***************************************************************************/ -static int smi_stream_init_buffers(struct bcm2835_smi_dev_instance *inst) +static int smi_stream_open(struct inode *inode, struct file *file) { + int dev = iminor(inode); + + dev_dbg(inst->dev, "SMI device opened."); + + if (dev != DEVICE_MINOR) + { + dev_err(inst->dev, "smi_stream_open: Unknown minor device: %d", dev); // error here + return -ENXIO; + } // preinit the thread handlers to NULL inst->reader_thread = NULL; @@ -790,36 +799,6 @@ static int smi_stream_init_buffers(struct bcm2835_smi_dev_instance *inst) kfifo_init(&inst->rx_fifo, inst->rx_fifo_buffer, fifo_mtu_multiplier * DMA_BOUNCE_BUFFER_SIZE); kfifo_init(&inst->tx_fifo, inst->tx_fifo_buffer, fifo_mtu_multiplier * DMA_BOUNCE_BUFFER_SIZE); - - return 0; -} - -static void smi_stream_clear_buffers(struct bcm2835_smi_dev_instance *inst) -{ - if (inst->reader_thread != NULL) kthread_stop(inst->reader_thread); - if (inst->writer_thread != NULL) kthread_stop(inst->writer_thread); - if (inst->rx_fifo_buffer) vfree(inst->rx_fifo_buffer); - if (inst->tx_fifo_buffer) vfree(inst->tx_fifo_buffer); - - inst->rx_fifo_buffer = NULL; - inst->tx_fifo_buffer = NULL; - inst->reader_thread = NULL; - inst->writer_thread = NULL; - -} - -static int smi_stream_open(struct inode *inode, struct file *file) -{ - int dev = iminor(inode); - - dev_dbg(inst->dev, "SMI device opened."); - - if (dev != DEVICE_MINOR) - { - dev_err(inst->dev, "smi_stream_open: Unknown minor device: %d", dev); // error here - return -ENXIO; - } - smi_stream_init_buffers(inst); // when file is being openned, stream state is still idle set_state(smi_stream_idle); @@ -844,9 +823,18 @@ static int smi_stream_release(struct inode *inode, struct file *file) // make sure stream is idle set_state(smi_stream_idle); - - smi_stream_clear_buffers(inst); - inst->address_changed = 0; + + if (inst->reader_thread != NULL) kthread_stop(inst->reader_thread); + if (inst->writer_thread != NULL) kthread_stop(inst->writer_thread); + + if (inst->rx_fifo_buffer) vfree(inst->rx_fifo_buffer); + if (inst->tx_fifo_buffer) vfree(inst->tx_fifo_buffer); + + inst->rx_fifo_buffer = NULL; + inst->tx_fifo_buffer = NULL; + inst->reader_thread = NULL; + inst->writer_thread = NULL; + inst->address_changed = 0; return 0; }