mbox series

[v6,0/2] Changes to admfm2000 driver

Message ID 20240118085856.70758-1-kimseer.paller@analog.com
Headers show
Series Changes to admfm2000 driver | expand

Message

Kim Seer Paller Jan. 18, 2024, 8:58 a.m. UTC
Hi all,

Apologies for taking a long time to follow up on this series. I took some time to
test and try out the suggested changes. As for the major change in the bindings
and driver, the array of switch and attenuation GPIOs were moved under child nodes
utilizing the devm_fwnode_gpiod_get_index() for GPIO parsing.

I have just an inquiry regarding the difficulty of implementing the use of
guard(mutex)(&st->lock) for my current controller. Is it okay to simply use the
mutex_lock function instead?

Best regards,
Kim Seer Paller

Kim Seer Paller (2):
  dt-bindings: iio: frequency: add admfm2000
  iio: frequency: admfm2000: New driver

 .../bindings/iio/frequency/adi,admfm2000.yaml | 129 ++++++++
 MAINTAINERS                                   |   8 +
 drivers/iio/frequency/Kconfig                 |  10 +
 drivers/iio/frequency/Makefile                |   1 +
 drivers/iio/frequency/admfm2000.c             | 307 ++++++++++++++++++
 5 files changed, 455 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
 create mode 100644 drivers/iio/frequency/admfm2000.c


base-commit: 296455ade1fdcf5f8f8c033201633b60946c589a

Comments

Kim Seer Paller Jan. 19, 2024, 12:30 a.m. UTC | #1
> -----Original Message-----
> From: Conor Dooley <conor@kernel.org>
> Sent: Friday, January 19, 2024 12:10 AM
> To: Paller, Kim Seer <KimSeer.Paller@analog.com>
> Cc: linux-iio@vger.kernel.org; devicetree@vger.kernel.org; linux-
> kernel@vger.kernel.org; Jonathan Cameron <jic23@kernel.org>; Lars-Peter
> Clausen <lars@metafoo.de>; Hennerich, Michael
> <Michael.Hennerich@analog.com>; Rob Herring <robh+dt@kernel.org>;
> Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>; Conor Dooley
> <conor+dt@kernel.org>; Crt Mori <cmo@melexis.com>; Linus Walleij
> <linus.walleij@linaro.org>; Bartosz Golaszewski <brgl@bgdev.pl>
> Subject: Re: [PATCH v6 1/2] dt-bindings: iio: frequency: add admfm2000
> 
> [External]
> 
> Hey,
> 
> On Thu, Jan 18, 2024 at 04:58:55PM +0800, Kim Seer Paller wrote:
> > Dual microwave down converter module with input RF and LO frequency
> > ranges from 0.5 to 32 GHz and an output IF frequency range from 0.1 to
> > 8 GHz. It consists of a LNA, mixer, IF filter, DSA, and IF amplifier
> > for each down conversion path.
> >
> > Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
> > ---
> > V5 -> V6: Moved array of switch and attenuation GPIOs to the channel node.
> >           Changed pin coords with friendly names. Removed Reviewed-by tag.
> > V4 -> V5: Added Reviewed-by tag.
> > V3 -> V4: Updated the description of the properties with multiple entries and
> >           defined the order.
> > V2 -> V3: Adjusted indentation to resolve wrong indentation warning.
> >           Changed node name to converter. Updated the descriptions to clarify
> >           the properties.
> > V1 -> V2: Removed '|' after description. Specified the pins connected to
> >           the GPIOs. Added additionalProperties: false. Changed node name to
> gpio.
> >           Aligned < syntax with the previous syntax in the examples.
> >
> >  .../bindings/iio/frequency/adi,admfm2000.yaml | 129 ++++++++++++++++++
> >  MAINTAINERS                                   |   7 +
> >  2 files changed, 136 insertions(+)
> >  create mode 100644
> Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> >
> > diff --git
> a/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> b/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > new file mode 100644
> > index 000000000000..6f2c91c38666
> > --- /dev/null
> > +++
> b/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > @@ -0,0 +1,129 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +# Copyright 2023 Analog Devices Inc.
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/iio/frequency/adi,admfm2000.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: ADMFM2000 Dual Microwave Down Converter
> > +
> > +maintainers:
> > +  - Kim Seer Paller <kimseer.paller@analog.com>
> > +
> > +description:
> > +  Dual microwave down converter module with input RF and LO frequency
> ranges
> > +  from 0.5 to 32 GHz and an output IF frequency range from 0.1 to 8 GHz.
> > +  It consists of a LNA, mixer, IF filter, DSA, and IF amplifier for each down
> > +  conversion path.
> > +
> > +properties:
> > +  compatible:
> > +    enum:
> > +      - adi,admfm2000
> > +
> > +  '#address-cells':
> > +    const: 1
> > +
> > +  '#size-cells':
> > +    const: 0
> > +
> > +patternProperties:
> > +  "^channel@[0-1]$":
> > +    type: object
> > +    description: Represents a channel of the device.
> > +
> > +    additionalProperties: false
> > +
> > +    properties:
> > +      reg:
> > +        description:
> > +          The channel number.
> > +        minimum: 0
> > +        maximum: 1
> > +
> > +      adi,mode:
> > +        description:
> > +          RF path selected for the channel.
> > +            0 - Direct IF mode
> > +            1 - Mixer mode
> > +        $ref: /schemas/types.yaml#/definitions/uint32
> > +        enum: [0, 1]
> 
> How come this is an enum, rather than a boolean property such as
> "adi,mixer-mode"?

