linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 1/5] iio: core: Handle 'dB' suffix in core
@ 2020-02-06 15:11 Beniamin Bia
  2020-02-06 15:11 ` [PATCH v5 2/5] iio: amplifiers: ad8366: Add write_raw_get_fmt function Beniamin Bia
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Beniamin Bia @ 2020-02-06 15:11 UTC (permalink / raw)
  To: jic23
  Cc: lars, Michael.Hennerich, pmeerw, linux-iio, linux-kernel,
	biabeniamin, knaack.h, robh+dt, mark.rutland, devicetree,
	Beniamin Bia

This patch handles the db suffix used for writing micro db values.

Signed-off-by: Beniamin Bia <beniamin.bia@analog.com>
---
Changes in v5:
-handle both 'db' and ' db' cases

 drivers/iio/industrialio-core.c | 39 ++++++++++++++++++++++++++++++---
 1 file changed, 36 insertions(+), 3 deletions(-)

diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 65ff0d067018..684c3b151b29 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -769,17 +769,18 @@ static ssize_t iio_read_channel_info_avail(struct device *dev,
 }
 
 /**
- * iio_str_to_fixpoint() - Parse a fixed-point number from a string
+ * __iio_str_to_fixpoint() - Parse a fixed-point number from a string
  * @str: The string to parse
  * @fract_mult: Multiplier for the first decimal place, should be a power of 10
  * @integer: The integer part of the number
  * @fract: The fractional part of the number
+ * @scale_db: True if this should parse as dB
  *
  * Returns 0 on success, or a negative error code if the string could not be
  * parsed.
  */
-int iio_str_to_fixpoint(const char *str, int fract_mult,
-	int *integer, int *fract)
+int __iio_str_to_fixpoint(const char *str, int fract_mult,
+			  int *integer, int *fract, bool scale_db)
 {
 	int i = 0, f = 0;
 	bool integer_part = true, negative = false;
@@ -810,6 +811,14 @@ int iio_str_to_fixpoint(const char *str, int fract_mult,
 				break;
 			else
 				return -EINVAL;
+		} else if (!strncmp(str, " dB", sizeof(" dB") - 1) && scale_db) {
+			/* Ignore the dB suffix */
+			str += sizeof(" dB") - 1;
+			continue;
+		} else if (!strncmp(str, "dB", sizeof("dB") - 1) && scale_db) {
+			/* Ignore the dB suffix */
+			str += sizeof("dB") - 1;
+			continue;
 		} else if (*str == '.' && integer_part) {
 			integer_part = false;
 		} else {
@@ -832,6 +841,22 @@ int iio_str_to_fixpoint(const char *str, int fract_mult,
 }
 EXPORT_SYMBOL_GPL(iio_str_to_fixpoint);
 
+/**
+ * iio_str_to_fixpoint() - Parse a fixed-point number from a string
+ * @str: The string to parse
+ * @fract_mult: Multiplier for the first decimal place, should be a power of 10
+ * @integer: The integer part of the number
+ * @fract: The fractional part of the number
+ *
+ * Returns 0 on success, or a negative error code if the string could not be
+ * parsed.
+ */
+int iio_str_to_fixpoint(const char *str, int fract_mult,
+			int *integer, int *fract)
+{
+	return __iio_str_to_fixpoint(str, fract_mult, integer, fract, false);
+}
+
 static ssize_t iio_write_channel_info(struct device *dev,
 				      struct device_attribute *attr,
 				      const char *buf,
@@ -842,6 +867,7 @@ static ssize_t iio_write_channel_info(struct device *dev,
 	int ret, fract_mult = 100000;
 	int integer, fract = 0;
 	bool is_char = false;
+	bool scale_db = false;
 
 	/* Assumes decimal - precision based on number of digits */
 	if (!indio_dev->info->write_raw)
@@ -853,6 +879,9 @@ static ssize_t iio_write_channel_info(struct device *dev,
 		case IIO_VAL_INT:
 			fract_mult = 0;
 			break;
+		case IIO_VAL_INT_PLUS_MICRO_DB:
+			scale_db = true;
+			/* fall through */
 		case IIO_VAL_INT_PLUS_MICRO:
 			fract_mult = 100000;
 			break;
@@ -877,6 +906,10 @@ static ssize_t iio_write_channel_info(struct device *dev,
 		if (ret)
 			return ret;
 	}
+	ret = __iio_str_to_fixpoint(buf, fract_mult, &integer, &fract,
+				    scale_db);
+	if (ret)
+		return ret;
 
 	ret = indio_dev->info->write_raw(indio_dev, this_attr->c,
 					 integer, fract, this_attr->address);
-- 
2.17.1


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

end of thread, other threads:[~2020-03-08 17:32 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-06 15:11 [PATCH v5 1/5] iio: core: Handle 'dB' suffix in core Beniamin Bia
2020-02-06 15:11 ` [PATCH v5 2/5] iio: amplifiers: ad8366: Add write_raw_get_fmt function Beniamin Bia
2020-02-14 14:05   ` Jonathan Cameron
2020-02-06 15:11 ` [PATCH v5 3/5] iio: amplifiers: hmc425a: Add support for HMC425A attenuator Beniamin Bia
2020-02-14 14:09   ` Jonathan Cameron
2020-02-20 12:32     ` Bia, Beniamin
2020-03-08 17:31       ` Jonathan Cameron
2020-02-06 15:11 ` [PATCH v5 4/5] dt-bindings: iio: amplifiers: Add docs for HMC425A Step Attenuator Beniamin Bia
2020-02-06 21:34   ` Rob Herring
2020-02-14 14:14     ` Jonathan Cameron
2020-02-06 15:11 ` [PATCH v5 5/5] MAINTAINERS: add entry for hmc425a driver Beniamin Bia
2020-02-14 14:14   ` Jonathan Cameron
2020-02-14 14:04 ` [PATCH v5 1/5] iio: core: Handle 'dB' suffix in core Jonathan Cameron

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).