diff options
author | Pete Zaitcev <zaitcev@redhat.com> | 2009-01-06 19:20:42 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-03-24 19:20:26 -0400 |
commit | dd44be6b17ac52238aa6c7f46b906d9fb76e7052 (patch) | |
tree | 7e7d94aeced10435c3e6abb91b7563a126e866a5 /drivers | |
parent | 5c16034d73da2c1b663aa25dedadbc533b3d811c (diff) |
usblp: continuously poll for status
The usblp in 2.6.18 polled for status regardless if we actually needed it.
At some point I dropped it, to save the batteries if nothing else.
As it turned out, printers exist (e.g. Canon BJC-3000) that need prodding
this way or else they stop. This patch restores the old behaviour.
If you want to save battery, don't leave jobs in the print queue.
I tested this on my printers by printing and examining usbmon traces
to make sure status is being requested and printers continue to print.
Tuomas Jäntti verified the fix on BJC-3000.
Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/class/usblp.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c index 3f3ee1351930..d2747a49b974 100644 --- a/drivers/usb/class/usblp.c +++ b/drivers/usb/class/usblp.c | |||
@@ -880,16 +880,19 @@ static int usblp_wwait(struct usblp *usblp, int nonblock) | |||
880 | if (rc <= 0) | 880 | if (rc <= 0) |
881 | break; | 881 | break; |
882 | 882 | ||
883 | if (usblp->flags & LP_ABORT) { | 883 | if (schedule_timeout(msecs_to_jiffies(1500)) == 0) { |
884 | if (schedule_timeout(msecs_to_jiffies(5000)) == 0) { | 884 | if (usblp->flags & LP_ABORT) { |
885 | err = usblp_check_status(usblp, err); | 885 | err = usblp_check_status(usblp, err); |
886 | if (err == 1) { /* Paper out */ | 886 | if (err == 1) { /* Paper out */ |
887 | rc = -ENOSPC; | 887 | rc = -ENOSPC; |
888 | break; | 888 | break; |
889 | } | 889 | } |
890 | } else { | ||
891 | /* Prod the printer, Gentoo#251237. */ | ||
892 | mutex_lock(&usblp->mut); | ||
893 | usblp_read_status(usblp, usblp->statusbuf); | ||
894 | mutex_unlock(&usblp->mut); | ||
890 | } | 895 | } |
891 | } else { | ||
892 | schedule(); | ||
893 | } | 896 | } |
894 | } | 897 | } |
895 | set_current_state(TASK_RUNNING); | 898 | set_current_state(TASK_RUNNING); |