brintos

brintos / linux-shallow public Read only

0
0
Text · 3.6 KiB · a91622a Raw
127 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/**3 * Copyright (c) 2011 Jonathan Cameron4 *5 * Join together the various functionality of iio_simple_dummy driver6 */7 8#ifndef _IIO_SIMPLE_DUMMY_H_9#define _IIO_SIMPLE_DUMMY_H_10#include <linux/kernel.h>11 12struct iio_dummy_accel_calibscale;13struct iio_dummy_regs;14 15/**16 * struct iio_dummy_state - device instance specific state.17 * @dac_val:			cache for dac value18 * @single_ended_adc_val:	cache for single ended adc value19 * @differential_adc_val:	cache for differential adc value20 * @accel_val:			cache for acceleration value21 * @accel_calibbias:		cache for acceleration calibbias22 * @accel_calibscale:		cache for acceleration calibscale23 * @lock:			lock to ensure state is consistent24 * @event_irq:			irq number for event line (faked)25 * @event_val:			cache for event threshold value26 * @event_en:			cache of whether event is enabled27 */28struct iio_dummy_state {29	int dac_val;30	int single_ended_adc_val;31	int differential_adc_val[2];32	int accel_val;33	int accel_calibbias;34	int activity_running;35	int activity_walking;36	const struct iio_dummy_accel_calibscale *accel_calibscale;37	struct mutex lock;38	struct iio_dummy_regs *regs;39	int steps_enabled;40	int steps;41	int height;42#ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS43	int event_irq;44	int event_val;45	bool event_en;46	s64 event_timestamp;47#endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */48};49 50#ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS51 52struct iio_dev;53 54int iio_simple_dummy_read_event_config(struct iio_dev *indio_dev,55				       const struct iio_chan_spec *chan,56				       enum iio_event_type type,57				       enum iio_event_direction dir);58 59int iio_simple_dummy_write_event_config(struct iio_dev *indio_dev,60					const struct iio_chan_spec *chan,61					enum iio_event_type type,62					enum iio_event_direction dir,63					int state);64 65int iio_simple_dummy_read_event_value(struct iio_dev *indio_dev,66				      const struct iio_chan_spec *chan,67				      enum iio_event_type type,68				      enum iio_event_direction dir,69				      enum iio_event_info info, int *val,70				      int *val2);71 72int iio_simple_dummy_write_event_value(struct iio_dev *indio_dev,73				       const struct iio_chan_spec *chan,74				       enum iio_event_type type,75				       enum iio_event_direction dir,76				       enum iio_event_info info, int val,77				       int val2);78 79int iio_simple_dummy_events_register(struct iio_dev *indio_dev);80void iio_simple_dummy_events_unregister(struct iio_dev *indio_dev);81 82#else /* Stubs for when events are disabled at compile time */83 84static inline int85iio_simple_dummy_events_register(struct iio_dev *indio_dev)86{87	return 0;88}89 90static inline void91iio_simple_dummy_events_unregister(struct iio_dev *indio_dev)92{}93 94#endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS*/95 96/**97 * enum iio_simple_dummy_scan_elements - scan index enum98 * @DUMMY_INDEX_VOLTAGE_0:         the single ended voltage channel99 * @DUMMY_INDEX_DIFFVOLTAGE_1M2:   first differential channel100 * @DUMMY_INDEX_DIFFVOLTAGE_3M4:   second differential channel101 * @DUMMY_INDEX_ACCELX:            acceleration channel102 *103 * Enum provides convenient numbering for the scan index.104 */105enum iio_simple_dummy_scan_elements {106	DUMMY_INDEX_VOLTAGE_0,107	DUMMY_INDEX_DIFFVOLTAGE_1M2,108	DUMMY_INDEX_DIFFVOLTAGE_3M4,109	DUMMY_INDEX_ACCELX,110};111 112#ifdef CONFIG_IIO_SIMPLE_DUMMY_BUFFER113int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev);114void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev);115#else116static inline int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)117{118	return 0;119}120 121static inline122void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev)123{}124 125#endif /* CONFIG_IIO_SIMPLE_DUMMY_BUFFER */126#endif /* _IIO_SIMPLE_DUMMY_H_ */127