a99773d9ac
[ Upstream commit 020e71c7ffc25dfe29ed9be6c2d39af7bd7f661f ] AD7091R-5 devices are supported by the ad7091r-5 driver together with the ad7091r-base driver. Those drivers declared iio events for notifying user space when ADC readings fall bellow the thresholds of low limit registers or above the values set in high limit registers. However, to configure iio events and their thresholds, a set of callback functions must be implemented and those were not present until now. The consequence of trying to configure ad7091r-5 events without the proper callback functions was a null pointer dereference in the kernel because the pointers to the callback functions were not set. Implement event configuration callbacks allowing users to read/write event thresholds and enable/disable event generation. Since the event spec structs are generic to AD7091R devices, also move those from the ad7091r-5 driver the base driver so they can be reused when support for ad7091r-2/-4/-8 be added. Fixes: ca69300173b6 ("iio: adc: Add support for AD7091R5 ADC") Suggested-by: David Lechner <dlechner@baylibre.com> Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com> Link: https://lore.kernel.org/r/59552d3548dabd56adc3107b7b4869afee2b0c3c.1703013352.git.marcelo.schmitt1@gmail.com Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
32 lines
774 B
C
Executable file
32 lines
774 B
C
Executable file
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* AD7091RX Analog to Digital converter driver
|
|
*
|
|
* Copyright 2014-2019 Analog Devices Inc.
|
|
*/
|
|
|
|
#ifndef __DRIVERS_IIO_ADC_AD7091R_BASE_H__
|
|
#define __DRIVERS_IIO_ADC_AD7091R_BASE_H__
|
|
|
|
/* AD7091R_REG_CH_LIMIT */
|
|
#define AD7091R_HIGH_LIMIT 0xFFF
|
|
#define AD7091R_LOW_LIMIT 0x0
|
|
|
|
struct device;
|
|
struct ad7091r_state;
|
|
|
|
struct ad7091r_chip_info {
|
|
unsigned int num_channels;
|
|
const struct iio_chan_spec *channels;
|
|
unsigned int vref_mV;
|
|
};
|
|
|
|
extern const struct iio_event_spec ad7091r_events[3];
|
|
|
|
extern const struct regmap_config ad7091r_regmap_config;
|
|
|
|
int ad7091r_probe(struct device *dev, const char *name,
|
|
const struct ad7091r_chip_info *chip_info,
|
|
struct regmap *map, int irq);
|
|
|
|
#endif /* __DRIVERS_IIO_ADC_AD7091R_BASE_H__ */
|