int serial_init (void) { int clock_divisor; #ifdef CFG_NS87308 initialise_ns87308(); #endif #ifdef CFG_NS16550_COM1 clock_divisor = calc_divisor(serial_ports[0]); NS16550_init(serial_ports[0], clock_divisor); #endif #ifdef CFG_NS16550_COM2 clock_divisor = calc_divisor(serial_ports[1]); NS16550_init(serial_ports[1], clock_divisor); #endif #ifdef CFG_NS16550_COM3 clock_divisor = calc_divisor(serial_ports[2]); NS16550_init(serial_ports[2], clock_divisor); #endif #ifdef CFG_NS16550_COM4 clock_divisor = calc_divisor(serial_ports[3]); NS16550_init(serial_ports[3], clock_divisor); #endif return (0); }
void dload_serial_init(void) { int clock_divisor; clock_divisor = calc_divisor(serial_ports[0]); NS16550_init(serial_ports[0], clock_divisor); }
void init_serial(unsigned int base) { int clock_divisor; if (base == UART4_BASE) { clock_divisor = calc_divisor(UART4_BAUDRATE); (*(REG32(base+0x4))) = 0x0; serial_puts(UART0_BASE,"Init4\n");} else { clock_divisor = calc_divisor(UART0_BAUDRATE); (*(REG32(base+0x4))) = 0x0; } (*(REG32(base+0xC))) = 0x83; (*(REG32(base+0x0))) = clock_divisor & 0xff; (*(REG32(base+0x4))) = (clock_divisor >> 8) & 0xff; (*(REG32(base+0xC))) = (MCR_DTR | MCR_RTS); (*(REG32(base+0x10))) = 0x3; (*(REG32(base+0x8))) = (FCR_FIFO_EN | FCR_RXSR | FCR_TXSR); }
void debug_uart_init(void) { struct NS16550 *com_port = (struct NS16550 *)CONFIG_DEBUG_UART_BASE; int baud_divisor; /* * We copy the code from above because it is already horribly messy. * Trying to refactor to nicely remove the duplication doesn't seem * feasible. The better fix is to move all users of this driver to * driver model. */ baud_divisor = calc_divisor(com_port, CONFIG_DEBUG_UART_CLOCK, CONFIG_BAUDRATE); serial_out_shift(&com_port->ier, CONFIG_DEBUG_UART_SHIFT, CONFIG_SYS_NS16550_IER); serial_out_shift(&com_port->mcr, CONFIG_DEBUG_UART_SHIFT, UART_MCRVAL); serial_out_shift(&com_port->fcr, CONFIG_DEBUG_UART_SHIFT, UART_FCRVAL); serial_out_shift(&com_port->lcr, CONFIG_DEBUG_UART_SHIFT, UART_LCR_BKSE | UART_LCRVAL); serial_out_shift(&com_port->dll, CONFIG_DEBUG_UART_SHIFT, baud_divisor & 0xff); serial_out_shift(&com_port->dlm, CONFIG_DEBUG_UART_SHIFT, (baud_divisor >> 8) & 0xff); serial_out_shift(&com_port->lcr, CONFIG_DEBUG_UART_SHIFT, UART_LCRVAL); }
void calc_divisor(unsigned int n, unsigned int scope, unsigned int num, unsigned int start) { extern int unsigned cnt; cnt = n; unsigned int i = start; while (i < scope) { if (num % i == 0) { if (i <= num / i) { divisor[n] = i; backpart[n] = num / i; if (num / i > i + 1) calc_divisor(n + 1, num / i, num, i + 1); break; } } i++; } /* merge */ if (i + 1 > num / i) { divisor[0] = 1; n--; unsigned int p = n; while (p != 0) { if (divisor[n] != backpart[p]) { n++; divisor[n] = backpart[p]; } cnt++; p--; } free(backpart); divisor[cnt] = num; } }
void serial_setbrg (void) { int clock_divisor; clock_divisor = calc_divisor(); NS16550_reinit(console, clock_divisor); }
int serial_init (void) { int clock_divisor = calc_divisor(); NS16550_init(console, clock_divisor); return (0); }
extern void _serial_setbrg(const int port) { int clock_divisor; clock_divisor = calc_divisor(PORT); NS16550_reinit(PORT, clock_divisor); }
static int ark3116_port_probe(struct usb_serial_port *port) { struct usb_serial *serial = port->serial; struct ark3116_private *priv; priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; mutex_init(&priv->hw_lock); spin_lock_init(&priv->status_lock); priv->irda = is_irda(serial); usb_set_serial_port_data(port, priv); /* setup the hardware */ ark3116_write_reg(serial, UART_IER, 0); /* disable DMA */ ark3116_write_reg(serial, UART_FCR, 0); /* handshake control */ priv->hcr = 0; ark3116_write_reg(serial, 0x8 , 0); /* modem control */ priv->mcr = 0; ark3116_write_reg(serial, UART_MCR, 0); if (!(priv->irda)) { ark3116_write_reg(serial, 0xb , 0); } else { ark3116_write_reg(serial, 0xb , 1); ark3116_write_reg(serial, 0xc , 0); ark3116_write_reg(serial, 0xd , 0x41); ark3116_write_reg(serial, 0xa , 1); } /* setup baudrate */ ark3116_write_reg(serial, UART_LCR, UART_LCR_DLAB); /* setup for 9600 8N1 */ priv->quot = calc_divisor(9600); ark3116_write_reg(serial, UART_DLL, priv->quot & 0xff); ark3116_write_reg(serial, UART_DLM, (priv->quot>>8) & 0xff); priv->lcr = UART_LCR_WLEN8; ark3116_write_reg(serial, UART_LCR, UART_LCR_WLEN8); ark3116_write_reg(serial, 0xe, 0); if (priv->irda) ark3116_write_reg(serial, 0x9, 0); dev_info(&serial->dev->dev, "%s using %s mode\n", KBUILD_MODNAME, priv->irda ? "IrDA" : "RS232"); return 0; }
int sum_divisor(int num) { unsigned int i = 0; unsigned int sum_divisor = 0; extern unsigned int cnt; calc_divisor(1, num, num, 2); while (i < cnt) { sum_divisor += divisor[i]; i++; } return sum_divisor; }
int serial_init (void) { int clock_divisor; int uart_console; #ifdef CONFIG_NS87308 initialise_ns87308(); #endif #if 0 #ifdef CONFIG_SYS_NS16550_COM1 clock_divisor = calc_divisor(serial_ports[0]); NS16550_init(serial_ports[0], clock_divisor); #endif #ifdef CONFIG_SYS_NS16550_COM2 clock_divisor = calc_divisor(serial_ports[1]); NS16550_init(serial_ports[1], clock_divisor); #endif #ifdef CONFIG_SYS_NS16550_COM3 clock_divisor = calc_divisor(serial_ports[2]); NS16550_init(serial_ports[2], clock_divisor); #endif #ifdef CONFIG_SYS_NS16550_COM4 clock_divisor = calc_divisor(serial_ports[3]); NS16550_init(serial_ports[3], clock_divisor); #endif #else uart_console = uboot_spare_head.boot_data.uart_port; if((uart_console < 0) || (uart_console > 4)) { uart_console = 0; } gpio_request((void *)uboot_spare_head.boot_data.uart_gpio, 2); clock_divisor = calc_divisor(serial_ports[uart_console]); NS16550_init(serial_ports[uart_console], clock_divisor); gd->uart_console = uart_console; #endif return (0); }
int serial_init (void) { int clock_divisor = calc_divisor(); #ifdef CFG_NS87308 initialise_ns87308(); #endif NS16550_init(console, clock_divisor); return (0); }
int ns16550_calc_divisor(NS16550_t port, int clock, int baudrate) { #ifdef CONFIG_OMAP1510 /* If can't cleanly clock 115200 set div to 1 */ if ((clock == 12000000) && (baudrate == 115200)) { port->osc_12m_sel = OSC_12M_SEL; /* enable 6.5 * divisor */ return 1; /* return 1 for base divisor */ } port->osc_12m_sel = 0; /* clear if previsouly set */ #endif return calc_divisor(port, clock, baudrate); }
extern int serial_init (void) { int clock_divisor; #ifdef CFG_NS16550_COM1 clock_divisor = calc_divisor(serial_ports[0]); NS16550_init(serial_ports[0], clock_divisor); #endif #ifdef CFG_NS16550_COM2 clock_divisor = calc_divisor(serial_ports[1]); NS16550_init(serial_ports[1], clock_divisor); #endif #ifdef CFG_NS16550_COM3 clock_divisor = calc_divisor(serial_ports[2]); NS16550_init(serial_ports[2], clock_divisor); #endif #ifdef CFG_NS16550_COM4 clock_divisor = calc_divisor(serial_ports[3]); NS16550_init(serial_ports[3], clock_divisor); #endif return 0; }
int serial_init (void) { int clock_divisor = calc_divisor(); #ifdef CFG_NS87308 initialise_ns87308(); #endif NS16550_init(console, clock_divisor); printf("**** Woo hoo! Serial NS16550 is initialized\n"); return (0); }
int serial_init (void) { int clock_divisor; #ifdef CONFIG_NS87308 initialise_ns87308(); #endif #if 0 #ifdef CONFIG_SYS_NS16550_COM1 clock_divisor = calc_divisor(serial_ports[0]); NS16550_init(serial_ports[0], clock_divisor); #endif #ifdef CONFIG_SYS_NS16550_COM2 clock_divisor = calc_divisor(serial_ports[1]); NS16550_init(serial_ports[1], clock_divisor); #endif #ifdef CONFIG_SYS_NS16550_COM3 clock_divisor = calc_divisor(serial_ports[2]); NS16550_init(serial_ports[2], clock_divisor); #endif #ifdef CONFIG_SYS_NS16550_COM4 clock_divisor = calc_divisor(serial_ports[3]); NS16550_init(serial_ports[3], clock_divisor); #endif #else if(script_parser_fetch("uart_para", "uart_debug_port", &uart_console, sizeof(int))) uart_console = 0; if((uart_console < 0) || (uart_console > 4)){ uart_console = 0; } clock_divisor = calc_divisor(serial_ports[uart_console]); NS16550_init(serial_ports[uart_console], clock_divisor); #endif return (0); }
int serial_init (void) { int clock_divisor = calc_divisor(); #ifdef CFG_NS87308 initialise_ns87308(); #endif NS16550_init(console, clock_divisor); #if (CONFIG_CONS_INDEX == 1) if (omap_revision() == OMAP4470_ES1_0) set_uart1_gpios(); #endif return (0); }
char *parse_note_string(char *ptr, struct defaults *def, struct note *note){ char len_string[3]; char pitch_string[3]; char octave_string[2]; char dot[2]; // eat whitespace / commas and advance the pointer char* dummy = malloc(strlen(ptr)+1); if (dummy == NULL){ error("malloc failed");} dummy[0] = '\0'; sscanf(ptr,"%[ ,]",dummy); ptr += strlen(dummy); free(dummy); DEBUG&&printf("Begin Parsing Note String...\n"); ptr = get_len(ptr, len_string, def->len); DEBUG&&printf("get_len Successful...\n"); ptr = get_pitch(ptr, pitch_string); DEBUG&&printf("get_pitch Successful...\n"); ptr = get_octave(ptr, octave_string, def->oct); DEBUG&&printf("get_octave Successful...\n"); ptr = get_dot(ptr, dot); DEBUG&&printf("get_dot Successful...\n"); strcpy(note->pitch, pitch_string); sscanf(len_string, "%d", &(note->length)); sscanf(octave_string, "%d", &(note->octave)); note->divisor = calc_divisor(pitch_string, octave_string); DEBUG&&printf("divisor successful\n"); note->cycles = calc_cycles(def, len_string, dot); DEBUG&&printf("cycles successful\n"); return ptr; }
static void ark3116_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old_termios) { struct usb_serial *serial = port->serial; struct ark3116_private *priv = usb_get_serial_port_data(port); struct ktermios *termios = &tty->termios; unsigned int cflag = termios->c_cflag; int bps = tty_get_baud_rate(tty); int quot; __u8 lcr, hcr, eval; /* set data bit count */ switch (cflag & CSIZE) { case CS5: lcr = UART_LCR_WLEN5; break; case CS6: lcr = UART_LCR_WLEN6; break; case CS7: lcr = UART_LCR_WLEN7; break; default: case CS8: lcr = UART_LCR_WLEN8; break; } if (cflag & CSTOPB) lcr |= UART_LCR_STOP; if (cflag & PARENB) lcr |= UART_LCR_PARITY; if (!(cflag & PARODD)) lcr |= UART_LCR_EPAR; #ifdef CMSPAR if (cflag & CMSPAR) lcr |= UART_LCR_SPAR; #endif /* handshake control */ hcr = (cflag & CRTSCTS) ? 0x03 : 0x00; /* calc baudrate */ dev_dbg(&port->dev, "%s - setting bps to %d\n", __func__, bps); eval = 0; switch (bps) { case 0: quot = calc_divisor(9600); break; default: if ((bps < 75) || (bps > 3000000)) bps = 9600; quot = calc_divisor(bps); break; case 460800: eval = 1; quot = calc_divisor(bps); break; case 921600: eval = 2; quot = calc_divisor(bps); break; } /* Update state: synchronize */ mutex_lock(&priv->hw_lock); /* keep old LCR_SBC bit */ lcr |= (priv->lcr & UART_LCR_SBC); dev_dbg(&port->dev, "%s - setting hcr:0x%02x,lcr:0x%02x,quot:%d\n", __func__, hcr, lcr, quot); /* handshake control */ if (priv->hcr != hcr) { priv->hcr = hcr; ark3116_write_reg(serial, 0x8, hcr); } /* baudrate */ if (priv->quot != quot) { priv->quot = quot; priv->lcr = lcr; /* need to write lcr anyway */ /* disable DMA since transmit/receive is * shadowed by UART_DLL */ ark3116_write_reg(serial, UART_FCR, 0); ark3116_write_reg(serial, UART_LCR, lcr|UART_LCR_DLAB); ark3116_write_reg(serial, UART_DLL, quot & 0xff); ark3116_write_reg(serial, UART_DLM, (quot>>8) & 0xff); /* restore lcr */ ark3116_write_reg(serial, UART_LCR, lcr); /* magic baudrate thingy: not sure what it does, * but windows does this as well. */ ark3116_write_reg(serial, 0xe, eval); /* enable DMA */ ark3116_write_reg(serial, UART_FCR, UART_FCR_DMA_SELECT); } else if (priv->lcr != lcr) {
static int ark3116_attach(struct usb_serial *serial) { struct usb_serial_port *port = serial->port[0]; struct ark3116_private *priv; /* make sure we have our end-points */ if ((serial->num_bulk_in == 0) || (serial->num_bulk_out == 0) || (serial->num_interrupt_in == 0)) { dev_err(&serial->dev->dev, "%s - missing endpoint - " "bulk in: %d, bulk out: %d, int in %d\n", KBUILD_MODNAME, serial->num_bulk_in, serial->num_bulk_out, serial->num_interrupt_in); return -EINVAL; } priv = kzalloc(sizeof(struct ark3116_private), GFP_KERNEL); if (!priv) return -ENOMEM; init_waitqueue_head(&priv->delta_msr_wait); mutex_init(&priv->hw_lock); spin_lock_init(&priv->status_lock); priv->irda = is_irda(serial); usb_set_serial_port_data(port, priv); /* setup the hardware */ ark3116_write_reg(serial, UART_IER, 0); /* disable DMA */ ark3116_write_reg(serial, UART_FCR, 0); /* handshake control */ priv->hcr = 0; ark3116_write_reg(serial, 0x8 , 0); /* modem control */ priv->mcr = 0; ark3116_write_reg(serial, UART_MCR, 0); if (!(priv->irda)) { ark3116_write_reg(serial, 0xb , 0); } else { ark3116_write_reg(serial, 0xb , 1); ark3116_write_reg(serial, 0xc , 0); ark3116_write_reg(serial, 0xd , 0x41); ark3116_write_reg(serial, 0xa , 1); } /* setup baudrate */ ark3116_write_reg(serial, UART_LCR, UART_LCR_DLAB); /* setup for 9600 8N1 */ priv->quot = calc_divisor(9600); ark3116_write_reg(serial, UART_DLL, priv->quot & 0xff); ark3116_write_reg(serial, UART_DLM, (priv->quot>>8) & 0xff); priv->lcr = UART_LCR_WLEN8; ark3116_write_reg(serial, UART_LCR, UART_LCR_WLEN8); ark3116_write_reg(serial, 0xe, 0); if (priv->irda) ark3116_write_reg(serial, 0x9, 0); dev_info(&serial->dev->dev, "%s using %s mode\n", KBUILD_MODNAME, priv->irda ? "IrDA" : "RS232"); return 0; }