int ret = 0;
 
        if (clk == NULL || IS_ERR(clk))
-               return -ENODEV;
+               return -EINVAL;
 
        spin_lock_irqsave(&clockfw_lock, flags);
        if (arch_clock->clk_enable)
        unsigned long flags;
        long ret = 0;
 
+       if (clk == NULL || IS_ERR(clk))
+               return ret;
+
        spin_lock_irqsave(&clockfw_lock, flags);
        if (arch_clock->clk_round_rate)
                ret = arch_clock->clk_round_rate(clk, rate);
 int clk_set_rate(struct clk *clk, unsigned long rate)
 {
        unsigned long flags;
-       int ret = 0;
+       int ret = -EINVAL;
+
+       if (clk == NULL || IS_ERR(clk))
+               return ret;
 
        spin_lock_irqsave(&clockfw_lock, flags);
        if (arch_clock->clk_set_rate)
 int clk_set_parent(struct clk *clk, struct clk *parent)
 {
        unsigned long flags;
-       int ret = 0;
+       int ret = -EINVAL;
+
+       if (clk == NULL || IS_ERR(clk) || parent == NULL || IS_ERR(parent))
+               return ret;
 
        spin_lock_irqsave(&clockfw_lock, flags);
        if (arch_clock->clk_set_parent)
        unsigned long flags;
        struct clk * ret = NULL;
 
+       if (clk == NULL || IS_ERR(clk))
+               return ret;
+
        spin_lock_irqsave(&clockfw_lock, flags);
        if (arch_clock->clk_get_parent)
                ret = arch_clock->clk_get_parent(clk);
 /* Used for clocks that always have same value as the parent clock */
 void followparent_recalc(struct clk *clk)
 {
+       if (clk == NULL || IS_ERR(clk))
+               return;
+
        clk->rate = clk->parent->rate;
 }
 
 {
        struct clk *clkp;
 
+       if (tclk == NULL || IS_ERR(tclk))
+               return;
+
        list_for_each_entry(clkp, &clocks, node) {
                if (likely(clkp->parent != tclk))
                        continue;
 
 int clk_register(struct clk *clk)
 {
+       if (clk == NULL || IS_ERR(clk))
+               return -EINVAL;
+
        mutex_lock(&clocks_mutex);
        list_add(&clk->node, &clocks);
        if (clk->init)
 
 void clk_unregister(struct clk *clk)
 {
+       if (clk == NULL || IS_ERR(clk))
+               return;
+
        mutex_lock(&clocks_mutex);
        list_del(&clk->node);
        mutex_unlock(&clocks_mutex);
 {
        unsigned long flags;
 
+       if (clk == NULL || IS_ERR(clk))
+               return;
+
        spin_lock_irqsave(&clockfw_lock, flags);
        if (arch_clock->clk_deny_idle)
                arch_clock->clk_deny_idle(clk);
 {
        unsigned long flags;
 
+       if (clk == NULL || IS_ERR(clk))
+               return;
+
        spin_lock_irqsave(&clockfw_lock, flags);
        if (arch_clock->clk_allow_idle)
                arch_clock->clk_allow_idle(clk);