From: Jonathan Cameron <jic23@kernel.org>
To: Mircea Caprioru <mircea.caprioru@analog.com>
Cc: <Michael.Hennerich@analog.com>, <stefan.popa@analog.com>,
<lars@metafoo.de>, <gregkh@linuxfoundation.org>,
<linux-kernel@vger.kernel.org>, <linux-iio@vger.kernel.org>
Subject: Re: [PATCH] staging: iio: adc: ad7192: Use read_avail for available attributes
Date: Sun, 24 Mar 2019 17:34:27 +0000 [thread overview]
Message-ID: <20190324173427.62f004cb@archlinux> (raw)
In-Reply-To: <20190319142520.664-1-mircea.caprioru@analog.com>
On Tue, 19 Mar 2019 16:25:20 +0200
Mircea Caprioru <mircea.caprioru@analog.com> wrote:
> This patch removes the in_voltage-voltage_scale_available and
> in_voltage_scale_available attributes. These are replaced with available
> attributes added in info_mask_shared_by_type_available.
>
> With this modification the iio core will be responsible with naming the
> attributes thus removing the checkpatch warning related to
> in_voltage-voltage_scale_available naming.
>
> Signed-off-by: Mircea Caprioru <mircea.caprioru@analog.com>
Thanks for sorting this out! Many future newbies will avoid the
trap this set a a result of this ;)
There is a lot of code in here just to tweak whether the scale available bit
is set or not.
Hmm. Lets do this for now, but we may need to have a a think about whether
to adjust the ad_ core to deal with it at some point.
Applied to the togreg branch of iio.git and pushed out as testing for
the autobuilders to play with it.
thanks,
Jonathan
> ---
> drivers/staging/iio/adc/ad7192.c | 99 ++++++++++++++++++++------------
> 1 file changed, 61 insertions(+), 38 deletions(-)
>
> diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
> index acdbc07fd259..d8a20f9066f4 100644
> --- a/drivers/staging/iio/adc/ad7192.c
> +++ b/drivers/staging/iio/adc/ad7192.c
> @@ -337,30 +337,6 @@ static int ad7192_setup(struct ad7192_state *st,
> return ret;
> }
>
> -static ssize_t
> -ad7192_show_scale_available(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> - struct ad7192_state *st = iio_priv(indio_dev);
> - int i, len = 0;
> -
> - for (i = 0; i < ARRAY_SIZE(st->scale_avail); i++)
> - len += sprintf(buf + len, "%d.%09u ", st->scale_avail[i][0],
> - st->scale_avail[i][1]);
> -
> - len += sprintf(buf + len, "\n");
> -
> - return len;
> -}
> -
> -static IIO_DEVICE_ATTR_NAMED(in_v_m_v_scale_available,
> - in_voltage-voltage_scale_available,
> - 0444, ad7192_show_scale_available, NULL, 0);
> -
> -static IIO_DEVICE_ATTR(in_voltage_scale_available, 0444,
> - ad7192_show_scale_available, NULL, 0);
> -
> static ssize_t ad7192_show_ac_excitation(struct device *dev,
> struct device_attribute *attr,
> char *buf)
> @@ -435,8 +411,6 @@ static IIO_DEVICE_ATTR(ac_excitation_en, 0644,
> AD7192_REG_MODE);
>
> static struct attribute *ad7192_attributes[] = {
> - &iio_dev_attr_in_v_m_v_scale_available.dev_attr.attr,
> - &iio_dev_attr_in_voltage_scale_available.dev_attr.attr,
> &iio_dev_attr_bridge_switch_en.dev_attr.attr,
> &iio_dev_attr_ac_excitation_en.dev_attr.attr,
> NULL
> @@ -447,8 +421,6 @@ static const struct attribute_group ad7192_attribute_group = {
> };
>
> static struct attribute *ad7195_attributes[] = {
> - &iio_dev_attr_in_v_m_v_scale_available.dev_attr.attr,
> - &iio_dev_attr_in_voltage_scale_available.dev_attr.attr,
> &iio_dev_attr_bridge_switch_en.dev_attr.attr,
> NULL
> };
> @@ -579,10 +551,31 @@ static int ad7192_write_raw_get_fmt(struct iio_dev *indio_dev,
> }
> }
>
> +static int ad7192_read_avail(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan,
> + const int **vals, int *type, int *length,
> + long mask)
> +{
> + struct ad7192_state *st = iio_priv(indio_dev);
> +
> + switch (mask) {
> + case IIO_CHAN_INFO_SCALE:
> + *vals = (int *)st->scale_avail;
> + *type = IIO_VAL_INT_PLUS_NANO;
> + /* Values are stored in a 2D matrix */
> + *length = ARRAY_SIZE(st->scale_avail) * 2;
> +
> + return IIO_AVAIL_LIST;
> + }
> +
> + return -EINVAL;
> +}
> +
> static const struct iio_info ad7192_info = {
> .read_raw = ad7192_read_raw,
> .write_raw = ad7192_write_raw,
> .write_raw_get_fmt = ad7192_write_raw_get_fmt,
> + .read_avail = ad7192_read_avail,
> .attrs = &ad7192_attribute_group,
> .validate_trigger = ad_sd_validate_trigger,
> };
> @@ -591,6 +584,7 @@ static const struct iio_info ad7195_info = {
> .read_raw = ad7192_read_raw,
> .write_raw = ad7192_write_raw,
> .write_raw_get_fmt = ad7192_write_raw_get_fmt,
> + .read_avail = ad7192_read_avail,
> .attrs = &ad7195_attribute_group,
> .validate_trigger = ad_sd_validate_trigger,
> };
> @@ -625,6 +619,42 @@ static const struct iio_chan_spec ad7193_channels[] = {
> IIO_CHAN_SOFT_TIMESTAMP(14),
> };
>
> +static int ad7192_channels_config(struct iio_dev *indio_dev)
> +{
> + struct ad7192_state *st = iio_priv(indio_dev);
> + const struct iio_chan_spec *channels;
> + struct iio_chan_spec *chan;
> + int i;
> +
> + switch (st->devid) {
> + case ID_AD7193:
> + channels = ad7193_channels;
> + indio_dev->num_channels = ARRAY_SIZE(ad7193_channels);
> + break;
> + default:
> + channels = ad7192_channels;
> + indio_dev->num_channels = ARRAY_SIZE(ad7192_channels);
> + break;
> + }
> +
> + chan = devm_kcalloc(indio_dev->dev.parent, indio_dev->num_channels,
> + sizeof(*chan), GFP_KERNEL);
> + if (!chan)
> + return -ENOMEM;
> +
> + indio_dev->channels = chan;
> +
> + for (i = 0; i < indio_dev->num_channels; i++) {
> + *chan = channels[i];
> + if (chan->type != IIO_TEMP)
> + chan->info_mask_shared_by_type_available |=
> + BIT(IIO_CHAN_INFO_SCALE);
> + chan++;
> + }
> +
> + return 0;
> +}
> +
> static int ad7192_probe(struct spi_device *spi)
> {
> const struct ad7192_platform_data *pdata = dev_get_platdata(&spi->dev);
> @@ -687,16 +717,9 @@ static int ad7192_probe(struct spi_device *spi)
> indio_dev->name = spi_get_device_id(spi)->name;
> indio_dev->modes = INDIO_DIRECT_MODE;
>
> - switch (st->devid) {
> - case ID_AD7193:
> - indio_dev->channels = ad7193_channels;
> - indio_dev->num_channels = ARRAY_SIZE(ad7193_channels);
> - break;
> - default:
> - indio_dev->channels = ad7192_channels;
> - indio_dev->num_channels = ARRAY_SIZE(ad7192_channels);
> - break;
> - }
> + ret = ad7192_channels_config(indio_dev);
> + if (ret < 0)
> + goto error_disable_dvdd;
>
> if (st->devid == ID_AD7195)
> indio_dev->info = &ad7195_info;
prev parent reply other threads:[~2019-03-24 17:34 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-19 14:25 [PATCH] staging: iio: adc: ad7192: Use read_avail for available attributes Mircea Caprioru
2019-03-24 17:34 ` 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=20190324173427.62f004cb@archlinux \
--to=jic23@kernel.org \
--cc=Michael.Hennerich@analog.com \
--cc=gregkh@linuxfoundation.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mircea.caprioru@analog.com \
--cc=stefan.popa@analog.com \
/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 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.