Re: usb/162307: [uslcom][patch] cp2103 usb-to-serial driver does not support modem control lines
Synopsis: [uslcom][patch] cp2103 usb-to-serial driver does not support modem control lines State-Changed-From-To: open->closed State-Changed-By: linimon State-Changed-When: Sun Dec 4 00:23:39 UTC 2011 State-Changed-Why: MFCed back to 8. Responsible-Changed-From-To: freebsd-usb->hselasky Responsible-Changed-By: linimon Responsible-Changed-When: Sun Dec 4 00:23:39 UTC 2011 Responsible-Changed-Why: Over to committer. http://www.freebsd.org/cgi/query-pr.cgi?pr=162307 ___ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"
Re: usb/162307: [uslcom][patch] cp2103 usb-to-serial driver does not support modem control lines
On Wednesday 09 November 2011 10:00:32 JD Louw wrote: > The following reply was made to PR usb/162307; it has been noted by GNATS. > > From: JD Louw > To: bug-follo...@freebsd.org, j...@nanoteq.com > Cc: > Subject: Re: usb/162307: [uslcom][patch] cp2103 usb-to-serial driver does > not support modem control lines > Date: Wed, 9 Nov 2011 10:33:47 +0200 > > --bcaec544f0ae90b72e04b14925bc > Content-Type: multipart/alternative; boundary=bcaec544f0ae90b72b04b14925ba > > --bcaec544f0ae90b72b04b14925ba > Content-Type: text/plain; charset=ISO-8859-1 > > Tested OK. > > Recently I came across new app note (AN571) on SiLabs's website, > describing the cp210x registers in detail. Attached is another minor patch > with some further cleanups: > > 1) Use interface no 0 (wIndex field) for all control transfers > 2) Remove reserved mask on flow control. > > I plan on adding GPIO support later on. Should I add this as a custom > IOCTL? Hi, Modem drivers can have custom IOCTL's. Try to look at other modem drivers, if they already have something like that. Else you need to define your own ioctl file, which you can put in /sys/dev/usb/ which is then automagically exported to userspace. Patch committed: http://svn.freebsd.org/changeset/base/227383 --HPS ___ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"
Re: usb/162307: [uslcom][patch] cp2103 usb-to-serial driver does not support modem control lines
The following reply was made to PR usb/162307; it has been noted by GNATS. From: JD Louw To: bug-follo...@freebsd.org, j...@nanoteq.com Cc: Subject: Re: usb/162307: [uslcom][patch] cp2103 usb-to-serial driver does not support modem control lines Date: Wed, 9 Nov 2011 10:33:47 +0200 --bcaec544f0ae90b72e04b14925bc Content-Type: multipart/alternative; boundary=bcaec544f0ae90b72b04b14925ba --bcaec544f0ae90b72b04b14925ba Content-Type: text/plain; charset=ISO-8859-1 Tested OK. Recently I came across new app note (AN571) on SiLabs's website, describing the cp210x registers in detail. Attached is another minor patch with some further cleanups: 1) Use interface no 0 (wIndex field) for all control transfers 2) Remove reserved mask on flow control. I plan on adding GPIO support later on. Should I add this as a custom IOCTL? Thanks --bcaec544f0ae90b72b04b14925ba Content-Type: text/html; charset=ISO-8859-1 Tested OK.Recently I came across new app note (AN571) on SiLabs's website, describing the cp210x registers in detail. Attached is another minor patch with some further cleanups: 1) Use interface no 0 (wIndex field) for all control transfers2) Remove reserved mask on flow control.I plan on adding GPIO support later on. Should I add this as a custom IOCTL? Thanks --bcaec544f0ae90b72b04b14925ba-- --bcaec544f0ae90b72e04b14925bc Content-Type: text/plain; charset=US-ASCII; name="cleanup.patch.txt" Content-Disposition: attachment; filename="cleanup.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gus2238t0 LS0tIHVzbGNvbV8xXzIyLmMJMjAxMS0xMS0wNyAxOTo0NTozMS4wMDAwMDAwMDAgKzAyMDAKKysr IHVzbGNvbV8xXzIyX2ZpeF9mbG93LmMJMjAxMS0xMS0wNyAyMToyMTo0NS4wMDAwMDAwMDAgKzAy MDAKQEAgLTEwMCwxOCArMTAwLDE3IEBACiAjZGVmaW5lCVVTTENPTV9QQVJJVFlfT0RECTB4MTAK ICNkZWZpbmUJVVNMQ09NX1BBUklUWV9FVkVOCTB4MjAKIAotI2RlZmluZQlVU0xDT01fUE9SVF9O TwkJMHhGRkZGIC8qIFhYWCB0aGluayB0aGlzIHNob3VsZCBiZSAwIC0taHBzICovCisjZGVmaW5l CVVTTENPTV9QT1JUX05PCQkweDAwMDAKIAogLyogVVNMQ09NX0JSRUFLIHZhbHVlcyAqLwogI2Rl ZmluZQlVU0xDT01fQlJFQUtfT0ZGCTB4MDAKICNkZWZpbmUJVVNMQ09NX0JSRUFLX09OCQkweDAx CiAKIC8qIFVTTENPTV9TRVRfRkxPV0NUUkwgdmFsdWVzIC0gMXN0IHdvcmQgKi8KLSNkZWZpbmUJ VVNMQ09NX0ZMT1dfRFRSX09OICAgICAgMHgwMDAwMDAwMQorI2RlZmluZQlVU0xDT01fRkxPV19E VFJfT04gICAgICAweDAwMDAwMDAxIC8qIERUUiBzdGF0aWMgYWN0aXZlICovCiAjZGVmaW5lCVVT TENPTV9GTE9XX0NUU19IUyAgICAgIDB4MDAwMDAwMDggLyogQ1RTIGhhbmRzaGFrZSAqLwotI2Rl ZmluZQlVU0xDT01fRkxPV19SRVNFUlZFRCAgICAweEZGRkZGRjgwCiAvKiBVU0xDT01fU0VUX0ZM T1dDVFJMIHZhbHVlcyAtIDJuZCB3b3JkICovCi0jZGVmaW5lCVVTTENPTV9GTE9XX1JUU19PTiAg ICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUJVVNMQ09NX0ZMT1dfUlRTX09OICAgICAgMHgwMDAwMDA0 MCAvKiBSVFMgc3RhdGljIGFjdGl2ZSAqLwogI2RlZmluZQlVU0xDT01fRkxPV19SVFNfSFMgICAg ICAweDAwMDAwMDgwIC8qIFJUUyBoYW5kc2hha2UgKi8KIAogZW51bSB7CkBAIC01NDAsMTQgKzUz OSwxMiBAQAogCX0KICAgICAgICAKIAlpZiAodC0+Y19jZmxhZyAmIENSVFNDVFMpIHsKLQkJZmxv d2N0cmxbMF0gPSBodG9sZTMyKFVTTENPTV9GTE9XX1JFU0VSVkVEIHwKLQkJICAgIFVTTENPTV9G TE9XX0RUUl9PTiB8IFVTTENPTV9GTE9XX0NUU19IUyk7CisJCWZsb3djdHJsWzBdID0gaHRvbGUz MihVU0xDT01fRkxPV19EVFJfT04gfCBVU0xDT01fRkxPV19DVFNfSFMpOwogCQlmbG93Y3RybFsx XSA9IGh0b2xlMzIoVVNMQ09NX0ZMT1dfUlRTX0hTKTsKIAkJZmxvd2N0cmxbMl0gPSAwOwogCQlm bG93Y3RybFszXSA9IDA7CiAJfSBlbHNlIHsKLQkJZmxvd2N0cmxbMF0gPSBodG9sZTMyKFVTTENP TV9GTE9XX1JFU0VSVkVEIHwKLQkJICAgIFVTTENPTV9GTE9XX0RUUl9PTik7CisJCWZsb3djdHJs WzBdID0gaHRvbGUzMihVU0xDT01fRkxPV19EVFJfT04pOwogCQlmbG93Y3RybFsxXSA9IGh0b2xl MzIoVVNMQ09NX0ZMT1dfUlRTX09OKTsKIAkJZmxvd2N0cmxbMl0gPSAwOwogCQlmbG93Y3RybFsz XSA9IDA7CkBAIC02OTIsNyArNjg5LDcgQEAKIAkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0xDT01f UkVBRDsKIAkJcmVxLmJSZXF1ZXN0ID0gVVNMQ09NX1JDVFJMOwogCQlVU0VUVyhyZXEud1ZhbHVl LCAwKTsKLQkJVVNFVFcocmVxLndJbmRleCwgMCk7CisJCVVTRVRXKHJlcS53SW5kZXgsIFVTTENP TV9QT1JUX05PKTsKIAkJVVNFVFcocmVxLndMZW5ndGgsIHNpemVvZihidWYpKTsKICAgICAgICAg ICAgICAgIAogCQl1c2JkX3hmZXJfc2V0X2ZyYW1lcyh4ZmVyLCAyKTsK --bcaec544f0ae90b72e04b14925bc-- ___ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"
Re: usb/162307: [uslcom][patch] cp2103 usb-to-serial driver does not support modem control lines
The following reply was made to PR usb/162307; it has been noted by GNATS. From: Hans Petter Selasky To: freebsd-usb@freebsd.org Cc: JD Louw , freebsd-gnats-sub...@freebsd.org Subject: Re: usb/162307: [uslcom][patch] cp2103 usb-to-serial driver does not support modem control lines Date: Sat, 5 Nov 2011 13:02:05 +0100 On Saturday 05 November 2011 11:51:14 JD Louw wrote: > usb/162307 Committed with some modifications: 1) control transfers automatically clear-stall. 2) control transfers should have a timeout 3) flowcontrol[2,3] must be zeroed 4) flowcontrol must be stored in little endian format 5) reduce the interval a little bit, because it is blocking other control transfers to this device. 6) reduce control transfer buffer to the request plus 8 bytes, of which only 1 byte is used. Please verify and check that my modifications to your patch are correct: http://svn.freebsd.org/changeset/base/227108 Thanks for the patch! --HPS ___ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"
Re: usb/162307: [uslcom][patch] cp2103 usb-to-serial driver does not support modem control lines
On Saturday 05 November 2011 11:51:14 JD Louw wrote: > usb/162307 Committed with some modifications: 1) control transfers automatically clear-stall. 2) control transfers should have a timeout 3) flowcontrol[2,3] must be zeroed 4) flowcontrol must be stored in little endian format 5) reduce the interval a little bit, because it is blocking other control transfers to this device. 6) reduce control transfer buffer to the request plus 8 bytes, of which only 1 byte is used. Please verify and check that my modifications to your patch are correct: http://svn.freebsd.org/changeset/base/227108 Thanks for the patch! --HPS ___ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"
usb/162307: [uslcom][patch] cp2103 usb-to-serial driver does not support modem control lines
>Number: 162307 >Category: usb >Synopsis: [uslcom][patch] cp2103 usb-to-serial driver does not support >modem control lines >Confidential: no >Severity: non-critical >Priority: medium >Responsible:freebsd-usb >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sat Nov 05 11:00:21 UTC 2011 >Closed-Date: >Last-Modified: >Originator: JD Louw >Release:FreeBSD 8.1-RELEASE i386 >Organization: Nanoteq >Environment: FreeBSD jdl-desktop.lan 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Thu Dec 30 10:20:16 SAST 2010 j...@jdl-desktop.lan:/usr/obj/usr/src/sys/MYKERNEL2 i386 >Description: The current cp2103 driver lacks modem control line status updates (CTS, DTS, RI, DCD). Also missing is hardware flow control mode. >How-To-Repeat: Connect a cp2103 adapter to any modem-like device and notice the modem status lines are not updated. >Fix: The attached patch adds hardware flow control as well as a polling usb transfer mechanism to update the modem status lines. Patch attached with submission follows: --- /usr/src/sys/dev/usb/serial/uslcom.c2010-06-14 04:09:06.0 +0200 +++ uslcom.c2011-11-05 09:33:04.0 +0200 @@ -64,43 +64,61 @@ #defineUSLCOM_SET_DATA_BITS(x) ((x) << 8) +/* Request types */ #defineUSLCOM_WRITE0x41 #defineUSLCOM_READ 0xc1 +/* Request codes */ #defineUSLCOM_UART 0x00 #defineUSLCOM_BAUD_RATE0x01 #defineUSLCOM_DATA 0x03 #defineUSLCOM_BREAK0x05 #defineUSLCOM_CTRL 0x07 +#defineUSLCOM_RCTRL0x08 +#defineUSLCOM_SET_FLOWCTRL 0x13 +/* USLCOM_UART values */ #defineUSLCOM_UART_DISABLE 0x00 #defineUSLCOM_UART_ENABLE 0x01 +/* USLCOM_CTRL/USLCOM_RCTRL values */ #defineUSLCOM_CTRL_DTR_ON 0x0001 #defineUSLCOM_CTRL_DTR_SET 0x0100 #defineUSLCOM_CTRL_RTS_ON 0x0002 #defineUSLCOM_CTRL_RTS_SET 0x0200 #defineUSLCOM_CTRL_CTS 0x0010 #defineUSLCOM_CTRL_DSR 0x0020 +#defineUSLCOM_CTRL_RI 0x0040 #defineUSLCOM_CTRL_DCD 0x0080 +/* USLCOM_BAUD_RATE values */ #defineUSLCOM_BAUD_REF 0x384000 +/* USLCOM_DATA values */ #defineUSLCOM_STOP_BITS_1 0x00 #defineUSLCOM_STOP_BITS_2 0x02 - #defineUSLCOM_PARITY_NONE 0x00 #defineUSLCOM_PARITY_ODD 0x10 #defineUSLCOM_PARITY_EVEN 0x20 #defineUSLCOM_PORT_NO 0x /* XXX think this should be 0 --hps */ +/* USLCOM_BREAK values */ #defineUSLCOM_BREAK_OFF0x00 #defineUSLCOM_BREAK_ON 0x01 +/* USLCOM_SET_FLOWCTRL values - 1st word */ +#defineUSLCOM_FLOW_DTR_ON 0x0001 +#defineUSLCOM_FLOW_CTS_HS 0x0008 /* CTS handshake */ +#defineUSLCOM_FLOW_RESERVED0xFF80 +/* USLCOM_SET_FLOWCTRL values - 2nd word */ +#defineUSLCOM_FLOW_RTS_ON 0x0040 +#defineUSLCOM_FLOW_RTS_HS 0x0080 /* RTS handshake */ + enum { USLCOM_BULK_DT_WR, USLCOM_BULK_DT_RD, + USLCOM_CTRL_DT_RD, USLCOM_N_TRANSFER, }; @@ -122,6 +140,7 @@ static usb_callback_t uslcom_write_callback; static usb_callback_t uslcom_read_callback; +static usb_callback_t uslcom_control_callback; static void uslcom_open(struct ucom_softc *); static void uslcom_close(struct ucom_softc *); @@ -144,7 +163,7 @@ .endpoint = UE_ADDR_ANY, .direction = UE_DIR_OUT, .bufsize = USLCOM_BULK_BUF_SIZE, - .flags = {.pipe_bof = 1,.force_short_xfer = 1,}, + .flags = {.pipe_bof = 1,/*.force_short_xfer = 1,*/}, .callback = &uslcom_write_callback, }, @@ -156,6 +175,15 @@ .flags = {.pipe_bof = 1,.short_xfer_ok = 1,}, .callback = &uslcom_read_callback, }, + [USLCOM_CTRL_DT_RD] = { + .type = UE_CONTROL, + .endpoint = 0x00, + .direction = UE_DIR_ANY, + .interval = 250, /* poll status every 250 ms */ + .bufsize = USLCOM_BULK_BUF_SIZE, + .flags = {.pipe_bof = 1,.short_xfer_ok = 1,}, + .callback = &uslcom_control_callback, + }, }; static struct ucom_callback uslcom_callback = { @@ -262,6 +290,7 @@ mtx_lock(&sc->sc_mtx); usbd_xfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_WR]); usbd_xfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_RD]); + usbd_xfer_set_stall(sc->sc_xfer[USLCOM_CTRL_DT_RD]); mtx_unlock(&sc->sc_mtx); error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc, @@ -306,6 +335,8 @@ &req, NULL, 0, 1000)) {