From: Krzysztof Kozlowski <krzk@kernel.org>
To: Sam Winchenbach <sam.winchenbach@framepointer.org>
Cc: linux-kernel@vger.kernel.org, lars@metafoo.de,
Michael.Hennerich@analog.com, antoniu.miclaus@analog.com,
jic23@kernel.org, robh@kernel.org, krzk+dt@kernel.org,
conor+dt@kernel.org, linux-iio@vger.kernel.org,
devicetree@vger.kernel.org
Subject: Re: [PATCH v4 2/2] dt-bindings: iio: filter: Add lpf/hpf freq margins
Date: Mon, 3 Mar 2025 15:16:00 +0100 [thread overview]
Message-ID: <b3f98745-39c3-4b1f-a0e6-51e5138d840c@kernel.org> (raw)
In-Reply-To: <Z8WvKNcCnQI_UYZJ@65YTFL3.secure.tethers.com>
On 03/03/2025 14:31, Sam Winchenbach wrote:
>>> This prevents the situation where your fundamental frequency falls on, or close
>>> to, a corner frequency which could result in 3dB (half power) loss in your
>>> signal.
>>>
>>> This is all completely indepent of the high-pass filter.
>>
>> Description is confusing a bit, because it suggests the value sets the
>> corner frequency. It explicitly says this - "sets ... corner frequency"
>> and such meaning for properties we usually associate with the property
>> doing this. Here however corner frequency will be always set to rf_in
>> and you just adjust the value.
>>
>
> How about: "Sets the minimum distance (in Hz) between the fundamental
> frequency of `rf_in` and the corner frequency of the high-pass, input filter
> when operatred in 'auto' mode. The selected high-pass corner frequency will
> be less than, or equal to, `rf_in` - `hpf-margin-hz`. If not setting is found
> that satisfies this relationship the filter will be put into 'bypass'."
>
> Perhaps that is a bit more clear on the intention of this parameter?
Yes
>
>>>
>>>>
>>>>> them as separate controls but I am happy to put them into an array if that is
>>>>> the idiomatic approach to situations like this. That said, I am having a
>>>>> difficult time getting dt_binding_check to pass when I have an array of uint64.
>>>>>
>>>>> When listing two items, as in your example below, I get the following:
>>>>> adi,admv8818.example.dtb: admv8818@0: adi,filter-margins-hz: [[0, 30000000], [0, 30000000]] is too long
>>>>
>>>> Tricky to say without seeing your code. Magic crystal ball had
>>>> malfunction today.
>>>
>>> This is the property:
>>>
>>> adi,filter-margins-hz:
>>> items:
>>> - description: |
>>> The minimum distance, in Hz, between rf_in and the low-pass corner
>>> frequency when the device is used in "auto" mode. If the sum of
>>> rf_in and this value is greater than 18.85 GHz then the low-pass
>>> filter will be put into bypass mode, otherwise the closest corner
>>> frequency that is greater than or equal to the sum of rf_in plus this
>>> value will be used.
>>> minimum: 0
>>> maximum: 0xFFFFFFFFFFFFFFFF
>>> default: 0
>>> - description: |
>>> The minimum distance, in Hz, between rf_in and the high-pass corner
>>> frequency when the device is used in "auto" mode. If the difference
>>> between rf_in and this value is less than 1.75 GHz then the high-pass
>>> filter will be put into bypass mode, otherwise the closest corner
>>> frequency that is less than or equal to the difference of rf_in and
>>> this value will be used.
>>> minimum: 0
>>> maximum: 0xFFFFFFFFFFFFFFFF
>>> default: 0
>>>
>>> And this is the example:
>>>
>>> examples:
>>> - |
>>> spi {
>>> #address-cells = <1>;
>>> #size-cells = <0>;
>>> admv8818@0 {
>>> compatible = "adi,admv8818";
>>> reg = <0>;
>>> spi-max-frequency = <10000000>;
>>> clocks = <&admv8818_rfin>;
>>> clock-names = "rf_in";
>>> adi,filter-margins-hz = /bits/ 64 <30000000 30000000>;
>>
>>
>> foo-hz is in 32-bit, so basically you have here 4 32-bit numbers which
>> indeed reported by dtschema - property is too long. Drop 64-bit here.
>>
>
> I was hoping to keep this 64 bits seeing this is a 18 GHz+ filter. I suppose
> I could change this to MHz and just lose a bit of resolution. Does that sound
> like a better approach?
Does the hardware accept Hz resolution? How many bits do you have in the
registers per each value?
Anyway, the value was 32-bit even in your original patch and your DTS
example was not correct.
>
>> Device allows multiple LPF/HPF values to be stored in LUT tables and it
>> actually has four independent filters. Shouldn't these be included here?
>> Maybe not LUT tables, but the configuration for all filters?
>>
>
> There are two filters, the input (high-pass) filter, and the output (low-pass)
> filter. Each filter has four banks, each with a different range of frequencies.
> Only one bank can be selected at a time. Each bank has 16 different possible
> cutoff/corner frequencies. That is a total of 64 distinct values for each of
> the two filters.
Hm, datasheet says:
"four independently controlled high-
pass filters (HPFs) and four independently controlled low-pass
filters (LPFs)"
so four each, not one each, but I guess they wanted to say banks as only
one filter/bank can be active in given time?
>
> The issue with setting the corner frequency directly is that in certain
> applications (such as software defined radios) the fundamental frequency
> is adjustable, necessitating that the corner frequencies of the filter are
> adjusted accordingly. When the filter is in "auto" mode it is notified via
> the clock system of frequency changes, so using this information it should be
> possible to select new corner frequencies if you know the minimum distance
> between your fundamental frequency and the corner.
I am not advocating to set the corner frequency directly, but just
pointing that your current binding seems incomplete.
Best regards,
Krzysztof
next prev parent reply other threads:[~2025-03-03 14:16 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-25 13:46 [PATCH v4 1/2] iio: filter: admv8818: fix range calculation Sam Winchenbach
2025-02-25 13:46 ` [PATCH v4 2/2] dt-bindings: iio: filter: Add lpf/hpf freq margins Sam Winchenbach
2025-02-26 8:03 ` Krzysztof Kozlowski
2025-02-26 17:10 ` Sam Winchenbach
2025-02-26 21:22 ` Krzysztof Kozlowski
2025-02-26 22:16 ` Sam Winchenbach
2025-03-03 8:13 ` Krzysztof Kozlowski
2025-03-03 13:31 ` Sam Winchenbach
2025-03-03 14:16 ` Krzysztof Kozlowski [this message]
2025-03-03 14:48 ` Sam Winchenbach
2025-02-27 20:23 ` [PATCH v4 1/2] iio: filter: admv8818: fix range calculation kernel test robot
2025-02-27 21:20 ` Sam Winchenbach
2025-03-04 23:55 ` Jonathan Cameron
2025-03-05 12:58 ` Sam Winchenbach
2025-03-08 17:25 ` Jonathan Cameron
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b3f98745-39c3-4b1f-a0e6-51e5138d840c@kernel.org \
--to=krzk@kernel.org \
--cc=Michael.Hennerich@analog.com \
--cc=antoniu.miclaus@analog.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sam.winchenbach@framepointer.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox