usb/113060: Samsung printer not working in bidirectional mode
Hans Petter Selasky
hselasky at freebsd.org
Sun May 27 20:32:51 UTC 2007
On Sunday 27 May 2007 17:33, Ulrich Spoerlein wrote:
> >Number: 113060
> >Category: usb
> >Synopsis: Samsung printer not working in bidirectional mode
> >Confidential: no
> >Severity: non-critical
> >Priority: low
> >Responsible: freebsd-usb
> >State: open
> >Quarter:
> >Keywords:
> >Date-Required:
> >Class: sw-bug
> >Submitter-Id: current-users
> >Arrival-Date: Sun May 27 15:40:04 GMT 2007
> >Closed-Date:
> >Last-Modified:
> >Originator: Ulrich Spörlein
> >Release: FreeBSD 6.2-STABLE i386
> >Organization:
> >Environment:
> >Description:
>
> The following printer, when attached via USB fails to work
>
> port 2 addr 2: full speed, self powered, config 1, SAMSUNG Laser Printer
> ML-4600(0x3004), SAMSUNG ELECTRONICS CO., LT(0x04e8), rev 1.00
>
> Peter van Heusden identified the problem to be the bi-directional mode.
> When adding the quirks as given below *OR* chmod a-w /dev/ulpt0 CUPS will
> print just fine.
>
> Please note that under the new USB stack developed by Hans Petter Selasky
> the printer works out of the box. This, and usb/112944 leave me to believe
> it is a more general problem with bidirectional support under ulpt(4).
>
> Perhaps HPS can comment on the architectural differences between the old
> and his new ulpt(4)?
>
> PS: Whitespace and sorting in usb_quirks.c are, well, interessting.
>
> >How-To-Repeat:
> >Fix:
>
> --- ml4600.diff begins here ---
> Index: usb_quirks.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/dev/usb/usb_quirks.c,v
> retrieving revision 1.41.2.8
> diff -u -p -r1.41.2.8 usb_quirks.c
> --- usb_quirks.c 28 Apr 2007 20:31:30 -0000 1.41.2.8
> +++ usb_quirks.c 27 May 2007 15:31:37 -0000
> @@ -99,6 +99,7 @@ Static const struct usbd_quirk_entry {
> { USB_VENDOR_HP, USB_PRODUCT_HP_810C, ANY, { UQ_BROKEN_BIDIR }},
> { USB_VENDOR_HP, USB_PRODUCT_HP_830C, ANY, { UQ_BROKEN_BIDIR }},
> { USB_VENDOR_HP, USB_PRODUCT_HP_1220C, ANY, { UQ_BROKEN_BIDIR }},
> + { USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_ML4600, ANY, {
> UQ_BROKEN_BIDIR }}, { USB_VENDOR_XEROX, USB_PRODUCT_XEROX_WCM15, ANY,
> { UQ_BROKEN_BIDIR }}, /* YAMAHA router's ucdDevice is the version of
> farmware and often changes. */ { USB_VENDOR_YAMAHA,
> USB_PRODUCT_YAMAHA_RTA54I,
> Index: usbdevs
> ===================================================================
> RCS file: /home/ncvs/src/sys/dev/usb/usbdevs,v
> retrieving revision 1.232.2.24
> diff -u -p -r1.232.2.24 usbdevs
> --- usbdevs 20 May 2007 12:34:39 -0000 1.232.2.24
> +++ usbdevs 27 May 2007 09:30:30 -0000
> @@ -1491,6 +1491,7 @@ product RATOC REXUSB60 0xb000 REX-USB60
> product SAGEM USBSERIAL 0x0027 USB-Serial Controller
>
> /* Samsung products */
> +product SAMSUNG ML4600 0x3004 ML-4600 laser printer
> product SAMSUNG ML6060 0x3008 ML-6060 laser printer
>
> /* SanDisk products */
> --- ml4600.diff ends here ---
>
> >Release-Note:
> >Audit-Trail:
> >Unformatted:
>
Hi,
The main difference between the old "ulpt" and the new "ulpt" is that the new
use asynchronous reading of data, while the old "ulpt" uses synchronous
reading. That means that the new "ulpt" transfers data to/from all endpoints
in the background.
Maybe that has something to do with the problem, that the IN enpoint is not
polled.
--HPS
More information about the freebsd-usb
mailing list