2011-10-14 16:34:14 +01: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 16:58:07 +03:00
# ifndef _IIO_SIMPLE_DUMMY_H_
# define _IIO_SIMPLE_DUMMY_H_
2011-10-14 16:34:14 +01:00
# include <linux/kernel.h>
struct iio_dummy_accel_calibscale ;
2014-11-10 14:45:29 +02:00
struct iio_dummy_regs ;
2011-10-14 16:34:14 +01: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 09:40:42 -04:00
* @ event_val : cache for event threshold value
2011-10-14 16:34:14 +01: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 14:45:34 +02:00
int activity_running ;
int activity_walking ;
2011-10-14 16:34:14 +01:00
const struct iio_dummy_accel_calibscale * accel_calibscale ;
struct mutex lock ;
2014-11-10 14:45:29 +02:00
struct iio_dummy_regs * regs ;
2014-11-10 14:45:34 +02:00
int steps_enabled ;
int steps ;
int height ;
2011-10-14 16:34:14 +01: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 16:34:14 +01: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 15:11:00 +01:00
const struct iio_chan_spec * chan ,
enum iio_event_type type ,
enum iio_event_direction dir ) ;
2011-10-14 16:34:14 +01:00
int iio_simple_dummy_write_event_config ( struct iio_dev * indio_dev ,
2013-10-07 15:11:00 +01:00
const struct iio_chan_spec * chan ,
enum iio_event_type type ,
enum iio_event_direction dir ,
2011-10-14 16:34:14 +01:00
int state ) ;
int iio_simple_dummy_read_event_value ( struct iio_dev * indio_dev ,
2013-10-07 15:11:00 +01: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 16:34:14 +01:00
int iio_simple_dummy_write_event_value ( struct iio_dev * indio_dev ,
2013-10-07 15:11:00 +01: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 16:34:14 +01: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 16:34:14 +01: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 ;
2016-12-20 17:38:10 +01:00
}
2011-10-14 16:34:14 +01:00
2015-05-30 11:20:16 +03:00
static inline void
2011-10-14 16:34:14 +01:00
iio_simple_dummy_events_unregister ( struct iio_dev * indio_dev )
2016-12-20 17:38:10 +01:00
{ }
2011-10-14 16:34:14 +01:00
# endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS*/
2011-10-14 16:34:15 +01:00
/**
* enum iio_simple_dummy_scan_elements - scan index enum
2015-10-26 13:48:23 -07: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 16:34:15 +01:00
*
* Enum provides convenient numbering for the scan index .
*/
enum iio_simple_dummy_scan_elements {
2015-10-26 13:48:23 -07:00
DUMMY_INDEX_VOLTAGE_0 ,
DUMMY_INDEX_DIFFVOLTAGE_1M2 ,
DUMMY_INDEX_DIFFVOLTAGE_3M4 ,
DUMMY_INDEX_ACCELX ,
2011-10-14 16:34:15 +01:00
} ;
2011-10-14 16:34:14 +01:00
2011-10-14 16:34:15 +01:00
# ifdef CONFIG_IIO_SIMPLE_DUMMY_BUFFER
2014-11-26 18:55:11 +01:00
int iio_simple_dummy_configure_buffer ( struct iio_dev * indio_dev ) ;
2011-10-14 16:34:15 +01:00
void iio_simple_dummy_unconfigure_buffer ( struct iio_dev * indio_dev ) ;
# else
2014-12-29 11:50:16 +02:00
static inline int iio_simple_dummy_configure_buffer ( struct iio_dev * indio_dev )
2011-10-14 16:34:15 +01:00
{
return 0 ;
2016-12-20 17:38:10 +01:00
}
2015-07-10 17:10:21 +03:00
2011-10-14 16:34:15 +01:00
static inline
void iio_simple_dummy_unconfigure_buffer ( struct iio_dev * indio_dev )
2016-12-20 17:38:10 +01:00
{ }
2014-09-25 16:58:07 +03:00
2011-10-14 16:34:15 +01:00
# endif /* CONFIG_IIO_SIMPLE_DUMMY_BUFFER */
2014-09-25 16:58:07 +03:00
# endif /* _IIO_SIMPLE_DUMMY_H_ */