コード例 #1
0
int __init davinci_serial_init(struct davinci_uart_config *info)
{
	int i;
	char name[16];
	struct clk *uart_clk;
	struct davinci_soc_info *soc_info = &davinci_soc_info;
	struct device *dev = &soc_info->serial_dev->dev;
	struct plat_serial8250_port *p = dev->platform_data;

	/*
	 * Make sure the serial ports are muxed on at this point.
	 * You have to mux them off in device drivers later on if not needed.
	 */
	for (i = 0; p->flags; i++, p++) {
		if (!(info->enabled_uarts & (1 << i)))
			continue;

		sprintf(name, "uart%d", i);
		uart_clk = clk_get(dev, name);
		if (IS_ERR(uart_clk)) {
			printk(KERN_ERR "%s:%d: failed to get UART%d clock\n",
					__func__, __LINE__, i);
			continue;
		}

		clk_enable(uart_clk);
		p->uartclk = clk_get_rate(uart_clk);
		p->clk = uart_clk;

		if (!p->membase && p->mapbase) {
			p->membase = ioremap(p->mapbase, SZ_4K);

			if (p->membase)
				p->flags &= ~UPF_IOREMAP;
			else
				pr_err("uart regs ioremap failed\n");
		}

		if (p->membase && ((p->type != PORT_AR7) ||
					cpu_is_davinci_da850() ||
					cpu_is_davinci_da830()))
			davinci_serial_reset(p);
	}

	return platform_device_register(soc_info->serial_dev);
}
コード例 #2
0
ファイル: serial.c プロジェクト: ChineseDr/linux
int __init davinci_serial_init(struct platform_device *serial_dev)
{
    int i, ret = 0;
    struct device *dev;
    struct plat_serial8250_port *p;
    struct clk *clk;

    /*
     * Make sure the serial ports are muxed on at this point.
     * You have to mux them off in device drivers later on if not needed.
     */
    for (i = 0; serial_dev[i].dev.platform_data != NULL; i++) {
        dev = &serial_dev[i].dev;
        p = dev->platform_data;

        ret = platform_device_register(&serial_dev[i]);
        if (ret)
            continue;

        clk = clk_get(dev, NULL);
        if (IS_ERR(clk)) {
            pr_err("%s:%d: failed to get UART%d clock\n",
                   __func__, __LINE__, i);
            continue;
        }

        clk_prepare_enable(clk);

        p->uartclk = clk_get_rate(clk);

        if (!p->membase && p->mapbase) {
            p->membase = ioremap(p->mapbase, SZ_4K);

            if (p->membase)
                p->flags &= ~UPF_IOREMAP;
            else
                pr_err("uart regs ioremap failed\n");
        }

        if (p->membase && p->type != PORT_AR7)
            davinci_serial_reset(p);
    }
    return ret;
}
コード例 #3
0
ファイル: serial.c プロジェクト: Blackburn29/PsycoKernel
int __init davinci_serial_init(struct davinci_uart_config *info)
{
	int i;
	char name[16];
	struct clk *uart_clk;
	struct davinci_soc_info *soc_info = &davinci_soc_info;
	struct device *dev = &soc_info->serial_dev->dev;
	struct plat_serial8250_port *p = dev->platform_data;

	for (i = 0; p->flags; i++, p++) {
		if (!(info->enabled_uarts & (1 << i)))
			continue;

		sprintf(name, "uart%d", i);
		uart_clk = clk_get(dev, name);
		if (IS_ERR(uart_clk)) {
			printk(KERN_ERR "%s:%d: failed to get UART%d clock\n",
					__func__, __LINE__, i);
			continue;
		}

		clk_enable(uart_clk);
		p->uartclk = clk_get_rate(uart_clk);

		if (!p->membase && p->mapbase) {
			p->membase = ioremap(p->mapbase, SZ_4K);

			if (p->membase)
				p->flags &= ~UPF_IOREMAP;
			else
				pr_err("uart regs ioremap failed\n");
		}

		if (p->membase && p->type != PORT_AR7)
			davinci_serial_reset(p);
	}

	return platform_device_register(soc_info->serial_dev);
}
コード例 #4
0
ファイル: serial.c プロジェクト: 274914765/C
static int __init davinci_init(void)
{
    davinci_serial_reset(&serial_platform_data[0]);
    return platform_device_register(&serial_device);
}