• Maxime Ripard's avatar
    clk: Always clamp the rounded rate · 948fb096
    Maxime Ripard authored
    The current core while setting the min and max rate properly in the
    clk_request structure will not make sure that the requested rate is
    within these boundaries, leaving it to each and every driver to make
    sure it is.
    
    It's not clear if this was on purpose or not, but this introduces some
    inconsistencies within the API.
    
    For example, a user setting a range and then calling clk_round_rate()
    with a value outside of that range will get the same value back
    (ignoring any driver adjustements), effectively ignoring the range that
    was just set.
    
    Another one, arguably worse, is that it also makes clk_round_rate() and
    clk_set_rate() behave differently if there's a range and the rate being
    used for both is outside that range. As we have seen, the rate will be
    returned unchanged by clk_round_rate(), but clk_set_rate() will error
    out returning -EINVAL.
    
    Let's make sure the framework will always clamp the rate to the current
    range found on the clock, which will fix both these inconsistencies.
    Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
    Link: https://lore.kernel.org/r/20220225143534.405820-5-maxime@cerno.techSigned-off-by: default avatarStephen Boyd <sboyd@kernel.org>
    948fb096
clk.c 130 KB