| From ab0dd7968ffa47d8749acd7b7279edea39c9e0aa Mon Sep 17 00:00:00 2001 |
| From: Mao Wenan <maowenan@huawei.com> |
| Date: Fri, 8 Mar 2019 22:08:31 +0800 |
| Subject: sc16is7xx: missing unregister/delete driver on error in |
| sc16is7xx_init() |
| |
| [ Upstream commit ac0cdb3d990108df795b676cd0d0e65ac34b2273 ] |
| |
| Add the missing uart_unregister_driver() and i2c_del_driver() before return |
| from sc16is7xx_init() in the error handling case. |
| |
| Signed-off-by: Mao Wenan <maowenan@huawei.com> |
| Reviewed-by: Vladimir Zapolskiy <vz@mleia.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org> |
| --- |
| drivers/tty/serial/sc16is7xx.c | 12 ++++++++++-- |
| 1 file changed, 10 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c |
| index a79f18edf2bd..e48523da47ac 100644 |
| --- a/drivers/tty/serial/sc16is7xx.c |
| +++ b/drivers/tty/serial/sc16is7xx.c |
| @@ -1483,7 +1483,7 @@ static int __init sc16is7xx_init(void) |
| ret = i2c_add_driver(&sc16is7xx_i2c_uart_driver); |
| if (ret < 0) { |
| pr_err("failed to init sc16is7xx i2c --> %d\n", ret); |
| - return ret; |
| + goto err_i2c; |
| } |
| #endif |
| |
| @@ -1491,10 +1491,18 @@ static int __init sc16is7xx_init(void) |
| ret = spi_register_driver(&sc16is7xx_spi_uart_driver); |
| if (ret < 0) { |
| pr_err("failed to init sc16is7xx spi --> %d\n", ret); |
| - return ret; |
| + goto err_spi; |
| } |
| #endif |
| return ret; |
| + |
| +err_spi: |
| +#ifdef CONFIG_SERIAL_SC16IS7XX_I2C |
| + i2c_del_driver(&sc16is7xx_i2c_uart_driver); |
| +#endif |
| +err_i2c: |
| + uart_unregister_driver(&sc16is7xx_uart); |
| + return ret; |
| } |
| module_init(sc16is7xx_init); |
| |
| -- |
| 2.19.1 |
| |