serial: max310x: Using resource-managed function for GPIO
authorAlexander Shiyan <shc_work@mail.ru>
Tue, 7 Jun 2016 15:59:23 +0000 (18:59 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 25 Jun 2016 20:55:35 +0000 (13:55 -0700)
Use resource managed functions devm_gpiochip_add_data() to make
error & exit path a bit simpler.

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/max310x.c

index bf6e3e08ec675fd3cda9b4b77e9f8a85c3baf5f5..6e2edbb942d6e50c40e9441a2cf3e0d8f5fc3b53 100644 (file)
@@ -1193,9 +1193,11 @@ static int max310x_probe(struct device *dev, struct max310x_devtype *devtype,
        s->gpio.base            = -1;
        s->gpio.ngpio           = devtype->nr * 4;
        s->gpio.can_sleep       = 1;
-       ret = gpiochip_add_data(&s->gpio, s);
-       if (ret)
-               goto out_uart;
+       ret = devm_gpiochip_add_data(dev, &s->gpio, s);
+       if (ret) {
+               uart_unregister_driver(&s->uart);
+               goto out_clk;
+       }
 #endif
 
        mutex_init(&s->mutex);
@@ -1244,11 +1246,6 @@ static int max310x_probe(struct device *dev, struct max310x_devtype *devtype,
 
        mutex_destroy(&s->mutex);
 
-#ifdef CONFIG_GPIOLIB
-       gpiochip_remove(&s->gpio);
-
-out_uart:
-#endif
        uart_unregister_driver(&s->uart);
 
 out_clk:
@@ -1262,10 +1259,6 @@ static int max310x_remove(struct device *dev)
        struct max310x_port *s = dev_get_drvdata(dev);
        int i;
 
-#ifdef CONFIG_GPIOLIB
-       gpiochip_remove(&s->gpio);
-#endif
-
        for (i = 0; i < s->uart.nr; i++) {
                cancel_work_sync(&s->p[i].tx_work);
                cancel_work_sync(&s->p[i].md_work);