2011-10-14 19:34:14 +04:00
/**
* Copyright ( c ) 2011 Jonathan Cameron
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation .
*
* Join together the various functionality of iio_simple_dummy driver
*/
2014-09-25 17:58:07 +04:00
# ifndef _IIO_SIMPLE_DUMMY_H_
# define _IIO_SIMPLE_DUMMY_H_
2011-10-14 19:34:14 +04:00
# include <linux/kernel.h>
struct iio_dummy_accel_calibscale ;
2014-11-10 15:45:29 +03:00
struct iio_dummy_regs ;
2011-10-14 19:34:14 +04:00
/**
* struct iio_dummy_state - device instance specific state .
* @ dac_val : cache for dac value
* @ single_ended_adc_val : cache for single ended adc value
* @ differential_adc_val : cache for differential adc value
* @ accel_val : cache for acceleration value
* @ accel_calibbias : cache for acceleration calibbias
* @ accel_calibscale : cache for acceleration calibscale
* @ lock : lock to ensure state is consistent
* @ event_irq : irq number for event line ( faked )
2015-04-24 16:40:42 +03:00
* @ event_val : cache for event threshold value
2011-10-14 19:34:14 +04:00
* @ event_en : cache of whether event is enabled
*/
struct iio_dummy_state {
int dac_val ;
int single_ended_adc_val ;
int differential_adc_val [ 2 ] ;
int accel_val ;
int accel_calibbias ;
2014-11-10 15:45:34 +03:00
int activity_running ;
int activity_walking ;
2011-10-14 19:34:14 +04:00
const struct iio_dummy_accel_calibscale * accel_calibscale ;
struct mutex lock ;
2014-11-10 15:45:29 +03:00
struct iio_dummy_regs * regs ;
2014-11-10 15:45:34 +03:00
int steps_enabled ;
int steps ;
int height ;
2011-10-14 19:34:14 +04:00
# ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
int event_irq ;
int event_val ;
bool event_en ;
2015-09-11 16:59:30 +03:00
s64 event_timestamp ;
2011-10-14 19:34:14 +04:00
# endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
} ;
# ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
struct iio_dev ;
int iio_simple_dummy_read_event_config ( struct iio_dev * indio_dev ,
2013-10-07 18:11:00 +04:00
const struct iio_chan_spec * chan ,
enum iio_event_type type ,
enum iio_event_direction dir ) ;
2011-10-14 19:34:14 +04:00
int iio_simple_dummy_write_event_config ( struct iio_dev * indio_dev ,
2013-10-07 18:11:00 +04:00
const struct iio_chan_spec * chan ,
enum iio_event_type type ,
enum iio_event_direction dir ,
2011-10-14 19:34:14 +04:00
int state ) ;
int iio_simple_dummy_read_event_value ( struct iio_dev * indio_dev ,
2013-10-07 18:11:00 +04:00
const struct iio_chan_spec * chan ,
enum iio_event_type type ,
enum iio_event_direction dir ,
enum iio_event_info info , int * val ,
int * val2 ) ;
2011-10-14 19:34:14 +04:00
int iio_simple_dummy_write_event_value ( struct iio_dev * indio_dev ,
2013-10-07 18:11:00 +04:00
const struct iio_chan_spec * chan ,
enum iio_event_type type ,
enum iio_event_direction dir ,
enum iio_event_info info , int val ,
int val2 ) ;
2011-10-14 19:34:14 +04:00
int iio_simple_dummy_events_register ( struct iio_dev * indio_dev ) ;
2015-05-30 11:20:16 +03:00
void iio_simple_dummy_events_unregister ( struct iio_dev * indio_dev ) ;
2011-10-14 19:34:14 +04:00
# else /* Stubs for when events are disabled at compile time */
static inline int
iio_simple_dummy_events_register ( struct iio_dev * indio_dev )
{
return 0 ;
} ;
2015-05-30 11:20:16 +03:00
static inline void
2011-10-14 19:34:14 +04:00
iio_simple_dummy_events_unregister ( struct iio_dev * indio_dev )
2015-05-30 11:20:16 +03:00
{ } ;
2011-10-14 19:34:14 +04:00
# endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS*/
2011-10-14 19:34:15 +04:00
/**
* enum iio_simple_dummy_scan_elements - scan index enum
2015-10-26 23:48:23 +03:00
* @ DUMMY_INDEX_VOLTAGE_0 : the single ended voltage channel
* @ DUMMY_INDEX_DIFFVOLTAGE_1M2 : first differential channel
* @ DUMMY_INDEX_DIFFVOLTAGE_3M4 : second differential channel
* @ DUMMY_INDEX_ACCELX : acceleration channel
2011-10-14 19:34:15 +04:00
*
* Enum provides convenient numbering for the scan index .
*/
enum iio_simple_dummy_scan_elements {
2015-10-26 23:48:23 +03:00
DUMMY_INDEX_VOLTAGE_0 ,
DUMMY_INDEX_DIFFVOLTAGE_1M2 ,
DUMMY_INDEX_DIFFVOLTAGE_3M4 ,
DUMMY_INDEX_ACCELX ,
2011-10-14 19:34:15 +04:00
} ;
2011-10-14 19:34:14 +04:00
2011-10-14 19:34:15 +04:00
# ifdef CONFIG_IIO_SIMPLE_DUMMY_BUFFER
2014-11-26 20:55:11 +03:00
int iio_simple_dummy_configure_buffer ( struct iio_dev * indio_dev ) ;
2011-10-14 19:34:15 +04:00
void iio_simple_dummy_unconfigure_buffer ( struct iio_dev * indio_dev ) ;
# else
2014-12-29 12:50:16 +03:00
static inline int iio_simple_dummy_configure_buffer ( struct iio_dev * indio_dev )
2011-10-14 19:34:15 +04:00
{
return 0 ;
} ;
2015-07-10 17:10:21 +03:00
2011-10-14 19:34:15 +04:00
static inline
void iio_simple_dummy_unconfigure_buffer ( struct iio_dev * indio_dev )
{ } ;
2014-09-25 17:58:07 +04:00
2011-10-14 19:34:15 +04:00
# endif /* CONFIG_IIO_SIMPLE_DUMMY_BUFFER */
2014-09-25 17:58:07 +04:00
# endif /* _IIO_SIMPLE_DUMMY_H_ */