mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-20 08:22:39 +00:00
serial: samsung: Move uart_register_driver call to device probe
uart_register_driver call binds the driver to a specific device node through tty_register_driver call. This should typically happen during device probe call. In a multiplatform scenario, it is possible that multiple serial drivers are part of the kernel. Currently the driver registration fails if multiple serial drivers with same default major/minor numbers are included in the kernel. A typical case is observed with amba-pl011 and samsung-uart drivers. Signed-off-by: Tushar Behera <tushar.behera@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d4f6b412ec
commit
6f134c3c77
@ -1282,6 +1282,14 @@ static int s3c24xx_serial_probe(struct platform_device *pdev)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto probe_err;
|
goto probe_err;
|
||||||
|
|
||||||
|
if (!s3c24xx_uart_drv.state) {
|
||||||
|
ret = uart_register_driver(&s3c24xx_uart_drv);
|
||||||
|
if (ret < 0) {
|
||||||
|
pr_err("Failed to register Samsung UART driver\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dbg("%s: adding port\n", __func__);
|
dbg("%s: adding port\n", __func__);
|
||||||
uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);
|
uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);
|
||||||
platform_set_drvdata(pdev, &ourport->port);
|
platform_set_drvdata(pdev, &ourport->port);
|
||||||
@ -1321,6 +1329,8 @@ static int s3c24xx_serial_remove(struct platform_device *dev)
|
|||||||
uart_remove_one_port(&s3c24xx_uart_drv, port);
|
uart_remove_one_port(&s3c24xx_uart_drv, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uart_unregister_driver(&s3c24xx_uart_drv);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1820,35 +1830,7 @@ static struct platform_driver samsung_serial_driver = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* module initialisation code */
|
module_platform_driver(samsung_serial_driver);
|
||||||
|
|
||||||
static int __init s3c24xx_serial_modinit(void)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = uart_register_driver(&s3c24xx_uart_drv);
|
|
||||||
if (ret < 0) {
|
|
||||||
pr_err("Failed to register Samsung UART driver\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = platform_driver_register(&samsung_serial_driver);
|
|
||||||
if (ret < 0) {
|
|
||||||
pr_err("Failed to register platform driver\n");
|
|
||||||
uart_unregister_driver(&s3c24xx_uart_drv);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __exit s3c24xx_serial_modexit(void)
|
|
||||||
{
|
|
||||||
platform_driver_unregister(&samsung_serial_driver);
|
|
||||||
uart_unregister_driver(&s3c24xx_uart_drv);
|
|
||||||
}
|
|
||||||
|
|
||||||
module_init(s3c24xx_serial_modinit);
|
|
||||||
module_exit(s3c24xx_serial_modexit);
|
|
||||||
|
|
||||||
MODULE_ALIAS("platform:samsung-uart");
|
MODULE_ALIAS("platform:samsung-uart");
|
||||||
MODULE_DESCRIPTION("Samsung SoC Serial port driver");
|
MODULE_DESCRIPTION("Samsung SoC Serial port driver");
|
||||||
|
Loading…
Reference in New Issue
Block a user