Message ID | cover.1701971344.git.marcelo.schmitt1@gmail.com (mailing list archive) |
---|---|
Headers | show |
Series | Add support for AD7091R-2/-4/-8 | expand |
On Thu, Dec 7, 2023 at 12:36 PM Marcelo Schmitt <marcelo.schmitt@analog.com> wrote: > > From: Marcelo Schmitt <marcelo.schmitt1@gmail.com> > > ----------------- Updates ----------------- > > Applied all changes suggested to the previous series. > > I tried to better explain the changes but, since there is a fair amount of > rework in ad7091-base and ad7091r5, it may be hard to get the reasoning for the > early patches before looking at the patch for ad7091r8. > > Change log v2 -> v3: > - Split alert fix patch into 2 fix patches and one alignment cleanup patch > - Corrected Fixes tag format > - Moved MAINTAINERS update to the end of the series > - Reworded some commit messages to provide context and make their goal clearer > - Removed erroneous gmail sign off > - Created container struct to store chip_info, regmap_config, and callbacks > specific to each ADC design > - Created callbacks for chip specific tasks such as setting device operation mode > - Dropped the chip type enum struct > - Applied suggestions related to device tree documentation > - Added __aligned to list the of checkpatch attribute notes > - Other code style tidy ups. > > I see regmap's interface for reading device registers under /sys/kernel/debug/regmap/. > I can read all registers but can't write to any of them unless I force define > REGMAP_ALLOW_WRITE_DEBUGFS. > > When testing events for this driver I often write to device registers > to set different rising/falling thresholds. I do something like this: > # echo 0x17 0x100 > /sys/kernel/debug/iio/iio:device0/direct_reg_access > > I tried read/writing to files under iio:device events directory but always > get segmentation fault. I must be forgetting to implement something. > What am I missing? > It looks like event callbacks (.read_event_value and friends) are missing from `static const struct iio_info ad7091r_info = { ... }`. These callbacks aren't checked for NULL, e.g. in iio_ev_value_show(), so that is likely where the segfault is happening.
On 12/07, David Lechner wrote: > On Thu, Dec 7, 2023 at 12:36 PM Marcelo Schmitt > <marcelo.schmitt@analog.com> wrote: > > > > From: Marcelo Schmitt <marcelo.schmitt1@gmail.com> > > [...] > > > > I see regmap's interface for reading device registers under /sys/kernel/debug/regmap/. > > I can read all registers but can't write to any of them unless I force define > > REGMAP_ALLOW_WRITE_DEBUGFS. > > > > When testing events for this driver I often write to device registers > > to set different rising/falling thresholds. I do something like this: > > # echo 0x17 0x100 > /sys/kernel/debug/iio/iio:device0/direct_reg_access > > > > I tried read/writing to files under iio:device events directory but always > > get segmentation fault. I must be forgetting to implement something. > > What am I missing? > > > > It looks like event callbacks (.read_event_value and friends) are > missing from `static const struct iio_info ad7091r_info = { ... }`. > These callbacks aren't checked for NULL, e.g. in iio_ev_value_show(), > so that is likely where the segfault is happening. Hi David, thank you for pointing that out. Will implement those calls in v4.
From: Marcelo Schmitt <marcelo.schmitt1@gmail.com> ----------------- Updates ----------------- Applied all changes suggested to the previous series. I tried to better explain the changes but, since there is a fair amount of rework in ad7091-base and ad7091r5, it may be hard to get the reasoning for the early patches before looking at the patch for ad7091r8. Change log v2 -> v3: - Split alert fix patch into 2 fix patches and one alignment cleanup patch - Corrected Fixes tag format - Moved MAINTAINERS update to the end of the series - Reworded some commit messages to provide context and make their goal clearer - Removed erroneous gmail sign off - Created container struct to store chip_info, regmap_config, and callbacks specific to each ADC design - Created callbacks for chip specific tasks such as setting device operation mode - Dropped the chip type enum struct - Applied suggestions related to device tree documentation - Added __aligned to list the of checkpatch attribute notes - Other code style tidy ups. I see regmap's interface for reading device registers under /sys/kernel/debug/regmap/. I can read all registers but can't write to any of them unless I force define REGMAP_ALLOW_WRITE_DEBUGFS. When testing events for this driver I often write to device registers to set different rising/falling thresholds. I do something like this: # echo 0x17 0x100 > /sys/kernel/debug/iio/iio:device0/direct_reg_access I tried read/writing to files under iio:device events directory but always get segmentation fault. I must be forgetting to implement something. What am I missing? Thanks Marcelo ----------------- Context ----------------- This series adds support for AD7091R-2/-4/-8 ADCs which can do single shot or sequenced readings. Threshold events are also supported. Overall, AD7091R-2/-4/-8 are very similar to AD7091R-5 except they use SPI interface. Changes have been tested with raspberrypi and eval board on raspberrypi kernel 6.7-rc3 from raspberrypi fork. Link: https://wiki.analog.com/resources/tools-software/linux-drivers/iio-adc/ad7091r8 Marcelo Schmitt (13): scripts: checkpatch: Add __aligned to the list of attribute notes iio: adc: ad7091r: Populate device driver data field iio: adc: ad7091r: Set alert bit in config register iio: adc: ad7091r: Align arguments to function call parenthesis iio: adc: ad7091r: Move generic AD7091R code to base driver and header file iio: adc: ad7091r: Move chip init data to container struct iio: adc: ad7091r: Set device mode through chip_info callback iio: adc: ad7091r: Enable internal vref if external vref is not supplied iio: adc: ad7091r: Add chip_info callback to get conversion result channel dt-bindings: iio: Add AD7091R-8 iio: adc: Split AD7091R-5 config symbol iio: adc: Add support for AD7091R-8 MAINTAINERS: Add MAINTAINERS entry for AD7091R .../bindings/iio/adc/adi,ad7091r8.yaml | 99 +++++++ MAINTAINERS | 12 + drivers/iio/adc/Kconfig | 16 ++ drivers/iio/adc/Makefile | 4 +- drivers/iio/adc/ad7091r-base.c | 141 ++++------ drivers/iio/adc/ad7091r-base.h | 78 +++++- drivers/iio/adc/ad7091r5.c | 119 ++++---- drivers/iio/adc/ad7091r8.c | 261 ++++++++++++++++++ scripts/checkpatch.pl | 1 + 9 files changed, 597 insertions(+), 134 deletions(-) create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad7091r8.yaml create mode 100644 drivers/iio/adc/ad7091r8.c