From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Svyatoslav Ryhel <clamor95@gmail.com>
Cc: Jonathan Cameron <jic23@kernel.org>,
Lars-Peter Clausen <lars@metafoo.de>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Thierry Reding <thierry.reding@gmail.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
Javier Carrasco <javier.carrasco.cruz@gmail.com>,
Matti Vaittinen <mazziesaccount@gmail.com>,
Emil Gedenryd <emil.gedenryd@axis.com>,
Arthur Becker <arthur.becker@sentec.com>,
Mudit Sharma <muditsharma.info@gmail.com>,
Per-Daniel Olsson <perdaniel.olsson@axis.com>,
Subhajit Ghosh <subhajit.ghosh@tweaklogic.com>,
Ivan Orlov <ivan.orlov0322@gmail.com>,
David Heidelberg <david@ixit.cz>,
linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org
Subject: Re: [PATCH v1 2/3] iio: light: Add support for AL3000a illuminance sensor
Date: Wed, 12 Feb 2025 16:28:42 +0200 [thread overview]
Message-ID: <Z6ywGgofzU1bvm0H@smile.fi.intel.com> (raw)
In-Reply-To: <20250212064657.5683-3-clamor95@gmail.com>
On Wed, Feb 12, 2025 at 08:46:56AM +0200, Svyatoslav Ryhel wrote:
> AL3000a is a simple I2C-based ambient light sensor, which is
> closely related to AL3010 and AL3320a, but has significantly
> different hardware configuration.
(Note, the part of the below comments are applicable to your other series)
...
> +/*
> + * AL3000a - Dyna Image Ambient Light Sensor
> + */
Can be on a single line.
...
> +#include <linux/bitfield.h>
> +#include <linux/i2c.h>
> +#include <linux/module.h>
> +#include <linux/of.h>
No of*.h in the new code, please.
> +#include <linux/regulator/consumer.h>
Too small headers to be included. You use much more.
> +#include <linux/iio/iio.h>
> +#include <linux/iio/sysfs.h>
...
> +/*
> + * This are pre-calculated lux values based on possible output
> + * of sensor (range 0x00 - 0x3F)
> + */
types.h
> +static const u32 lux_table[64] = {
I think you don't need 64 to be there, but okay, I understand the intention.
> + 1, 1, 1, 2, 2, 2, 3, 4, 4, 5, 6, 7, 9, 11, 13, 16,
For the better readability and maintenance put pow-of-2 amount of values per
line, like 8, and add the respective comment:
1, 1, 1, 2, 2, 2, 3, 4, /* 0 - 7 */
4, 5, 6, 7, 9, 11, 13, 16, /* 8 - 15 */
> + 19, 22, 27, 32, 39, 46, 56, 67, 80, 96, 116, 139,
> + 167, 200, 240, 289, 347, 416, 499, 600, 720, 864,
> + 1037, 1245, 1495, 1795, 2155, 2587, 3105, 3728, 4475,
> + 5373, 6450, 7743, 9296, 11160, 13397, 16084, 19309,
> + 23180, 27828, 33408, 40107, 48148, 57803, 69393,
> + 83306, 100000
Leave trailing comma, it's not a terminated list generally speaking
(in the future it might grow).
> +};
...
> +struct al3000a_data {
> + struct i2c_client *client;
struct regmap *map;
will suffice, I believe, see below.
> + struct regulator *vdd_supply;
> +};
...
> +static const struct iio_chan_spec al3000a_channels[] = {
> + {
> + .type = IIO_LIGHT,
> + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
> + BIT(IIO_CHAN_INFO_SCALE),
> + }
Leave trailing comma
> +};
...
> +static int al3000a_set_pwr(struct al3000a_data *data, bool pwr)
> +{
> + struct device *dev = &data->client->dev;
> + u8 val = pwr ? AL3000A_CONFIG_ENABLE : AL3000A_CONFIG_DISABLE;
> + int ret;
> +
> + if (pwr) {
> + ret = regulator_enable(data->vdd_supply);
> + if (ret < 0) {
> + dev_err(dev, "failed to enable vdd power supply\n");
> + return ret;
With struct regmap *map in mind, the struct device *dev can be derived using
the respective API.
> + }
> + }
> +
> + ret = i2c_smbus_write_byte_data(data->client, AL3000A_REG_SYSTEM, val);
Why not using regmap I²C APIs?
> + if (ret < 0) {
> + dev_err(dev, "failed to write system register\n");
> + return ret;
> + }
> +
> + if (!pwr) {
> + ret = regulator_disable(data->vdd_supply);
> + if (ret < 0) {
> + dev_err(dev, "failed to disable vdd power supply\n");
> + return ret;
> + }
> + }
> +
> + return 0;
> +}
...
> +static int al3000a_read_raw(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan, int *val,
> + int *val2, long mask)
> +{
> + struct al3000a_data *data = iio_priv(indio_dev);
> + int ret;
> +
> + switch (mask) {
> + case IIO_CHAN_INFO_RAW:
> + ret = i2c_smbus_read_byte_data(data->client,
> + AL3000A_REG_DATA);
It may be a single line. There is a lot of room.
> + if (ret < 0)
> + return ret;
> +
> + *val = lux_table[ret & 0x3F];
I believe you want to define the size of that table and use it here.
Also this needs a comment to explain the meaning of the ret >= 64 and
when it may happen.
> + return IIO_VAL_INT;
> + case IIO_CHAN_INFO_SCALE:
> + *val = 1;
> +
> + return IIO_VAL_INT;
> + default:
> + break;
> + }
> +
> + return -EINVAL;
Return directly from the default case.
> +}
...
> +static int al3000a_probe(struct i2c_client *client)
> +{
> + struct al3000a_data *data;
> + struct iio_dev *indio_dev;
> + int ret;
struct device *dev = &client->dev;
will make the below lines shorter and easier to read.
> + indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
> + if (!indio_dev)
> + return -ENOMEM;
> +
> + data = iio_priv(indio_dev);
> + i2c_set_clientdata(client, indio_dev);
> + data->client = client;
> +
> + data->vdd_supply = devm_regulator_get(&client->dev, "vdd");
> + if (IS_ERR(data->vdd_supply))
> + return dev_err_probe(&client->dev, PTR_ERR(data->vdd_supply),
> + "failed to get vdd regulator\n");
err.h
> + indio_dev->info = &al3000a_info;
> + indio_dev->name = AL3000A_DRV_NAME;
> + indio_dev->channels = al3000a_channels;
> + indio_dev->num_channels = ARRAY_SIZE(al3000a_channels);
array_size.h
> + indio_dev->modes = INDIO_DIRECT_MODE;
> +
> + ret = al3000a_init(data);
> + if (ret < 0)
> + return dev_err_probe(&client->dev, ret,
> + "failed to init ALS\n");
Single line.
> + ret = devm_add_action_or_reset(&client->dev, al3000a_set_pwr_off,
> + data);
Ditto.
device.h
> + if (ret < 0)
> + return dev_err_probe(&client->dev, ret,
> + "failed to add action\n");
> +
> + return devm_iio_device_register(&client->dev, indio_dev);
> +}
...
> +static const struct of_device_id al3000a_of_match[] = {
mod_devicetable.h
> + { .compatible = "dynaimage,al3000a" },
> + { /* sentinel */ }
> +};
...
> +static struct i2c_driver al3000a_driver = {
> + .driver = {
> + .name = AL3000A_DRV_NAME,
> + .of_match_table = al3000a_of_match,
> + .pm = pm_sleep_ptr(&al3000a_pm_ops),
pm.h
> + },
> + .probe = al3000a_probe,
> +};
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2025-02-12 14:28 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-12 6:46 [PATCH v1 0/3] iio: light: add al3000a als support Svyatoslav Ryhel
2025-02-12 6:46 ` [PATCH v1 1/3] dt-bindings: iio: light: al3010: add al3000a support Svyatoslav Ryhel
2025-02-12 19:20 ` Conor Dooley
2025-02-12 19:39 ` Svyatoslav Ryhel
2025-02-13 20:15 ` Conor Dooley
2025-02-14 6:21 ` Svyatoslav Ryhel
2025-02-18 17:13 ` Conor Dooley
2025-02-13 9:11 ` Krzysztof Kozlowski
2025-02-13 9:12 ` Svyatoslav Ryhel
2025-02-12 6:46 ` [PATCH v1 2/3] iio: light: Add support for AL3000a illuminance sensor Svyatoslav Ryhel
2025-02-12 14:28 ` Andy Shevchenko [this message]
2025-02-12 15:20 ` Svyatoslav Ryhel
2025-02-12 16:10 ` Andy Shevchenko
2025-02-12 16:36 ` Svyatoslav Ryhel
2025-02-12 17:32 ` Andy Shevchenko
2025-02-12 17:28 ` Svyatoslav Ryhel
2025-02-12 17:34 ` Andy Shevchenko
2025-02-12 6:46 ` [PATCH v1 3/3] ARM: tegra: tf101: Add al3000a illuminance sensor node Svyatoslav Ryhel
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=Z6ywGgofzU1bvm0H@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=arthur.becker@sentec.com \
--cc=clamor95@gmail.com \
--cc=conor+dt@kernel.org \
--cc=david@ixit.cz \
--cc=devicetree@vger.kernel.org \
--cc=emil.gedenryd@axis.com \
--cc=ivan.orlov0322@gmail.com \
--cc=javier.carrasco.cruz@gmail.com \
--cc=jic23@kernel.org \
--cc=jonathanh@nvidia.com \
--cc=krzk+dt@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=mazziesaccount@gmail.com \
--cc=muditsharma.info@gmail.com \
--cc=perdaniel.olsson@axis.com \
--cc=robh@kernel.org \
--cc=subhajit.ghosh@tweaklogic.com \
--cc=thierry.reding@gmail.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.