|
@@ -968,6 +968,7 @@ static struct uart_ops sunsu_pops = {
|
|
|
#define UART_NR 4
|
|
|
|
|
|
static struct uart_sunsu_port sunsu_ports[UART_NR];
|
|
|
+static int nr_inst; /* Number of already registered ports */
|
|
|
|
|
|
#ifdef CONFIG_SERIO
|
|
|
|
|
@@ -1337,13 +1338,8 @@ static int __init sunsu_console_setup(struct console *co, char *options)
|
|
|
printk("Console: ttyS%d (SU)\n",
|
|
|
(sunsu_reg.minor - 64) + co->index);
|
|
|
|
|
|
- /*
|
|
|
- * Check whether an invalid uart number has been specified, and
|
|
|
- * if so, search for the first available port that does have
|
|
|
- * console support.
|
|
|
- */
|
|
|
- if (co->index >= UART_NR)
|
|
|
- co->index = 0;
|
|
|
+ if (co->index > nr_inst)
|
|
|
+ return -ENODEV;
|
|
|
port = &sunsu_ports[co->index].port;
|
|
|
|
|
|
/*
|
|
@@ -1408,7 +1404,6 @@ static enum su_type su_get_type(struct device_node *dp)
|
|
|
|
|
|
static int su_probe(struct platform_device *op)
|
|
|
{
|
|
|
- static int inst;
|
|
|
struct device_node *dp = op->dev.of_node;
|
|
|
struct uart_sunsu_port *up;
|
|
|
struct resource *rp;
|
|
@@ -1418,16 +1413,16 @@ static int su_probe(struct platform_device *op)
|
|
|
|
|
|
type = su_get_type(dp);
|
|
|
if (type == SU_PORT_PORT) {
|
|
|
- if (inst >= UART_NR)
|
|
|
+ if (nr_inst >= UART_NR)
|
|
|
return -EINVAL;
|
|
|
- up = &sunsu_ports[inst];
|
|
|
+ up = &sunsu_ports[nr_inst];
|
|
|
} else {
|
|
|
up = kzalloc(sizeof(*up), GFP_KERNEL);
|
|
|
if (!up)
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
- up->port.line = inst;
|
|
|
+ up->port.line = nr_inst;
|
|
|
|
|
|
spin_lock_init(&up->port.lock);
|
|
|
|
|
@@ -1461,6 +1456,8 @@ static int su_probe(struct platform_device *op)
|
|
|
}
|
|
|
dev_set_drvdata(&op->dev, up);
|
|
|
|
|
|
+ nr_inst++;
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1488,7 +1485,7 @@ static int su_probe(struct platform_device *op)
|
|
|
|
|
|
dev_set_drvdata(&op->dev, up);
|
|
|
|
|
|
- inst++;
|
|
|
+ nr_inst++;
|
|
|
|
|
|
return 0;
|
|
|
|