const char * const *parent_names, u8 num_parents,
                unsigned gpio, bool active_low)
 {
-       return clk_register_gpio_gate(NULL, name, parent_names[0],
-                       gpio, active_low, 0);
+       return clk_register_gpio_gate(NULL, name, parent_names ?
+                       parent_names[0] : NULL, gpio, active_low, 0);
 }
 
 static struct clk *of_clk_gpio_mux_delayed_register_get(const char *name,
        if (!data)
                return;
 
-       parent_names = kcalloc(num_parents, sizeof(char *), GFP_KERNEL);
-       if (!parent_names) {
-               kfree(data);
-               return;
+       if (num_parents) {
+               parent_names = kcalloc(num_parents, sizeof(char *), GFP_KERNEL);
+               if (!parent_names) {
+                       kfree(data);
+                       return;
+               }
+
+               for (i = 0; i < num_parents; i++)
+                       parent_names[i] = of_clk_get_parent_name(node, i);
+       } else {
+               parent_names = NULL;
        }
 
-       for (i = 0; i < num_parents; i++)
-               parent_names[i] = of_clk_get_parent_name(node, i);
-
        data->num_parents = num_parents;
        data->parent_names = parent_names;
        data->node = node;