Re: [PATCH v4 05/11] clk: Introduce clk-tps68470 driver
From: Hans de Goede
Date: Mon Nov 01 2021 - 07:00:57 EST
Hi,
On 11/1/21 11:42, Andy Shevchenko wrote:
> On Mon, Nov 1, 2021 at 12:27 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote:
>> On 10/25/21 13:24, Andy Shevchenko wrote:
>>> On Mon, Oct 25, 2021 at 12:42 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote:
>
> ...
>
>>>> + for (i = 0; i < ARRAY_SIZE(clk_freqs); i++) {
>>>> + diff = clk_freqs[i].freq - rate;
>>>> + if (diff == 0)
>>>> + return i;
>>>
>>>> + diff = abs(diff);
>>>
>>> This needs a comment why higher (lower) frequency is okay.
>>
>> This function is called in 2 places:
>>
>> 1. From tps68470_clk_round_rate(), where higher/lower clearly is ok,
>> (see the function name) so no comment needed.
>>
>> 2. From tps68470_clk_set_rate() where it is NOT ok and this is
>> enforced in the caller:
>>
>> unsigned int idx = tps68470_clk_cfg_lookup(rate);
>>
>> if (rate != clk_freqs[idx].freq)
>> return -EINVAL;
>>
>> This is not easy to describe in a comment, while being obvious
>> if someone looking at this actually looks at the callers.
>
> Hmm... but try your best. :-)
Ok I will :)
> While at it, recently I have learned about util_macros.h. Any use of it here?
> Or amending it there and re-using it here?
That only works on straight integer/long/float arrays, not
on arrays of structs where we are looking for a specific member of
the struct to be closest. And reworking that to also work on
structs is really (really really) out of scope for this patch-set.
Regards,
Hans
>
>>>> + if (diff < best_diff) {
>>>> + best_diff = diff;
>>>> + best_idx = i;
>>>> + }
>>>> + }
>