]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: dsa: rzn1_a5psw: use devm to enable clocks
authorRosen Penev <rosenp@gmail.com>
Tue, 8 Jul 2025 01:41:44 +0000 (18:41 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 10 Jul 2025 13:41:02 +0000 (15:41 +0200)
The remove function has these in the wrong order. The switch should be
unregistered last. Simpler to use devm so that the right thing is done.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://patch.msgid.link/20250708014144.2514-3-rosenp@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/dsa/rzn1_a5psw.c

index df7466d4fe8f08dc16580a60768abd062cd40dfd..1635255f58e4bbd8fb21908cce332b9711691aaf 100644 (file)
@@ -1227,35 +1227,27 @@ static int a5psw_probe(struct platform_device *pdev)
        if (ret)
                return ret;
 
-       a5psw->hclk = devm_clk_get(dev, "hclk");
+       a5psw->hclk = devm_clk_get_enabled(dev, "hclk");
        if (IS_ERR(a5psw->hclk)) {
                dev_err(dev, "failed get hclk clock\n");
                ret = PTR_ERR(a5psw->hclk);
                goto free_pcs;
        }
 
-       a5psw->clk = devm_clk_get(dev, "clk");
+       a5psw->clk = devm_clk_get_enabled(dev, "clk");
        if (IS_ERR(a5psw->clk)) {
                dev_err(dev, "failed get clk_switch clock\n");
                ret = PTR_ERR(a5psw->clk);
                goto free_pcs;
        }
 
-       ret = clk_prepare_enable(a5psw->clk);
-       if (ret)
-               goto free_pcs;
-
-       ret = clk_prepare_enable(a5psw->hclk);
-       if (ret)
-               goto clk_disable;
-
        mdio = of_get_available_child_by_name(dev->of_node, "mdio");
        if (mdio) {
                ret = a5psw_probe_mdio(a5psw, mdio);
                of_node_put(mdio);
                if (ret) {
                        dev_err(dev, "Failed to register MDIO: %d\n", ret);
-                       goto hclk_disable;
+                       goto free_pcs;
                }
        }
 
@@ -1269,15 +1261,11 @@ static int a5psw_probe(struct platform_device *pdev)
        ret = dsa_register_switch(ds);
        if (ret) {
                dev_err(dev, "Failed to register DSA switch: %d\n", ret);
-               goto hclk_disable;
+               goto free_pcs;
        }
 
        return 0;
 
-hclk_disable:
-       clk_disable_unprepare(a5psw->hclk);
-clk_disable:
-       clk_disable_unprepare(a5psw->clk);
 free_pcs:
        a5psw_pcs_free(a5psw);
 
@@ -1293,8 +1281,6 @@ static void a5psw_remove(struct platform_device *pdev)
 
        dsa_unregister_switch(&a5psw->ds);
        a5psw_pcs_free(a5psw);
-       clk_disable_unprepare(a5psw->hclk);
-       clk_disable_unprepare(a5psw->clk);
 }
 
 static void a5psw_shutdown(struct platform_device *pdev)