USB: add poll to gadgetfs's endpoint zero
Add poll() support to gadgetfs ep0 Signed-off-by: Milan Svoboda <msvoboda@ra.rockwell.com> Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9bcbcf4d00
commit
e22fc27c87
@@ -32,6 +32,7 @@
|
|||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/poll.h>
|
||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
@@ -1235,6 +1236,35 @@ dev_release (struct inode *inode, struct file *fd)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int
|
||||||
|
ep0_poll (struct file *fd, poll_table *wait)
|
||||||
|
{
|
||||||
|
struct dev_data *dev = fd->private_data;
|
||||||
|
int mask = 0;
|
||||||
|
|
||||||
|
poll_wait(fd, &dev->wait, wait);
|
||||||
|
|
||||||
|
spin_lock_irq (&dev->lock);
|
||||||
|
|
||||||
|
/* report fd mode change before acting on it */
|
||||||
|
if (dev->setup_abort) {
|
||||||
|
dev->setup_abort = 0;
|
||||||
|
mask = POLLHUP;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dev->state == STATE_SETUP) {
|
||||||
|
if (dev->setup_in || dev->setup_can_stall)
|
||||||
|
mask = POLLOUT;
|
||||||
|
} else {
|
||||||
|
if (dev->ev_next != 0)
|
||||||
|
mask = POLLIN;
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
spin_unlock_irq(&dev->lock);
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
|
||||||
static int dev_ioctl (struct inode *inode, struct file *fd,
|
static int dev_ioctl (struct inode *inode, struct file *fd,
|
||||||
unsigned code, unsigned long value)
|
unsigned code, unsigned long value)
|
||||||
{
|
{
|
||||||
@@ -1254,7 +1284,7 @@ static const struct file_operations ep0_io_operations = {
|
|||||||
.read = ep0_read,
|
.read = ep0_read,
|
||||||
.write = ep0_write,
|
.write = ep0_write,
|
||||||
.fasync = ep0_fasync,
|
.fasync = ep0_fasync,
|
||||||
// .poll = ep0_poll,
|
.poll = ep0_poll,
|
||||||
.ioctl = dev_ioctl,
|
.ioctl = dev_ioctl,
|
||||||
.release = dev_release,
|
.release = dev_release,
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user