}
 EXPORT_SYMBOL_GPL(clk_get_rate);
 
-static u8 clk_fetch_parent_index(struct clk *clk, struct clk *parent)
+static int clk_fetch_parent_index(struct clk *clk, struct clk *parent)
 {
-       u8 i;
+       int i;
 
-       if (!clk->parents)
+       if (!clk->parents) {
                clk->parents = kzalloc((sizeof(struct clk*) * clk->num_parents),
                                                                GFP_KERNEL);
+               if (!clk->parents)
+                       return -ENOMEM;
+       }
 
        /*
         * find index of new parent clock using cached parent ptrs,
         */
        for (i = 0; i < clk->num_parents; i++) {
                if (clk->parents && clk->parents[i] == parent)
-                       break;
+                       return i;
                else if (!strcmp(clk->parent_names[i], parent->name)) {
                        if (clk->parents)
                                clk->parents[i] = __clk_lookup(parent->name);
-                       break;
+                       return i;
                }
        }
 
-       return i;
+       return -EINVAL;
 }
 
 static void clk_reparent(struct clk *clk, struct clk *new_parent)
        struct clk *old_parent, *parent;
        unsigned long best_parent_rate = 0;
        unsigned long new_rate;
-       u8 p_index = 0;
+       int p_index = 0;
 
        /* sanity */
        if (IS_ERR_OR_NULL(clk))
        /* try finding the new parent index */
        if (parent) {
                p_index = clk_fetch_parent_index(clk, parent);
-               if (p_index == clk->num_parents) {
+               if (p_index < 0) {
                        pr_debug("%s: clk %s can not be parent of clk %s\n",
                                 __func__, parent->name, clk->name);
                        return NULL;
 int clk_set_parent(struct clk *clk, struct clk *parent)
 {
        int ret = 0;
-       u8 p_index = 0;
+       int p_index = 0;
        unsigned long p_rate = 0;
 
        if (!clk)
        if (parent) {
                p_index = clk_fetch_parent_index(clk, parent);
                p_rate = parent->rate;
-               if (p_index == clk->num_parents) {
+               if (p_index < 0) {
                        pr_debug("%s: clk %s can not be parent of clk %s\n",
                                        __func__, parent->name, clk->name);
-                       ret = -EINVAL;
+                       ret = p_index;
                        goto out;
                }
        }