From: Jonathan Cameron <jic23@kernel.org>
To: linux-iio@vger.kernel.org
Cc: lars@metafoo.de, Jonathan Cameron <jic23@kernel.org>
Subject: [PATCH 11/11] iio:adc:mcp3422: use core to provide _available information rather than custom attrs.
Date: Sun, 17 Nov 2013 15:15:02 +0000 [thread overview]
Message-ID: <1384701302-26564-12-git-send-email-jic23@kernel.org> (raw)
In-Reply-To: <1384701302-26564-1-git-send-email-jic23@kernel.org>
Passing this information through the new core callbacks makes it available
to in kernel consumers of the channels.
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
---
drivers/iio/adc/mcp3422.c | 72 ++++++++++++++++++++++++-----------------------
1 file changed, 37 insertions(+), 35 deletions(-)
diff --git a/drivers/iio/adc/mcp3422.c b/drivers/iio/adc/mcp3422.c
index dbdbd77f69ea..1f627cce1029 100644
--- a/drivers/iio/adc/mcp3422.c
+++ b/drivers/iio/adc/mcp3422.c
@@ -55,6 +55,8 @@
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) \
| BIT(IIO_CHAN_INFO_SCALE), \
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ), \
+ .info_mask_shared_by_all_available = BIT(IIO_CHAN_INFO_SAMP_FREQ), \
+ .info_mask_shared_by_type_available = BIT(IIO_CHAN_INFO_SCALE), \
}
/* LSB is in nV to eliminate floating point */
@@ -66,11 +68,11 @@ static const u32 rates_to_lsb[] = {1000000, 250000, 62500, 15625};
* pga is 1 for 0, 2
*/
-static const int mcp3422_scales[4][4] = {
- { 1000000, 250000, 62500, 15625 },
- { 500000 , 125000, 31250, 7812 },
- { 250000 , 62500 , 15625, 3906 },
- { 125000 , 31250 , 7812 , 1953 } };
+static const int mcp3422_scales[4][8] = {
+ { 0, 1000000, 0, 250000, 0, 62500, 0, 15625 },
+ { 0, 500000, 0, 125000, 0, 31250, 0, 7812 },
+ { 0, 250000, 0, 62500, 0, 15625, 0, 3906 },
+ { 0, 125000, 0, 31250, 0, 7812 , 0, 1953 } };
/* Constant msleep times for data acquisitions */
static const int mcp3422_read_times[4] = {
@@ -181,8 +183,8 @@ static int mcp3422_read_raw(struct iio_dev *iio,
case IIO_CHAN_INFO_SCALE:
- *val1 = 0;
- *val2 = mcp3422_scales[sample_rate][pga];
+ *val1 = mcp3422_scales[sample_rate][pga * 2 + 0];
+ *val2 = mcp3422_scales[sample_rate][pga * 2 + 1];
return IIO_VAL_INT_PLUS_NANO;
case IIO_CHAN_INFO_SAMP_FREQ:
@@ -196,6 +198,33 @@ static int mcp3422_read_raw(struct iio_dev *iio,
return -EINVAL;
}
+static const int mcp3422_samp_freqs[] = { 240, 60, 15, 3 };
+static int mcp3422_read_avail(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan,
+ const int **vals,
+ int *type,
+ int *length,
+ long mask_el)
+{
+ struct mcp3422 *adc = iio_priv(indio_dev);
+ u8 sample_rate;
+
+ switch (mask_el) {
+ case IIO_CHAN_INFO_SAMP_FREQ:
+ *vals = mcp3422_samp_freqs;
+ *length = ARRAY_SIZE(mcp3422_samp_freqs);
+ *type = IIO_VAL_INT;
+ return IIO_AVAIL_LIST;
+ case IIO_CHAN_INFO_SCALE:
+ sample_rate = MCP3422_SAMPLE_RATE(adc->config);
+ *vals = mcp3422_scales[sample_rate];
+ *length = ARRAY_SIZE(mcp3422_scales[0]);
+ *type = IIO_VAL_INT_PLUS_MICRO;
+ return IIO_AVAIL_LIST;
+ }
+ return -EINVAL;
+}
+
static int mcp3422_write_raw(struct iio_dev *iio,
struct iio_chan_spec const *channel, int val1,
int val2, long mask)
@@ -271,33 +300,6 @@ static int mcp3422_write_raw_get_fmt(struct iio_dev *indio_dev,
}
}
-static ssize_t mcp3422_show_scales(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct mcp3422 *adc = iio_priv(dev_to_iio_dev(dev));
- u8 sample_rate = MCP3422_SAMPLE_RATE(adc->config);
-
- return sprintf(buf, "0.%09u 0.%09u 0.%09u 0.%09u\n",
- mcp3422_scales[sample_rate][0],
- mcp3422_scales[sample_rate][1],
- mcp3422_scales[sample_rate][2],
- mcp3422_scales[sample_rate][3]);
-}
-
-static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("240 60 15 3");
-static IIO_DEVICE_ATTR(in_voltage_scale_available, S_IRUGO,
- mcp3422_show_scales, NULL, 0);
-
-static struct attribute *mcp3422_attributes[] = {
- &iio_const_attr_sampling_frequency_available.dev_attr.attr,
- &iio_dev_attr_in_voltage_scale_available.dev_attr.attr,
- NULL,
-};
-
-static const struct attribute_group mcp3422_attribute_group = {
- .attrs = mcp3422_attributes,
-};
-
static const struct iio_chan_spec mcp3422_channels[] = {
MCP3422_CHAN(0),
MCP3422_CHAN(1),
@@ -312,9 +314,9 @@ static const struct iio_chan_spec mcp3424_channels[] = {
static const struct iio_info mcp3422_info = {
.read_raw = mcp3422_read_raw,
+ .read_avail = mcp3422_read_avail,
.write_raw = mcp3422_write_raw,
.write_raw_get_fmt = mcp3422_write_raw_get_fmt,
- .attrs = &mcp3422_attribute_group,
.driver_module = THIS_MODULE,
};
--
1.8.4.2
prev parent reply other threads:[~2013-11-17 14:14 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-17 15:14 [RFC PATCH 00/11] IIO: Add core support for _available interfaces Jonathan Cameron
2013-11-17 15:14 ` [PATCH 01/11] iio:core: add a callback to allow drivers to provide _available attributes Jonathan Cameron
2013-11-17 15:14 ` [PATCH 02/11] staging:iio:dummy driver: Add example usecases for the new *_available interface Jonathan Cameron
2013-11-17 15:14 ` [PATCH 03/11] iio:accel:bma180 use new read_avail to replace *_available attrs Jonathan Cameron
2013-11-17 15:14 ` [PATCH 04/11] iio:accel:kxsd9 use new read_avail to replace accel_scan_available Jonathan Cameron
2013-11-17 15:14 ` [PATCH 05/11] iio:st sensors: remove custom sampling frequence attribute in favour of core support Jonathan Cameron
2013-11-18 18:25 ` Lars-Peter Clausen
2013-11-17 15:14 ` [PATCH 06/11] iio: ad_sigma_delta provide macro parameters for available info masks Jonathan Cameron
2013-11-17 15:14 ` [PATCH 07/11] iio:adc:ad7793: use samp_freq element of info_mask_shared_by_all Jonathan Cameron
2013-11-18 18:29 ` Lars-Peter Clausen
2013-11-18 20:52 ` Jonathan Cameron
2013-11-17 15:14 ` [PATCH 08/11] iio:adc:ad7793: Use the read_avail callback to provide the scale and sampling frequency interfaces Jonathan Cameron
2013-11-17 15:15 ` [PATCH 09/11] iio:adc:ad7791 Provide sampling frequency and scale_available access via core Jonathan Cameron
2013-11-17 15:15 ` [PATCH 10/11] staging:iio:adc:ad7192 use infomask* to provide access to sampling frequency and scale_available Jonathan Cameron
2013-11-17 15:15 ` Jonathan Cameron [this message]
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=1384701302-26564-12-git-send-email-jic23@kernel.org \
--to=jic23@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).