I used an enum, perhaps because it was easier to implement. However, this
could be changed if a boolean property might be more suitable in this case.
Is that the preferred option?

Best regards,
Kim Seer Paller
Nuno Sá Jan. 19, 2024, 8:20 a.m. UTC | #2
Hi Kim,

On Fri, 2024-01-19 at 00:30 +0000, Paller, Kim Seer wrote:
> > -----Original Message-----
> > From: Conor Dooley <conor@kernel.org>
> > Sent: Friday, January 19, 2024 12:10 AM
> > To: Paller, Kim Seer <KimSeer.Paller@analog.com>
> > Cc: linux-iio@vger.kernel.org; devicetree@vger.kernel.org; linux-
> > kernel@vger.kernel.org; Jonathan Cameron <jic23@kernel.org>; Lars-Peter
> > Clausen <lars@metafoo.de>; Hennerich, Michael
> > <Michael.Hennerich@analog.com>; Rob Herring <robh+dt@kernel.org>;
> > Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>; Conor Dooley
> > <conor+dt@kernel.org>; Crt Mori <cmo@melexis.com>; Linus Walleij
> > <linus.walleij@linaro.org>; Bartosz Golaszewski <brgl@bgdev.pl>
> > Subject: Re: [PATCH v6 1/2] dt-bindings: iio: frequency: add admfm2000
> > 
> > [External]
> > 
> > Hey,
> > 
> > On Thu, Jan 18, 2024 at 04:58:55PM +0800, Kim Seer Paller wrote:
> > > Dual microwave down converter module with input RF and LO frequency
> > > ranges from 0.5 to 32 GHz and an output IF frequency range from 0.1 to
> > > 8 GHz. It consists of a LNA, mixer, IF filter, DSA, and IF amplifier
> > > for each down conversion path.
> > > 
> > > Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
> > > ---
> > > V5 -> V6: Moved array of switch and attenuation GPIOs to the channel node.
> > >           Changed pin coords with friendly names. Removed Reviewed-by tag.
> > > V4 -> V5: Added Reviewed-by tag.
> > > V3 -> V4: Updated the description of the properties with multiple entries and
> > >           defined the order.
> > > V2 -> V3: Adjusted indentation to resolve wrong indentation warning.
> > >           Changed node name to converter. Updated the descriptions to clarify
> > >           the properties.
> > > V1 -> V2: Removed '|' after description. Specified the pins connected to
> > >           the GPIOs. Added additionalProperties: false. Changed node name to
> > gpio.
> > >           Aligned < syntax with the previous syntax in the examples.
> > > 
> > >  .../bindings/iio/frequency/adi,admfm2000.yaml | 129 ++++++++++++++++++
> > >  MAINTAINERS                                   |   7 +
> > >  2 files changed, 136 insertions(+)
> > >  create mode 100644
> > Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > > 
> > > diff --git
> > a/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > b/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > > new file mode 100644
> > > index 000000000000..6f2c91c38666
> > > --- /dev/null
> > > +++
> > b/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > > @@ -0,0 +1,129 @@
> > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > +# Copyright 2023 Analog Devices Inc.
> > > +%YAML 1.2
> > > +---
> > > +$id: http://devicetree.org/schemas/iio/frequency/adi,admfm2000.yaml#
> > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > +
> > > +title: ADMFM2000 Dual Microwave Down Converter
> > > +
> > > +maintainers:
> > > +  - Kim Seer Paller <kimseer.paller@analog.com>
> > > +
> > > +description:
> > > +  Dual microwave down converter module with input RF and LO frequency
> > ranges
> > > +  from 0.5 to 32 GHz and an output IF frequency range from 0.1 to 8 GHz.
> > > +  It consists of a LNA, mixer, IF filter, DSA, and IF amplifier for each down
> > > +  conversion path.
> > > +
> > > +properties:
> > > +  compatible:
> > > +    enum:
> > > +      - adi,admfm2000
> > > +
> > > +  '#address-cells':
> > > +    const: 1
> > > +
> > > +  '#size-cells':
> > > +    const: 0
> > > +
> > > +patternProperties:
> > > +  "^channel@[0-1]$":
> > > +    type: object
> > > +    description: Represents a channel of the device.
> > > +
> > > +    additionalProperties: false
> > > +
> > > +    properties:
> > > +      reg:
> > > +        description:
> > > +          The channel number.
> > > +        minimum: 0
> > > +        maximum: 1
> > > +
> > > +      adi,mode:
> > > +        description:
> > > +          RF path selected for the channel.
> > > +            0 - Direct IF mode
> > > +            1 - Mixer mode
> > > +        $ref: /schemas/types.yaml#/definitions/uint32
> > > +        enum: [0, 1]
> > 
> > How come this is an enum, rather than a boolean property such as
> > "adi,mixer-mode"?
> 
> I used an enum, perhaps because it was easier to implement. However, this
> could be changed if a boolean property might be more suitable in this case.
> Is that the preferred option?
> 

