From: Jonathan Cameron <jic23@kernel.org>
To: Andreas Dannenberg <dannenberg@ti.com>,
linux-iio@vger.kernel.org, devicetree@vger.kernel.org
Cc: Felipe Balbi <balbi@ti.com>
Subject: Re: [PATCH v3 1/2] iio: light: add support for TI's opt3001 light sensor
Date: Sun, 05 Jul 2015 15:08:12 +0100 [thread overview]
Message-ID: <55993A4C.10105@kernel.org> (raw)
In-Reply-To: <1435876079-26287-2-git-send-email-dannenberg@ti.com>
On 02/07/15 23:27, Andreas Dannenberg wrote:
> TI's opt3001 light sensor is a simple and yet powerful
> little device. The device provides 99% IR rejection,
> automatic full-scale, very low power consumption and
> measurements from 0.01 to 83k lux.
>
> This patch adds support for that device using the IIO
> framework.
>
> See http://www.ti.com/product/opt3001 for more information.
>
> Signed-off-by: Felipe Balbi <balbi@ti.com>
> Signed-off-by: Andreas Dannenberg <dannenberg@ti.com>
Hi Andreas,
Looking pretty good to me, though I'd like to give Peter time to take
another look and give his reviewed-by etc.
One really minor suggestion from me...
<snip>
> +
> +static int opt3001_probe(struct i2c_client *client,
> + const struct i2c_device_id *id)
> +{
> + struct device *dev = &client->dev;
> +
> + struct iio_dev *iio;
> + struct opt3001 *opt;
> + int irq = client->irq;
> + int ret = -ENOMEM;
> +
> + iio = devm_iio_device_alloc(dev, sizeof(*opt));
> + if (!iio)
return -ENOMEM; would be cleaner, then there is no need to initialize
ret either.
> + return ret;
> +
> + opt = iio_priv(iio);
> + opt->client = client;
> + opt->dev = dev;
> +
> + mutex_init(&opt->lock);
> + init_waitqueue_head(&opt->result_ready_queue);
> + i2c_set_clientdata(client, iio);
> +
> + ret = opt3001_read_id(opt);
> + if (ret)
> + return ret;
> +
> + ret = opt3001_configure(opt);
> + if (ret)
> + return ret;
> +
> + iio->name = client->name;
> + iio->channels = opt3001_channels;
> + iio->num_channels = ARRAY_SIZE(opt3001_channels);
> + iio->dev.parent = dev;
> + iio->modes = INDIO_DIRECT_MODE;
> + iio->info = &opt3001_info;
> +
> + ret = devm_iio_device_register(dev, iio);
> + if (ret) {
> + dev_err(dev, "failed to register IIO device\n");
> + return ret;
> + }
> +
> + ret = request_threaded_irq(irq, NULL, opt3001_irq,
> + IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
> + "opt3001", iio);
> + if (ret) {
> + dev_err(dev, "failed to request IRQ #%d\n", irq);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static int opt3001_remove(struct i2c_client *client)
> +{
> + struct iio_dev *iio = i2c_get_clientdata(client);
> + struct opt3001 *opt = iio_priv(iio);
> + int ret;
> + u16 reg;
> +
> + free_irq(client->irq, iio);
> +
> + ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_CONFIGURATION);
> + if (ret < 0) {
> + dev_err(opt->dev, "failed to read register %02x\n",
> + OPT3001_CONFIGURATION);
> + return ret;
> + }
> +
> + reg = ret;
> + opt3001_set_mode(opt, ®, OPT3001_CONFIGURATION_M_SHUTDOWN);
> +
> + ret = i2c_smbus_write_word_swapped(opt->client, OPT3001_CONFIGURATION,
> + reg);
> + if (ret < 0) {
> + dev_err(opt->dev, "failed to write register %02x\n",
> + OPT3001_CONFIGURATION);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static const struct i2c_device_id opt3001_id[] = {
> + { "opt3001", 0 },
> + { } /* Terminating Entry */
> +};
> +MODULE_DEVICE_TABLE(i2c, opt3001_id);
> +
> +static const struct of_device_id opt3001_of_match[] = {
> + { .compatible = "ti,opt3001" },
> + { }
> +};
> +
> +static struct i2c_driver opt3001_driver = {
> + .probe = opt3001_probe,
> + .remove = opt3001_remove,
> + .id_table = opt3001_id,
> +
> + .driver = {
> + .name = "opt3001",
> + .of_match_table = of_match_ptr(opt3001_of_match),
> + .owner = THIS_MODULE,
> + },
> +};
> +
> +module_i2c_driver(opt3001_driver);
> +
> +MODULE_LICENSE("GPL v2");
> +MODULE_AUTHOR("Andreas Dannenberg <dannenberg@ti.com>");
> +MODULE_DESCRIPTION("Texas Instruments OPT3001 Light Sensor Driver");
>
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Andreas Dannenberg <dannenberg-l0cyMroinI0@public.gmane.org>,
linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org>
Subject: Re: [PATCH v3 1/2] iio: light: add support for TI's opt3001 light sensor
Date: Sun, 05 Jul 2015 15:08:12 +0100 [thread overview]
Message-ID: <55993A4C.10105@kernel.org> (raw)
In-Reply-To: <1435876079-26287-2-git-send-email-dannenberg-l0cyMroinI0@public.gmane.org>
On 02/07/15 23:27, Andreas Dannenberg wrote:
> TI's opt3001 light sensor is a simple and yet powerful
> little device. The device provides 99% IR rejection,
> automatic full-scale, very low power consumption and
> measurements from 0.01 to 83k lux.
>
> This patch adds support for that device using the IIO
> framework.
>
> See http://www.ti.com/product/opt3001 for more information.
>
> Signed-off-by: Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Andreas Dannenberg <dannenberg-l0cyMroinI0@public.gmane.org>
Hi Andreas,
Looking pretty good to me, though I'd like to give Peter time to take
another look and give his reviewed-by etc.
One really minor suggestion from me...
<snip>
> +
> +static int opt3001_probe(struct i2c_client *client,
> + const struct i2c_device_id *id)
> +{
> + struct device *dev = &client->dev;
> +
> + struct iio_dev *iio;
> + struct opt3001 *opt;
> + int irq = client->irq;
> + int ret = -ENOMEM;
> +
> + iio = devm_iio_device_alloc(dev, sizeof(*opt));
> + if (!iio)
return -ENOMEM; would be cleaner, then there is no need to initialize
ret either.
> + return ret;
> +
> + opt = iio_priv(iio);
> + opt->client = client;
> + opt->dev = dev;
> +
> + mutex_init(&opt->lock);
> + init_waitqueue_head(&opt->result_ready_queue);
> + i2c_set_clientdata(client, iio);
> +
> + ret = opt3001_read_id(opt);
> + if (ret)
> + return ret;
> +
> + ret = opt3001_configure(opt);
> + if (ret)
> + return ret;
> +
> + iio->name = client->name;
> + iio->channels = opt3001_channels;
> + iio->num_channels = ARRAY_SIZE(opt3001_channels);
> + iio->dev.parent = dev;
> + iio->modes = INDIO_DIRECT_MODE;
> + iio->info = &opt3001_info;
> +
> + ret = devm_iio_device_register(dev, iio);
> + if (ret) {
> + dev_err(dev, "failed to register IIO device\n");
> + return ret;
> + }
> +
> + ret = request_threaded_irq(irq, NULL, opt3001_irq,
> + IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
> + "opt3001", iio);
> + if (ret) {
> + dev_err(dev, "failed to request IRQ #%d\n", irq);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static int opt3001_remove(struct i2c_client *client)
> +{
> + struct iio_dev *iio = i2c_get_clientdata(client);
> + struct opt3001 *opt = iio_priv(iio);
> + int ret;
> + u16 reg;
> +
> + free_irq(client->irq, iio);
> +
> + ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_CONFIGURATION);
> + if (ret < 0) {
> + dev_err(opt->dev, "failed to read register %02x\n",
> + OPT3001_CONFIGURATION);
> + return ret;
> + }
> +
> + reg = ret;
> + opt3001_set_mode(opt, ®, OPT3001_CONFIGURATION_M_SHUTDOWN);
> +
> + ret = i2c_smbus_write_word_swapped(opt->client, OPT3001_CONFIGURATION,
> + reg);
> + if (ret < 0) {
> + dev_err(opt->dev, "failed to write register %02x\n",
> + OPT3001_CONFIGURATION);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static const struct i2c_device_id opt3001_id[] = {
> + { "opt3001", 0 },
> + { } /* Terminating Entry */
> +};
> +MODULE_DEVICE_TABLE(i2c, opt3001_id);
> +
> +static const struct of_device_id opt3001_of_match[] = {
> + { .compatible = "ti,opt3001" },
> + { }
> +};
> +
> +static struct i2c_driver opt3001_driver = {
> + .probe = opt3001_probe,
> + .remove = opt3001_remove,
> + .id_table = opt3001_id,
> +
> + .driver = {
> + .name = "opt3001",
> + .of_match_table = of_match_ptr(opt3001_of_match),
> + .owner = THIS_MODULE,
> + },
> +};
> +
> +module_i2c_driver(opt3001_driver);
> +
> +MODULE_LICENSE("GPL v2");
> +MODULE_AUTHOR("Andreas Dannenberg <dannenberg-l0cyMroinI0@public.gmane.org>");
> +MODULE_DESCRIPTION("Texas Instruments OPT3001 Light Sensor Driver");
>
next prev parent reply other threads:[~2015-07-05 14:08 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-02 22:27 [PATCH v3 0/2] iio: light: add support for TI's opt3001 light sensor Andreas Dannenberg
2015-07-02 22:27 ` Andreas Dannenberg
2015-07-02 22:27 ` [PATCH v3 1/2] " Andreas Dannenberg
2015-07-02 22:27 ` Andreas Dannenberg
2015-07-05 14:08 ` Jonathan Cameron [this message]
2015-07-05 14:08 ` Jonathan Cameron
2015-07-08 16:44 ` Andreas Dannenberg
2015-07-08 16:44 ` Andreas Dannenberg
2015-07-19 13:16 ` Jonathan Cameron
2015-07-19 13:16 ` Jonathan Cameron
2015-07-02 22:27 ` [PATCH v3 2/2] iio: light: opt3001: Add device tree binding documentation Andreas Dannenberg
2015-07-02 22:27 ` Andreas Dannenberg
2015-07-05 14:09 ` Jonathan Cameron
2015-07-05 14:09 ` Jonathan Cameron
2015-07-19 13:17 ` Jonathan Cameron
2015-07-19 13:17 ` Jonathan Cameron
2015-07-20 18:22 ` Andreas Dannenberg
2015-07-20 18:22 ` Andreas Dannenberg
2015-07-23 20:02 ` Jonathan Cameron
2015-07-23 20:02 ` 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=55993A4C.10105@kernel.org \
--to=jic23@kernel.org \
--cc=balbi@ti.com \
--cc=dannenberg@ti.com \
--cc=devicetree@vger.kernel.org \
--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 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.