Module Name:    src
Committed By:   jakllsch
Date:           Fri Dec 25 03:13:43 UTC 2009

Modified Files:
        src/sys/dev/usb: uplcom.c

Log Message:
Implement monitoring of CTS and RI lines.  Use UCDC_N_SERIAL_* instead
of RSAQ_STATUS_*, the Linux driver shows that with the exception of CTS,
the PL2303 uses USB CDC bits at byte offset 8 of the interrupt transfer.

To-Do: Handle the other bits, such as BREAK.


To generate a diff of this commit:
cvs rdiff -u -r1.69 -r1.70 src/sys/dev/usb/uplcom.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/uplcom.c
diff -u src/sys/dev/usb/uplcom.c:1.69 src/sys/dev/usb/uplcom.c:1.70
--- src/sys/dev/usb/uplcom.c:1.69	Thu Nov 12 19:58:27 2009
+++ src/sys/dev/usb/uplcom.c	Fri Dec 25 03:13:43 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: uplcom.c,v 1.69 2009/11/12 19:58:27 dyoung Exp $	*/
+/*	$NetBSD: uplcom.c,v 1.70 2009/12/25 03:13:43 jakllsch Exp $	*/
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uplcom.c,v 1.69 2009/11/12 19:58:27 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uplcom.c,v 1.70 2009/12/25 03:13:43 jakllsch Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -74,8 +74,8 @@
 #define	UPLCOM_SET_REQUEST	0x01
 #define	UPLCOM_SET_CRTSCTS_0	0x41
 #define	UPLCOM_SET_CRTSCTS_HX	0x61
-#define RSAQ_STATUS_DSR		0x02
-#define RSAQ_STATUS_DCD		0x01
+
+#define	UPLCOM_N_SERIAL_CTS	0x80
 
 enum  pl2303_type {
 	UPLCOM_TYPE_0,	/* we use this for all non-HX variants */
@@ -842,9 +842,13 @@
 
 	sc->sc_lsr = sc->sc_msr = 0;
 	pstatus = buf[8];
-	if (ISSET(pstatus, RSAQ_STATUS_DSR))
+	if (ISSET(pstatus, UPLCOM_N_SERIAL_CTS))
+		sc->sc_msr |= UMSR_CTS;
+	if (ISSET(pstatus, UCDC_N_SERIAL_RI))
+		sc->sc_msr |= UMSR_RI;
+	if (ISSET(pstatus, UCDC_N_SERIAL_DSR))
 		sc->sc_msr |= UMSR_DSR;
-	if (ISSET(pstatus, RSAQ_STATUS_DCD))
+	if (ISSET(pstatus, UCDC_N_SERIAL_DCD))
 		sc->sc_msr |= UMSR_DCD;
 	ucom_status_change(device_private(sc->sc_subdev));
 }

Reply via email to