Mon Jan 21 19:08:43 2013 UTC ()
force chip into serial mode
add 232RL product id


(mlelstv)
diff -r1.55 -r1.56 src/sys/dev/usb/uftdi.c
diff -r1.7 -r1.8 src/sys/dev/usb/uftdireg.h

cvs diff -r1.55 -r1.56 src/sys/dev/usb/uftdi.c (expand / switch to unified diff)

--- src/sys/dev/usb/uftdi.c 2013/01/20 13:43:24 1.55
+++ src/sys/dev/usb/uftdi.c 2013/01/21 19:08:42 1.56
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: uftdi.c,v 1.55 2013/01/20 13:43:24 reinoud Exp $ */ 1/* $NetBSD: uftdi.c,v 1.56 2013/01/21 19:08:42 mlelstv Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 The NetBSD Foundation, Inc. 4 * Copyright (c) 2000 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to The NetBSD Foundation 7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Lennart Augustsson (lennart@augustsson.net). 8 * by Lennart Augustsson (lennart@augustsson.net).
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -20,27 +20,27 @@ @@ -20,27 +20,27 @@
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE. 29 * POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32#include <sys/cdefs.h> 32#include <sys/cdefs.h>
33__KERNEL_RCSID(0, "$NetBSD: uftdi.c,v 1.55 2013/01/20 13:43:24 reinoud Exp $"); 33__KERNEL_RCSID(0, "$NetBSD: uftdi.c,v 1.56 2013/01/21 19:08:42 mlelstv Exp $");
34 34
35#include <sys/param.h> 35#include <sys/param.h>
36#include <sys/systm.h> 36#include <sys/systm.h>
37#include <sys/kernel.h> 37#include <sys/kernel.h>
38#include <sys/device.h> 38#include <sys/device.h>
39#include <sys/conf.h> 39#include <sys/conf.h>
40#include <sys/tty.h> 40#include <sys/tty.h>
41 41
42#include <dev/usb/usb.h> 42#include <dev/usb/usb.h>
43 43
44#include <dev/usb/usbdi.h> 44#include <dev/usb/usbdi.h>
45#include <dev/usb/usbdi_util.h> 45#include <dev/usb/usbdi_util.h>
46#include <dev/usb/usbdevs.h> 46#include <dev/usb/usbdevs.h>
@@ -116,26 +116,27 @@ struct ucom_methods uftdi_methods = { @@ -116,26 +116,27 @@ struct ucom_methods uftdi_methods = {
116 uftdi_read, 116 uftdi_read,
117 uftdi_write, 117 uftdi_write,
118}; 118};
119 119
120/*  120/*
121 * The devices default to UFTDI_TYPE_8U232AM. 121 * The devices default to UFTDI_TYPE_8U232AM.
122 * Remember to update uftdi_attach() if it should be UFTDI_TYPE_SIO instead 122 * Remember to update uftdi_attach() if it should be UFTDI_TYPE_SIO instead
123 */ 123 */
124static const struct usb_devno uftdi_devs[] = { 124static const struct usb_devno uftdi_devs[] = {
125 { USB_VENDOR_BBELECTRONICS, USB_PRODUCT_BBELECTRONICS_USOTL4 }, 125 { USB_VENDOR_BBELECTRONICS, USB_PRODUCT_BBELECTRONICS_USOTL4 },
126 { USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_TWIST }, 126 { USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_TWIST },
127 { USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_SAMBA }, 127 { USB_VENDOR_FALCOM, USB_PRODUCT_FALCOM_SAMBA },
128 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_232H }, 128 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_232H },
 129 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_232RL },
