diff options
Diffstat (limited to 'drivers/tty/serial/sunsu.c')
| -rw-r--r-- | drivers/tty/serial/sunsu.c | 21 | 
1 files changed, 9 insertions, 12 deletions
| diff --git a/drivers/tty/serial/sunsu.c b/drivers/tty/serial/sunsu.c index e343d667085..451687cb968 100644 --- a/drivers/tty/serial/sunsu.c +++ b/drivers/tty/serial/sunsu.c @@ -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; |