Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
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;
}