devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000
@ 2023-11-22 10:58 Kim Seer Paller
  2023-11-22 10:58 ` [PATCH v3 2/2] iio: frequency: admfm2000: New driver Kim Seer Paller
  2023-11-22 18:21 ` [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000 Krzysztof Kozlowski
  0 siblings, 2 replies; 7+ messages in thread
From: Kim Seer Paller @ 2023-11-22 10:58 UTC (permalink / raw)
  Cc: Jonathan Cameron, Lars-Peter Clausen, Michael Hennerich,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Kim Seer Paller,
	linux-iio, devicetree, linux-kernel, kernel test robot

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>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202311220624.J7Nqg5h1-lkp@intel.com/
---
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 | 140 ++++++++++++++++++
 MAINTAINERS                                   |   7 +
 2 files changed, 147 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 000000000..57844c8b7
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
@@ -0,0 +1,140 @@
+# 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
+
+  switch1-gpios:
+    items:
+      - description:
+          Setting B15 GPIO to high and B16 GPIO to low will result in channel 1
+          being in Direct IF mode.
+      - description:
+          Setting B15 GPIO to low and B16 GPIO to high will result in channel 1
+          being in Mixer mode.
+
+  switch2-gpios:
+    items:
+      - description:
+          Setting K14 GPIO to high and L14 GPIO to low will result in channel 2
+          being in Mixer mode.
+      - description:
+          Setting K14 GPIO to low and L14 GPIO to high will result in channel 2
+          being in Direct IF mode.
+
+  attenuation1-gpios:
+    description:
+      Must contain an array of 5 GPIO specifiers, referring to the GPIO pins
+      connected to the C14, C15, C16, D14, and D15. The DSA attenuation control
+      is by the logic level of the GPIO pins. All high at the logic level on
+      the GPIO pins give the minimum attenuation, 0 dB and all low for the
+      maximum attenuation, at 31 dB.
+    minItems: 5
+    maxItems: 5
+
+  attenuation2-gpios:
+    description:
+      Must contain an array of 5 GPIO specifiers, referring to the GPIO pins
+      connected to the L15, L16, M14, M15, and M16. The DSA attenuation control
+      is by the logic level of the GPIO pins. All high at the logic level on
+      the GPIO pins give the minimum attenuation, 0 dB and all low for the
+      maximum attenuation, at 31 dB.
+    minItems: 5
+    maxItems: 5
+
+  '#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]
+
+    required:
+      - reg
+      - adi,mode
+
+required:
+  - compatible
+  - switch1-gpios
+  - switch2-gpios
+  - attenuation1-gpios
+  - attenuation2-gpios
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+    converter {
+      compatible = "adi,admfm2000";
+
+      switch1-gpios = <&gpio 1 GPIO_ACTIVE_LOW>,
+                      <&gpio 2 GPIO_ACTIVE_HIGH>;
+
+      switch2-gpios = <&gpio 3 GPIO_ACTIVE_LOW>,
+                      <&gpio 4 GPIO_ACTIVE_HIGH>;
+
+      attenuation1-gpios = <&gpio 17 GPIO_ACTIVE_LOW>,
+                           <&gpio 22 GPIO_ACTIVE_LOW>,
+                           <&gpio 23 GPIO_ACTIVE_LOW>,
+                           <&gpio 24 GPIO_ACTIVE_LOW>,
+                           <&gpio 25 GPIO_ACTIVE_LOW>;
+
+      attenuation2-gpios = <&gpio 0 GPIO_ACTIVE_LOW>,
+                           <&gpio 5 GPIO_ACTIVE_LOW>,
+                           <&gpio 6 GPIO_ACTIVE_LOW>,
+                           <&gpio 16 GPIO_ACTIVE_LOW>,
+                           <&gpio 26 GPIO_ACTIVE_LOW>;
+
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      channel@0 {
+        reg = <0>;
+        adi,mode = <1>;
+      };
+
+      channel@1 {
+        reg = <1>;
+        adi,mode = <1>;
+      };
+    };
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 0e79e24b6..f1692ec68 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1247,6 +1247,13 @@ W:	https://ez.analog.com/linux-software-drivers
 F:	Documentation/devicetree/bindings/hwmon/adi,adm1177.yaml
 F:	drivers/hwmon/adm1177.c
 
+ANALOG DEVICES INC ADMFM2000 DRIVER
+M:	Kim Seer Paller <kimseer.paller@analog.com>
+L:	linux-iio@vger.kernel.org
+S:	Supported
+W:	https://ez.analog.com/linux-software-drivers
+F:	Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
+
 ANALOG DEVICES INC ADMV1013 DRIVER
 M:	Antoniu Miclaus <antoniu.miclaus@analog.com>
 L:	linux-iio@vger.kernel.org

base-commit: c2d5304e6c648ebcf653bace7e51e0e6742e46c8
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 2/2] iio: frequency: admfm2000: New driver
  2023-11-22 10:58 [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000 Kim Seer Paller
@ 2023-11-22 10:58 ` Kim Seer Paller
  2023-11-22 18:21 ` [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000 Krzysztof Kozlowski
  1 sibling, 0 replies; 7+ messages in thread
From: Kim Seer Paller @ 2023-11-22 10:58 UTC (permalink / raw)
  Cc: Jonathan Cameron, Lars-Peter Clausen, Michael Hennerich,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Kim Seer Paller,
	linux-iio, devicetree, linux-kernel

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>
---
V1 -> V3: No changes.

 MAINTAINERS                       |   1 +
 drivers/iio/frequency/Kconfig     |  10 +
 drivers/iio/frequency/Makefile    |   1 +
 drivers/iio/frequency/admfm2000.c | 309 ++++++++++++++++++++++++++++++
 4 files changed, 321 insertions(+)
 create mode 100644 drivers/iio/frequency/admfm2000.c

diff --git a/MAINTAINERS b/MAINTAINERS
index f1692ec68..d8630e490 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1253,6 +1253,7 @@ L:	linux-iio@vger.kernel.org
 S:	Supported
 W:	https://ez.analog.com/linux-software-drivers
 F:	Documentation/devicetree/bindings/iio/frequency/adi,admfm2000.yaml
+F:	drivers/iio/frequency/admfm2000.c
 
 ANALOG DEVICES INC ADMV1013 DRIVER
 M:	Antoniu Miclaus <antoniu.miclaus@analog.com>
diff --git a/drivers/iio/frequency/Kconfig b/drivers/iio/frequency/Kconfig
index 9e85dfa58..c455be7d4 100644
--- a/drivers/iio/frequency/Kconfig
+++ b/drivers/iio/frequency/Kconfig
@@ -60,6 +60,16 @@ config ADF4377
 	  To compile this driver as a module, choose M here: the
 	  module will be called adf4377.
 
+config ADMFM2000
+	tristate "Analog Devices ADMFM2000 Dual Microwave Down Converter"
+	depends on GPIOLIB
+	help
+	  Say yes here to build support for Analog Devices ADMFM2000 Dual
+	  Microwave Down Converter.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called admfm2000.
+
 config ADMV1013
 	tristate "Analog Devices ADMV1013 Microwave Upconverter"
 	depends on SPI && COMMON_CLK
diff --git a/drivers/iio/frequency/Makefile b/drivers/iio/frequency/Makefile
index b616c29b4..70d0e0b70 100644
--- a/drivers/iio/frequency/Makefile
+++ b/drivers/iio/frequency/Makefile
@@ -8,6 +8,7 @@ obj-$(CONFIG_AD9523) += ad9523.o
 obj-$(CONFIG_ADF4350) += adf4350.o
 obj-$(CONFIG_ADF4371) += adf4371.o
 obj-$(CONFIG_ADF4377) += adf4377.o
+obj-$(CONFIG_ADMFM2000) += admfm2000.o
 obj-$(CONFIG_ADMV1013) += admv1013.o
 obj-$(CONFIG_ADMV1014) += admv1014.o
 obj-$(CONFIG_ADMV4420) += admv4420.o
diff --git a/drivers/iio/frequency/admfm2000.c b/drivers/iio/frequency/admfm2000.c
new file mode 100644
index 000000000..e0b5edce7
--- /dev/null
+++ b/drivers/iio/frequency/admfm2000.c
@@ -0,0 +1,309 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ADMFM2000 Dual Microwave Down Converter
+ *
+ * Copyright 2023 Analog Devices Inc.
+ */
+
+#include <linux/device.h>
+#include <linux/err.h>
+#include <linux/gpio/consumer.h>
+#include <linux/iio/iio.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
+
+#define ADMFM2000_MIXER_MODE		0
+#define ADMFM2000_DIRECT_IF_MODE	1
+#define ADMF20000_DSA_GPIOS		5
+#define ADMF20000_MODE_GPIOS		2
+#define ADMF20000_MAX_GAIN		0
+#define ADMF20000_MIN_GAIN		-31000
+#define ADMF20000_DEFAULT_GAIN		-0x20
+
+struct admfm2000_state {
+	struct mutex			lock; /* protect sensor state */
+	struct gpio_descs		*sw_ch[2];
+	struct gpio_descs		*dsa_gpios[2];
+	u32				gain[2];
+};
+
+static int admfm2000_mode(struct iio_dev *indio_dev, u32 reg, u32 mode)
+{
+	struct admfm2000_state *st = iio_priv(indio_dev);
+	DECLARE_BITMAP(values, 2);
+
+	switch (mode) {
+	case ADMFM2000_MIXER_MODE:
+		values[0] = (reg == 0) ? 1 : 2;
+		gpiod_set_array_value_cansleep(st->sw_ch[reg]->ndescs,
+					       st->sw_ch[reg]->desc,
+					       NULL, values);
+		break;
+	case ADMFM2000_DIRECT_IF_MODE:
+		values[0] = (reg == 0) ? 2 : 1;
+		gpiod_set_array_value_cansleep(st->sw_ch[reg]->ndescs,
+					       st->sw_ch[reg]->desc,
+					       NULL, values);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int admfm2000_attenuation(struct iio_dev *indio_dev, u32 chan,
+				 u32 value)
+{
+	struct admfm2000_state *st = iio_priv(indio_dev);
+	DECLARE_BITMAP(values, BITS_PER_TYPE(value));
+
+	values[0] = value;
+
+	gpiod_set_array_value_cansleep(st->dsa_gpios[chan]->ndescs,
+				       st->dsa_gpios[chan]->desc,
+				       NULL, values);
+	return 0;
+}
+
+static int admfm2000_read_raw(struct iio_dev *indio_dev,
+			      struct iio_chan_spec const *chan, int *val,
+			      int *val2, long mask)
+{
+	struct admfm2000_state *st = iio_priv(indio_dev);
+	int gain;
+
+	switch (mask) {
+	case IIO_CHAN_INFO_HARDWAREGAIN:
+		mutex_lock(&st->lock);
+		gain = ~(st->gain[chan->channel]) * -1000;
+		*val = gain / 1000;
+		*val2 = (gain % 1000) * 1000;
+		mutex_unlock(&st->lock);
+
+		return  IIO_VAL_INT_PLUS_MICRO_DB;
+	default:
+		return -EINVAL;
+	}
+}
+
+static int admfm2000_write_raw(struct iio_dev *indio_dev,
+			     struct iio_chan_spec const *chan, int val,
+			     int val2, long mask)
+{
+	struct admfm2000_state *st = iio_priv(indio_dev);
+	int gain, ret;
+
+	if (val < 0)
+		gain = (val * 1000) - (val2 / 1000);
+	else
+		gain = (val * 1000) + (val2 / 1000);
+
+	if (gain > ADMF20000_MAX_GAIN || gain < ADMF20000_MIN_GAIN)
+		return -EINVAL;
+
+	switch (mask) {
+	case IIO_CHAN_INFO_HARDWAREGAIN:
+		mutex_lock(&st->lock);
+		st->gain[chan->channel] = ~((abs(gain) / 1000) & 0x1F);
+
+		ret = admfm2000_attenuation(indio_dev, chan->channel,
+					    st->gain[chan->channel]);
+
+		mutex_unlock(&st->lock);
+		if (ret)
+			return ret;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int admfm2000_write_raw_get_fmt(struct iio_dev *indio_dev,
+				       struct iio_chan_spec const *chan,
+				       long mask)
+{
+	switch (mask) {
+	case IIO_CHAN_INFO_HARDWAREGAIN:
+		return IIO_VAL_INT_PLUS_MICRO_DB;
+	default:
+		return -EINVAL;
+	}
+}
+
+static const struct iio_info admfm2000_info = {
+	.read_raw = &admfm2000_read_raw,
+	.write_raw = &admfm2000_write_raw,
+	.write_raw_get_fmt = &admfm2000_write_raw_get_fmt,
+};
+
+#define ADMFM2000_CHAN(_channel) {					\
+	.type = IIO_VOLTAGE,						\
+	.output = 1,							\
+	.indexed = 1,							\
+	.channel = _channel,						\
+	.info_mask_separate = BIT(IIO_CHAN_INFO_HARDWAREGAIN),		\
+}
+
+static const struct iio_chan_spec admfm2000_channels[] = {
+	ADMFM2000_CHAN(0),
+	ADMFM2000_CHAN(1),
+};
+
+static int admfm2000_channel_config(struct admfm2000_state *st,
+				    struct iio_dev *indio_dev)
+{
+	struct platform_device *pdev = to_platform_device(indio_dev->dev.parent);
+	struct device *dev = &pdev->dev;
+	struct fwnode_handle *child;
+	u32 reg, mode;
+	int ret;
+
+	device_for_each_child_node(dev, child) {
+		ret = fwnode_property_read_u32(child, "reg", &reg);
+		if (ret) {
+			fwnode_handle_put(child);
+			return dev_err_probe(dev, ret,
+					     "Failed to get reg property\n");
+		}
+
+		if (reg >= indio_dev->num_channels) {
+			fwnode_handle_put(child);
+			return dev_err_probe(dev, -EINVAL, "reg bigger than: %d\n",
+					     indio_dev->num_channels);
+		}
+
+		ret = fwnode_property_read_u32(child, "adi,mode", &mode);
+		if (ret) {
+			fwnode_handle_put(child);
+			return dev_err_probe(dev, ret,
+					     "Failed to get mode property\n");
+		}
+
+		if (mode >= 2) {
+			fwnode_handle_put(child);
+			return dev_err_probe(dev, -EINVAL, "mode bigger than: 1\n");
+		}
+
+		ret = admfm2000_mode(indio_dev, reg, mode);
+		if (ret) {
+			fwnode_handle_put(child);
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
+static int admfm2000_setup(struct admfm2000_state *st,
+			   struct iio_dev *indio_dev)
+{
+	struct platform_device *pdev = to_platform_device(indio_dev->dev.parent);
+	struct device *dev = &pdev->dev;
+
+	st->sw_ch[0] = devm_gpiod_get_array(dev, "switch1", GPIOD_OUT_LOW);
+	if (IS_ERR(st->sw_ch[0]))
+		return dev_err_probe(dev, PTR_ERR(st->sw_ch[0]),
+				     "Failed to get gpios\n");
+
+	if (st->sw_ch[0]->ndescs != ADMF20000_MODE_GPIOS) {
+		dev_err_probe(dev, -ENODEV, "%d GPIOs needed to operate\n",
+			      ADMF20000_MODE_GPIOS);
+		return -ENODEV;
+	}
+
+	st->sw_ch[1] = devm_gpiod_get_array(dev, "switch2", GPIOD_OUT_LOW);
+	if (IS_ERR(st->sw_ch[1]))
+		return dev_err_probe(dev, PTR_ERR(st->sw_ch[1]),
+				     "Failed to get gpios\n");
+
+	if (st->sw_ch[1]->ndescs != ADMF20000_MODE_GPIOS) {
+		dev_err_probe(dev, -ENODEV, "%d GPIOs needed to operate\n",
+			      ADMF20000_MODE_GPIOS);
+		return -ENODEV;
+	}
+
+	st->dsa_gpios[0] = devm_gpiod_get_array(dev, "attenuation1",
+						GPIOD_OUT_LOW);
+	if (IS_ERR(st->dsa_gpios[0]))
+		return dev_err_probe(dev, PTR_ERR(st->dsa_gpios[0]),
+				     "Failed to get gpios\n");
+
+	if (st->dsa_gpios[0]->ndescs != ADMF20000_DSA_GPIOS) {
+		dev_err_probe(dev, -ENODEV, "%d GPIOs needed to operate\n",
+			      ADMF20000_DSA_GPIOS);
+		return -ENODEV;
+	}
+
+	st->dsa_gpios[1] = devm_gpiod_get_array(dev, "attenuation2",
+						GPIOD_OUT_LOW);
+	if (IS_ERR(st->dsa_gpios[1]))
+		return dev_err_probe(dev, PTR_ERR(st->dsa_gpios[1]),
+				     "Failed to get gpios\n");
+
+	if (st->dsa_gpios[1]->ndescs != ADMF20000_DSA_GPIOS) {
+		dev_err_probe(dev, -ENODEV, "%d GPIOs needed to operate\n",
+			      ADMF20000_DSA_GPIOS);
+	}
+
+	return 0;
+}
+
+static int admfm2000_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct iio_dev *indio_dev;
+	struct admfm2000_state *st;
+	int ret;
+
+	indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
+	if (!indio_dev)
+		return -ENOMEM;
+
+	st = iio_priv(indio_dev);
+
+	indio_dev->name = "admfm2000";
+	indio_dev->num_channels = ARRAY_SIZE(admfm2000_channels);
+	indio_dev->channels = admfm2000_channels;
+	indio_dev->info = &admfm2000_info;
+	indio_dev->modes = INDIO_DIRECT_MODE;
+
+	st->gain[0] = ADMF20000_DEFAULT_GAIN;
+	st->gain[1] = ADMF20000_DEFAULT_GAIN;
+
+	mutex_init(&st->lock);
+
+	ret = admfm2000_setup(st, indio_dev);
+	if (ret)
+		return ret;
+
+	ret = admfm2000_channel_config(st, indio_dev);
+	if (ret)
+		return ret;
+
+	return devm_iio_device_register(dev, indio_dev);
+}
+
+static const struct of_device_id admfm2000_of_match[] = {
+	{ .compatible = "adi,admfm2000" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, admfm2000_of_match);
+
+static struct platform_driver admfm2000_driver = {
+	.driver = {
+		.name = "admfm2000",
+		.of_match_table = admfm2000_of_match,
+	},
+	.probe = admfm2000_probe,
+};
+module_platform_driver(admfm2000_driver);
+
+MODULE_AUTHOR("Kim Seer Paller <kimseer.paller@analog.com>");
+MODULE_DESCRIPTION("ADMFM2000 Dual Microwave Down Converter");
+MODULE_LICENSE("GPL");
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000
  2023-11-22 10:58 [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000 Kim Seer Paller
  2023-11-22 10:58 ` [PATCH v3 2/2] iio: frequency: admfm2000: New driver Kim Seer Paller
@ 2023-11-22 18:21 ` Krzysztof Kozlowski
  2023-11-23  6:13   ` Paller, Kim Seer
  1 sibling, 1 reply; 7+ messages in thread
From: Krzysztof Kozlowski @ 2023-11-22 18:21 UTC (permalink / raw)
  To: Kim Seer Paller
  Cc: Jonathan Cameron, Lars-Peter Clausen, Michael Hennerich,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio,
	devicetree, linux-kernel, kernel test robot

On 22/11/2023 11:58, 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>
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202311220624.J7Nqg5h1-lkp@intel.com/

Drop these two tags. They are not valid.

> ---
> V2 -> V3: Adjusted indentation to resolve wrong indentation warning. 
>           Changed node name to converter. Updated the descriptions to clarify
>           the properties.


> +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
> +
> +  switch1-gpios:
> +    items:
> +      - description:
> +          Setting B15 GPIO to high and B16 GPIO to low will result in channel 1
> +          being in Direct IF mode.
> +      - description:
> +          Setting B15 GPIO to low and B16 GPIO to high will result in channel 1
> +          being in Mixer mode.

This still does not tell which one is B15 and which is B16. I am asking
this for third time.

items:
  - description: B15 GPIO, when high (and B16 low) channel 1 is in
Direct IF mode


Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000
  2023-11-22 18:21 ` [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000 Krzysztof Kozlowski
@ 2023-11-23  6:13   ` Paller, Kim Seer
  2023-11-23  7:20     ` Krzysztof Kozlowski
  0 siblings, 1 reply; 7+ messages in thread
From: Paller, Kim Seer @ 2023-11-23  6:13 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Jonathan Cameron, Lars-Peter Clausen, Hennerich, Michael,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, kernel test robot

> > ---
> > V2 -> V3: Adjusted indentation to resolve wrong indentation warning.
> >           Changed node name to converter. Updated the descriptions to clarify
> >           the properties.
> 
> 
> > +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
> > +
> > +  switch1-gpios:
> > +    items:
> > +      - description:
> > +          Setting B15 GPIO to high and B16 GPIO to low will result in channel 1
> > +          being in Direct IF mode.
> > +      - description:
> > +          Setting B15 GPIO to low and B16 GPIO to high will result in channel 1
> > +          being in Mixer mode.
> 
> This still does not tell which one is B15 and which is B16. I am asking
> this for third time.
> 
> items:
>   - description: B15 GPIO, when high (and B16 low) channel 1 is in
> Direct IF mode

I understand now, thank you. I was also wondering if this applies to the 
attenuation-gpios, or if I should keep it as is?

Best regards,
Kim


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000
  2023-11-23  6:13   ` Paller, Kim Seer
@ 2023-11-23  7:20     ` Krzysztof Kozlowski
  2023-11-23  8:24       ` Paller, Kim Seer
  0 siblings, 1 reply; 7+ messages in thread
From: Krzysztof Kozlowski @ 2023-11-23  7:20 UTC (permalink / raw)
  To: Paller, Kim Seer
  Cc: Jonathan Cameron, Lars-Peter Clausen, Hennerich, Michael,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, kernel test robot

On 23/11/2023 07:13, Paller, Kim Seer wrote:
>>> ---
>>> V2 -> V3: Adjusted indentation to resolve wrong indentation warning.
>>>           Changed node name to converter. Updated the descriptions to clarify
>>>           the properties.
>>
>>
>>> +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
>>> +
>>> +  switch1-gpios:
>>> +    items:
>>> +      - description:
>>> +          Setting B15 GPIO to high and B16 GPIO to low will result in channel 1
>>> +          being in Direct IF mode.
>>> +      - description:
>>> +          Setting B15 GPIO to low and B16 GPIO to high will result in channel 1
>>> +          being in Mixer mode.
>>
>> This still does not tell which one is B15 and which is B16. I am asking
>> this for third time.
>>
>> items:
>>   - description: B15 GPIO, when high (and B16 low) channel 1 is in
>> Direct IF mode
> 
> I understand now, thank you. I was also wondering if this applies to the 
> attenuation-gpios, or if I should keep it as is?

Yes, something like this applies to all your properties with multiple
entries. You need to define the order.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000
  2023-11-23  7:20     ` Krzysztof Kozlowski
@ 2023-11-23  8:24       ` Paller, Kim Seer
  2023-11-23  8:32         ` Krzysztof Kozlowski
  0 siblings, 1 reply; 7+ messages in thread
From: Paller, Kim Seer @ 2023-11-23  8:24 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Jonathan Cameron, Lars-Peter Clausen, Hennerich, Michael,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, kernel test robot

> >>> ---
> >>> V2 -> V3: Adjusted indentation to resolve wrong indentation warning.
> >>>           Changed node name to converter. Updated the descriptions to clarify
> >>>           the properties.
> >>
> >>
> >>> +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
> >>> +
> >>> +  switch1-gpios:
> >>> +    items:
> >>> +      - description:
> >>> +          Setting B15 GPIO to high and B16 GPIO to low will result in channel
> 1
> >>> +          being in Direct IF mode.
> >>> +      - description:
> >>> +          Setting B15 GPIO to low and B16 GPIO to high will result in channel
> 1
> >>> +          being in Mixer mode.
> >>
> >> This still does not tell which one is B15 and which is B16. I am asking
> >> this for third time.
> >>
> >> items:
> >>   - description: B15 GPIO, when high (and B16 low) channel 1 is in
> >> Direct IF mode
> >
> > I understand now, thank you. I was also wondering if this applies to the
> > attenuation-gpios, or if I should keep it as is?
> 
> Yes, something like this applies to all your properties with multiple
> entries. You need to define the order.

Before I send a new patch/commit, could you please check this one if it is 
properly defined?

  attenuation1-gpios:
    items:
      - description: C14 GPIO, when low (and C15, C16, D14, D15 high)
          channel 1 attenuation is 1 dB.
      - description: C15 GPIO, when low (and C14, C16, D14, D15 high)
          channel 1 attenuation is 2 dB.
      - description: C16 GPIO, when low (and C14, C15, D14, D15 high)
          channel 1 attenuation is 4 dB.
      - description: D14 GPIO, when low (and C14, C15, C16, D15 high)
          channel 1 attenuation is 8 dB.
      - description: D15 GPIO, when low (and C14, C15, C16, D14 high)
          channel 1 attenuation is 16 dB.

Thanks,
Kim


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000
  2023-11-23  8:24       ` Paller, Kim Seer
@ 2023-11-23  8:32         ` Krzysztof Kozlowski
  0 siblings, 0 replies; 7+ messages in thread
From: Krzysztof Kozlowski @ 2023-11-23  8:32 UTC (permalink / raw)
  To: Paller, Kim Seer
  Cc: Jonathan Cameron, Lars-Peter Clausen, Hennerich, Michael,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, kernel test robot

On 23/11/2023 09:24, Paller, Kim Seer wrote:
>>>>> ---
>>>>> V2 -> V3: Adjusted indentation to resolve wrong indentation warning.
>>>>>           Changed node name to converter. Updated the descriptions to clarify
>>>>>           the properties.
>>>>
>>>>
>>>>> +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
>>>>> +
>>>>> +  switch1-gpios:
>>>>> +    items:
>>>>> +      - description:
>>>>> +          Setting B15 GPIO to high and B16 GPIO to low will result in channel
>> 1
>>>>> +          being in Direct IF mode.
>>>>> +      - description:
>>>>> +          Setting B15 GPIO to low and B16 GPIO to high will result in channel
>> 1
>>>>> +          being in Mixer mode.
>>>>
>>>> This still does not tell which one is B15 and which is B16. I am asking
>>>> this for third time.
>>>>
>>>> items:
>>>>   - description: B15 GPIO, when high (and B16 low) channel 1 is in
>>>> Direct IF mode
>>>
>>> I understand now, thank you. I was also wondering if this applies to the
>>> attenuation-gpios, or if I should keep it as is?
>>
>> Yes, something like this applies to all your properties with multiple
>> entries. You need to define the order.
> 
> Before I send a new patch/commit, could you please check this one if it is 
> properly defined?
> 
>   attenuation1-gpios:
>     items:
>       - description: C14 GPIO, when low (and C15, C16, D14, D15 high)
>           channel 1 attenuation is 1 dB.
>       - description: C15 GPIO, when low (and C14, C16, D14, D15 high)
>           channel 1 attenuation is 2 dB.
>       - description: C16 GPIO, when low (and C14, C15, D14, D15 high)
>           channel 1 attenuation is 4 dB.
>       - description: D14 GPIO, when low (and C14, C15, C16, D15 high)
>           channel 1 attenuation is 8 dB.
>       - description: D15 GPIO, when low (and C14, C15, C16, D14 high)
>           channel 1 attenuation is 16 dB.

This actually could be written in easier way like:

  attenuation1-gpios:
    description: |
      Choice of attenuation:
      C14 C15   ......
      1    0   0   0   - 1 dB
      0    1   0   0   - 2 dB
      ...
    items:
      - description: C14 GPIO
      - description: C15 GPIO
      - description: C16 GPIO
      - description: D14 GPIO
      - description: D15 GPIO

or whatever is easy to understand. The point is that you must define the
order of GPIOs and explain their meaning.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-11-23  8:32 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-22 10:58 [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000 Kim Seer Paller
2023-11-22 10:58 ` [PATCH v3 2/2] iio: frequency: admfm2000: New driver Kim Seer Paller
2023-11-22 18:21 ` [PATCH v3 1/2] dt-bindings: iio: frequency: add admfm2000 Krzysztof Kozlowski
2023-11-23  6:13   ` Paller, Kim Seer
2023-11-23  7:20     ` Krzysztof Kozlowski
2023-11-23  8:24       ` Paller, Kim Seer
2023-11-23  8:32         ` Krzysztof Kozlowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).