/* * If the port was already initialised (eg, by a boot loader), try to determine * the current setup. */ static void __init atmel_console_get_options(struct uart_port *port, int *baud, int *parity, int *bits) { unsigned int mr, quot; // TODO: CR is a write-only register // unsigned int cr; // // cr = UART_GET_CR(port) & (ATMEL_US_RXEN | ATMEL_US_TXEN); // if (cr == (ATMEL_US_RXEN | ATMEL_US_TXEN)) { // /* ok, the port was enabled */ // } mr = UART_GET_MR(port) & ATMEL_US_CHRL; if (mr == ATMEL_US_CHRL_8) *bits = 8; else *bits = 7; mr = UART_GET_MR(port) & ATMEL_US_PAR; if (mr == ATMEL_US_PAR_EVEN) *parity = 'e'; else if (mr == ATMEL_US_PAR_ODD) *parity = 'o'; /* * The serial core only rounds down when matching this to a * supported baud rate. Make sure we don't end up slightly * lower than one of those, as it would make us fall through * to a much lower baud rate than we really want. */ quot = UART_GET_BRGR(port); *baud = port->uartclk / (16 * (quot - 1)); }
/* * If the port was already initialised (eg, by a boot loader), try to determine * the current setup. */ static void __init atmel_console_get_options(struct uart_port *port, int *baud, int *parity, int *bits) { unsigned int mr, quot; /* * If the baud rate generator isn't running, the port wasn't * initialized by the boot loader. */ quot = UART_GET_BRGR(port); if (!quot) return; mr = UART_GET_MR(port) & ATMEL_US_CHRL; if (mr == ATMEL_US_CHRL_8) *bits = 8; else *bits = 7; mr = UART_GET_MR(port) & ATMEL_US_PAR; if (mr == ATMEL_US_PAR_EVEN) *parity = 'e'; else if (mr == ATMEL_US_PAR_ODD) *parity = 'o'; /* * The serial core only rounds down when matching this to a * supported baud rate. Make sure we don't end up slightly * lower than one of those, as it would make us fall through * to a much lower baud rate than we really want. */ *baud = port->uartclk / (16 * (quot - 1)); }
/* * If the port was already initialised (eg, by a boot loader), try to determine * the current setup. */ static void __init at91_console_get_options(struct uart_port *port, int *baud, int *parity, int *bits) { unsigned int mr, quot; // TODO: CR is a write-only register // unsigned int cr; // // cr = UART_GET_CR(port) & (AT91_US_RXEN | AT91_US_TXEN); // if (cr == (AT91_US_RXEN | AT91_US_TXEN)) { // /* ok, the port was enabled */ // } mr = UART_GET_MR(port) & AT91_US_CHRL; if (mr == AT91_US_CHRL_8) *bits = 8; else *bits = 7; mr = UART_GET_MR(port) & AT91_US_PAR; if (mr == AT91_US_PAR_EVEN) *parity = 'e'; else if (mr == AT91_US_PAR_ODD) *parity = 'o'; quot = UART_GET_BRGR(port); *baud = port->uartclk / (16 * (quot)); }