return clkout_rates[flags];
 }
 
-static long nct3018y_clkout_round_rate(struct clk_hw *hw, unsigned long rate,
-                                      unsigned long *prate)
+static int nct3018y_clkout_determine_rate(struct clk_hw *hw,
+                                         struct clk_rate_request *req)
 {
        int i;
 
        for (i = 0; i < ARRAY_SIZE(clkout_rates); i++)
-               if (clkout_rates[i] <= rate)
-                       return clkout_rates[i];
+               if (clkout_rates[i] <= req->rate) {
+                       req->rate = clkout_rates[i];
 
-       return clkout_rates[0];
+                       return 0;
+               }
+
+       req->rate = clkout_rates[0];
+
+       return 0;
 }
 
 static int nct3018y_clkout_set_rate(struct clk_hw *hw, unsigned long rate,
        .unprepare = nct3018y_clkout_unprepare,
        .is_prepared = nct3018y_clkout_is_prepared,
        .recalc_rate = nct3018y_clkout_recalc_rate,
-       .round_rate = nct3018y_clkout_round_rate,
+       .determine_rate = nct3018y_clkout_determine_rate,
        .set_rate = nct3018y_clkout_set_rate,
 };