Hmmm, How is the enum easier than a boolean property :)? I guess the device has a
default mode. So, if it is Direct IF mode you have 'adi,mixer-mode' to enable that
mode and that's it. So the code is pretty much just:

if (device_property_read_bool()) {
	/* enable mixer mode */
}

Also remember that from a bindings point of view being easier to implement or not in
the driver does not matter much. Take for an example, properties with well know units
like 'microamp'. It would be much easier to just have an enum with the device
register values but that's not how we should do it since it wouldn't be intuitive at
all for people reading devicetrees.

- Nuno Sá
Nuno Sá Jan. 19, 2024, 9:21 a.m. UTC | #3
On Fri, 2024-01-19 at 08:31 +0000, Conor Dooley wrote:
> On Fri, Jan 19, 2024 at 09:20:01AM +0100, Nuno Sá wrote:
> > Hi Kim,
> > 
> > On Fri, 2024-01-19 at 00:30 +0000, Paller, Kim Seer wrote:
> > > > -----Original Message-----
> > > > From: Conor Dooley <conor@kernel.org>
> > > > Sent: Friday, January 19, 2024 12:10 AM
> > > > To: Paller, Kim Seer <KimSeer.Paller@analog.com>
> > > > Cc: linux-iio@vger.kernel.org; devicetree@vger.kernel.org; linux-
> > > > kernel@vger.kernel.org; Jonathan Cameron <jic23@kernel.org>; Lars-Peter
> > > > Clausen <lars@metafoo.de>; Hennerich, Michael
> > > > <Michael.Hennerich@analog.com>; Rob Herring <robh+dt@kernel.org>;
> > > > Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>; Conor Dooley
> > > > <conor+dt@kernel.org>; Crt Mori <cmo@melexis.com>; Linus Walleij
> > > > <linus.walleij@linaro.org>; Bartosz Golaszewski <brgl@bgdev.pl>
> > > > Subject: Re: [PATCH v6 1/2] dt-bindings: iio: frequency: add admfm2000
> > > > 
> > > > [External]
> > > > 
> > > > Hey,
> > > > 
> > > > On Thu, Jan 18, 2024 at 04:58:55PM +0800, Kim Seer Paller wrote:
> > > > > Dual microwave down converter module with input RF and LO frequency
> > > > > ranges from 0.5 to 32 GHz and an output IF frequency range from 0.1 to
> > > > > 8 GHz. It consists of a LNA, mixer, IF filter, DSA, and IF amplifier
> > > > > for each down conversion path.
> > > > > 
> > > > > Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
> > > > > ---
> > > > > V5 -> V6: Moved array of switch and attenuation GPIOs to the channel node.
> > > > >           Changed pin coords with friendly names. Removed Reviewed-by tag.
> > > > > V4 -> V5: Added Reviewed-by tag.
> > > > > V3 -> V4: Updated the description of the properties with multiple entries
> > > > > and
> > > > >           defined the order.
> > > > > V2 -> V3: Adjusted indentation to resolve wrong indentation warning.
> > > > >           Changed node name to converter. Updated the descriptions to
> > > > > clarify
> > > > >           the properties.
> > > > > V1 -> V2: Removed '|' after description. Specified the pins connected to
> > > > >           the GPIOs. Added additionalProperties: false. Changed node name
> > > > > to
> > > > gpio.
> > > > >           Aligned < syntax with the previous syntax in the examples.
> > > > > 
> > > > >  .../bindings/iio/frequency/adi,admfm2000.yaml | 129 ++++++++++++++++++
> > > > >  MAINTAINERS                                   |   7 +
> > > > >  2 files changed, 136 insertions(+)
> > > > >  create mode 100644
> > > > Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > > > > 
> > > > > diff --git
> > > > a/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > > > b/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > > > > new file mode 100644
> > > > > index 000000000000..6f2c91c38666
> > > > > --- /dev/null
> > > > > +++
> > > > b/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
> > > > > @@ -0,0 +1,129 @@
> > > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > > > +# Copyright 2023 Analog Devices Inc.
> > > > > +%YAML 1.2
> > > > > +---
> > > > > +$id: http://devicetree.org/schemas/iio/frequency/adi,admfm2000.yaml#
> > > > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > > > +
> > > > > +title: ADMFM2000 Dual Microwave Down Converter
> > > > > +
> > > > > +maintainers:
> > > > > +  - Kim Seer Paller <kimseer.paller@analog.com>
> > > > > +
> > > > > +description:
> > > > > +  Dual microwave down converter module with input RF and LO frequency
> > > > ranges
> > > > > +  from 0.5 to 32 GHz and an output IF frequency range from 0.1 to 8 GHz.
> > > > > +  It consists of a LNA, mixer, IF filter, DSA, and IF amplifier for each
> > > > > down
> > > > > +  conversion path.
> > > > > +
> > > > > +properties:
> > > > > +  compatible:
> > > > > +    enum:
> > > > > +      - adi,admfm2000
> > > > > +
> > > > > +  '#address-cells':
> > > > > +    const: 1
> > > > > +
> > > > > +  '#size-cells':
> > > > > +    const: 0
> > > > > +
> > > > > +patternProperties:
> > > > > +  "^channel@[0-1]$":
> > > > > +    type: object
> > > > > +    description: Represents a channel of the device.
> > > > > +
> > > > > +    additionalProperties: false
> > > > > +
> > > > > +    properties:
> > > > > +      reg:
> > > > > +        description:
> > > > > +          The channel number.
> > > > > +        minimum: 0
> > > > > +        maximum: 1
> > > > > +
> > > > > +      adi,mode:
> > > > > +        description:
> > > > > +          RF path selected for the channel.
> > > > > +            0 - Direct IF mode
> > > > > +            1 - Mixer mode
> > > > > +        $ref: /schemas/types.yaml#/definitions/uint32
> > > > > +        enum: [0, 1]
> > > > 
> > > > How come this is an enum, rather than a boolean property such as
> > > > "adi,mixer-mode"?
> > > 
> > > I used an enum, perhaps because it was easier to implement. However, this
> > > could be changed if a boolean property might be more suitable in this case.
> > > Is that the preferred option?
> > > 
> > 
> > Hmmm, How is the enum easier than a boolean property :)? I guess the device has a
> > default mode. So, if it is Direct IF mode you have 'adi,mixer-mode' to enable
> > that
> > mode and that's it. So the code is pretty much just:
> > 
> > if (device_property_read_bool()) {
> 
> device_property_present() is preferred I think.
> 

Hmm, don't want to start an argument but I'm not sure either :). I would argue that
device_property_read_bool() has more users (according to git grep - and if I did not
mess the grep) and it pretty much wraps device_property_present(). So, if there was
no value in it's "meaning" we would/should stop using it and eventually drop it...
Anyways, not really a big deal.

- Nuno Sá
> >
Conor Dooley Jan. 19, 2024, 4:54 p.m. UTC | #4
> > > Hmmm, How is the enum easier than a boolean property :)? I guess the device has a
> > > default mode. So, if it is Direct IF mode you have 'adi,mixer-mode' to enable
> > > that
> > > mode and that's it. So the code is pretty much just:
> > > 
> > > if (device_property_read_bool()) {
> > 
> > device_property_present() is preferred I think.
> > 
> 
> Hmm, don't want to start an argument but I'm not sure either :). I would argue that
> device_property_read_bool() has more users (according to git grep - and if I did not
> mess the grep) and it pretty much wraps device_property_present(). So, if there was
> no value in it's "meaning" we would/should stop using it and eventually drop it...
> Anyways, not really a big deal.

If there's an actually boolean property that can have a true/false
value, but testing for presence alone device_property_present() is
the more accurate function to use.