diff options
Diffstat (limited to 'arch/arm/mach-davinci/serial.c')
-rw-r--r-- | arch/arm/mach-davinci/serial.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/arch/arm/mach-davinci/serial.c b/arch/arm/mach-davinci/serial.c index f2625814c3c..2bc74c2a8d4 100644 --- a/arch/arm/mach-davinci/serial.c +++ b/arch/arm/mach-davinci/serial.c @@ -73,13 +73,11 @@ static void __init davinci_serial_reset(struct plat_serial8250_port *p) /* Enable UART clock and obtain its rate */ int __init davinci_serial_setup_clk(unsigned instance, unsigned int *rate) { - char name[16]; struct clk *clk; struct davinci_soc_info *soc_info = &davinci_soc_info; - struct device *dev = &soc_info->serial_dev->dev; + struct device *dev = &soc_info->serial_dev[instance].dev; - sprintf(name, "uart%d", instance); - clk = clk_get(dev, name); + clk = clk_get(dev, NULL); if (IS_ERR(clk)) { pr_err("%s:%d: failed to get UART%d clock\n", __func__, __LINE__, instance); @@ -96,19 +94,25 @@ int __init davinci_serial_setup_clk(unsigned instance, unsigned int *rate) int __init davinci_serial_init(struct davinci_uart_config *info) { - int i, ret; + int i, ret = 0; 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; + struct device *dev; + struct plat_serial8250_port *p; /* * 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++) { + for (i = 0; soc_info->serial_dev[i].dev.platform_data != NULL; i++) { + dev = &soc_info->serial_dev[i].dev; + p = dev->platform_data; if (!(info->enabled_uarts & (1 << i))) continue; + ret = platform_device_register(&soc_info->serial_dev[i]); + if (ret) + continue; + ret = davinci_serial_setup_clk(i, &p->uartclk); if (ret) continue; @@ -125,6 +129,5 @@ int __init davinci_serial_init(struct davinci_uart_config *info) if (p->membase && p->type != PORT_AR7) davinci_serial_reset(p); } - - return platform_device_register(soc_info->serial_dev); + return ret; } |