From: Lars-Peter Clausen <lars@metafoo.de>
To: Thierry Reding <thierry.reding@avionic-design.de>
Cc: Jonathan Cameron <jic23@cam.ac.uk>,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] iio: adc: Add Texas Instruments ADC081C021/027 support
Date: Mon, 19 Nov 2012 10:33:48 +0100 [thread overview]
Message-ID: <50A9FCFC.60002@metafoo.de> (raw)
In-Reply-To: <1353313289-983-1-git-send-email-thierry.reding@avionic-design.de>
On 11/19/2012 09:21 AM, Thierry Reding wrote:
> Add support for reading conversion results from the ADC and provide them
> through a single IIO channel. A proper scaling factor is also exported
> based on the reference voltage provided by a regulator.
>
> Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
> ---
[...]
> +static int adc081c_read_raw(struct iio_dev *iio,
> + struct iio_chan_spec const *channel, int *value,
> + int *micro, long mask)
> +{
> + struct adc081c *adc = iio_priv(iio);
> + int err, scale;
> +
> + switch (mask) {
> + case IIO_CHAN_INFO_RAW:
> + err = i2c_smbus_read_word_swapped(adc->i2c, REG_CONV_RES);
> + if (err < 0)
> + return err;
> +
> + *value = (err >> 4) & 0xff;
> + return IIO_VAL_INT;
> +
> + case IIO_CHAN_INFO_SCALE:
> + err = regulator_get_voltage(adc->ref);
> + if (err < 0)
> + return err;
> +
> + scale = err / 255;
Shouldn't this be 256?
> +
> + *value = scale / 1000000;
> + *micro = scale % 1000000;
scale for voltages is in microvolt, so I think it this is off by a factor of
1000.
For ADCs it often makes sense to use IIO_VAL_FRACTIONAL_LOG2 with the val
being set to the reference voltage (in mV) and val2 being set to the number
of bits.
E.g in your case
*val = err / 1000;
*val2 = 8;
> +
> + return IIO_VAL_INT_PLUS_MICRO;
> +
> + default:
> + break;
> + }
> +
> + return -EINVAL;
> +}
> +
> +static const struct iio_info adc081c_info = {
> + .read_raw = adc081c_read_raw,
> + .driver_module = THIS_MODULE,
> +};
> +
> +static int adc081c_probe(struct i2c_client *client,
> + const struct i2c_device_id *id)
> +{
> + struct iio_dev *iio;
> + struct adc081c *adc;
> + int err;
> +
> + if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA))
> + return -ENODEV;
> +
> + iio = iio_device_alloc(sizeof(*adc));
> + if (!iio)
> + return -ENOMEM;
> +
> + adc = iio_priv(iio);
> + adc->i2c = client;
> +
> + adc->ref = regulator_get(&client->dev, "vref");
> + if (IS_ERR(adc->ref)) {
> + err = PTR_ERR(adc->ref);
> + goto iio_free;
> + }
> +
> + err = regulator_enable(adc->ref);
> + if (err < 0)
> + goto regulator_put;
> +
> + iio->dev.parent = &client->dev;
> + iio->name = dev_name(&client->dev);
> + iio->modes = INDIO_DIRECT_MODE;
> + iio->info = &adc081c_info;
> +
> + adc->channel.type = IIO_VOLTAGE;
> + adc->channel.info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT |
> + IIO_CHAN_INFO_RAW_SEPARATE_BIT;
nitpick: Since it is the same for each driver I'd make the channel static const.
> +
> + iio->channels = &adc->channel;
> + iio->num_channels = 1;
> +
[...]
next prev parent reply other threads:[~2012-11-19 9:33 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-19 8:21 [PATCH] iio: adc: Add Texas Instruments ADC081C021/027 support Thierry Reding
2012-11-19 9:33 ` Lars-Peter Clausen [this message]
2012-11-19 9:50 ` Thierry Reding
2012-11-19 10:04 ` Lars-Peter Clausen
2012-11-19 10:23 ` Thierry Reding
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=50A9FCFC.60002@metafoo.de \
--to=lars@metafoo.de \
--cc=jic23@cam.ac.uk \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=thierry.reding@avionic-design.de \
/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.