129 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232C }, 130 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232C },
130 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_4232H }, 131 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_4232H },
131 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U100AX }, 132 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U100AX },
132 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM }, 133 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM },
133 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_KW }, 134 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_KW },
134 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_YS }, 135 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_YS },
135 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y6 }, 136 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y6 },
136 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y8 }, 137 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y8 },
137 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_IC }, 138 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_IC },
138 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_DB9 }, 139 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_DB9 },
139 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_RS232 }, 140 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_RS232 },
140 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y9 }, 141 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MHAM_Y9 },
141 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_COASTAL_TNCX }, 142 { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_COASTAL_TNCX },
@@ -515,26 +516,35 @@ uftdi_set(void *vsc, int portno, int reg @@ -515,26 +516,35 @@ uftdi_set(void *vsc, int portno, int reg
515Static int 516Static int
516uftdi_param(void *vsc, int portno, struct termios *t) 517uftdi_param(void *vsc, int portno, struct termios *t)
517{ 518{
518 struct uftdi_softc *sc = vsc; 519 struct uftdi_softc *sc = vsc;
519 usb_device_request_t req; 520 usb_device_request_t req;
520 usbd_status err; 521 usbd_status err;
521 int rate, data, flow; 522 int rate, data, flow;
522 523
523 DPRINTF(("uftdi_param: sc=%p\n", sc)); 524 DPRINTF(("uftdi_param: sc=%p\n", sc));
524 525
525 if (sc->sc_dying) 526 if (sc->sc_dying)
526 return (EIO); 527 return (EIO);
527 528
 529 req.bmRequestType = UT_WRITE_VENDOR_DEVICE;
 530 req.bRequest = FTDI_SIO_SET_BITMODE;
 531 USETW(req.wValue, FTDI_BITMODE_RESET << 8 | 0x00);
 532 USETW(req.wIndex, portno);
 533 USETW(req.wLength, 0);
 534 err = usbd_do_request(sc->sc_udev, &req, NULL);
 535 if (err)
 536 return (EIO);
 537
528 switch (sc->sc_type) { 538 switch (sc->sc_type) {
529 case UFTDI_TYPE_SIO: 539 case UFTDI_TYPE_SIO:
530 switch (t->c_ospeed) { 540 switch (t->c_ospeed) {
531 case 300: rate = ftdi_sio_b300; break; 541 case 300: rate = ftdi_sio_b300; break;
532 case 600: rate = ftdi_sio_b600; break; 542 case 600: rate = ftdi_sio_b600; break;
533 case 1200: rate = ftdi_sio_b1200; break; 543 case 1200: rate = ftdi_sio_b1200; break;
534 case 2400: rate = ftdi_sio_b2400; break; 544 case 2400: rate = ftdi_sio_b2400; break;
535 case 4800: rate = ftdi_sio_b4800; break; 545 case 4800: rate = ftdi_sio_b4800; break;
536 case 9600: rate = ftdi_sio_b9600; break; 546 case 9600: rate = ftdi_sio_b9600; break;
537 case 19200: rate = ftdi_sio_b19200; break; 547 case 19200: rate = ftdi_sio_b19200; break;
538 case 38400: rate = ftdi_sio_b38400; break; 548 case 38400: rate = ftdi_sio_b38400; break;
539 case 57600: rate = ftdi_sio_b57600; break; 549 case 57600: rate = ftdi_sio_b57600; break;
540 case 115200: rate = ftdi_sio_b115200; break; 550 case 115200: rate = ftdi_sio_b115200; break;

cvs diff -r1.7 -r1.8 src/sys/dev/usb/uftdireg.h (expand / switch to unified diff)

--- src/sys/dev/usb/uftdireg.h 2012/08/24 01:36:14 1.7
+++ src/sys/dev/usb/uftdireg.h 2013/01/21 19:08:42 1.8
@@ -1,40 +1,41 @@ @@ -1,40 +1,41 @@
1/* $NetBSD: uftdireg.h,v 1.7 2012/08/24 01:36:14 msaitoh Exp $ */ 1/* $NetBSD: uftdireg.h,v 1.8 2013/01/21 19:08:42 mlelstv Exp $ */
2 2
3/* 3/*
4 * Definitions for the FTDI USB Single Port Serial Converter - 4 * Definitions for the FTDI USB Single Port Serial Converter -
5 * known as FTDI_SIO (Serial Input/Output application of the chipset) 5 * known as FTDI_SIO (Serial Input/Output application of the chipset)
6 * 6 *
7 * The device is based on the FTDI FT8U100AX chip. It has a DB25 on one side, 7 * The device is based on the FTDI FT8U100AX chip. It has a DB25 on one side,
8 * USB on the other. 8 * USB on the other.
9 * 9 *
10 * Thanx to FTDI (http://www.ftdi.co.uk) for so kindly providing details 10 * Thanx to FTDI (http://www.ftdi.co.uk) for so kindly providing details
11 * of the protocol required to talk to the device and ongoing assistence 11 * of the protocol required to talk to the device and ongoing assistence
12 * during development. 12 * during development.
13 * 13 *
14 * Bill Ryder - bryder@sgi.com of Silicon Graphics, Inc. is the original 14 * Bill Ryder - bryder@sgi.com of Silicon Graphics, Inc. is the original
15 * author of this file. 15 * author of this file.
16 */ 16 */
17/* Modified by Lennart Augustsson */ 17/* Modified by Lennart Augustsson */
18 18
19/* Vendor Request Interface */ 19/* Vendor Request Interface */
20#define FTDI_SIO_RESET 0 /* Reset the port */ 20#define FTDI_SIO_RESET 0 /* Reset the port */
21#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ 21#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */
22#define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */ 22#define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */
23#define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */ 23#define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */
24#define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */ 24#define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */
25#define FTDI_SIO_GET_STATUS 5 /* Retrieve current value of status reg */ 25#define FTDI_SIO_GET_STATUS 5 /* Retrieve current value of status reg */
26#define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */ 26#define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */
27#define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */ 27#define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */
 28#define FTDI_SIO_SET_BITMODE 11 /* Set FIFO/Serial mode */
28 29
29/* Port Identifier Table */ 30/* Port Identifier Table */
30#define FTDI_PIT_DEFAULT 0 /* SIOA */ 31#define FTDI_PIT_DEFAULT 0 /* SIOA */
31#define FTDI_PIT_SIOA 1 /* SIOA */ 32#define FTDI_PIT_SIOA 1 /* SIOA */
32#define FTDI_PIT_SIOB 2 /* SIOB */ 33#define FTDI_PIT_SIOB 2 /* SIOB */
33#define FTDI_PIT_PARALLEL 3 /* Parallel */ 34#define FTDI_PIT_PARALLEL 3 /* Parallel */
34 35
35enum uftdi_type { 36enum uftdi_type {
36 UFTDI_TYPE_SIO, 37 UFTDI_TYPE_SIO,
37 UFTDI_TYPE_8U232AM 38 UFTDI_TYPE_8U232AM
38}; 39};
39 40
40/* 41/*
@@ -335,13 +336,34 @@ enum { @@ -335,13 +336,34 @@ enum {
335 * Byte 0: Port & length 336 * Byte 0: Port & length
336 * 337 *
337 * Offset Description 338 * Offset Description
338 * B0..1 Port 339 * B0..1 Port
339 * B2..7 Length of message - (not including Byte 0) 340 * B2..7 Length of message - (not including Byte 0)
340 * 341 *
341 */ 342 */
342#define FTDI_PORT_MASK 0x0f 343#define FTDI_PORT_MASK 0x0f
343#define FTDI_MSR_MASK 0xf0 344#define FTDI_MSR_MASK 0xf0
344#define FTDI_GET_MSR(p) (((p)[0]) & FTDI_MSR_MASK) 345#define FTDI_GET_MSR(p) (((p)[0]) & FTDI_MSR_MASK)
345#define FTDI_GET_LSR(p) ((p)[1]) 346#define FTDI_GET_LSR(p) ((p)[1])
346#define FTDI_LSR_MASK (~0x60) /* interesting bits */ 347#define FTDI_LSR_MASK (~0x60) /* interesting bits */
347#define FTDI_OUT_TAG(len, port) (((len) << 2) | (port)) 348#define FTDI_OUT_TAG(len, port) (((len) << 2) | (port))
 349
 350/*
 351 * BmRequestType: 0100 0000B
 352 * bRequest: FTDI_SIO_SET_BITMODE
 353 * wValue: Bitmode value - see below
 354 * wIndex: Port
 355 * wLength: 0
 356 * Data: None
 357 *
 358 * Not all modes are available on all chips
 359 */
 360/* FTDI_SIO_SET_BITMODE */
 361#define FTDI_BITMODE_RESET 0x00 /* UART mode */
 362#define FTDI_BITMODE_BITBANG 0x01 /* asynchrounous bitbang mode */
 363#define FTDI_BITMODE_MPSSE 0x02 /* MPSSE mode */
 364#define FTDI_BITMODE_SYNCBB 0x04 /* synchronous bitbang mode */
 365#define FTDI_BITMODE_MCU 0x08 /* MCU Host Bus Emulation mode */
 366#define FTDI_BITMODE_OPTO 0x10 /* Fast Opto-Isolated Serial Interface Mode */
 367#define FTDI_BITMODE_CBUS 0x20 /* Bitbang on CBUS pins */
 368#define FTDI_BITMODE_SYNCFF 0x40 /* Synchronous FIFO mode */
 369