Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- uchcom.c.bak Fri Nov 15 19:17:39 2013
- +++ uchcom.c Tue May 13 09:03:42 2014
- @@ -48,9 +48,10 @@
- #include <dev/usb/usbdevs.h>
- #include <dev/usb/ucomvar.h>
- +#define UCHCOM_DEBUG
- #ifdef UCHCOM_DEBUG
- #define DPRINTFN(n, x) do { if (uchcomdebug > (n)) printf x; } while (0)
- -int uchcomdebug = 0;
- +int uchcomdebug = 3;
- #else
- #define DPRINTFN(n, x)
- #endif
- @@ -91,14 +92,6 @@ int uchcomdebug = 0;
- #define UCHCOM_BRK1_MASK 0x01
- #define UCHCOM_BRK2_MASK 0x40
- -#define UCHCOM_LCR1_MASK 0xAF
- -#define UCHCOM_LCR2_MASK 0x07
- -#define UCHCOM_LCR1_PARENB 0x80
- -#define UCHCOM_LCR2_PAREVEN 0x07
- -#define UCHCOM_LCR2_PARODD 0x06
- -#define UCHCOM_LCR2_PARMARK 0x05
- -#define UCHCOM_LCR2_PARSPACE 0x04
- -
- #define UCHCOM_INTR_STAT1 0x02
- #define UCHCOM_INTR_STAT2 0x03
- #define UCHCOM_INTR_LEAST 4
- @@ -707,29 +700,11 @@ uchcom_set_dte_rate(struct uchcom_softc *sc, uint32_t
- int
- uchcom_set_line_control(struct uchcom_softc *sc, tcflag_t cflag)
- {
- - usbd_status err;
- - uint8_t lcr1 = 0, lcr2 = 0;
- -
- - err = uchcom_read_reg(sc, UCHCOM_REG_LCR1, &lcr1, UCHCOM_REG_LCR2,
- - &lcr2);
- - if (err) {
- - printf("%s: cannot get LCR: %s\n",
- - sc->sc_dev.dv_xname, usbd_errstr(err));
- - return EIO;
- - }
- -
- - lcr1 &= ~UCHCOM_LCR1_MASK;
- - lcr2 &= ~UCHCOM_LCR2_MASK;
- -
- /*
- * XXX: it is difficult to handle the line control appropriately:
- - * - CS8, !CSTOPB and any parity mode seems ok, but
- - * - the chip doesn't have the function to calculate parity
- - * in !CS8 mode.
- - * - it is unclear that the chip supports CS5,6 mode.
- - * - it is unclear how to handle stop bits.
- + * work as chip default - CS8, no parity, 1 stop bit
- + * other modes are not supported.
- */
- -
- switch (ISSET(cflag, CSIZE)) {
- case CS5:
- case CS6:
- @@ -739,22 +714,9 @@ uchcom_set_line_control(struct uchcom_softc *sc, tcfla
- break;
- }
- - if (ISSET(cflag, PARENB)) {
- - lcr1 |= UCHCOM_LCR1_PARENB;
- - if (ISSET(cflag, PARODD))
- - lcr2 |= UCHCOM_LCR2_PARODD;
- - else
- - lcr2 |= UCHCOM_LCR2_PAREVEN;
- - }
- + if (ISSET(cflag, PARENB) || ISSET(cflag, CSTOPB))
- + return EINVAL;
- - err = uchcom_write_reg(sc, UCHCOM_REG_LCR1, lcr1, UCHCOM_REG_LCR2,
- - lcr2);
- - if (err) {
- - printf("%s: cannot set LCR: %s\n",
- - sc->sc_dev.dv_xname, usbd_errstr(err));
- - return EIO;
- - }
- -
- return 0;
- }
- @@ -778,33 +740,10 @@ int
- uchcom_reset_chip(struct uchcom_softc *sc)
- {
- usbd_status err;
- - uint8_t lcr1, lcr2, pre, div, mod;
- - uint16_t val=0, idx=0;
- + uint16_t val, idx;
- - err = uchcom_read_reg(sc, UCHCOM_REG_LCR1, &lcr1, UCHCOM_REG_LCR2, &lcr2);
- - if (err)
- - goto failed;
- -
- - err = uchcom_read_reg(sc, UCHCOM_REG_BPS_PRE, &pre, UCHCOM_REG_BPS_DIV,
- - &div);
- - if (err)
- - goto failed;
- -
- - err = uchcom_read_reg(sc, UCHCOM_REG_BPS_MOD, &mod, UCHCOM_REG_BPS_PAD,
- - NULL);
- - if (err)
- - goto failed;
- -
- - val |= (uint16_t)(lcr1&0xF0) << 8;
- - val |= 0x01;
- - val |= (uint16_t)(lcr2&0x0F) << 8;
- - val |= 0x02;
- - idx |= pre & 0x07;
- - val |= 0x04;
- - idx |= (uint16_t)div << 8;
- - val |= 0x08;
- - idx |= mod & 0xF8;
- - val |= 0x10;
- + val = 0x501f;
- + idx = 0xd90a;
- DPRINTF(("%s: reset v=0x%04X, i=0x%04X\n",
- sc->sc_dev.dv_xname, val, idx));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement