mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 11:44:01 +08:00
staging:iio:events - new 64 bit code structure and push out drivers.
This costs us nothing in event storage (as we are carrying a 64 bit timestamp in the structure) and gives us lots more room to play with. Also allows for more channels which some parts need. V2: Cleanup some loose ends (such as the switch with only one option now). Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
32b5eecab0
commit
330c6c57e6
@ -200,14 +200,14 @@ static u8 lis3l02dq_axis_map[3][3] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int lis3l02dq_read_thresh(struct iio_dev *indio_dev,
|
static int lis3l02dq_read_thresh(struct iio_dev *indio_dev,
|
||||||
int e,
|
u64 e,
|
||||||
int *val)
|
int *val)
|
||||||
{
|
{
|
||||||
return lis3l02dq_read_reg_s16(indio_dev, LIS3L02DQ_REG_THS_L_ADDR, val);
|
return lis3l02dq_read_reg_s16(indio_dev, LIS3L02DQ_REG_THS_L_ADDR, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lis3l02dq_write_thresh(struct iio_dev *indio_dev,
|
static int lis3l02dq_write_thresh(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int val)
|
int val)
|
||||||
{
|
{
|
||||||
u16 value = val;
|
u16 value = val;
|
||||||
@ -534,7 +534,7 @@ static struct iio_chan_spec lis3l02dq_channels[] = {
|
|||||||
|
|
||||||
|
|
||||||
static ssize_t lis3l02dq_read_event_config(struct iio_dev *indio_dev,
|
static ssize_t lis3l02dq_read_event_config(struct iio_dev *indio_dev,
|
||||||
int event_code)
|
u64 event_code)
|
||||||
{
|
{
|
||||||
|
|
||||||
u8 val;
|
u8 val;
|
||||||
@ -586,7 +586,7 @@ error_ret:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int lis3l02dq_write_event_config(struct iio_dev *indio_dev,
|
static int lis3l02dq_write_event_config(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int state)
|
int state)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -695,7 +695,7 @@ static IIO_CONST_ATTR_TEMP_OFFSET("-214.6");
|
|||||||
* sca3000_read_thresh() - query of a threshold
|
* sca3000_read_thresh() - query of a threshold
|
||||||
**/
|
**/
|
||||||
static int sca3000_read_thresh(struct iio_dev *indio_dev,
|
static int sca3000_read_thresh(struct iio_dev *indio_dev,
|
||||||
int e,
|
u64 e,
|
||||||
int *val)
|
int *val)
|
||||||
{
|
{
|
||||||
int ret, i;
|
int ret, i;
|
||||||
@ -723,8 +723,8 @@ static int sca3000_read_thresh(struct iio_dev *indio_dev,
|
|||||||
* sca3000_write_thresh() control of threshold
|
* sca3000_write_thresh() control of threshold
|
||||||
**/
|
**/
|
||||||
static int sca3000_write_thresh(struct iio_dev *indio_dev,
|
static int sca3000_write_thresh(struct iio_dev *indio_dev,
|
||||||
int e,
|
u64 e,
|
||||||
int val)
|
int val)
|
||||||
{
|
{
|
||||||
struct sca3000_state *st = iio_priv(indio_dev);
|
struct sca3000_state *st = iio_priv(indio_dev);
|
||||||
int num = IIO_EVENT_CODE_EXTRACT_MODIFIER(e);
|
int num = IIO_EVENT_CODE_EXTRACT_MODIFIER(e);
|
||||||
@ -858,7 +858,7 @@ done:
|
|||||||
* sca3000_read_event_config() what events are enabled
|
* sca3000_read_event_config() what events are enabled
|
||||||
**/
|
**/
|
||||||
static int sca3000_read_event_config(struct iio_dev *indio_dev,
|
static int sca3000_read_event_config(struct iio_dev *indio_dev,
|
||||||
int e)
|
u64 e)
|
||||||
{
|
{
|
||||||
struct sca3000_state *st = iio_priv(indio_dev);
|
struct sca3000_state *st = iio_priv(indio_dev);
|
||||||
int ret;
|
int ret;
|
||||||
@ -961,7 +961,7 @@ error_ret:
|
|||||||
* this mode is disabled. Currently normal mode is assumed.
|
* this mode is disabled. Currently normal mode is assumed.
|
||||||
**/
|
**/
|
||||||
static int sca3000_write_event_config(struct iio_dev *indio_dev,
|
static int sca3000_write_event_config(struct iio_dev *indio_dev,
|
||||||
int e,
|
u64 e,
|
||||||
int state)
|
int state)
|
||||||
{
|
{
|
||||||
struct sca3000_state *st = iio_priv(indio_dev);
|
struct sca3000_state *st = iio_priv(indio_dev);
|
||||||
|
@ -553,7 +553,7 @@ static IIO_CONST_ATTR(sampling_frequency_available,
|
|||||||
"133000 665000 33300 16600 8300 4200 2000 1000");
|
"133000 665000 33300 16600 8300 4200 2000 1000");
|
||||||
|
|
||||||
static int max1363_read_thresh(struct iio_dev *indio_dev,
|
static int max1363_read_thresh(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int *val)
|
int *val)
|
||||||
{
|
{
|
||||||
struct max1363_state *st = iio_priv(indio_dev);
|
struct max1363_state *st = iio_priv(indio_dev);
|
||||||
@ -565,7 +565,7 @@ static int max1363_read_thresh(struct iio_dev *indio_dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int max1363_write_thresh(struct iio_dev *indio_dev,
|
static int max1363_write_thresh(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int val)
|
int val)
|
||||||
{
|
{
|
||||||
struct max1363_state *st = iio_priv(indio_dev);
|
struct max1363_state *st = iio_priv(indio_dev);
|
||||||
@ -593,7 +593,7 @@ static int max1363_write_thresh(struct iio_dev *indio_dev,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const int max1363_event_codes[] = {
|
static const u64 max1363_event_codes[] = {
|
||||||
IIO_UNMOD_EVENT_CODE(IIO_IN, 0, IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
|
IIO_UNMOD_EVENT_CODE(IIO_IN, 0, IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
|
||||||
IIO_UNMOD_EVENT_CODE(IIO_IN, 1, IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
|
IIO_UNMOD_EVENT_CODE(IIO_IN, 1, IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
|
||||||
IIO_UNMOD_EVENT_CODE(IIO_IN, 2, IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
|
IIO_UNMOD_EVENT_CODE(IIO_IN, 2, IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
|
||||||
@ -624,7 +624,7 @@ static irqreturn_t max1363_event_handler(int irq, void *private)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int max1363_read_event_config(struct iio_dev *indio_dev,
|
static int max1363_read_event_config(struct iio_dev *indio_dev,
|
||||||
int event_code)
|
u64 event_code)
|
||||||
{
|
{
|
||||||
struct max1363_state *st = iio_priv(indio_dev);
|
struct max1363_state *st = iio_priv(indio_dev);
|
||||||
|
|
||||||
@ -776,7 +776,7 @@ error_ret:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int max1363_write_event_config(struct iio_dev *indio_dev,
|
static int max1363_write_event_config(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int state)
|
int state)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
* the interrupt handler)
|
* the interrupt handler)
|
||||||
*/
|
*/
|
||||||
struct iio_event_data {
|
struct iio_event_data {
|
||||||
int id;
|
u64 id;
|
||||||
s64 timestamp;
|
s64 timestamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -48,19 +48,22 @@ enum iio_chan_type {
|
|||||||
#define IIO_IN IIO_VOLTAGE
|
#define IIO_IN IIO_VOLTAGE
|
||||||
#define IIO_IN_DIFF IIO_VOLTAGE_DIFF
|
#define IIO_IN_DIFF IIO_VOLTAGE_DIFF
|
||||||
|
|
||||||
#define IIO_MOD_X 0
|
enum iio_modifier {
|
||||||
#define IIO_MOD_LIGHT_BOTH 0
|
IIO_NO_MOD,
|
||||||
#define IIO_MOD_Y 1
|
IIO_MOD_X,
|
||||||
#define IIO_MOD_LIGHT_IR 1
|
IIO_MOD_Y,
|
||||||
#define IIO_MOD_Z 2
|
IIO_MOD_Z,
|
||||||
#define IIO_MOD_X_AND_Y 3
|
IIO_MOD_X_AND_Y,
|
||||||
#define IIO_MOD_X_ANX_Z 4
|
IIO_MOD_X_ANX_Z,
|
||||||
#define IIO_MOD_Y_AND_Z 5
|
IIO_MOD_Y_AND_Z,
|
||||||
#define IIO_MOD_X_AND_Y_AND_Z 6
|
IIO_MOD_X_AND_Y_AND_Z,
|
||||||
#define IIO_MOD_X_OR_Y 7
|
IIO_MOD_X_OR_Y,
|
||||||
#define IIO_MOD_X_OR_Z 8
|
IIO_MOD_X_OR_Z,
|
||||||
#define IIO_MOD_Y_OR_Z 9
|
IIO_MOD_Y_OR_Z,
|
||||||
#define IIO_MOD_X_OR_Y_OR_Z 10
|
IIO_MOD_X_OR_Y_OR_Z,
|
||||||
|
IIO_MOD_LIGHT_BOTH,
|
||||||
|
IIO_MOD_LIGHT_IR,
|
||||||
|
};
|
||||||
|
|
||||||
/* Could add the raw attributes as well - allowing buffer only devices */
|
/* Could add the raw attributes as well - allowing buffer only devices */
|
||||||
enum iio_chan_info_enum {
|
enum iio_chan_info_enum {
|
||||||
@ -243,17 +246,17 @@ struct iio_info {
|
|||||||
long mask);
|
long mask);
|
||||||
|
|
||||||
int (*read_event_config)(struct iio_dev *indio_dev,
|
int (*read_event_config)(struct iio_dev *indio_dev,
|
||||||
int event_code);
|
u64 event_code);
|
||||||
|
|
||||||
int (*write_event_config)(struct iio_dev *indio_dev,
|
int (*write_event_config)(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int state);
|
int state);
|
||||||
|
|
||||||
int (*read_event_value)(struct iio_dev *indio_dev,
|
int (*read_event_value)(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int *val);
|
int *val);
|
||||||
int (*write_event_value)(struct iio_dev *indio_dev,
|
int (*write_event_value)(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int val);
|
int val);
|
||||||
int (*validate_trigger)(struct iio_dev *indio_dev,
|
int (*validate_trigger)(struct iio_dev *indio_dev,
|
||||||
struct iio_trigger *trig);
|
struct iio_trigger *trig);
|
||||||
@ -328,7 +331,7 @@ void iio_device_unregister(struct iio_dev *dev_info);
|
|||||||
* @ev_code: What event
|
* @ev_code: What event
|
||||||
* @timestamp: When the event occurred
|
* @timestamp: When the event occurred
|
||||||
**/
|
**/
|
||||||
int iio_push_event(struct iio_dev *dev_info, int ev_code, s64 timestamp);
|
int iio_push_event(struct iio_dev *dev_info, u64 ev_code, s64 timestamp);
|
||||||
|
|
||||||
extern struct bus_type iio_bus_type;
|
extern struct bus_type iio_bus_type;
|
||||||
|
|
||||||
|
@ -71,15 +71,12 @@ static const char * const iio_chan_type_name_spec_complex[] = {
|
|||||||
[IIO_VOLTAGE_DIFF] = "voltage%d-voltage%d",
|
[IIO_VOLTAGE_DIFF] = "voltage%d-voltage%d",
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char * const iio_modifier_names_light[] = {
|
static const char * const iio_modifier_names[] = {
|
||||||
[IIO_MOD_LIGHT_BOTH] = "both",
|
|
||||||
[IIO_MOD_LIGHT_IR] = "ir",
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char * const iio_modifier_names_axial[] = {
|
|
||||||
[IIO_MOD_X] = "x",
|
[IIO_MOD_X] = "x",
|
||||||
[IIO_MOD_Y] = "y",
|
[IIO_MOD_Y] = "y",
|
||||||
[IIO_MOD_Z] = "z",
|
[IIO_MOD_Z] = "z",
|
||||||
|
[IIO_MOD_LIGHT_BOTH] = "both",
|
||||||
|
[IIO_MOD_LIGHT_IR] = "ir",
|
||||||
};
|
};
|
||||||
|
|
||||||
/* relies on pairs of these shared then separate */
|
/* relies on pairs of these shared then separate */
|
||||||
@ -124,7 +121,7 @@ struct iio_event_interface {
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
int iio_push_event(struct iio_dev *dev_info, int ev_code, s64 timestamp)
|
int iio_push_event(struct iio_dev *dev_info, u64 ev_code, s64 timestamp)
|
||||||
{
|
{
|
||||||
struct iio_event_interface *ev_int = dev_info->event_interface;
|
struct iio_event_interface *ev_int = dev_info->event_interface;
|
||||||
struct iio_detected_event_list *ev;
|
struct iio_detected_event_list *ev;
|
||||||
@ -409,32 +406,14 @@ static int __iio_build_postfix(struct iio_chan_spec const *chan,
|
|||||||
if (generic || (!chan->modified && !chan->extend_name)) {
|
if (generic || (!chan->modified && !chan->extend_name)) {
|
||||||
all_post = kasprintf(GFP_KERNEL, "%s", postfix);
|
all_post = kasprintf(GFP_KERNEL, "%s", postfix);
|
||||||
} else if (chan->modified) {
|
} else if (chan->modified) {
|
||||||
const char *intermediate;
|
|
||||||
switch (chan->type) {
|
|
||||||
case IIO_INTENSITY:
|
|
||||||
intermediate
|
|
||||||
= iio_modifier_names_light[chan->channel2];
|
|
||||||
break;
|
|
||||||
case IIO_ACCEL:
|
|
||||||
case IIO_GYRO:
|
|
||||||
case IIO_MAGN:
|
|
||||||
case IIO_INCLI:
|
|
||||||
case IIO_ROT:
|
|
||||||
case IIO_ANGL:
|
|
||||||
intermediate
|
|
||||||
= iio_modifier_names_axial[chan->channel2];
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
if (chan->extend_name)
|
if (chan->extend_name)
|
||||||
all_post = kasprintf(GFP_KERNEL, "%s_%s_%s",
|
all_post = kasprintf(GFP_KERNEL, "%s_%s_%s",
|
||||||
intermediate,
|
iio_modifier_names[chan->channel2],
|
||||||
chan->extend_name,
|
chan->extend_name,
|
||||||
postfix);
|
postfix);
|
||||||
else
|
else
|
||||||
all_post = kasprintf(GFP_KERNEL, "%s_%s",
|
all_post = kasprintf(GFP_KERNEL, "%s_%s",
|
||||||
intermediate,
|
iio_modifier_names[chan->channel2],
|
||||||
postfix);
|
postfix);
|
||||||
} else
|
} else
|
||||||
all_post = kasprintf(GFP_KERNEL, "%s_%s", chan->extend_name,
|
all_post = kasprintf(GFP_KERNEL, "%s_%s", chan->extend_name,
|
||||||
@ -824,28 +803,22 @@ static int iio_device_add_event_sysfs(struct iio_dev *dev_info,
|
|||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto error_ret;
|
goto error_ret;
|
||||||
}
|
}
|
||||||
switch (chan->type) {
|
if (chan->modified)
|
||||||
/* Switch this to a table at some point */
|
|
||||||
case IIO_VOLTAGE:
|
|
||||||
mask = IIO_UNMOD_EVENT_CODE(chan->type, chan->channel,
|
|
||||||
i/IIO_EV_TYPE_MAX,
|
|
||||||
i%IIO_EV_TYPE_MAX);
|
|
||||||
break;
|
|
||||||
case IIO_ACCEL:
|
|
||||||
mask = IIO_MOD_EVENT_CODE(chan->type, 0, chan->channel,
|
mask = IIO_MOD_EVENT_CODE(chan->type, 0, chan->channel,
|
||||||
i/IIO_EV_TYPE_MAX,
|
i/IIO_EV_TYPE_MAX,
|
||||||
i%IIO_EV_TYPE_MAX);
|
i%IIO_EV_TYPE_MAX);
|
||||||
break;
|
else if (chan->type == IIO_VOLTAGE_DIFF)
|
||||||
case IIO_VOLTAGE_DIFF:
|
mask = IIO_MOD_EVENT_CODE(chan->type,
|
||||||
mask = IIO_MOD_EVENT_CODE(chan->type, chan->channel,
|
chan->channel,
|
||||||
chan->channel2,
|
chan->channel2,
|
||||||
i/IIO_EV_TYPE_MAX,
|
i/IIO_EV_TYPE_MAX,
|
||||||
i%IIO_EV_TYPE_MAX);
|
i%IIO_EV_TYPE_MAX);
|
||||||
break;
|
else
|
||||||
default:
|
mask = IIO_UNMOD_EVENT_CODE(chan->type,
|
||||||
printk(KERN_INFO "currently unhandled type of event\n");
|
chan->channel,
|
||||||
continue;
|
i/IIO_EV_TYPE_MAX,
|
||||||
}
|
i%IIO_EV_TYPE_MAX);
|
||||||
|
|
||||||
ret = __iio_add_chan_devattr(postfix,
|
ret = __iio_add_chan_devattr(postfix,
|
||||||
"events",
|
"events",
|
||||||
chan,
|
chan,
|
||||||
|
@ -549,8 +549,8 @@ static const struct iio_chan_spec tsl2563_channels[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int tsl2563_read_thresh(struct iio_dev *indio_dev,
|
static int tsl2563_read_thresh(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int *val)
|
int *val)
|
||||||
{
|
{
|
||||||
struct tsl2563_chip *chip = iio_priv(indio_dev);
|
struct tsl2563_chip *chip = iio_priv(indio_dev);
|
||||||
|
|
||||||
@ -569,7 +569,7 @@ static int tsl2563_read_thresh(struct iio_dev *indio_dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t tsl2563_write_thresh(struct iio_dev *indio_dev,
|
static ssize_t tsl2563_write_thresh(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int val)
|
int val)
|
||||||
{
|
{
|
||||||
struct tsl2563_chip *chip = iio_priv(indio_dev);
|
struct tsl2563_chip *chip = iio_priv(indio_dev);
|
||||||
@ -617,8 +617,8 @@ static irqreturn_t tsl2563_event_handler(int irq, void *private)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int tsl2563_write_interrupt_config(struct iio_dev *indio_dev,
|
static int tsl2563_write_interrupt_config(struct iio_dev *indio_dev,
|
||||||
int event_code,
|
u64 event_code,
|
||||||
int state)
|
int state)
|
||||||
{
|
{
|
||||||
struct tsl2563_chip *chip = iio_priv(indio_dev);
|
struct tsl2563_chip *chip = iio_priv(indio_dev);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -659,7 +659,7 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int tsl2563_read_interrupt_config(struct iio_dev *indio_dev,
|
static int tsl2563_read_interrupt_config(struct iio_dev *indio_dev,
|
||||||
int event_code)
|
u64 event_code)
|
||||||
{
|
{
|
||||||
struct tsl2563_chip *chip = iio_priv(indio_dev);
|
struct tsl2563_chip *chip = iio_priv(indio_dev);
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -114,36 +114,40 @@ struct iio_const_attr {
|
|||||||
#define IIO_CONST_ATTR_TEMP_SCALE(_string) \
|
#define IIO_CONST_ATTR_TEMP_SCALE(_string) \
|
||||||
IIO_CONST_ATTR(temp_scale, _string)
|
IIO_CONST_ATTR(temp_scale, _string)
|
||||||
|
|
||||||
#define IIO_EV_TYPE_THRESH 0
|
enum iio_event_type {
|
||||||
#define IIO_EV_TYPE_MAG 1
|
IIO_EV_TYPE_THRESH,
|
||||||
#define IIO_EV_TYPE_ROC 2
|
IIO_EV_TYPE_MAG,
|
||||||
|
IIO_EV_TYPE_ROC,
|
||||||
|
};
|
||||||
|
|
||||||
#define IIO_EV_DIR_EITHER 0
|
enum iio_event_direction {
|
||||||
#define IIO_EV_DIR_RISING 1
|
IIO_EV_DIR_EITHER,
|
||||||
#define IIO_EV_DIR_FALLING 2
|
IIO_EV_DIR_RISING,
|
||||||
|
IIO_EV_DIR_FALLING,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IIO_EVENT_CODE(chan_type, modifier, direction, \
|
||||||
|
type, chan, chan1, chan2) \
|
||||||
|
(((u64)type << 56) | ((u64)direction << 48) | ((u64)modifier << 40) | \
|
||||||
|
((u64)chan_type << 32) | (chan2 << 16) | chan1 | chan)
|
||||||
|
|
||||||
#define IIO_EV_TYPE_MAX 8
|
#define IIO_EV_TYPE_MAX 8
|
||||||
#define IIO_EV_BIT(type, direction) \
|
#define IIO_EV_BIT(type, direction) \
|
||||||
(1 << (type*IIO_EV_TYPE_MAX + direction))
|
(1 << (type*IIO_EV_TYPE_MAX + direction))
|
||||||
|
|
||||||
#define IIO_EVENT_CODE(channelclass, orient_bit, number, \
|
|
||||||
modifier, type, direction) \
|
|
||||||
(channelclass | (orient_bit << 8) | ((number) << 9) | \
|
|
||||||
((modifier) << 13) | ((type) << 16) | ((direction) << 24))
|
|
||||||
|
|
||||||
#define IIO_MOD_EVENT_CODE(channelclass, number, modifier, \
|
#define IIO_MOD_EVENT_CODE(channelclass, number, modifier, \
|
||||||
type, direction) \
|
type, direction) \
|
||||||
IIO_EVENT_CODE(channelclass, 1, number, modifier, type, direction)
|
IIO_EVENT_CODE(channelclass, modifier, direction, type, number, 0, 0)
|
||||||
|
|
||||||
#define IIO_UNMOD_EVENT_CODE(channelclass, number, type, direction) \
|
#define IIO_UNMOD_EVENT_CODE(channelclass, number, type, direction) \
|
||||||
IIO_EVENT_CODE(channelclass, 0, number, 0, type, direction)
|
IIO_EVENT_CODE(channelclass, 0, direction, type, number, 0, 0)
|
||||||
|
|
||||||
#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 24) & 0xf)
|
#define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0xFF)
|
||||||
|
|
||||||
/* Event code number extraction depends on which type of event we have.
|
/* Event code number extraction depends on which type of event we have.
|
||||||
* Perhaps review this function in the future*/
|
* Perhaps review this function in the future*/
|
||||||
#define IIO_EVENT_CODE_EXTRACT_NUM(mask) ((mask >> 9) & 0x0f)
|
#define IIO_EVENT_CODE_EXTRACT_NUM(mask) (mask & 0xFFFF)
|
||||||
|
|
||||||
#define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 13) & 0x7)
|
#define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF)
|
||||||
|
|
||||||
#endif /* _INDUSTRIAL_IO_SYSFS_H_ */
|
#endif /* _INDUSTRIAL_IO_SYSFS_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user