All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] staging:iio:adc Add range to max1363
@ 2011-03-30 12:20 mailinglists
  2011-03-30 13:16 ` Jonathan Cameron
  0 siblings, 1 reply; 4+ messages in thread
From: mailinglists @ 2011-03-30 12:20 UTC (permalink / raw)
  To: linux-iio; +Cc: Jan Weitzel

From: Jan Weitzel <j.weitzel@phytec.de>

by default MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD is set, add VDD is
the voltage reference, not the internal one. So in_scale is wrong.
If a regulator is available it is ask about the voltage. If it is
not available the old (wrong) internal reference is used.

Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
 drivers/staging/iio/adc/max1363_core.c |   29 +++++++++++++++++++++++++----
 1 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c
index 905f856..cf49124 100644
--- a/drivers/staging/iio/adc/max1363_core.c
+++ b/drivers/staging/iio/adc/max1363_core.c
@@ -279,22 +279,31 @@ static IIO_DEV_ATTR_IN_DIFF_RAW(7, 6, max1363_read_single_channel, d7m6);
 static IIO_DEV_ATTR_IN_DIFF_RAW(9, 8, max1363_read_single_channel, d9m8);
 static IIO_DEV_ATTR_IN_DIFF_RAW(11, 10, max1363_read_single_channel, d11m10);
 
+static u16 max1363_get_range(struct max1363_state *st)
+{
+	u16 range;
+	if (IS_ERR(st->reg))
+		range = st->chip_info->int_vref_mv;
+	else
+		range = regulator_get_voltage(st->reg) / 1000;
+
+	return range;
+}
 
 static ssize_t max1363_show_scale(struct device *dev,
 				struct device_attribute *attr,
 				char *buf)
 {
-	/* Driver currently only support internal vref */
+	/* Driver currently only support vcc vref */
 	struct iio_dev *dev_info = dev_get_drvdata(dev);
 	struct max1363_state *st = iio_dev_get_devdata(dev_info);
 	/* Corresponds to Vref / 2^(bits) */
 
-	if ((1 << (st->chip_info->bits + 1))
-	    > st->chip_info->int_vref_mv)
+	if ((1 << (st->chip_info->bits + 1)) > max1363_get_range(st))
 		return sprintf(buf, "0.5\n");
 	else
 		return sprintf(buf, "%d\n",
-			st->chip_info->int_vref_mv >> st->chip_info->bits);
+			max1363_get_range(st) >> st->chip_info->bits);
 }
 
 static IIO_DEVICE_ATTR(in_scale, S_IRUGO, max1363_show_scale, NULL, 0);
@@ -310,6 +319,17 @@ static ssize_t max1363_show_name(struct device *dev,
 
 static IIO_DEVICE_ATTR(name, S_IRUGO, max1363_show_name, NULL, 0);
 
+static ssize_t max1363_show_range(struct device *dev,
+				 struct device_attribute *attr,
+				 char *buf)
+{
+	struct iio_dev *dev_info = dev_get_drvdata(dev);
+	struct max1363_state *st = iio_dev_get_devdata(dev_info);
+	return sprintf(buf, "%d\n", max1363_get_range(st));
+}
+
+static IIO_DEVICE_ATTR(range, S_IRUGO, max1363_show_range, NULL, 0);
+
 /* Applies to max1363 */
 static const enum max1363_modes max1363_mode_list[] = {
 	_s0, _s1, _s2, _s3,
@@ -329,6 +349,7 @@ static struct attribute *max1363_device_attrs[] = {
 	&iio_dev_attr_in3min2_raw.dev_attr.attr,
 	&iio_dev_attr_name.dev_attr.attr,
 	&iio_dev_attr_in_scale.dev_attr.attr,
+	&iio_dev_attr_range.dev_attr.attr,
 	NULL
 };
 
-- 
1.7.0.4


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

end of thread, other threads:[~2011-04-04 13:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-30 12:20 [PATCH] staging:iio:adc Add range to max1363 mailinglists
2011-03-30 13:16 ` Jonathan Cameron
2011-03-30 14:05   ` Antwort: " Jan Weitzel
2011-04-04 13:28     ` Jonathan Cameron

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.