static int cpm_uart_drv_probe(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct fs_uart_platform_info *pdata; int ret = -ENODEV; if(!pdev) { printk(KERN_ERR"CPM UART: platform data missing!\n"); return ret; } pdata = pdev->dev.platform_data; if ((ret = cpm_uart_drv_get_platform_data(pdev, 0))) return ret; pr_debug("cpm_uart_drv_probe: Adding CPM UART %d\n", cpm_uart_id2nr(pdata->fs_no)); if (pdata->init_ioports) pdata->init_ioports(pdata); ret = uart_add_one_port(&cpm_reg, &cpm_uart_ports[pdata->fs_no].port); return ret; }
static int cpm_uart_drv_probe(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct fs_uart_platform_info *pdata; int ret = -ENODEV; if(!pdev) { printk(KERN_ERR"CPM UART: platform data missing!\n"); return ret; } pdata = pdev->dev.platform_data; #ifdef CONFIG_KGDB_CPM_UART /* We are not interested in ports yet utilized by kgdb */ if(cpm_uart_id2nr(fs_uart_get_id(pdata)) == KGDB_PINFO_INDEX) return ret; #endif if ((ret = cpm_uart_drv_get_platform_data(pdev, 0))) return ret; pr_debug("cpm_uart_drv_probe: Adding CPM UART %d\n", cpm_uart_id2nr(pdata->fs_no)); if (pdata->init_ioports) pdata->init_ioports(pdata); ret = uart_add_one_port(&cpm_reg, &cpm_uart_ports[pdata->fs_no].port); return ret; }
int cpm_uart_early_setup(int index, int early) { int ret; struct uart_port *port; struct uart_cpm_port *pinfo = &cpm_uart_ports[index]; struct fs_uart_platform_info *pdata; struct platform_device* pdev = early_uart_get_pdev(index); int line = pinfo - cpm_uart_ports; BUG_ON(index>UART_NR); port = (struct uart_port *)&cpm_uart_ports[index]; pinfo = (struct uart_cpm_port *)port; if (!pdev) { if (pinfo->set_lineif) pinfo->set_lineif(pinfo); } else { pdata = pdev->dev.platform_data; if (pdata) if (pdata->init_ioports) pdata->init_ioports(pdata); cpm_uart_drv_get_platform_data(pdev, 1); } cpm_line_cr_cmd(line, CPM_CR_STOP_TX); if (IS_SMC(pinfo)) { pinfo->smcp->smc_smcm &= ~(SMCM_RX | SMCM_TX); pinfo->smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); } else { pinfo->sccp->scc_sccm &= ~(UART_SCCM_TX | UART_SCCM_RX); pinfo->sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); } ret = cpm_uart_allocbuf(pinfo, early); if (ret) return ret; cpm_uart_initbd(pinfo); if (IS_SMC(pinfo)) cpm_uart_init_smc(pinfo); else cpm_uart_init_scc(pinfo); return 0; }
static int __init cpm_uart_console_setup(struct console *co, char *options) { struct uart_port *port; struct uart_cpm_port *pinfo; int baud = 38400; int bits = 8; int parity = 'n'; int flow = 'n'; int ret; struct fs_uart_platform_info *pdata; struct platform_device* pdev = early_uart_get_pdev(co->index); if (!pdev) { pr_info("cpm_uart: console: compat mode\n"); /* compatibility - will be cleaned up */ cpm_uart_init_portdesc(); } port = (struct uart_port *)&cpm_uart_ports[cpm_uart_port_map[co->index]]; pinfo = (struct uart_cpm_port *)port; if (!pdev) { if (pinfo->set_lineif) pinfo->set_lineif(pinfo); } else { pdata = pdev->dev.platform_data; if (pdata) if (pdata->init_ioports) pdata->init_ioports(pdata); cpm_uart_drv_get_platform_data(pdev, 1); } pinfo->flags |= FLAG_CONSOLE; if (options) { uart_parse_options(options, &baud, &parity, &bits, &flow); } else { if ((baud = uart_baudrate()) == -1) baud = 9600; } if (IS_SMC(pinfo)) { pinfo->smcp->smc_smcm &= ~(SMCM_RX | SMCM_TX); pinfo->smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); } else { pinfo->sccp->scc_sccm &= ~(UART_SCCM_TX | UART_SCCM_RX); pinfo->sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); } ret = cpm_uart_allocbuf(pinfo, 1); if (ret) return ret; cpm_uart_initbd(pinfo); if (IS_SMC(pinfo)) cpm_uart_init_smc(pinfo); else cpm_uart_init_scc(pinfo); uart_set_options(port, co, baud, parity, bits, flow); return 0; }