Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Feb 2018 19:53:21 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 225932] uplcom Prolific PL2302 doesn't support high baud rates
Message-ID:  <bug-225932-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D225932

            Bug ID: 225932
           Summary: uplcom Prolific PL2302 doesn't support high baud rates
           Product: Base System
           Version: 11.1-RELEASE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: gabor.simon75@gmail.com

Created attachment 190665
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D190665&action=
=3Dedit
proposed patch for high baudrate support

1., Current uplcom module supports only the pre-defined baud rates, because
free baudrate setting requires a divisor calculating formula.

The product page of the vendor refers to the Linux module source as a refer=
ence
application (http://lxr.free-electrons.com/source/drivers/usb/serial/pl2303=
.c),
in which the formula is implemented clearly.

(The baseline frequency constant is about 1/1000 off from the one actually =
used
by the binary drivers though.)

After porting the formula, the baud rate can be set to any arbitrary value.


2., The current chip type detection is kind of black magic, while the ID va=
lues
of the bcdDevice[0] are officially documented in the product datasheets
(http://www.prolific.com.tw/US/ShowProduct.aspx?pcid=3D41&showlevel=3D0017-=
0037-0041)

The current detection could not identify the type HXD chips, so disables the
baud rates above 6 Mbaud, while the chip supports up to 12Mbaud.


3., The current interrupt callback doesn't process neither the
overrun/parity/frame/break error flags, nor the RI and DSR status flags.


As I needed the high bitrates, ported the baudrate formula from the Linux c=
ode
, please decide if it is legal or not, there already was a "Determine the c=
hip
type.  This algorithm is taken from Linux." comment in the code.

I also checked the formula against the values used by the binary driver and
corrected the baseline frequency.

Also checked the so-called standard baudrates (that shall work by directly
writing them to dwDTERate register) on a PL2303HX, and removed the non-work=
ing
ones.

(For those who want to play with the values: writing 0xf0-s with 8bit no pa=
rity
produces one square wave per 10 bits (1 start, 8 data, 1 stop), so measuring
the freqency on TxD gives 1/10th of the actual baud rate :D)

I've attached the patch, the changed file (for an easier review) and the sm=
all
freqency test I used.

NOTE: I have only a PL2303HX (bcdDevice[0]=3D=3D3) at hand now, so it would=
 be
great if someone with other models could test at least the detection code.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-225932-8>