int ret;
 
        opp = dev_pm_opp_find_freq_ceil(dev, &freq);
-       dev_pm_opp_put(opp);
+       if (!IS_ERR(opp))
+               dev_pm_opp_put(opp);
 
        for (i = 0; i < res->clks_num; i++) {
                if (IS_V6(core)) {
        /*TODO : divide this inst->load by work_route */
 
        opp = dev_pm_opp_find_freq_floor(dev, &max_freq);
-       dev_pm_opp_put(opp);
+       if (!IS_ERR(opp))
+               dev_pm_opp_put(opp);
 
        min_loaded_core(inst, &min_coreid, &min_load, false);
        min_loaded_core(inst, &min_lp_coreid, &min_lp_load, true);
        freq = max(freq_core1, freq_core2);
 
        opp = dev_pm_opp_find_freq_floor(dev, &max_freq);
-       dev_pm_opp_put(opp);
+       if (!IS_ERR(opp))
+               dev_pm_opp_put(opp);
 
        if (freq > max_freq) {
                dev_dbg(dev, VDBGL "requested clock rate: %lu scaling clock rate : %lu\n",
        }
 
        opp = dev_pm_opp_find_freq_ceil(dev, &freq);
-       dev_pm_opp_put(opp);
+       if (!IS_ERR(opp))
+               dev_pm_opp_put(opp);
 
 set_freq: