31 #include <linux/kernel.h>
33 #include <linux/errno.h>
35 #include <linux/slab.h>
36 #include <linux/tty.h>
39 #include <linux/module.h>
50 #define DRIVER_VERSION "v1.1.5"
52 #define DRIVER_DESC "Keyspan USB to Serial Converter Driver"
54 #define INSTAT_BUFLEN 32
55 #define GLOCONT_BUFLEN 64
56 #define INDAT49W_BUFLEN 512
132 static void keyspan_break_ctl(
struct tty_struct *tty,
int break_state)
137 p_priv = usb_get_serial_port_data(port);
139 if (break_state == -1)
144 keyspan_send_setup(port, 0);
148 static void keyspan_set_termios(
struct tty_struct *tty,
151 int baud_rate, device_port;
156 p_priv = usb_get_serial_port_data(port);
158 cflag = tty->termios.c_cflag;
169 p_priv->
baud = baud_rate;
179 tty->termios.c_cflag &= ~
CMSPAR;
181 keyspan_send_setup(port, 0);
184 static int keyspan_tiocmget(
struct tty_struct *tty)
200 static int keyspan_tiocmset(
struct tty_struct *tty,
201 unsigned int set,
unsigned int clear)
214 keyspan_send_setup(port, 0);
220 static int keyspan_write(
struct tty_struct *tty,
227 struct urb *this_urb;
228 int err, maxDataLen, dataOffset;
230 p_priv = usb_get_serial_port_data(port);
241 dev_dbg(&port->
dev,
"%s - for port %d (%d chars), flip=%d\n",
244 for (left = count; left > 0; left -=
todo) {
246 if (todo > maxDataLen)
253 if (this_urb ==
NULL) {
255 dev_dbg(&port->
dev,
"%s - no output urb :(\n", __func__);
259 dev_dbg(&port->
dev,
"%s - endpoint %d flip %d\n",
260 __func__, usb_pipeendpoint(this_urb->pipe), flip);
272 ((
char *)this_urb->transfer_buffer)[0] = 0;
274 memcpy(this_urb->transfer_buffer + dataOffset, buf, todo);
278 this_urb->transfer_buffer_length = todo + dataOffset;
282 dev_dbg(&port->
dev,
"usb_submit_urb(write bulk) failed (%d)\n", err);
293 static void usa26_indat_callback(
struct urb *
urb)
299 unsigned char *
data = urb->transfer_buffer;
302 endpoint = usb_pipeendpoint(urb->pipe);
305 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x on endpoint %d.\n",
306 __func__, status, endpoint);
312 if (tty && urb->actual_length) {
314 if ((data[0] & 0x80) == 0) {
321 for (i = 1; i < urb->actual_length ; ++
i)
322 tty_insert_flip_char(tty, data[i], err);
325 dev_dbg(&port->
dev,
"%s - RX error!!!!\n", __func__);
326 for (i = 0; i + 1 < urb->actual_length; i += 2) {
328 if (stat & RXERROR_OVERRUN)
335 tty_insert_flip_char(tty, data[i+1], flag);
345 dev_dbg(&port->
dev,
"%s - resubmit read urb failed. (%d)\n", __func__, err);
349 static void usa2x_outdat_callback(
struct urb *urb)
355 p_priv = usb_get_serial_port_data(port);
361 static void usa26_inack_callback(
struct urb *urb)
365 static void usa26_outcont_callback(
struct urb *urb)
371 p_priv = usb_get_serial_port_data(port);
374 dev_dbg(&port->
dev,
"%s - sending setup\n", __func__);
375 keyspan_usa26_send_setup(port->
serial, port,
380 static void usa26_instat_callback(
struct urb *urb)
382 unsigned char *data = urb->transfer_buffer;
388 int old_dcd_state,
err;
389 int status = urb->status;
391 serial = urb->context;
394 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x\n", __func__, status);
397 if (urb->actual_length != 9) {
398 dev_dbg(&urb->dev->dev,
"%s - %d byte report??\n", __func__, urb->actual_length);
406 "%s - port status: port %d cts %d dcd %d dsr %d ri %d toff %d txoff %d rxen %d cr %d",
417 dev_dbg(&urb->dev->dev,
"%s - Unexpected port number %d\n", __func__, msg->
port);
421 p_priv = usb_get_serial_port_data(port);
430 if (old_dcd_state != p_priv->
dcd_state) {
440 dev_dbg(&port->
dev,
"%s - resubmit read urb failed. (%d)\n", __func__, err);
444 static void usa26_glocont_callback(
struct urb *urb)
449 static void usa28_indat_callback(
struct urb *urb)
456 int status = urb->status;
459 p_priv = usb_get_serial_port_data(port);
460 data = urb->transfer_buffer;
467 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x on endpoint %d.\n",
468 __func__, status, usb_pipeendpoint(urb->pipe));
473 p_priv = usb_get_serial_port_data(port);
474 data = urb->transfer_buffer;
477 if (tty && urb->actual_length) {
478 tty_insert_flip_string(tty, data, urb->actual_length);
486 dev_dbg(&port->
dev,
"%s - resubmit read urb failed. (%d)\n",
494 static void usa28_inack_callback(
struct urb *urb)
498 static void usa28_outcont_callback(
struct urb *urb)
504 p_priv = usb_get_serial_port_data(port);
507 dev_dbg(&port->
dev,
"%s - sending setup\n", __func__);
508 keyspan_usa28_send_setup(port->
serial, port,
513 static void usa28_instat_callback(
struct urb *urb)
516 unsigned char *data = urb->transfer_buffer;
523 int status = urb->status;
525 serial = urb->context;
528 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x\n", __func__, status);
533 dev_dbg(&urb->dev->dev,
"%s - bad length %d\n", __func__, urb->actual_length);
549 dev_dbg(&urb->dev->dev,
"%s - Unexpected port number %d\n", __func__, msg->
port);
553 p_priv = usb_get_serial_port_data(port);
562 if (old_dcd_state != p_priv->
dcd_state && old_dcd_state) {
572 dev_dbg(&port->
dev,
"%s - resubmit read urb failed. (%d)\n", __func__, err);
576 static void usa28_glocont_callback(
struct urb *urb)
581 static void usa49_glocont_callback(
struct urb *urb)
588 serial = urb->context;
590 port = serial->
port[
i];
591 p_priv = usb_get_serial_port_data(port);
594 dev_dbg(&port->
dev,
"%s - sending setup\n", __func__);
595 keyspan_usa49_send_setup(serial, port,
604 static void usa49_instat_callback(
struct urb *urb)
607 unsigned char *data = urb->transfer_buffer;
613 int status = urb->status;
615 serial = urb->context;
618 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x\n", __func__, status);
622 if (urb->actual_length !=
624 dev_dbg(&urb->dev->dev,
"%s - bad length %d\n", __func__, urb->actual_length);
639 dev_dbg(&urb->dev->dev,
"%s - Unexpected port number %d\n",
644 p_priv = usb_get_serial_port_data(port);
653 if (old_dcd_state != p_priv->
dcd_state && old_dcd_state) {
663 dev_dbg(&port->
dev,
"%s - resubmit read urb failed. (%d)\n", __func__, err);
667 static void usa49_inack_callback(
struct urb *urb)
671 static void usa49_indat_callback(
struct urb *urb)
677 unsigned char *data = urb->transfer_buffer;
678 int status = urb->status;
680 endpoint = usb_pipeendpoint(urb->pipe);
683 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x on endpoint %d.\n",
684 __func__, status, endpoint);
690 if (tty && urb->actual_length) {
692 if ((data[0] & 0x80) == 0) {
694 tty_insert_flip_string(tty, data + 1,
695 urb->actual_length - 1);
698 for (i = 0; i + 1 < urb->actual_length; i += 2) {
699 int stat = data[
i], flag = 0;
700 if (stat & RXERROR_OVERRUN)
707 tty_insert_flip_char(tty, data[i+1], flag);
717 dev_dbg(&port->
dev,
"%s - resubmit read urb failed. (%d)\n", __func__, err);
720 static void usa49wg_indat_callback(
struct urb *urb)
726 unsigned char *data = urb->transfer_buffer;
727 int status = urb->status;
729 serial = urb->context;
732 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x\n", __func__, status);
740 if (urb->actual_length) {
741 while (i < urb->actual_length) {
745 dev_dbg(&urb->dev->dev,
"%s - Unexpected port number %d\n",
749 port = serial->
port[data[i++]];
754 if ((data[i] & 0x80) == 0) {
757 for (x = 1; x < len ; ++
x)
758 tty_insert_flip_char(tty, data[i++], 0);
763 for (x = 0; x + 1 < len; x += 2) {
764 int stat = data[
i], flag = 0;
765 if (stat & RXERROR_OVERRUN)
772 tty_insert_flip_char(tty,
785 dev_dbg(&urb->dev->dev,
"%s - resubmit read urb failed. (%d)\n", __func__, err);
789 static void usa49_outcont_callback(
struct urb *urb)
793 static void usa90_indat_callback(
struct urb *urb)
800 unsigned char *data = urb->transfer_buffer;
801 int status = urb->status;
803 endpoint = usb_pipeendpoint(urb->pipe);
806 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x on endpoint %d.\n",
807 __func__, status, endpoint);
812 p_priv = usb_get_serial_port_data(port);
814 if (urb->actual_length) {
819 if (p_priv->
baud > 57600)
820 tty_insert_flip_string(tty, data, urb->actual_length);
823 if ((data[0] & 0x80) == 0) {
826 if (data[0] & RXERROR_OVERRUN)
830 for (i = 1; i < urb->actual_length ; ++
i)
831 tty_insert_flip_char(tty, data[i],
835 dev_dbg(&port->
dev,
"%s - RX error!!!!\n", __func__);
836 for (i = 0; i + 1 < urb->actual_length; i += 2) {
837 int stat = data[
i], flag = 0;
838 if (stat & RXERROR_OVERRUN)
845 tty_insert_flip_char(tty, data[i+1],
857 dev_dbg(&port->
dev,
"%s - resubmit read urb failed. (%d)\n", __func__, err);
861 static void usa90_instat_callback(
struct urb *urb)
863 unsigned char *data = urb->transfer_buffer;
869 int old_dcd_state,
err;
870 int status = urb->status;
872 serial = urb->context;
875 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x\n", __func__, status);
878 if (urb->actual_length < 14) {
879 dev_dbg(&urb->dev->dev,
"%s - %d byte report??\n", __func__, urb->actual_length);
887 port = serial->
port[0];
888 p_priv = usb_get_serial_port_data(port);
897 if (old_dcd_state != p_priv->
dcd_state && old_dcd_state) {
907 dev_dbg(&port->
dev,
"%s - resubmit read urb failed. (%d)\n", __func__, err);
912 static void usa90_outcont_callback(
struct urb *urb)
918 p_priv = usb_get_serial_port_data(port);
921 dev_dbg(&urb->dev->dev,
"%s - sending setup\n", __func__);
922 keyspan_usa90_send_setup(port->
serial, port,
928 static void usa67_instat_callback(
struct urb *urb)
931 unsigned char *data = urb->transfer_buffer;
937 int status = urb->status;
939 serial = urb->context;
942 dev_dbg(&urb->dev->dev,
"%s - nonzero status: %x\n", __func__, status);
946 if (urb->actual_length !=
948 dev_dbg(&urb->dev->dev,
"%s - bad length %d\n", __func__, urb->actual_length);
958 dev_dbg(&urb->dev->dev,
"%s - Unexpected port number %d\n", __func__, msg->
port);
963 p_priv = usb_get_serial_port_data(port);
970 if (old_dcd_state != p_priv->
dcd_state && old_dcd_state) {
980 dev_dbg(&port->
dev,
"%s - resubmit read urb failed. (%d)\n", __func__, err);
983 static void usa67_glocont_callback(
struct urb *urb)
990 serial = urb->context;
992 port = serial->
port[
i];
993 p_priv = usb_get_serial_port_data(port);
996 dev_dbg(&port->
dev,
"%s - sending setup\n", __func__);
997 keyspan_usa67_send_setup(serial, port,
1004 static int keyspan_write_room(
struct tty_struct *tty)
1011 struct urb *this_urb;
1013 p_priv = usb_get_serial_port_data(port);
1026 if (this_urb !=
NULL) {
1045 int baud_rate, device_port;
1047 unsigned int cflag = 0;
1049 p_priv = usb_get_serial_port_data(port);
1055 p_priv->
baud = 9600;
1065 for (i = 0; i < 2; i++) {
1075 dev_dbg(&port->
dev,
"%s - submit urb %d failed (%d)\n", __func__, i, err);
1079 for (i = 0; i < 2; i++) {
1092 cflag = tty->termios.c_cflag;
1100 p_priv->
baud = baud_rate;
1107 keyspan_send_setup(port, 1);
1114 static inline void stop_urb(
struct urb *urb)
1126 keyspan_send_setup(port, 0);
1135 p_priv = usb_get_serial_port_data(port);
1141 keyspan_send_setup(port, 2);
1158 for (i = 0; i < 2; i++) {
1166 static int keyspan_fake_startup(
struct usb_serial *serial)
1170 dev_dbg(&serial->
dev->dev,
"Keyspan startup version %04x product %04x\n",
1176 dev_dbg(&serial->
dev->dev,
"Firmware already loaded. Quitting.\n");
1183 fw_name =
"keyspan/usa28.fw";
1187 fw_name =
"keyspan/usa28x.fw";
1191 fw_name =
"keyspan/usa28xa.fw";
1195 fw_name =
"keyspan/usa28xb.fw";
1199 fw_name =
"keyspan/usa19.fw";
1203 fw_name =
"keyspan/usa19qi.fw";
1207 fw_name =
"keyspan/mpr.fw";
1211 fw_name =
"keyspan/usa19qw.fw";
1215 fw_name =
"keyspan/usa18x.fw";
1219 fw_name =
"keyspan/usa19w.fw";
1223 fw_name =
"keyspan/usa49w.fw";
1227 fw_name =
"keyspan/usa49wlc.fw";
1231 dev_err(&serial->
dev->dev,
"Unknown product ID (%04x)\n",
1236 dev_dbg(&serial->
dev->dev,
"Uploading Keyspan %s firmware.\n", fw_name);
1239 dev_err(&serial->
dev->dev,
"failed to load firmware \"%s\"\n",
1255 struct usb_host_interface *iface_desc;
1259 iface_desc = serial->
interface->cur_altsetting;
1260 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++
i) {
1261 ep = &iface_desc->endpoint[
i].desc;
1266 "endpoint %x\n", endpoint);
1270 static struct urb *keyspan_setup_urb(
struct usb_serial *serial,
int endpoint,
1271 int dir,
void *
ctx,
char *buf,
int len,
1276 char const *ep_type_name;
1281 dev_dbg(&serial->
interface->dev,
"%s - alloc for endpoint %d.\n", __func__, endpoint);
1284 dev_dbg(&serial->
interface->dev,
"%s - alloc for endpoint %d failed.\n", __func__, endpoint);
1288 if (endpoint == 0) {
1293 ep_desc = find_ep(serial, endpoint);
1298 if (usb_endpoint_xfer_int(ep_desc)) {
1299 ep_type_name =
"INT";
1300 usb_fill_int_urb(urb, serial->
dev,
1301 usb_sndintpipe(serial->
dev, endpoint) | dir,
1304 }
else if (usb_endpoint_xfer_bulk(ep_desc)) {
1305 ep_type_name =
"BULK";
1306 usb_fill_bulk_urb(urb, serial->
dev,
1307 usb_sndbulkpipe(serial->
dev, endpoint) | dir,
1311 "unsupported endpoint type %x\n",
1312 usb_endpoint_type(ep_desc));
1318 __func__, urb, ep_type_name, endpoint);
1322 static struct callbacks {
1323 void (*instat_callback)(
struct urb *);
1324 void (*glocont_callback)(
struct urb *);
1325 void (*indat_callback)(
struct urb *);
1326 void (*outdat_callback)(
struct urb *);
1327 void (*inack_callback)(
struct urb *);
1328 void (*outcont_callback)(
struct urb *);
1329 } keyspan_callbacks[] = {
1332 .instat_callback = usa26_instat_callback,
1333 .glocont_callback = usa26_glocont_callback,
1334 .indat_callback = usa26_indat_callback,
1335 .outdat_callback = usa2x_outdat_callback,
1336 .inack_callback = usa26_inack_callback,
1337 .outcont_callback = usa26_outcont_callback,
1340 .instat_callback = usa28_instat_callback,
1341 .glocont_callback = usa28_glocont_callback,
1342 .indat_callback = usa28_indat_callback,
1343 .outdat_callback = usa2x_outdat_callback,
1344 .inack_callback = usa28_inack_callback,
1345 .outcont_callback = usa28_outcont_callback,
1348 .instat_callback = usa49_instat_callback,
1349 .glocont_callback = usa49_glocont_callback,
1350 .indat_callback = usa49_indat_callback,
1351 .outdat_callback = usa2x_outdat_callback,
1352 .inack_callback = usa49_inack_callback,
1353 .outcont_callback = usa49_outcont_callback,
1356 .instat_callback = usa90_instat_callback,
1357 .glocont_callback = usa28_glocont_callback,
1358 .indat_callback = usa90_indat_callback,
1359 .outdat_callback = usa2x_outdat_callback,
1360 .inack_callback = usa28_inack_callback,
1361 .outcont_callback = usa90_outcont_callback,
1364 .instat_callback = usa67_instat_callback,
1365 .glocont_callback = usa67_glocont_callback,
1366 .indat_callback = usa26_indat_callback,
1367 .outdat_callback = usa2x_outdat_callback,
1368 .inack_callback = usa26_inack_callback,
1369 .outcont_callback = usa26_outcont_callback,
1375 static void keyspan_setup_urbs(
struct usb_serial *serial)
1379 struct callbacks *cback;
1381 s_priv = usb_get_serial_data(serial);
1385 cback = &keyspan_callbacks[d_details->
msg_format];
1392 cback->instat_callback);
1397 usa49wg_indat_callback);
1402 cback->glocont_callback);
1407 u32 baud_rate,
u32 baudclk,
u8 *rate_hi,
1408 u8 *rate_low,
u8 *prescaler,
int portnum)
1414 dev_dbg(&port->
dev,
"%s - %d.\n", __func__, baud_rate);
1417 b16 = baud_rate * 16
L;
1422 if (baud_rate > 57600)
1426 div = baudclk / b16;
1437 *rate_low = (
u8) (cnt & 0xff);
1439 *rate_hi = (
u8) ((cnt >> 8) & 0xff);
1440 if (rate_low && rate_hi)
1442 __func__, baud_rate, *rate_hi, *rate_low);
1448 u32 baud_rate,
u32 baudclk,
u8 *rate_hi,
1449 u8 *rate_low,
u8 *prescaler,
int portnum)
1454 dev_dbg(&port->
dev,
"%s - %d.\n", __func__, baud_rate);
1457 b16 = baud_rate * 16L;
1462 div = baudclk / b16;
1471 *rate_low = (
u8) (div & 0xff);
1474 *rate_hi = (
u8) ((div >> 8) & 0xff);
1476 if (rate_low && rate_hi)
1478 __func__, baud_rate, *rate_hi, *rate_low);
1484 u32 baud_rate,
u32 baudclk,
u8 *rate_hi,
1485 u8 *rate_low,
u8 *prescaler,
int portnum)
1496 dev_dbg(&port->
dev,
"%s - %d.\n", __func__, baud_rate);
1499 b16 = baud_rate * 16L;
1507 smallest_diff = 0xffffffff;
1512 for (i = 8; i <= 0xff; ++
i) {
1513 clk = (baudclk * 8) / (
u32)
i;
1520 diff = (res > b16) ? (res-b16) : (b16-
res);
1522 if (diff < smallest_diff) {
1524 smallest_diff = diff;
1528 if (best_prescaler == 0)
1531 clk = (baudclk * 8) / (
u32) best_prescaler;
1536 *rate_low = (
u8) (div & 0xff);
1538 *rate_hi = (
u8) ((div >> 8) & 0xff);
1540 *prescaler = best_prescaler;
1548 u32 baud_rate,
u32 baudclk,
u8 *rate_hi,
1549 u8 *rate_low,
u8 *prescaler,
int portnum)
1555 dev_dbg(&port->
dev,
"%s - %d.\n", __func__, baud_rate);
1558 b16 = baud_rate * 16L;
1585 *rate_low = (
u8) (cnt & 0xff);
1587 *rate_hi = (
u8) ((cnt >> 8) & 0xff);
1588 dev_dbg(&port->
dev,
"%s - %d OK.\n", __func__, baud_rate);
1592 static int keyspan_usa26_send_setup(
struct usb_serial *serial,
1601 struct urb *this_urb;
1602 int device_port,
err;
1604 dev_dbg(&port->
dev,
"%s reset=%d\n", __func__, reset_port);
1606 s_priv = usb_get_serial_data(serial);
1607 p_priv = usb_get_serial_port_data(port);
1614 dev_dbg(&port->
dev,
"%s - endpoint %d\n", __func__, usb_pipeendpoint(this_urb->pipe));
1617 if (this_urb ==
NULL) {
1618 dev_dbg(&port->
dev,
"%s - oops no urb.\n", __func__);
1637 msg.setClocking = 0xff;
1639 &msg.baudHi, &msg.baudLo, &msg.prescaler,
1641 dev_dbg(&port->
dev,
"%s - Invalid baud rate %d requested, using 9600.\n",
1642 __func__, p_priv->
baud);
1647 msg.setPrescaler = 0xff;
1672 msg.ctsFlowControl = (p_priv->
flow_control == flow_cts);
1673 msg.xonFlowControl = 0;
1674 msg.setFlowControl = 0xff;
1675 msg.forwardingLength = 16;
1680 if (reset_port == 1) {
1689 msg.returnStatus = 0;
1690 msg.resetDataToggle = 0xff;
1694 else if (reset_port == 2) {
1703 msg.returnStatus = 0;
1704 msg.resetDataToggle = 0;
1717 msg.returnStatus = 0;
1718 msg.resetDataToggle = 0x0;
1722 msg.setTxTriState_setRts = 0xff;
1725 msg.setHskoa_setDtr = 0xff;
1729 memcpy(this_urb->transfer_buffer, &msg,
sizeof(msg));
1732 this_urb->transfer_buffer_length =
sizeof(
msg);
1736 dev_dbg(&port->
dev,
"%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
1739 dev_dbg(&port->
dev,
"%s - usb_submit_urb(%d) OK %d bytes (end %d)\n", __func__
1740 outcont_urb, this_urb->transfer_buffer_length,
1741 usb_pipeendpoint(this_urb->pipe));
1748 static int keyspan_usa28_send_setup(
struct usb_serial *serial,
1756 struct urb *this_urb;
1757 int device_port,
err;
1759 s_priv = usb_get_serial_data(serial);
1760 p_priv = usb_get_serial_port_data(port);
1766 if (this_urb ==
NULL) {
1767 dev_dbg(&port->
dev,
"%s - oops no urb.\n", __func__);
1776 dev_dbg(&port->
dev,
"%s already writing\n", __func__);
1783 msg.setBaudRate = 1;
1785 &msg.baudHi, &msg.baudLo,
NULL,
1787 dev_dbg(&port->
dev,
"%s - Invalid baud rate requested %d.\n",
1788 __func__, p_priv->
baud);
1796 msg.ctsFlowControl = (p_priv->
flow_control == flow_cts);
1797 msg.xonFlowControl = 0;
1803 msg.forwardingLength = 16;
1805 msg.breakThreshold = 45;
1812 if (reset_port == 1) {
1816 msg.txForceXoff = 0;
1822 msg.returnStatus = 0;
1823 msg.resetDataToggle = 0xff;
1826 else if (reset_port == 2) {
1830 msg.txForceXoff = 0;
1836 msg.returnStatus = 0;
1837 msg.resetDataToggle = 0;
1844 msg.txForceXoff = 0;
1850 msg.returnStatus = 0;
1851 msg.resetDataToggle = 0x0;
1855 memcpy(this_urb->transfer_buffer, &msg,
sizeof(msg));
1858 this_urb->transfer_buffer_length =
sizeof(
msg);
1862 dev_dbg(&port->
dev,
"%s - usb_submit_urb(setup) failed\n", __func__);
1865 dev_dbg(&port->
dev,
"%s - usb_submit_urb(setup) OK %d bytes\n", __func__,
1866 this_urb->transfer_buffer_length);
1873 static int keyspan_usa49_send_setup(
struct usb_serial *serial,
1882 struct urb *this_urb;
1883 int err, device_port;
1885 s_priv = usb_get_serial_data(serial);
1886 p_priv = usb_get_serial_port_data(port);
1895 if (this_urb ==
NULL) {
1896 dev_dbg(&port->
dev,
"%s - oops no urb for port %d.\n", __func__, port->
number);
1900 dev_dbg(&port->
dev,
"%s - endpoint %d port %d (%d)\n",
1901 __func__, usb_pipeendpoint(this_urb->pipe),
1902 port->
number, device_port);
1918 msg.portNumber = device_port;
1923 msg.setClocking = 0xff;
1925 &msg.baudHi, &msg.baudLo, &msg.prescaler,
1927 dev_dbg(&port->
dev,
"%s - Invalid baud rate %d requested, using 9600.\n",
1928 __func__, p_priv->
baud);
1958 msg.ctsFlowControl = (p_priv->
flow_control == flow_cts);
1959 msg.xonFlowControl = 0;
1960 msg.setFlowControl = 0xff;
1962 msg.forwardingLength = 16;
1967 if (reset_port == 1) {
1976 msg.returnStatus = 0;
1977 msg.resetDataToggle = 0xff;
1979 msg.disablePort = 0;
1982 else if (reset_port == 2) {
1991 msg.returnStatus = 0;
1992 msg.resetDataToggle = 0;
1994 msg.disablePort = 1;
2006 msg.returnStatus = 0;
2007 msg.resetDataToggle = 0x0;
2009 msg.disablePort = 0;
2034 usb_fill_control_urb(this_urb, serial->
dev,
2035 usb_sndctrlpipe(serial->
dev, 0),
2037 sizeof(msg), usa49_glocont_callback, serial);
2040 memcpy(this_urb->transfer_buffer, &msg,
sizeof(msg));
2043 this_urb->transfer_buffer_length =
sizeof(
msg);
2047 dev_dbg(&port->
dev,
"%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2050 dev_dbg(&port->
dev,
"%s - usb_submit_urb(%d) OK %d bytes (end %d)\n", __func__,
2051 outcont_urb, this_urb->transfer_buffer_length,
2052 usb_pipeendpoint(this_urb->pipe));
2059 static int keyspan_usa90_send_setup(
struct usb_serial *serial,
2067 struct urb *this_urb;
2071 s_priv = usb_get_serial_data(serial);
2072 p_priv = usb_get_serial_port_data(port);
2077 if (this_urb ==
NULL) {
2078 dev_dbg(&port->
dev,
"%s - oops no urb.\n", __func__);
2087 dev_dbg(&port->
dev,
"%s already writing\n", __func__);
2097 msg.setClocking = 0x01;
2100 dev_dbg(&port->
dev,
"%s - Invalid baud rate %d requested, using 9600.\n",
2101 __func__, p_priv->
baud);
2102 p_priv->
baud = 9600;
2104 &msg.baudHi, &msg.baudLo, &prescaler, 0);
2111 if (p_priv->
baud > 57600) {
2146 msg.setTxFlowControl = 0x01;
2147 msg.setRxFlowControl = 0x01;
2149 msg.rxForwardingLength = 16;
2150 msg.rxForwardingTimeout = 16;
2151 msg.txAckSetting = 0;
2156 if (reset_port == 1) {
2157 msg.portEnabled = 1;
2162 else if (reset_port == 2)
2163 msg.portEnabled = 0;
2166 msg.portEnabled = 1;
2178 memcpy(this_urb->transfer_buffer, &msg,
sizeof(msg));
2181 this_urb->transfer_buffer_length =
sizeof(
msg);
2185 dev_dbg(&port->
dev,
"%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2189 static int keyspan_usa67_send_setup(
struct usb_serial *serial,
2197 struct urb *this_urb;
2198 int err, device_port;
2200 s_priv = usb_get_serial_data(serial);
2201 p_priv = usb_get_serial_port_data(port);
2210 if (this_urb ==
NULL) {
2211 dev_dbg(&port->
dev,
"%s - oops no urb for port %d.\n", __func__,
2228 msg.
port = device_port;
2233 msg.setClocking = 0xff;
2235 &msg.baudHi, &msg.baudLo, &msg.prescaler,
2237 dev_dbg(&port->
dev,
"%s - Invalid baud rate %d requested, using 9600.\n",
2238 __func__, p_priv->
baud);
2243 msg.setPrescaler = 0xff;
2268 msg.ctsFlowControl = (p_priv->
flow_control == flow_cts);
2269 msg.xonFlowControl = 0;
2270 msg.setFlowControl = 0xff;
2271 msg.forwardingLength = 16;
2275 if (reset_port == 1) {
2285 msg.returnStatus = 0;
2286 msg.resetDataToggle = 0xff;
2287 }
else if (reset_port == 2) {
2297 msg.returnStatus = 0;
2298 msg.resetDataToggle = 0;
2309 msg.returnStatus = 0;
2310 msg.resetDataToggle = 0x0;
2314 msg.setTxTriState_setRts = 0xff;
2317 msg.setHskoa_setDtr = 0xff;
2322 memcpy(this_urb->transfer_buffer, &msg,
sizeof(msg));
2325 this_urb->transfer_buffer_length =
sizeof(
msg);
2329 dev_dbg(&port->
dev,
"%s - usb_submit_urb(setup) failed (%d)\n", __func__, err);
2333 static void keyspan_send_setup(
struct usb_serial_port *port,
int reset_port)
2339 s_priv = usb_get_serial_data(serial);
2344 keyspan_usa26_send_setup(serial, port, reset_port);
2347 keyspan_usa28_send_setup(serial, port, reset_port);
2350 keyspan_usa49_send_setup(serial, port, reset_port);
2353 keyspan_usa90_send_setup(serial, port, reset_port);
2356 keyspan_usa67_send_setup(serial, port, reset_port);
2364 static int keyspan_startup(
struct usb_serial *serial)
2370 for (i = 0; (d_details = keyspan_devices[
i]) !=
NULL; ++
i)
2374 if (d_details ==
NULL) {
2375 dev_err(&serial->
dev->dev,
"%s - unknown product id %x\n",
2383 dev_dbg(&serial->
dev->dev,
"%s - kmalloc for keyspan_serial_private failed.\n", __func__);
2388 usb_set_serial_data(serial, s_priv);
2390 keyspan_setup_urbs(serial);
2395 dev_dbg(&serial->
dev->dev,
"%s - submit instat urb failed %d\n", __func__, err);
2400 dev_dbg(&serial->
dev->dev,
"%s - submit indat urb failed %d\n", __func__, err);
2406 static void keyspan_disconnect(
struct usb_serial *serial)
2410 s_priv = usb_get_serial_data(serial);
2417 static void keyspan_release(
struct usb_serial *serial)
2421 s_priv = usb_get_serial_data(serial);
2436 struct callbacks *cback;
2441 s_priv = usb_get_serial_data(serial);
2444 p_priv = kzalloc(
sizeof(*p_priv),
GFP_KERNEL);
2451 cback = &keyspan_callbacks[d_details->
msg_format];
2458 p_priv->
in_urbs[
i] = keyspan_setup_urb(serial, endp,
2461 cback->indat_callback);
2466 p_priv->
out_urbs[
i] = keyspan_setup_urb(serial, endp,
2469 cback->outdat_callback);
2472 p_priv->
inack_urb = keyspan_setup_urb(serial,
2476 cback->inack_callback);
2482 cback->outcont_callback);
2484 usb_set_serial_port_data(port, p_priv);
2494 p_priv = usb_get_serial_port_data(port);
2498 for (i = 0; i < 2; i++) {
2505 for (i = 0; i < 2; i++) {