Skip to content

Commit

Permalink
serial: opencores_yanu: Avoid duplicate oc_serial_setbrg() implementa…
Browse files Browse the repository at this point in the history
…tion

The implementation of oc_serial_setbrg() for CONFIG_SYS_NIOS_FIXEDBAUD and
!CONFIG_SYS_NIOS_FIXEDBAUD are very similar.
Add a baudrate variable and set it to either CONFIG_BAUDRATE or gd->baudrate.
Then we can unify the code for both cases.

Signed-off-by: Axel Lin <[email protected]>
Signed-off-by: Thomas Chou <[email protected]>
  • Loading branch information
AxelLin authored and hippo5329 committed Feb 11, 2014
1 parent 18a6bcc commit 2d61e1b
Showing 1 changed file with 9 additions and 40 deletions.
49 changes: 9 additions & 40 deletions drivers/serial/opencores_yanu.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,62 +18,34 @@ DECLARE_GLOBAL_DATA_PTR;

static yanu_uart_t *uart = (yanu_uart_t *)CONFIG_SYS_NIOS_CONSOLE;

#if defined(CONFIG_SYS_NIOS_FIXEDBAUD)

/* Everything's already setup for fixed-baud PTF assignment*/

static void oc_serial_setbrg(void)
{
int n, k;
const unsigned max_uns = 0xFFFFFFFF;
unsigned best_n, best_m, baud;
unsigned baudrate;

/* compute best N and M couple */
best_n = YANU_MAX_PRESCALER_N;
for (n = YANU_MAX_PRESCALER_N; n >= 0; n--) {
if ((unsigned)CONFIG_SYS_CLK_FREQ / (1 << (n + 4)) >=
(unsigned)CONFIG_BAUDRATE) {
best_n = n;
break;
}
}
for (k = 0;; k++) {
if ((unsigned)CONFIG_BAUDRATE <= (max_uns >> (15+n-k)))
break;
}
best_m =
((unsigned)CONFIG_BAUDRATE * (1 << (15 + n - k))) /
((unsigned)CONFIG_SYS_CLK_FREQ >> k);

baud = best_m + best_n * YANU_BAUDE;
writel(baud, &uart->baud);

return;
}

#if defined(CONFIG_SYS_NIOS_FIXEDBAUD)
/* Everything's already setup for fixed-baud PTF assignment */
baudrate = CONFIG_BAUDRATE;
#else

static void oc_serial_setbrg(void)
{
int n, k;
const unsigned max_uns = 0xFFFFFFFF;
unsigned best_n, best_m, baud;

baudrate = gd->baudrate;
#endif
/* compute best N and M couple */
best_n = YANU_MAX_PRESCALER_N;
for (n = YANU_MAX_PRESCALER_N; n >= 0; n--) {
if ((unsigned)CONFIG_SYS_CLK_FREQ / (1 << (n + 4)) >=
gd->baudrate) {
baudrate) {
best_n = n;
break;
}
}
for (k = 0;; k++) {
if (gd->baudrate <= (max_uns >> (15+n-k)))
if (baudrate <= (max_uns >> (15+n-k)))
break;
}
best_m =
(gd->baudrate * (1 << (15 + n - k))) /
(baudrate * (1 << (15 + n - k))) /
((unsigned)CONFIG_SYS_CLK_FREQ >> k);

baud = best_m + best_n * YANU_BAUDE;
Expand All @@ -82,9 +54,6 @@ static void oc_serial_setbrg(void)
return;
}


#endif /* CONFIG_SYS_NIOS_FIXEDBAUD */

static int oc_serial_init(void)
{
unsigned action,control;
Expand Down

0 comments on commit 2d61e1b

Please sign in to comment.