diff options
Diffstat (limited to 'drivers/serial/sunsu.c')
| -rw-r--r-- | drivers/serial/sunsu.c | 13 | 
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/serial/sunsu.c b/drivers/serial/sunsu.c index 234459c2f01..ffbf4553f66 100644 --- a/drivers/serial/sunsu.c +++ b/drivers/serial/sunsu.c @@ -1500,20 +1500,25 @@ out_unmap:  static int __devexit su_remove(struct of_device *op)  {  	struct uart_sunsu_port *up = dev_get_drvdata(&op->dev); +	bool kbdms = false;  	if (up->su_type == SU_PORT_MS || -	    up->su_type == SU_PORT_KBD) { +	    up->su_type == SU_PORT_KBD) +		kbdms = true; + +	if (kbdms) {  #ifdef CONFIG_SERIO  		serio_unregister_port(&up->serio);  #endif -		kfree(up); -	} else if (up->port.type != PORT_UNKNOWN) { +	} else if (up->port.type != PORT_UNKNOWN)  		uart_remove_one_port(&sunsu_reg, &up->port); -	}  	if (up->port.membase)  		of_iounmap(&op->resource[0], up->port.membase, up->reg_size); +	if (kbdms) +		kfree(up); +  	dev_set_drvdata(&op->dev, NULL);  	return 0;  |