iio: light: ltr390: Add debugfs register access support

Add support for debugfs_reg_access through the driver's iio_info structure
to enable low-level register read/write access for debugging.

Signed-off-by: Akshay Jindal <akshayaj.lkd@gmail.com>
Link: https://patch.msgid.link/20250728161445.13261-1-akshayaj.lkd@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Akshay Jindal 2025-07-28 21:44:41 +05:30 committed by Jonathan Cameron
parent 33c52b2d85
commit 9da51431c3

View File

@ -38,12 +38,21 @@
#define LTR390_ALS_UVS_GAIN 0x05
#define LTR390_PART_ID 0x06
#define LTR390_MAIN_STATUS 0x07
#define LTR390_ALS_DATA 0x0D
#define LTR390_ALS_DATA_BYTE(n) (LTR390_ALS_DATA + (n))
#define LTR390_UVS_DATA 0x10
#define LTR390_UVS_DATA_BYTE(n) (LTR390_UVS_DATA + (n))
#define LTR390_INT_CFG 0x19
#define LTR390_INT_PST 0x1A
#define LTR390_THRESH_UP 0x21
#define LTR390_THRESH_UP_BYTE(n) (LTR390_THRESH_UP + (n))
#define LTR390_THRESH_LOW 0x24
#define LTR390_THRESH_LOW_BYTE(n) (LTR390_THRESH_LOW + (n))
#define LTR390_PART_NUMBER_ID 0xb
#define LTR390_ALS_UVS_GAIN_MASK GENMASK(2, 0)
@ -98,11 +107,39 @@ struct ltr390_data {
int int_time_us;
};
static const struct regmap_range ltr390_readable_reg_ranges[] = {
regmap_reg_range(LTR390_MAIN_CTRL, LTR390_MAIN_CTRL),
regmap_reg_range(LTR390_ALS_UVS_MEAS_RATE, LTR390_MAIN_STATUS),
regmap_reg_range(LTR390_ALS_DATA_BYTE(0), LTR390_UVS_DATA_BYTE(2)),
regmap_reg_range(LTR390_INT_CFG, LTR390_INT_PST),
regmap_reg_range(LTR390_THRESH_UP_BYTE(0), LTR390_THRESH_LOW_BYTE(2)),
};
static const struct regmap_access_table ltr390_readable_reg_table = {
.yes_ranges = ltr390_readable_reg_ranges,
.n_yes_ranges = ARRAY_SIZE(ltr390_readable_reg_ranges),
};
static const struct regmap_range ltr390_writeable_reg_ranges[] = {
regmap_reg_range(LTR390_MAIN_CTRL, LTR390_MAIN_CTRL),
regmap_reg_range(LTR390_ALS_UVS_MEAS_RATE, LTR390_ALS_UVS_GAIN),
regmap_reg_range(LTR390_INT_CFG, LTR390_INT_PST),
regmap_reg_range(LTR390_THRESH_UP_BYTE(0), LTR390_THRESH_LOW_BYTE(2)),
};
static const struct regmap_access_table ltr390_writeable_reg_table = {
.yes_ranges = ltr390_writeable_reg_ranges,
.n_yes_ranges = ARRAY_SIZE(ltr390_writeable_reg_ranges),
};
static const struct regmap_config ltr390_regmap_config = {
.name = "ltr390",
.reg_bits = 8,
.reg_stride = 1,
.val_bits = 8,
.max_register = LTR390_THRESH_LOW_BYTE(2),
.rd_table = &ltr390_readable_reg_table,
.wr_table = &ltr390_writeable_reg_table,
};
/* Sampling frequency is in mili Hz and mili Seconds */
@ -586,6 +623,20 @@ static int ltr390_write_event_config(struct iio_dev *indio_dev,
}
}
static int ltr390_debugfs_reg_access(struct iio_dev *indio_dev,
unsigned int reg, unsigned int writeval,
unsigned int *readval)
{
struct ltr390_data *data = iio_priv(indio_dev);
guard(mutex)(&data->lock);
if (readval)
return regmap_read(data->regmap, reg, readval);
return regmap_write(data->regmap, reg, writeval);
}
static const struct iio_info ltr390_info = {
.read_raw = ltr390_read_raw,
.write_raw = ltr390_write_raw,
@ -594,6 +645,7 @@ static const struct iio_info ltr390_info = {
.read_event_config = ltr390_read_event_config,
.write_event_value = ltr390_write_event_value,
.write_event_config = ltr390_write_event_config,
.debugfs_reg_access = ltr390_debugfs_reg_access,
};
static irqreturn_t ltr390_interrupt_handler(int irq, void *private)