On Fri, Feb 20, 2015 at 11:13:06AM -0800, Mike Turquette wrote:
Quoting Russell King - ARM Linux (2015-02-16 03:27:24)
On Fri, Feb 13, 2015 at 07:57:13PM +0100, Sascha Hauer wrote:
I agree that it's a bit odd, but I think it has to be like this. Consider that you request a rate of 100Hz, but the clock can only produce 99.5Hz, so due to rounding clk_round_rate() returns 99Hz. Now when you request 99Hz from clk_set_rate() the 99.5Hz value can't be used because it's too high.
Math rounding rules normally state that anything of .5 and greater should be rounded up, not rounded down. So, for 99.5Hz, you really ought to be returning 100Hz, not 99Hz.
However, you do have a point for 99.4Hz, which would be returned as 99Hz, and when set, it would result in something which isn't 99.4Hz.
More practically, this again raises the issue of whether or not unsigned long rate should be in millihertz or something other than hertz.
You still get the same issue if it's millihertz. Take 10 2/3rds Hz. Is 10.666 Hz less than 10 2/3rds Hz?