Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/usb Remove UCHCOM_REG_BPS_MOD and UCHCOM_REG_BPS_PAD...
details: https://anonhg.NetBSD.org/src/rev/2033170ccbb4
branches: trunk
changeset: 446566:2033170ccbb4
user: jakllsch <jakllsch%NetBSD.org@localhost>
date: Tue Dec 11 01:07:29 2018 +0000
description:
Remove UCHCOM_REG_BPS_MOD and UCHCOM_REG_BPS_PAD usage.
There is no clear indication doing these calculations and setting the
resulting register bits results in improved functionality. Contrary
to hints in the code, short-term precision of the UART clock doesn't
appear to improve when these bits are adjusted.
Neither the vendor's Linux driver nor the mainline Linux driver
currently touch these bits.
Tested with CH341A and a logic analyzer.
diffstat:
sys/dev/usb/uchcom.c | 41 +++++++++++------------------------------
1 files changed, 11 insertions(+), 30 deletions(-)
diffs (125 lines):
diff -r 573c85a3b8bb -r 2033170ccbb4 sys/dev/usb/uchcom.c
--- a/sys/dev/usb/uchcom.c Mon Dec 10 21:19:33 2018 +0000
+++ b/sys/dev/usb/uchcom.c Tue Dec 11 01:07:29 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: uchcom.c,v 1.22 2018/12/10 14:32:04 jakllsch Exp $ */
+/* $NetBSD: uchcom.c,v 1.23 2018/12/11 01:07:29 jakllsch Exp $ */
/*
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uchcom.c,v 1.22 2018/12/10 14:32:04 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uchcom.c,v 1.23 2018/12/11 01:07:29 jakllsch Exp $");
#ifdef _KERNEL_OPT
#include "opt_usb.h"
@@ -86,8 +86,6 @@
#define UCHCOM_REG_STAT2 0x07
#define UCHCOM_REG_BPS_PRE 0x12
#define UCHCOM_REG_BPS_DIV 0x13
-#define UCHCOM_REG_BPS_MOD 0x14
-#define UCHCOM_REG_BPS_PAD 0x0F
#define UCHCOM_REG_BREAK1 0x05
#define UCHCOM_REG_BREAK2 0x18
#define UCHCOM_REG_LCR1 0x18
@@ -100,9 +98,6 @@
#define UCHCOM_BPS_PRE_IMM 0x80 /* CH341: immediate RX forwarding */
-#define UCHCOM_BPS_MOD_BASE 20000000
-#define UCHCOM_BPS_MOD_BASE_OFS 1100
-
#define UCHCOM_DTR_MASK 0x20
#define UCHCOM_RTS_MASK 0x40
@@ -158,7 +153,6 @@
{
uint8_t dv_prescaler;
uint8_t dv_div;
- uint8_t dv_mod;
};
struct uchcom_divider_record
@@ -171,12 +165,12 @@
static const struct uchcom_divider_record dividers[] =
{
- { 307200, 307200, UCHCOM_BASE_UNKNOWN, { 7, 0xD9, 0 } },
- { 921600, 921600, UCHCOM_BASE_UNKNOWN, { 7, 0xF3, 0 } },
- { 2999999, 23530, 6000000, { 3, 0, 0 } },
- { 23529, 2942, 750000, { 2, 0, 0 } },
- { 2941, 368, 93750, { 1, 0, 0 } },
- { 367, 1, 11719, { 0, 0, 0 } },
+ { 307200, 307200, UCHCOM_BASE_UNKNOWN, { 7, 0xD9 } },
+ { 921600, 921600, UCHCOM_BASE_UNKNOWN, { 7, 0xF3 } },
+ { 2999999, 23530, 6000000, { 3, 0 } },
+ { 23529, 2942, 750000, { 2, 0 } },
+ { 2941, 368, 93750, { 1, 0 } },
+ { 367, 1, 11719, { 0, 0 } },
};
#define NUM_DIVIDERS (sizeof (dividers) / sizeof (dividers[0]))
@@ -655,7 +649,7 @@
{
int i;
const struct uchcom_divider_record *rp;
- uint32_t div, rem, mod;
+ uint32_t div, rem;
/* find record */
for (i=0; i<NUM_DIVIDERS; i++) {
@@ -681,11 +675,6 @@
dp->dv_div = (uint8_t)-div;
}
- mod = UCHCOM_BPS_MOD_BASE/rate + UCHCOM_BPS_MOD_BASE_OFS;
- mod = mod + mod/2;
-
- dp->dv_mod = mod / 0x100;
-
return 0;
}
@@ -701,10 +690,7 @@
if ((err = write_reg(sc,
UCHCOM_REG_BPS_PRE,
dv.dv_prescaler | UCHCOM_BPS_PRE_IMM,
- UCHCOM_REG_BPS_DIV, dv.dv_div)) ||
- (err = write_reg(sc,
- UCHCOM_REG_BPS_MOD, dv.dv_mod,
- UCHCOM_REG_BPS_PAD, 0))) {
+ UCHCOM_REG_BPS_DIV, dv.dv_div))) {
device_printf(sc->sc_dev, "cannot set DTE rate: %s\n",
usbd_errstr(err));
return EIO;
@@ -787,7 +773,7 @@
reset_chip(struct uchcom_softc *sc)
{
usbd_status err;
- uint8_t lcr1val, lcr2val, pre, div, mod;
+ uint8_t lcr1val, lcr2val, pre, div;
uint16_t val=0, idx=0;
err = read_reg(sc, UCHCOM_REG_LCR1, &lcr1val, UCHCOM_REG_LCR2, &lcr2val);
@@ -798,10 +784,6 @@
if (err)
goto failed;
- err = read_reg(sc, UCHCOM_REG_BPS_MOD, &mod, UCHCOM_REG_BPS_PAD, NULL);
- if (err)
- goto failed;
-
val |= (uint16_t)(lcr1val&0xF0) << 8;
val |= 0x01;
val |= (uint16_t)(lcr2val&0x0F) << 8;
@@ -810,7 +792,6 @@
val |= 0x04;
idx |= (uint16_t)div << 8;
val |= 0x08;
- idx |= mod & 0xF8;
val |= 0x10;
DPRINTF(("%s: reset v=0x%04X, i=0x%04X\n",
Home |
Main Index |
Thread Index |
Old Index