Re: [PATCH v2 3/4] iio: light: ltr501: Add ltr329 driver support
From: Nuno Sá
Date: Wed Jul 15 2026 - 09:22:12 EST
On Wed, Jul 15, 2026 at 02:27:25PM +0200, Esben Haabendal wrote:
> This adds support for the LTR-329ALS-01 chip, which is similar to
> LTR-303ALS-01, except for interrupt, which LTR-329ALS-01 chip does not
> have.
>
> Signed-off-by: Esben Haabendal <esben@xxxxxxxxxx>
> ---
Hi, I have a small not below. Kind of personal preference though. But
what Joshua mentioned should be addressed. With that:
Reviewed-by: Nuno Sá <nuno.sa@xxxxxxxxxx>
> drivers/iio/light/ltr501.c | 33 +++++++++++++++++++++++++++++++++
> 1 file changed, 33 insertions(+)
>
> diff --git a/drivers/iio/light/ltr501.c b/drivers/iio/light/ltr501.c
> index 7d045be78c6d..379e57ac5f5b 100644
> --- a/drivers/iio/light/ltr501.c
> +++ b/drivers/iio/light/ltr501.c
> @@ -15,6 +15,7 @@
> #include <linux/delay.h>
> #include <linux/regmap.h>
> #include <linux/regulator/consumer.h>
> +#include <linux/array_size.h> // for ARRAY_SIZE
>
...
>
> + if (!ltr501_has_irq_support(data->chip_info))
> + return 0;
> +
> if (val < 0 || val2 < 0)
> return -EINVAL;
>
> @@ -1257,6 +1270,18 @@ static const struct ltr501_chip_info ltr501_chip_info_tbl[] = {
> .channels = ltr301_channels,
> .no_channels = ARRAY_SIZE(ltr301_channels),
> },
> + [ltr329] = {
> + .partid = 0x0A,
> + .als_gain = ltr559_als_gain_tbl,
> + .als_gain_tbl_size = ARRAY_SIZE(ltr559_als_gain_tbl),
> + .als_mode_active = BIT(0),
> + .als_gain_mask = BIT(2) | BIT(3) | BIT(4),
> + .als_gain_shift = 2,
> + .info = <r301_info_no_irq,
> + .info_no_irq = <r301_info_no_irq,
> + .channels = ltr301_channels,
> + .no_channels = ARRAY_SIZE(ltr301_channels),
Instead of playing the above game with info vs info_no_irq, an explicit
has_no_irq would probably be better. I mean conceptually if the pointers
are the same, it could also mean that both are with IRQ support. With
it, I think it would be safe to leave the .info pointer as NULL as it
would be always overwritten.
Having said the above, so strong feelings about it so up to you :)
- Nuno Sá
> + },
> };
>
> static int ltr501_write_contr(struct ltr501_data *data, u8 als_val, u8 ps_val)
> @@ -1531,6 +1556,12 @@ static int ltr501_probe(struct i2c_client *client)
> return ret;
>
> if (client->irq > 0) {
> + if (!ltr501_has_irq_support(data->chip_info)) {
> + dev_err(&client->dev, "chip does not support irq\n");
> + ret = -EINVAL;
> + goto powerdown_on_error;
> + }
> +
> ret = devm_request_threaded_irq(&client->dev, client->irq,
> NULL, ltr501_interrupt_handler,
> IRQF_TRIGGER_FALLING |
> @@ -1604,6 +1635,7 @@ static const struct i2c_device_id ltr501_id[] = {
> { .name = "ltr559", .driver_data = ltr559 },
> { .name = "ltr301", .driver_data = ltr301 },
> { .name = "ltr303", .driver_data = ltr303 },
> + { .name = "ltr329", .driver_data = ltr329 },
> { }
> };
> MODULE_DEVICE_TABLE(i2c, ltr501_id);
> @@ -1613,6 +1645,7 @@ static const struct of_device_id ltr501_of_match[] = {
> { .compatible = "liteon,ltr559", },
> { .compatible = "liteon,ltr301", },
> { .compatible = "liteon,ltr303", },
> + { .compatible = "liteon,ltr329", },
> { }
> };
> MODULE_DEVICE_TABLE(of, ltr501_of_match);
>
> --
> 2.55.0
>