]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
platform/x86: lenovo-yoga-tab2-pro-1380-fastcharger: Use devm_pinctrl_register_mappings()
authorThomas Richard <thomas.richard@bootlin.com>
Mon, 9 Jun 2025 12:34:49 +0000 (14:34 +0200)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Fri, 13 Jun 2025 09:33:23 +0000 (12:33 +0300)
Use devm_pinctrl_register_mappings(), so the core automatically unregisters
the pinctrl mappings. It makes the code easier to read.

Signed-off-by: Thomas Richard <thomas.richard@bootlin.com>
Reviewed-by: Hans de Goede <hansg@kernel.org>
Link: https://lore.kernel.org/r/20250609-lenovo-yoga-tab2-pro-1380-fastcharger-devm-pinctrl-register-mappings-v1-1-fb601f2b80f6@bootlin.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/lenovo/yoga-tab2-pro-1380-fastcharger.c

index b3fd6a35052a22fb1afe362779623527fc8607e7..1b33c977f6d76f01ec050ee251c626eb340d5e64 100644 (file)
@@ -240,30 +240,25 @@ static int yt2_1380_fc_pdev_probe(struct platform_device *pdev)
        int ret;
 
        /* Register pinctrl mappings for setting the UART3 pins mode */
-       ret = pinctrl_register_mappings(yt2_1380_fc_pinctrl_map,
-                                       ARRAY_SIZE(yt2_1380_fc_pinctrl_map));
+       ret = devm_pinctrl_register_mappings(&pdev->dev, yt2_1380_fc_pinctrl_map,
+                                            ARRAY_SIZE(yt2_1380_fc_pinctrl_map));
        if (ret)
                return ret;
 
        /* And create the serdev to talk to the charger over the UART3 pins */
        ctrl_dev = get_serdev_controller("PNP0501", "1", 0, YT2_1380_FC_SERDEV_CTRL);
-       if (IS_ERR(ctrl_dev)) {
-               ret = PTR_ERR(ctrl_dev);
-               goto out_pinctrl_unregister_mappings;
-       }
+       if (IS_ERR(ctrl_dev))
+               return PTR_ERR(ctrl_dev);
 
        serdev = serdev_device_alloc(to_serdev_controller(ctrl_dev));
        put_device(ctrl_dev);
-       if (!serdev) {
-               ret = -ENOMEM;
-               goto out_pinctrl_unregister_mappings;
-       }
+       if (!serdev)
+               return -ENOMEM;
 
        ret = serdev_device_add(serdev);
        if (ret) {
-               dev_err_probe(&pdev->dev, ret, "adding serdev\n");
                serdev_device_put(serdev);
-               goto out_pinctrl_unregister_mappings;
+               return dev_err_probe(&pdev->dev, ret, "adding serdev\n");
        }
 
        /*
@@ -273,20 +268,15 @@ static int yt2_1380_fc_pdev_probe(struct platform_device *pdev)
        ret = device_driver_attach(&yt2_1380_fc_serdev_driver.driver, &serdev->dev);
        if (ret) {
                /* device_driver_attach() maps EPROBE_DEFER to EAGAIN, map it back */
-               ret = (ret == -EAGAIN) ? -EPROBE_DEFER : ret;
-               dev_err_probe(&pdev->dev, ret, "attaching serdev driver\n");
-               goto out_serdev_device_remove;
+               serdev_device_remove(serdev);
+               return dev_err_probe(&pdev->dev,
+                                    (ret == -EAGAIN) ? -EPROBE_DEFER : ret,
+                                    "attaching serdev driver\n");
        }
 
        /* So that yt2_1380_fc_pdev_remove() can remove the serdev */
        platform_set_drvdata(pdev, serdev);
        return 0;
-
-out_serdev_device_remove:
-       serdev_device_remove(serdev);
-out_pinctrl_unregister_mappings:
-       pinctrl_unregister_mappings(yt2_1380_fc_pinctrl_map);
-       return ret;
 }
 
 static void yt2_1380_fc_pdev_remove(struct platform_device *pdev)
@@ -294,7 +284,6 @@ static void yt2_1380_fc_pdev_remove(struct platform_device *pdev)
        struct serdev_device *serdev = platform_get_drvdata(pdev);
 
        serdev_device_remove(serdev);
-       pinctrl_unregister_mappings(yt2_1380_fc_pinctrl_map);
 }
 
 static struct platform_driver yt2_1380_fc_pdev_driver = {