git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'topic/jack' into for-linus
[pandora-kernel.git]
/
arch
/
arm
/
mach-omap2
/
serial.c
diff --git
a/arch/arm/mach-omap2/serial.c
b/arch/arm/mach-omap2/serial.c
index
da77930
..
3771254
100644
(file)
--- a/
arch/arm/mach-omap2/serial.c
+++ b/
arch/arm/mach-omap2/serial.c
@@
-115,7
+115,6
@@
static struct plat_serial8250_port serial_platform_data2[] = {
}
};
}
};
-#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
static struct plat_serial8250_port serial_platform_data3[] = {
{
.irq = 70,
static struct plat_serial8250_port serial_platform_data3[] = {
{
.irq = 70,
@@
-128,23
+127,12
@@
static struct plat_serial8250_port serial_platform_data3[] = {
}
};
}
};
-static inline void omap2_set_globals_uart4(struct omap_globals *omap2_globals)
-{
- serial_platform_data3[0].mapbase = omap2_globals->uart4_phys;
-}
-#else
-static inline void omap2_set_globals_uart4(struct omap_globals *omap2_globals)
-{
-}
-#endif
-
void __init omap2_set_globals_uart(struct omap_globals *omap2_globals)
{
serial_platform_data0[0].mapbase = omap2_globals->uart1_phys;
serial_platform_data1[0].mapbase = omap2_globals->uart2_phys;
serial_platform_data2[0].mapbase = omap2_globals->uart3_phys;
void __init omap2_set_globals_uart(struct omap_globals *omap2_globals)
{
serial_platform_data0[0].mapbase = omap2_globals->uart1_phys;
serial_platform_data1[0].mapbase = omap2_globals->uart2_phys;
serial_platform_data2[0].mapbase = omap2_globals->uart3_phys;
- if (cpu_is_omap3630() || cpu_is_omap44xx())
- omap2_set_globals_uart4(omap2_globals);
+ serial_platform_data3[0].mapbase = omap2_globals->uart4_phys;
}
static inline unsigned int __serial_read_reg(struct uart_port *up,
}
static inline unsigned int __serial_read_reg(struct uart_port *up,
@@
-550,7
+538,7
@@
static ssize_t sleep_timeout_store(struct device *dev,
unsigned int value;
if (sscanf(buf, "%u", &value) != 1) {
unsigned int value;
if (sscanf(buf, "%u", &value) != 1) {
-
printk(KERN_ERR
"sleep_timeout_store: Invalid value\n");
+
dev_err(dev,
"sleep_timeout_store: Invalid value\n");
return -EINVAL;
}
return -EINVAL;
}
@@
-664,27
+652,33
@@
void __init omap_serial_early_init(void)
struct device *dev = &pdev->dev;
struct plat_serial8250_port *p = dev->platform_data;
struct device *dev = &pdev->dev;
struct plat_serial8250_port *p = dev->platform_data;
+ /* Don't map zero-based physical address */
+ if (p->mapbase == 0) {
+ dev_warn(dev, "no physical address for uart#%d,"
+ " so skipping early_init...\n", i);
+ continue;
+ }
/*
* Module 4KB + L4 interconnect 4KB
* Static mapping, never released
*/
p->membase = ioremap(p->mapbase, SZ_8K);
if (!p->membase) {
/*
* Module 4KB + L4 interconnect 4KB
* Static mapping, never released
*/
p->membase = ioremap(p->mapbase, SZ_8K);
if (!p->membase) {
-
printk(KERN_ERR
"ioremap failed for uart%i\n", i + 1);
+
dev_err(dev,
"ioremap failed for uart%i\n", i + 1);
continue;
}
sprintf(name, "uart%d_ick", i + 1);
uart->ick = clk_get(NULL, name);
if (IS_ERR(uart->ick)) {
continue;
}
sprintf(name, "uart%d_ick", i + 1);
uart->ick = clk_get(NULL, name);
if (IS_ERR(uart->ick)) {
-
printk(KERN_ERR
"Could not get uart%d_ick\n", i + 1);
+
dev_err(dev,
"Could not get uart%d_ick\n", i + 1);
uart->ick = NULL;
}
sprintf(name, "uart%d_fck", i+1);
uart->fck = clk_get(NULL, name);
if (IS_ERR(uart->fck)) {
uart->ick = NULL;
}
sprintf(name, "uart%d_fck", i+1);
uart->fck = clk_get(NULL, name);
if (IS_ERR(uart->fck)) {
-
printk(KERN_ERR
"Could not get uart%d_fck\n", i + 1);
+
dev_err(dev,
"Could not get uart%d_fck\n", i + 1);
uart->fck = NULL;
}
uart->fck = NULL;
}
@@
-727,6
+721,13
@@
void __init omap_serial_init_port(int port)
pdev = &uart->pdev;
dev = &pdev->dev;
pdev = &uart->pdev;
dev = &pdev->dev;
+ /* Don't proceed if there's no clocks available */
+ if (unlikely(!uart->ick || !uart->fck)) {
+ WARN(1, "%s: can't init uart%d, no clocks available\n",
+ kobject_name(&dev->kobj), port);
+ return;
+ }
+
omap_uart_enable_clocks(uart);
omap_uart_reset(uart);
omap_uart_enable_clocks(uart);
omap_uart_reset(uart);