Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
iio
iio.h
Go to the documentation of this file.
1
2
/* The industrial I/O core
3
*
4
* Copyright (c) 2008 Jonathan Cameron
5
*
6
* This program is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License version 2 as published by
8
* the Free Software Foundation.
9
*/
10
#ifndef _INDUSTRIAL_IO_H_
11
#define _INDUSTRIAL_IO_H_
12
13
#include <linux/device.h>
14
#include <
linux/cdev.h
>
15
#include <
linux/iio/types.h
>
16
/* IIO TODO LIST */
17
/*
18
* Provide means of adjusting timer accuracy.
19
* Currently assumes nano seconds.
20
*/
21
22
enum
iio_chan_info_enum
{
23
IIO_CHAN_INFO_RAW
= 0,
24
IIO_CHAN_INFO_PROCESSED
,
25
IIO_CHAN_INFO_SCALE
,
26
IIO_CHAN_INFO_OFFSET
,
27
IIO_CHAN_INFO_CALIBSCALE
,
28
IIO_CHAN_INFO_CALIBBIAS
,
29
IIO_CHAN_INFO_PEAK
,
30
IIO_CHAN_INFO_PEAK_SCALE
,
31
IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW
,
32
IIO_CHAN_INFO_AVERAGE_RAW
,
33
IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
,
34
IIO_CHAN_INFO_SAMP_FREQ
,
35
IIO_CHAN_INFO_FREQUENCY
,
36
IIO_CHAN_INFO_PHASE
,
37
IIO_CHAN_INFO_HARDWAREGAIN
,
38
IIO_CHAN_INFO_HYSTERESIS
,
39
};
40
41
#define IIO_CHAN_INFO_SHARED_BIT(type) BIT(type*2)
42
#define IIO_CHAN_INFO_SEPARATE_BIT(type) BIT(type*2 + 1)
43
#define IIO_CHAN_INFO_BITS(type) (IIO_CHAN_INFO_SHARED_BIT(type) | \
44
IIO_CHAN_INFO_SEPARATE_BIT(type))
45
46
#define IIO_CHAN_INFO_RAW_SEPARATE_BIT \
47
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_RAW)
48
#define IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT \
49
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PROCESSED)
50
#define IIO_CHAN_INFO_SCALE_SEPARATE_BIT \
51
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SCALE)
52
#define IIO_CHAN_INFO_SCALE_SHARED_BIT \
53
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SCALE)
54
#define IIO_CHAN_INFO_OFFSET_SEPARATE_BIT \
55
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_OFFSET)
56
#define IIO_CHAN_INFO_OFFSET_SHARED_BIT \
57
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_OFFSET)
58
#define IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT \
59
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBSCALE)
60
#define IIO_CHAN_INFO_CALIBSCALE_SHARED_BIT \
61
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBSCALE)
62
#define IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT \
63
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBBIAS)
64
#define IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT \
65
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBBIAS)
66
#define IIO_CHAN_INFO_PEAK_SEPARATE_BIT \
67
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAK)
68
#define IIO_CHAN_INFO_PEAK_SHARED_BIT \
69
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAK)
70
#define IIO_CHAN_INFO_PEAKSCALE_SEPARATE_BIT \
71
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAKSCALE)
72
#define IIO_CHAN_INFO_PEAKSCALE_SHARED_BIT \
73
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAKSCALE)
74
#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT \
75
IIO_CHAN_INFO_SEPARATE_BIT( \
76
IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
77
#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SHARED_BIT \
78
IIO_CHAN_INFO_SHARED_BIT( \
79
IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
80
#define IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT \
81
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
82
#define IIO_CHAN_INFO_AVERAGE_RAW_SHARED_BIT \
83
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
84
#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT \
85
IIO_CHAN_INFO_SHARED_BIT( \
86
IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
87
#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT \
88
IIO_CHAN_INFO_SEPARATE_BIT( \
89
IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
90
#define IIO_CHAN_INFO_SAMP_FREQ_SEPARATE_BIT \
91
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SAMP_FREQ)
92
#define IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT \
93
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SAMP_FREQ)
94
#define IIO_CHAN_INFO_FREQUENCY_SEPARATE_BIT \
95
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_FREQUENCY)
96
#define IIO_CHAN_INFO_FREQUENCY_SHARED_BIT \
97
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_FREQUENCY)
98
#define IIO_CHAN_INFO_PHASE_SEPARATE_BIT \
99
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PHASE)
100
#define IIO_CHAN_INFO_PHASE_SHARED_BIT \
101
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PHASE)
102
#define IIO_CHAN_INFO_HARDWAREGAIN_SEPARATE_BIT \
103
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
104
#define IIO_CHAN_INFO_HARDWAREGAIN_SHARED_BIT \
105
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
106
#define IIO_CHAN_INFO_HYSTERESIS_SEPARATE_BIT \
107
IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HYSTERESIS)
108
#define IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT \
109
IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HYSTERESIS)
110
111
enum
iio_endian
{
112
IIO_CPU
,
113
IIO_BE
,
114
IIO_LE
,
115
};
116
117
struct
iio_chan_spec
;
118
struct
iio_dev
;
119
128
struct
iio_chan_spec_ext_info
{
129
const
char
*
name
;
130
bool
shared
;
131
ssize_t
(*
read
)(
struct
iio_dev
*,
uintptr_t
private
,
132
struct
iio_chan_spec
const
*,
char
*
buf
);
133
ssize_t
(*
write
)(
struct
iio_dev
*,
uintptr_t
private
,
134
struct
iio_chan_spec
const
*,
const
char
*
buf
,
135
size_t
len
);
136
uintptr_t
private
;
137
};
138
155
struct
iio_enum
{
156
const
char
*
const
*
items
;
157
unsigned
int
num_items
;
158
int
(*
set
)(
struct
iio_dev
*,
const
struct
iio_chan_spec
*,
unsigned
int
);
159
int
(*
get
)(
struct
iio_dev
*,
const
struct
iio_chan_spec
*);
160
};
161
162
ssize_t
iio_enum_available_read
(
struct
iio_dev
*indio_dev,
163
uintptr_t
priv
,
const
struct
iio_chan_spec
*
chan
,
char
*
buf
);
164
ssize_t
iio_enum_read
(
struct
iio_dev
*indio_dev,
165
uintptr_t
priv
,
const
struct
iio_chan_spec
*
chan
,
char
*
buf
);
166
ssize_t
iio_enum_write
(
struct
iio_dev
*indio_dev,
167
uintptr_t
priv
,
const
struct
iio_chan_spec
*
chan
,
const
char
*
buf
,
168
size_t
len);
169
178
#define IIO_ENUM(_name, _shared, _e) \
179
{ \
180
.name = (_name), \
181
.shared = (_shared), \
182
.read = iio_enum_read, \
183
.write = iio_enum_write, \
184
.private = (uintptr_t)(_e), \
185
}
186
195
#define IIO_ENUM_AVAILABLE(_name, _e) \
196
{ \
197
.name = (_name "_available"), \
198
.shared = true, \
199
.read = iio_enum_available_read, \
200
.private = (uintptr_t)(_e), \
201
}
202
242
struct
iio_chan_spec
{
243
enum
iio_chan_type
type
;
244
int
channel
;
245
int
channel2
;
246
unsigned
long
address
;
247
int
scan_index
;
248
struct
{
249
char
sign
;
250
u8
realbits
;
251
u8
storagebits
;
252
u8
shift
;
253
enum
iio_endian
endianness
;
254
}
scan_type
;
255
long
info_mask
;
256
long
event_mask
;
257
const
struct
iio_chan_spec_ext_info
*
ext_info
;
258
const
char
*
extend_name
;
259
const
char
*
datasheet_name
;
260
unsigned
modified
:1;
261
unsigned
indexed
:1;
262
unsigned
output
:1;
263
unsigned
differential
:1;
264
};
265
266
275
static
inline
bool
iio_channel_has_info(
const
struct
iio_chan_spec
*
chan
,
276
enum
iio_chan_info_enum
type
)
277
{
278
return
chan->
info_mask
&
IIO_CHAN_INFO_BITS
(type);
279
}
280
281
#define IIO_ST(si, rb, sb, sh) \
282
{ .sign = si, .realbits = rb, .storagebits = sb, .shift = sh }
283
284
#define IIO_CHAN_SOFT_TIMESTAMP(_si) \
285
{ .type = IIO_TIMESTAMP, .channel = -1, \
286
.scan_index = _si, .scan_type = IIO_ST('s', 64, 64, 0) }
287
291
static
inline
s64
iio_get_time_ns(
void
)
292
{
293
struct
timespec
ts;
294
/*
295
* calls getnstimeofday.
296
* If hrtimers then up to ns accurate, if not microsecond.
297
*/
298
ktime_get_real_ts
(&ts);
299
300
return
timespec_to_ns(&ts);
301
}
302
303
/* Device operating modes */
304
#define INDIO_DIRECT_MODE 0x01
305
#define INDIO_BUFFER_TRIGGERED 0x02
306
#define INDIO_BUFFER_HARDWARE 0x08
307
308
#define INDIO_ALL_BUFFER_MODES \
309
(INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE)
310
311
struct
iio_trigger
;
/* forward declaration */
312
struct
iio_dev
;
313
342
struct
iio_info
{
343
struct
module
*
driver_module
;
344
struct
attribute_group
*
event_attrs
;
345
const
struct
attribute_group
*
attrs
;
346
347
int
(*
read_raw
)(
struct
iio_dev
*indio_dev,
348
struct
iio_chan_spec
const
*
chan
,
349
int
*
val
,
350
int
*val2,
351
long
mask
);
352
353
int
(*
write_raw
)(
struct
iio_dev
*indio_dev,
354
struct
iio_chan_spec
const
*
chan
,
355
int
val
,
356
int
val2,
357
long
mask
);
358
359
int
(*
write_raw_get_fmt
)(
struct
iio_dev
*indio_dev,
360
struct
iio_chan_spec
const
*
chan
,
361
long
mask
);
362
363
int
(*
read_event_config
)(
struct
iio_dev
*indio_dev,
364
u64
event_code
);
365
366
int
(*
write_event_config
)(
struct
iio_dev
*indio_dev,
367
u64
event_code
,
368
int
state
);
369
370
int
(*
read_event_value
)(
struct
iio_dev
*indio_dev,
371
u64
event_code
,
372
int
*
val
);
373
int
(*
write_event_value
)(
struct
iio_dev
*indio_dev,
374
u64
event_code
,
375
int
val
);
376
int
(*
validate_trigger
)(
struct
iio_dev
*indio_dev,
377
struct
iio_trigger
*trig);
378
int
(*
update_scan_mode
)(
struct
iio_dev
*indio_dev,
379
const
unsigned
long
*scan_mask);
380
int
(*
debugfs_reg_access
)(
struct
iio_dev
*indio_dev,
381
unsigned
reg
,
unsigned
writeval,
382
unsigned
*readval);
383
};
384
395
struct
iio_buffer_setup_ops
{
396
int
(*
preenable
)(
struct
iio_dev
*);
397
int
(*
postenable
)(
struct
iio_dev
*);
398
int
(*
predisable
)(
struct
iio_dev
*);
399
int
(*
postdisable
)(
struct
iio_dev
*);
400
bool
(*
validate_scan_mask
)(
struct
iio_dev
*indio_dev,
401
const
unsigned
long
*scan_mask);
402
};
403
441
struct
iio_dev
{
442
int
id
;
443
444
int
modes
;
445
int
currentmode
;
446
struct
device
dev
;
447
448
struct
iio_event_interface
*
event_interface
;
449
450
struct
iio_buffer *
buffer
;
451
int
scan_bytes
;
452
struct
mutex
mlock
;
453
454
const
unsigned
long
*
available_scan_masks
;
455
unsigned
masklength
;
456
const
unsigned
long
*
active_scan_mask
;
457
bool
scan_timestamp
;
458
unsigned
scan_index_timestamp
;
459
struct
iio_trigger
*
trig
;
460
struct
iio_poll_func
*
pollfunc
;
461
462
struct
iio_chan_spec
const
*
channels
;
463
int
num_channels
;
464
465
struct
list_head
channel_attr_list
;
466
struct
attribute_group
chan_attr_group
;
467
const
char
*
name
;
468
const
struct
iio_info
*
info
;
469
struct
mutex
info_exist_lock
;
470
const
struct
iio_buffer_setup_ops
*
setup_ops
;
471
struct
cdev
chrdev
;
472
#define IIO_MAX_GROUPS 6
473
const
struct
attribute_group
*
groups
[
IIO_MAX_GROUPS
+ 1];
474
int
groupcounter
;
475
476
unsigned
long
flags
;
477
#if defined(CONFIG_DEBUG_FS)
478
struct
dentry
*debugfs_dentry;
479
unsigned
cached_reg_addr;
480
#endif
481
};
482
488
const
struct
iio_chan_spec
489
*
iio_find_channel_from_si
(
struct
iio_dev
*indio_dev,
int
si);
490
495
int
iio_device_register
(
struct
iio_dev
*indio_dev);
496
501
void
iio_device_unregister
(
struct
iio_dev
*indio_dev);
502
509
int
iio_push_event
(
struct
iio_dev
*indio_dev,
u64
ev_code,
s64
timestamp
);
510
511
extern
struct
bus_type
iio_bus_type
;
512
517
static
inline
void
iio_device_put(
struct
iio_dev
*indio_dev)
518
{
519
if
(indio_dev)
520
put_device
(&indio_dev->
dev
);
521
};
522
529
static
inline
struct
iio_dev
*dev_to_iio_dev(
struct
device
*
dev
)
530
{
531
return
container_of
(dev,
struct
iio_dev
, dev);
532
}
533
540
static
inline
struct
iio_dev
*iio_device_get(
struct
iio_dev
*indio_dev)
541
{
542
return
indio_dev ? dev_to_iio_dev(
get_device
(&indio_dev->
dev
)) :
NULL
;
543
}
544
545
554
static
inline
void
iio_device_set_drvdata(
struct
iio_dev
*indio_dev,
void
*
data
)
555
{
556
dev_set_drvdata
(&indio_dev->
dev
, data);
557
}
558
565
static
inline
void
*iio_device_get_drvdata(
struct
iio_dev
*indio_dev)
566
{
567
return
dev_get_drvdata
(&indio_dev->
dev
);
568
}
569
570
/* Can we make this smaller? */
571
#define IIO_ALIGN L1_CACHE_BYTES
572
576
struct
iio_dev
*
iio_device_alloc
(
int
sizeof_priv);
577
578
static
inline
void
*iio_priv(
const
struct
iio_dev
*indio_dev)
579
{
580
return
(
char
*)indio_dev +
ALIGN
(
sizeof
(
struct
iio_dev
),
IIO_ALIGN
);
581
}
582
583
static
inline
struct
iio_dev
*iio_priv_to_dev(
void
*
priv
)
584
{
585
return
(
struct
iio_dev
*)((
char
*)priv -
586
ALIGN
(
sizeof
(
struct
iio_dev
),
IIO_ALIGN
));
587
}
588
593
void
iio_device_free
(
struct
iio_dev
*indio_dev);
594
599
static
inline
bool
iio_buffer_enabled(
struct
iio_dev
*indio_dev)
600
{
601
return
indio_dev->
currentmode
602
& (
INDIO_BUFFER_TRIGGERED
|
INDIO_BUFFER_HARDWARE
);
603
};
604
609
#if defined(CONFIG_DEBUG_FS)
610
static
inline
struct
dentry
*iio_get_debugfs_dentry(
struct
iio_dev
*indio_dev)
611
{
612
return
indio_dev->debugfs_dentry;
613
};
614
#else
615
static
inline
struct
dentry
*iio_get_debugfs_dentry(
struct
iio_dev
*indio_dev)
616
{
617
return
NULL
;
618
};
619
#endif
620
627
#define IIO_DEGREE_TO_RAD(deg) (((deg) * 314159ULL + 9000000ULL) / 18000000ULL)
628
635
#define IIO_G_TO_M_S_2(g) ((g) * 980665ULL / 100000ULL)
636
637
#endif
/* _INDUSTRIAL_IO_H_ */
Generated on Thu Jan 10 2013 14:51:36 for Linux Kernel by
1.8.2