[PATCH 1/3] iio: light: veml6035: fix read_avail in no_irq case for veml6035
From: Javier Carrasco
Date: Mon Oct 07 2024 - 16:37:23 EST
The iio_info is identical for veml6030 and veml6035. Moreover,
veml6035_info_no_irq is missing the initialization of the read_avail
member, which is actually a bug if no irq is provided.
Instead of adding the missing initialization, remove the device-specific
iio_info and use the existing one for the veml6030.
Fixes: ccc26bd7d7d7 ("iio: light: veml6030: add support for veml6035")
Signed-off-by: Javier Carrasco <javier.carrasco.cruz@xxxxxxxxx>
---
drivers/iio/light/veml6030.c | 26 ++------------------------
1 file changed, 2 insertions(+), 24 deletions(-)
diff --git a/drivers/iio/light/veml6030.c b/drivers/iio/light/veml6030.c
index a5deae333554..ca0379945b1c 100644
--- a/drivers/iio/light/veml6030.c
+++ b/drivers/iio/light/veml6030.c
@@ -56,8 +56,6 @@ struct veml603x_chip {
const char *name;
const int(*scale_vals)[][2];
const int num_scale_vals;
- const struct iio_info *info;
- const struct iio_info *info_no_irq;
int (*hw_init)(struct iio_dev *indio_dev, struct device *dev);
int (*set_als_gain)(struct iio_dev *indio_dev, int val, int val2);
int (*get_als_gain)(struct iio_dev *indio_dev, int *val, int *val2);
@@ -829,28 +827,12 @@ static const struct iio_info veml6030_info = {
.event_attrs = &veml6030_event_attr_group,
};
-static const struct iio_info veml6035_info = {
- .read_raw = veml6030_read_raw,
- .read_avail = veml6030_read_avail,
- .write_raw = veml6030_write_raw,
- .read_event_value = veml6030_read_event_val,
- .write_event_value = veml6030_write_event_val,
- .read_event_config = veml6030_read_interrupt_config,
- .write_event_config = veml6030_write_interrupt_config,
- .event_attrs = &veml6030_event_attr_group,
-};
-
static const struct iio_info veml6030_info_no_irq = {
.read_raw = veml6030_read_raw,
.read_avail = veml6030_read_avail,
.write_raw = veml6030_write_raw,
};
-static const struct iio_info veml6035_info_no_irq = {
- .read_raw = veml6030_read_raw,
- .write_raw = veml6030_write_raw,
-};
-
static irqreturn_t veml6030_event_handler(int irq, void *private)
{
int ret, reg, evtdir;
@@ -1039,9 +1021,9 @@ static int veml6030_probe(struct i2c_client *client)
"irq %d request failed\n",
client->irq);
- indio_dev->info = data->chip->info;
+ indio_dev->info = &veml6030_info;
} else {
- indio_dev->info = data->chip->info_no_irq;
+ indio_dev->info = &veml6030_info_no_irq;
}
ret = data->chip->hw_init(indio_dev, &client->dev);
@@ -1084,8 +1066,6 @@ static const struct veml603x_chip veml6030_chip = {
.name = "veml6030",
.scale_vals = &veml6030_scale_vals,
.num_scale_vals = ARRAY_SIZE(veml6030_scale_vals),
- .info = &veml6030_info,
- .info_no_irq = &veml6030_info_no_irq,
.hw_init = veml6030_hw_init,
.set_als_gain = veml6030_set_als_gain,
.get_als_gain = veml6030_get_als_gain,
@@ -1095,8 +1075,6 @@ static const struct veml603x_chip veml6035_chip = {
.name = "veml6035",
.scale_vals = &veml6035_scale_vals,
.num_scale_vals = ARRAY_SIZE(veml6035_scale_vals),
- .info = &veml6035_info,
- .info_no_irq = &veml6035_info_no_irq,
.hw_init = veml6035_hw_init,
.set_als_gain = veml6035_set_als_gain,
.get_als_gain = veml6035_get_als_gain,
--
2.43.0