]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
clk: also handle ENOENT in *_optional functions
authorYang Xiwen <forbidden405@outlook.com>
Thu, 17 Aug 2023 17:04:02 +0000 (01:04 +0800)
committerSean Anderson <seanga2@gmail.com>
Wed, 1 Nov 2023 19:14:51 +0000 (15:14 -0400)
If the device does not specify any clocks in device tree, these
functions will return PTR_ERR(-ENOENT). This is not the intended
behavior and does not comply with linux kernel CCF. Fix that by
returning NULL under such circumstances instead.

Signed-off-by: Yang Xiwen <forbidden405@outlook.com>
Reviewed-by: Sean Anderson <seanga2@gmail.com>
Link: https://lore.kernel.org/r/20230818-clk-fix-v1-3-49ec18f820bf@outlook.com
include/clk.h

index a342297007b641bf798ce78a4ec9baf9a52bddb2..249c0e0ab4252a713ada78fb3736a102a1b742a7 100644 (file)
@@ -223,9 +223,11 @@ struct clk *devm_clk_get(struct udevice *dev, const char *id);
 static inline struct clk *devm_clk_get_optional(struct udevice *dev,
                                                const char *id)
 {
+       int ret;
        struct clk *clk = devm_clk_get(dev, id);
 
-       if (PTR_ERR(clk) == -ENODATA)
+       ret = PTR_ERR(clk);
+       if (ret == -ENODATA || ret == -ENOENT)
                return NULL;
 
        return clk;
@@ -335,7 +337,7 @@ static inline int clk_get_by_name_optional(struct udevice *dev,
        int ret;
 
        ret = clk_get_by_name(dev, name, clk);
-       if (ret == -ENODATA)
+       if (ret == -ENODATA || ret == -ENOENT)
                return 0;
 
        return ret;
@@ -359,7 +361,7 @@ static inline int clk_get_by_name_nodev_optional(ofnode node, const char *name,
        int ret;
 
        ret = clk_get_by_name_nodev(node, name, clk);
-       if (ret == -ENODATA)
+       if (ret == -ENODATA || ret == -ENOENT)
                return 0;
 
        return ret;