diff options
Diffstat (limited to 'backend/xerox_mfp-usb.c')
-rw-r--r-- | backend/xerox_mfp-usb.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/backend/xerox_mfp-usb.c b/backend/xerox_mfp-usb.c index 6ef1eea..519aba6 100644 --- a/backend/xerox_mfp-usb.c +++ b/backend/xerox_mfp-usb.c @@ -21,6 +21,21 @@ extern int sanei_debug_xerox_mfp; +static int +xerox_need_clear_halt() +{ + char *env; + int workaround = 0; + + env = getenv("SANE_XEROX_USB_HALT_WORKAROUND"); + if (env) { + workaround = atoi(env); + DBG(5, "xerox_need_clear_halt: workaround: %d\n", workaround); + return workaround; + } + return 0; +} + int usb_dev_request(struct device *dev, SANE_Byte *cmd, size_t cmdlen, @@ -70,7 +85,9 @@ usb_dev_open(struct device *dev) dev->dn = -1; return status; } - sanei_usb_clear_halt(dev->dn); + if (xerox_need_clear_halt()) { + sanei_usb_clear_halt(dev->dn); + } return SANE_STATUS_GOOD; } @@ -92,7 +109,9 @@ usb_dev_close(struct device *dev) ret_cancel(dev, 0); } - sanei_usb_clear_halt(dev->dn); /* unstall for next users */ + if (xerox_need_clear_halt()) { + sanei_usb_clear_halt(dev->dn); /* unstall for next users */ + } sanei_usb_close(dev->dn); dev->dn = -1; } |