Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: dac: ad3552r-hs: add debugfs reg access

Add debugfs register access.

Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Signed-off-by: Angelo Dureghello <adureghello@baylibre.com>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20250319-wip-bl-ad3552r-fixes-v3-1-9975b38c0082@baylibre.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Angelo Dureghello and committed by
Jonathan Cameron
3c8fd200 d9848cb6

+25
+4
drivers/iio/dac/ad3552r-common.c
··· 43 43 .num_ranges = ARRAY_SIZE(ad3542r_ch_ranges), 44 44 .requires_output_range = true, 45 45 .num_spi_data_lanes = 2, 46 + .max_reg_addr = 0x46, 46 47 }; 47 48 EXPORT_SYMBOL_NS_GPL(ad3541r_model_data, "IIO_AD3552R"); 48 49 ··· 55 54 .num_ranges = ARRAY_SIZE(ad3542r_ch_ranges), 56 55 .requires_output_range = true, 57 56 .num_spi_data_lanes = 2, 57 + .max_reg_addr = 0x49, 58 58 }; 59 59 EXPORT_SYMBOL_NS_GPL(ad3542r_model_data, "IIO_AD3552R"); 60 60 ··· 67 65 .num_ranges = ARRAY_SIZE(ad3552r_ch_ranges), 68 66 .requires_output_range = false, 69 67 .num_spi_data_lanes = 4, 68 + .max_reg_addr = 0x46, 70 69 }; 71 70 EXPORT_SYMBOL_NS_GPL(ad3551r_model_data, "IIO_AD3552R"); 72 71 ··· 79 76 .num_ranges = ARRAY_SIZE(ad3552r_ch_ranges), 80 77 .requires_output_range = false, 81 78 .num_spi_data_lanes = 4, 79 + .max_reg_addr = 0x49, 82 80 }; 83 81 EXPORT_SYMBOL_NS_GPL(ad3552r_model_data, "IIO_AD3552R"); 84 82
+20
drivers/iio/dac/ad3552r-hs.c
··· 464 464 gain, 1); 465 465 } 466 466 467 + static int ad3552r_hs_reg_access(struct iio_dev *indio_dev, unsigned int reg, 468 + unsigned int writeval, unsigned int *readval) 469 + { 470 + struct ad3552r_hs_state *st = iio_priv(indio_dev); 471 + 472 + if (reg > st->model_data->max_reg_addr) 473 + return -EINVAL; 474 + 475 + /* 476 + * There are 8, 16 or 24 bit registers, but HDL supports only reading 8 477 + * or 16 bit data, not 24. So, also to avoid to check any proper read 478 + * alignment, supporting only 8-bit readings here. 479 + */ 480 + if (readval) 481 + return ad3552r_hs_reg_read(st, reg, readval, 1); 482 + 483 + return st->data->bus_reg_write(st->back, reg, writeval, 1); 484 + } 485 + 467 486 static int ad3552r_hs_setup(struct ad3552r_hs_state *st) 468 487 { 469 488 u16 id; ··· 658 639 static const struct iio_info ad3552r_hs_info = { 659 640 .read_raw = &ad3552r_hs_read_raw, 660 641 .write_raw = &ad3552r_hs_write_raw, 642 + .debugfs_reg_access = &ad3552r_hs_reg_access, 661 643 }; 662 644 663 645 static int ad3552r_hs_probe(struct platform_device *pdev)
+1
drivers/iio/dac/ad3552r.h
··· 156 156 int num_ranges; 157 157 bool requires_output_range; 158 158 int num_spi_data_lanes; 159 + int max_reg_addr; 159 160 }; 160 161 161 162 struct ad3552r_ch_data {