From: Jonathan Cameron <jic23@kernel.org>
To: "Vianney le Clément de Saint-Marcq"
<vianney.leclement@essensium.com>,
linux-iio@vger.kernel.org
Cc: "Arnout Vandecappelle (Essensium/Mind)" <arnout@mind.be>
Subject: Re: [PATCH v2 3/7] iio: mlx90614: Support devices with dual IR sensor
Date: Sat, 28 Mar 2015 12:44:11 +0000 [thread overview]
Message-ID: <5516A21B.10409@kernel.org> (raw)
In-Reply-To: <1427212459-31585-4-git-send-email-vianney.leclement@essensium.com>
On 24/03/15 15:54, Vianney le Clément de Saint-Marcq wrote:
> The model is detected by reading the EEPROM configuration during
> probing.
>
> Signed-off-by: Vianney le Clément de Saint-Marcq <vianney.leclement@essensium.com>
> Cc: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
>
Applied to the togreg branch of iio.git - initially pushed out as testing
for the autobuilders to play with it.
Thanks,
> ---
>
> v2: * remove symmetrical ambient channel
> * rename _probe_model to _probe_num_ir_sensors
> ---
> drivers/iio/temperature/mlx90614.c | 67 ++++++++++++++++++++++++++++++++------
> 1 file changed, 57 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/iio/temperature/mlx90614.c b/drivers/iio/temperature/mlx90614.c
> index a2e3aa6..a112fc9 100644
> --- a/drivers/iio/temperature/mlx90614.c
> +++ b/drivers/iio/temperature/mlx90614.c
> @@ -2,6 +2,7 @@
> * mlx90614.c - Support for Melexis MLX90614 contactless IR temperature sensor
> *
> * Copyright (c) 2014 Peter Meerwald <pmeerw@pmeerw.net>
> + * Copyright (c) 2015 Essensium NV
> *
> * This file is subject to the terms and conditions of version 2 of
> * the GNU General Public License. See the file COPYING in the main
> @@ -59,26 +60,34 @@ static int mlx90614_read_raw(struct iio_dev *indio_dev,
> int *val2, long mask)
> {
> struct mlx90614_data *data = iio_priv(indio_dev);
> + u8 cmd;
> s32 ret;
>
> switch (mask) {
> case IIO_CHAN_INFO_RAW: /* 0.02K / LSB */
> switch (channel->channel2) {
> case IIO_MOD_TEMP_AMBIENT:
> - ret = i2c_smbus_read_word_data(data->client,
> - MLX90614_TA);
> - if (ret < 0)
> - return ret;
> + cmd = MLX90614_TA;
> break;
> case IIO_MOD_TEMP_OBJECT:
> - ret = i2c_smbus_read_word_data(data->client,
> - MLX90614_TOBJ1);
> - if (ret < 0)
> - return ret;
> + switch (channel->channel) {
> + case 0:
> + cmd = MLX90614_TOBJ1;
> + break;
> + case 1:
> + cmd = MLX90614_TOBJ2;
> + break;
> + default:
> + return -EINVAL;
> + }
> break;
> default:
> return -EINVAL;
> }
> +
> + ret = i2c_smbus_read_word_data(data->client, cmd);
> + if (ret < 0)
> + return ret;
> *val = ret;
> return IIO_VAL_INT;
> case IIO_CHAN_INFO_OFFSET:
> @@ -110,6 +119,16 @@ static const struct iio_chan_spec mlx90614_channels[] = {
> .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
> BIT(IIO_CHAN_INFO_SCALE),
> },
> + {
> + .type = IIO_TEMP,
> + .indexed = 1,
> + .modified = 1,
> + .channel = 1,
> + .channel2 = IIO_MOD_TEMP_OBJECT,
> + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
> + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
> + BIT(IIO_CHAN_INFO_SCALE),
> + },
> };
>
> static const struct iio_info mlx90614_info = {
> @@ -117,11 +136,25 @@ static const struct iio_info mlx90614_info = {
> .driver_module = THIS_MODULE,
> };
>
> +/* Return 0 for single sensor, 1 for dual sensor, <0 on error. */
> +static int mlx90614_probe_num_ir_sensors(struct i2c_client *client)
> +{
> + s32 ret;
> +
> + ret = i2c_smbus_read_word_data(client, MLX90614_CONFIG);
> +
> + if (ret < 0)
> + return ret;
> +
> + return (ret & MLX90614_CONFIG_DUAL_MASK) ? 1 : 0;
> +}
> +
> static int mlx90614_probe(struct i2c_client *client,
> const struct i2c_device_id *id)
> {
> struct iio_dev *indio_dev;
> struct mlx90614_data *data;
> + int ret;
>
> if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA))
> return -ENODEV;
> @@ -139,8 +172,21 @@ static int mlx90614_probe(struct i2c_client *client,
> indio_dev->modes = INDIO_DIRECT_MODE;
> indio_dev->info = &mlx90614_info;
>
> - indio_dev->channels = mlx90614_channels;
> - indio_dev->num_channels = ARRAY_SIZE(mlx90614_channels);
> + ret = mlx90614_probe_num_ir_sensors(client);
> + switch (ret) {
> + case 0:
> + dev_dbg(&client->dev, "Found single sensor");
> + indio_dev->channels = mlx90614_channels;
> + indio_dev->num_channels = 2;
> + break;
> + case 1:
> + dev_dbg(&client->dev, "Found dual sensor");
> + indio_dev->channels = mlx90614_channels;
> + indio_dev->num_channels = 3;
> + break;
> + default:
> + return ret;
> + }
>
> return iio_device_register(indio_dev);
> }
> @@ -170,5 +216,6 @@ static struct i2c_driver mlx90614_driver = {
> module_i2c_driver(mlx90614_driver);
>
> MODULE_AUTHOR("Peter Meerwald <pmeerw@pmeerw.net>");
> +MODULE_AUTHOR("Vianney le Clément de Saint-Marcq <vianney.leclement@essensium.com>");
> MODULE_DESCRIPTION("Melexis MLX90614 contactless IR temperature sensor driver");
> MODULE_LICENSE("GPL");
>
next prev parent reply other threads:[~2015-03-28 12:44 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-24 15:54 [PATCH v2 0/7] iio: mlx90614 enhancements Vianney le Clément de Saint-Marcq
2015-03-24 15:54 ` Vianney le Clément de Saint-Marcq
2015-03-24 15:54 ` [PATCH v2 1/7] iio: mlx90614: Refactor register symbols Vianney le Clément de Saint-Marcq
2015-03-28 12:40 ` Jonathan Cameron
2015-03-24 15:54 ` [PATCH v2 2/7] iio: mlx90614: Add symbols for accessible registers Vianney le Clément de Saint-Marcq
2015-03-24 15:54 ` [PATCH v2 3/7] iio: mlx90614: Support devices with dual IR sensor Vianney le Clément de Saint-Marcq
2015-03-28 12:44 ` Jonathan Cameron [this message]
2015-03-24 15:54 ` [PATCH v2 4/7] iio: core: Introduce IIO_CHAN_INFO_EMISSIVITY Vianney le Clément de Saint-Marcq
2015-03-24 16:02 ` Lars-Peter Clausen
2015-03-28 12:45 ` Jonathan Cameron
2015-03-24 15:54 ` [PATCH v2 5/7] iio: mlx90614: Add emissivity setting Vianney le Clément de Saint-Marcq
2015-03-28 12:46 ` Jonathan Cameron
2015-03-24 15:54 ` [PATCH v2 6/7] iio: mlx90614: Add power management Vianney le Clément de Saint-Marcq
2015-03-24 15:54 ` Vianney le Clément de Saint-Marcq
2015-03-28 12:54 ` Jonathan Cameron
2015-03-28 12:54 ` Jonathan Cameron
2015-03-24 15:54 ` [PATCH v2 7/7] iio: mlx90614: Check for errors in read values Vianney le Clément de Saint-Marcq
2015-03-28 13:43 ` Jonathan Cameron
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=5516A21B.10409@kernel.org \
--to=jic23@kernel.org \
--cc=arnout@mind.be \
--cc=linux-iio@vger.kernel.org \
--cc=vianney.leclement@essensium.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.