From 5ab9b0cbd779b2b679e3ad902bab985b74badfda Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Tue, 8 Aug 2006 22:23:12 -0700 Subject: [PATCH] --- yaml --- r: 36415 b: refs/heads/master c: e22fc27c87b41bda1b0daf8436224b0f79853482 h: refs/heads/master i: 36413: b3e9b22a914313501fbca6846511082eafa3b867 36411: 3ddc7338d951f9976b7104df7409dd7808654496 36407: 7b3143d4573a5f036c24951f5cbd9fd5214226df 36399: 6809700376c38d849ef306c0c544968bc8401ac0 36383: d457c67c941546cb459bf0d08ed9ec70cf77e21d 36351: eff43d17bea19f7e90870a076bfa379f4a858db7 v: v3 --- [refs] | 2 +- trunk/drivers/usb/gadget/inode.c | 32 +++++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 4525f028fe68..f34c740839ea 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9bcbcf4d00cd2400e655a738e77f0d21b69c6771 +refs/heads/master: e22fc27c87b41bda1b0daf8436224b0f79853482 diff --git a/trunk/drivers/usb/gadget/inode.c b/trunk/drivers/usb/gadget/inode.c index 1072e987ff21..ed9b404e5f5a 100644 --- a/trunk/drivers/usb/gadget/inode.c +++ b/trunk/drivers/usb/gadget/inode.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -1235,6 +1236,35 @@ dev_release (struct inode *inode, struct file *fd) 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, unsigned code, unsigned long value) { @@ -1254,7 +1284,7 @@ static const struct file_operations ep0_io_operations = { .read = ep0_read, .write = ep0_write, .fasync = ep0_fasync, - // .poll = ep0_poll, + .poll = ep0_poll, .ioctl = dev_ioctl, .release = dev_release, };