]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: light: ltr390: Add debugfs register access support
authorAkshay Jindal <akshayaj.lkd@gmail.com>
Mon, 28 Jul 2025 16:14:41 +0000 (21:44 +0530)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 16 Aug 2025 10:57:06 +0000 (11:57 +0100)
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>
drivers/iio/light/ltr390.c

index ee59bbb8aa09e9d8973bc92e002592dbe527114d..7733830dca6706087c55d8099f41d585f19bcd09 100644 (file)
 #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)