Exemple #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;

#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;
}
Exemple #2
0
int cpm_uart_drv_get_platform_data(struct platform_device *pdev, int is_con)
{
	struct resource *r;
	struct fs_uart_platform_info *pdata = pdev->dev.platform_data;
	int idx;	/* It is UART_SMCx or UART_SCCx index */
	struct uart_cpm_port *pinfo;
	int line;
	u32 mem, pram;

        idx = pdata->fs_no = fs_uart_get_id(pdata);

	line = cpm_uart_id2nr(idx);
	if(line < 0) {
		printk(KERN_ERR"%s(): port %d is not registered", __FUNCTION__, idx);
		return -EINVAL;
	}

	pinfo = (struct uart_cpm_port *) &cpm_uart_ports[idx];

	pinfo->brg = pdata->brg;

	if (!is_con) {
		pinfo->port.line = line;
		pinfo->port.flags = UPF_BOOT_AUTOCONF;
	}

	if (!(r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs")))
		return -EINVAL;
	mem = (u32)ioremap(r->start, r->end - r->start + 1);

	if (!(r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pram")))
		return -EINVAL;
	pram = (u32)ioremap(r->start, r->end - r->start + 1);

	if(idx > fsid_smc2_uart) {
		pinfo->sccp = (scc_t *)mem;
		pinfo->sccup = (scc_uart_t *)pram;
	} else {
		pinfo->smcp = (smc_t *)mem;
		pinfo->smcup = (smc_uart_t *)pram;
	}
	pinfo->tx_nrfifos = pdata->tx_num_fifo;
	pinfo->tx_fifosize = pdata->tx_buf_size;

	pinfo->rx_nrfifos = pdata->rx_num_fifo;
	pinfo->rx_fifosize = pdata->rx_buf_size;

	pinfo->port.uartclk = pdata->uart_clk;
	pinfo->port.mapbase = (unsigned long)mem;
	pinfo->port.irq = platform_get_irq(pdev, 0);

	return 0;
}