aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorOvidiu Panait <ovidiu.panait.oss@gmail.com>2025-12-27 23:26:33 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-01-11 13:54:11 +0100
commitc83d8445f3b6272f712494e0ab2124c000903811 (patch)
tree2ad0bda42e959b501502ccfebe200d3797ab2007 /drivers
parent87d653a894a43adaf74637f175e86df79b399be4 (diff)
staging: axis-fifo: Add poll() support
Implement poll() file operation to allow userspace applications to wait for FIFO readiness using select()/poll()/epoll(). This replaces the module parameter-based timeouts removed in the previous commit. Signed-off-by: Ovidiu Panait <ovidiu.panait.oss@gmail.com> Link: https://patch.msgid.link/20251227212640.3321310-2-ovidiu.panait.oss@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/axis-fifo/axis-fifo.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/staging/axis-fifo/axis-fifo.c b/drivers/staging/axis-fifo/axis-fifo.c
index b2a9f5542fc1..b9b2700410b8 100644
--- a/drivers/staging/axis-fifo/axis-fifo.c
+++ b/drivers/staging/axis-fifo/axis-fifo.c
@@ -32,6 +32,7 @@
#include <linux/jiffies.h>
#include <linux/miscdevice.h>
#include <linux/debugfs.h>
+#include <linux/poll.h>
/* ----------------------------
* driver parameters
@@ -345,6 +346,28 @@ end_unlock:
return ret;
}
+static __poll_t axis_fifo_poll(struct file *f, poll_table *wait)
+{
+ struct axis_fifo *fifo = f->private_data;
+ __poll_t mask = 0;
+
+ if (fifo->has_rx_fifo) {
+ poll_wait(f, &fifo->read_queue, wait);
+
+ if (ioread32(fifo->base_addr + XLLF_RDFO_OFFSET))
+ mask |= EPOLLIN | EPOLLRDNORM;
+ }
+
+ if (fifo->has_tx_fifo) {
+ poll_wait(f, &fifo->write_queue, wait);
+
+ if (ioread32(fifo->base_addr + XLLF_TDFV_OFFSET))
+ mask |= EPOLLOUT | EPOLLWRNORM;
+ }
+
+ return mask;
+}
+
static irqreturn_t axis_fifo_irq(int irq, void *dw)
{
struct axis_fifo *fifo = dw;
@@ -410,7 +433,8 @@ static const struct file_operations fops = {
.open = axis_fifo_open,
.release = axis_fifo_close,
.read = axis_fifo_read,
- .write = axis_fifo_write
+ .write = axis_fifo_write,
+ .poll = axis_fifo_poll,
};
static int axis_fifo_debugfs_regs_show(struct seq_file *m, void *p)