]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
clk: sunxi: improve error reporting for the mux clock
authorAndre Przywara <andre.przywara@arm.com>
Mon, 1 Feb 2016 17:39:27 +0000 (17:39 +0000)
committerMaxime Ripard <maxime.ripard@free-electrons.com>
Tue, 2 Feb 2016 18:02:00 +0000 (19:02 +0100)
clk_register_mux returns a pointer wrapped error value in case of
failure, so a simple NULL check is not sufficient to catch errors.
Fix that and elaborate on the failure reason on the way. The whole
function does not return any error value, so silently failing may
leave users scratching their heads because the kernel does not
provide any clues on what's wrong.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
drivers/clk/sunxi/clk-sunxi.c

index da15f2b12ab2be9dbc3e9d9a7a83f5e14efffe22..2524d6f41b3b681a6c3d0bb6d937d28fc5b1752e 100644 (file)
@@ -627,17 +627,29 @@ static void __init sunxi_mux_clk_setup(struct device_node *node,
        reg = of_iomap(node, 0);
 
        i = of_clk_parent_fill(node, parents, SUNXI_MAX_PARENTS);
-       of_property_read_string(node, "clock-output-names", &clk_name);
+       if (of_property_read_string(node, "clock-output-names", &clk_name)) {
+               pr_warn("%s: could not read clock-output-names for \"%s\"\n",
+                       __func__, clk_name);
+               goto out_unmap;
+       }
 
        clk = clk_register_mux(NULL, clk_name, parents, i,
                               CLK_SET_RATE_PARENT, reg,
                               data->shift, SUNXI_MUX_GATE_WIDTH,
                               0, &clk_lock);
 
-       if (clk) {
-               of_clk_add_provider(node, of_clk_src_simple_get, clk);
-               clk_register_clkdev(clk, clk_name, NULL);
+       if (IS_ERR(clk)) {
+               pr_warn("%s: failed to register mux clock %s: %ld\n", __func__,
+                       clk_name, PTR_ERR(clk));
+               goto out_unmap;
        }
+
+       of_clk_add_provider(node, of_clk_src_simple_get, clk);
+       clk_register_clkdev(clk, clk_name, NULL);
+       return;
+
+out_unmap:
+       iounmap(reg);
 }