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