Deleted Added
full compact
umcs.c (292080) umcs.c (298300)
1/*-
2 * Copyright (c) 2010 Lev Serebryakov <lev@FreeBSD.org>.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 24 unchanged lines hidden (view full) ---

33 * http://www.moschip.com. The datasheets don't contain full
34 * programming information for the chip.
35 *
36 * It is nornal to have only two enabled ports in devices, based on
37 * quad-port mos7840.
38 *
39 */
40#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2010 Lev Serebryakov <lev@FreeBSD.org>.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 24 unchanged lines hidden (view full) ---

33 * http://www.moschip.com. The datasheets don't contain full
34 * programming information for the chip.
35 *
36 * It is nornal to have only two enabled ports in devices, based on
37 * quad-port mos7840.
38 *
39 */
40#include <sys/cdefs.h>
41__FBSDID("$FreeBSD: head/sys/dev/usb/serial/umcs.c 292080 2015-12-11 05:28:00Z imp $");
41__FBSDID("$FreeBSD: head/sys/dev/usb/serial/umcs.c 298300 2016-04-19 22:07:36Z pfg $");
42
43#include <sys/stdint.h>
44#include <sys/stddef.h>
45#include <sys/param.h>
46#include <sys/queue.h>
47#include <sys/types.h>
48#include <sys/systm.h>
49#include <sys/kernel.h>

--- 1017 unchanged lines hidden (view full) ---

1067 err = umcs7840_set_UART_reg_sync(sc, portno, MCS7840_UART_REG_LCR, sc->sc_ports[portno].sc_lcr);
1068 if (err)
1069 return (err);
1070 return (0);
1071}
1072
1073/* Maximum speeds for standard frequences, when PLL is not used */
1074static const uint32_t umcs7840_baudrate_divisors[] = {0, 115200, 230400, 403200, 460800, 806400, 921600, 1572864, 3145728,};
42
43#include <sys/stdint.h>
44#include <sys/stddef.h>
45#include <sys/param.h>
46#include <sys/queue.h>
47#include <sys/types.h>
48#include <sys/systm.h>
49#include <sys/kernel.h>

--- 1017 unchanged lines hidden (view full) ---

1067 err = umcs7840_set_UART_reg_sync(sc, portno, MCS7840_UART_REG_LCR, sc->sc_ports[portno].sc_lcr);
1068 if (err)
1069 return (err);
1070 return (0);
1071}
1072
1073/* Maximum speeds for standard frequences, when PLL is not used */
1074static const uint32_t umcs7840_baudrate_divisors[] = {0, 115200, 230400, 403200, 460800, 806400, 921600, 1572864, 3145728,};
1075static const uint8_t umcs7840_baudrate_divisors_len = sizeof(umcs7840_baudrate_divisors) / sizeof(umcs7840_baudrate_divisors[0]);
1075static const uint8_t umcs7840_baudrate_divisors_len = nitems(umcs7840_baudrate_divisors);
1076
1077static usb_error_t
1078umcs7840_calc_baudrate(uint32_t rate, uint16_t *divisor, uint8_t *clk)
1079{
1080 uint8_t i = 0;
1081
1082 if (rate > umcs7840_baudrate_divisors[umcs7840_baudrate_divisors_len - 1])
1083 return (-1);
1084
1085 for (i = 0; i < umcs7840_baudrate_divisors_len - 1 &&
1086 !(rate > umcs7840_baudrate_divisors[i] && rate <= umcs7840_baudrate_divisors[i + 1]); ++i);
1087 if (rate == 0)
1088 *divisor = 1; /* XXX */
1089 else
1090 *divisor = umcs7840_baudrate_divisors[i + 1] / rate;
1091 /* 0x00 .. 0x70 */
1092 *clk = i << MCS7840_DEV_SPx_CLOCK_SHIFT;
1093 return (0);
1094}
1076
1077static usb_error_t
1078umcs7840_calc_baudrate(uint32_t rate, uint16_t *divisor, uint8_t *clk)
1079{
1080 uint8_t i = 0;
1081
1082 if (rate > umcs7840_baudrate_divisors[umcs7840_baudrate_divisors_len - 1])
1083 return (-1);
1084
1085 for (i = 0; i < umcs7840_baudrate_divisors_len - 1 &&
1086 !(rate > umcs7840_baudrate_divisors[i] && rate <= umcs7840_baudrate_divisors[i + 1]); ++i);
1087 if (rate == 0)
1088 *divisor = 1; /* XXX */
1089 else
1090 *divisor = umcs7840_baudrate_divisors[i + 1] / rate;
1091 /* 0x00 .. 0x70 */
1092 *clk = i << MCS7840_DEV_SPx_CLOCK_SHIFT;
1093 return (0);
1094}