return rate;
     
                req->rate = rate;
 ----   } else if (core->flags & CLK_SET_RATE_PARENT) {
 ----           return clk_core_round_rate_nolock(parent, req);
        } else {
 ----           req->rate = core->rate;
 ++++           return -EINVAL;
 + ++   }
 + ++
 + ++   return 0;
 + ++}
 + ++
 ++++static void clk_core_init_rate_req(struct clk_core * const core,
 ++++                              struct clk_rate_request *req)
 ++++{
 ++++   struct clk_core *parent;
 ++++
 ++++   if (WARN_ON(!core || !req))
 ++++           return;
 ++++
 ++++   parent = core->parent;
 ++++   if (parent) {
 ++++           req->best_parent_hw = parent->hw;
 ++++           req->best_parent_rate = parent->rate;
 ++++   } else {
 ++++           req->best_parent_hw = NULL;
 ++++           req->best_parent_rate = 0;
  +     }
 ++++}
 ++++
 ++++static bool clk_core_can_round(struct clk_core * const core)
 ++++{
 ++++   if (core->ops->determine_rate || core->ops->round_rate)
 ++++           return true;
 ++++
 ++++   return false;
 ++++}
 ++++
 ++++static int clk_core_round_rate_nolock(struct clk_core *core,
 ++++                                 struct clk_rate_request *req)
 ++++{
 ++++   lockdep_assert_held(&prepare_lock);
  +  
 ++++   if (!core)
 ++++           return 0;
 ++++
 ++++   clk_core_init_rate_req(core, req);
 ++++
 ++++   if (clk_core_can_round(core))
 ++++           return clk_core_determine_round_nolock(core, req);
 ++++   else if (core->flags & CLK_SET_RATE_PARENT)
 ++++           return clk_core_round_rate_nolock(core->parent, req);
 ++++
 ++++   req->rate = core->rate;
  +     return 0;
  +  }
  +  
     /**
      * __clk_determine_rate - get the closest rate actually supported by a clock
      * @hw: determine the rate of this clock