xerox_mfp: skip ENDPOINT CLEAR HALT command by default

Some xerox_mfp scanners, such as Samsung SCX-4521F, hangs when
their OUT ENDPOINT receives CLEAR HALT command, which is performed
in usb open and close functions of the backend.
The issue seem to be dependant on USB controller and assumingly
happens due to some sort of incompatibility of USB implementation
in the scanner.

Skip sending this command by default and add
SANE_XEROX_USB_HALT_WORKAROUND env variable to execute
CLEAR HALT commands.
merge-requests/813/head
ValdikSS 2023-09-27 17:02:34 +03:00
rodzic 3a58649ff1
commit 655b9736c5
2 zmienionych plików z 30 dodań i 2 usunięć

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -178,6 +178,15 @@ setting the environment variable
to 1. This may work around issues which happen with particular kernel
versions. Example:
.I export SANE_USB_WORKAROUND=1.
.TP
.B SANE_XEROX_USB_HALT_WORKAROUND
If your old (pre-2010) Xerox / Samsung / HP scanner is detected
only once and subsequent usage requires replugging the cable, try
setting the environment variable
.B SANE_XEROX_USB_HALT_WORKAROUND
to 1. This may work around issues which happen with particular USB
controllers. Example:
.I export SANE_XEROX_USB_HALT_WORKAROUND=1.
.SH "SEE ALSO"
.BR sane (7),