39 #define UART_FDR_MULVAL(n) (((n) << 4) & 0xF0)
42 #define UART_ACCEPTED_BAUDRATE_ERROR (3)
73 uint32_t actualRate = 0, d, m, bestd, bestm, tmp;
74 uint64_t best_divisor, divisor;
85 best_error = 0xFFFFFFFF;
89 for (m = 1; m <= 15; m++) {
90 for (d = 0; d < m; d++) {
91 divisor = ((uint64_t) uClk << 28) * m / (baudrate * (m + d));
92 current_error = divisor & 0xFFFFFFFF;
97 if (current_error > ((
uint32_t) 1 << 31)) {
98 current_error = -current_error;
102 if (( tmp < 1) || ( tmp > 65536)) {
107 if ( current_error < best_error) {
108 best_error = current_error;
112 if (best_error == 0) {
118 if (best_error == 0) {
123 if (best_divisor == 0) {
128 recalcbaud = (uClk >> 4) * bestm / (best_divisor * (bestm + bestd));
131 if (baudrate > recalcbaud) {
132 best_error = baudrate - recalcbaud;
135 best_error = recalcbaud - baudrate;
138 best_error = (best_error * 100) / baudrate;
150 actualRate = recalcbaud;