Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus
[linux-btrfs-devel.git] / drivers / staging / iio / Documentation / device.txt
blob1abb80cb884ecc5d69c9e8792458dd4f70b8a9ba
1 IIO Device drivers
3 This is not intended to provide a comprehensive guide to writing an
4 IIO device driver.  For further information see the drivers within the
5 subsystem.
7 The crucial structure for device drivers in iio is iio_dev.
9 First allocate one using:
11 struct iio_dev *indio_dev = iio_allocate_device(sizeof(struct chip_state));
12 where chip_state is a structure of local state data for this instance of
13 the chip.
15 That data can be accessed using iio_priv(struct iio_dev *)
17 Then fill in the following:
19 - indio_dev->dev.parent
20         Struct device associated with the underlying hardware.
21 - indio_dev->name
22         Name of the device being driven - made available as the name
23         attribute in sysfs.
25 - indio_dev->info
26         pointer to a structure with elements that tend to be fixed for
27         large sets of different parts supported by a given driver.
28         This contains:
29         * info->driver_module:
30                 Set to THIS_MODULE. Used to ensure correct ownership
31                 of various resources allocate by the core.
32         * info->num_interrupt_lines:
33                 Number of event triggering hardware lines the device has.
34         * info->event_attrs:
35                 Attributes used to enable / disable hardware events.
36         * info->attrs:
37                 General device attributes. Typically used for the weird
38                 and the wonderful bits not covered by the channel specification.
39         * info->read_raw:
40                 Raw data reading function. Used for both raw channel access
41                 and for associate parameters such as offsets and scales.
42         * info->write_raw:
43                 Raw value writing function. Used for writable device values such
44                 as DAC values and caliboffset.
45         * info->read_event_config:
46                 Typically only set if there are some interrupt lines.  This
47                 is used to read if an on sensor event detector is enabled.
48         * info->write_event_config:
49                 Enable / disable an on sensor event detector.
50         * info->read_event_value:
51                 Read value associated with on sensor event detectors. Note that
52                 the meaning of the returned value is dependent on the event
53                 type.
54         * info->write_event_value:
55                 Write the value associated with on sensor event detectors. E.g.
56                 a threshold above which an interrupt occurs.  Note that the
57                 meaning of the value to be set is event type dependant.
59 - indio_dev->modes:
60         Specify whether direct access and / or ring buffer access is supported.
61 - indio_dev->ring:
62         An optional associated buffer.
63 - indio_dev->pollfunc:
64         Poll function related elements. This controls what occurs when a trigger
65         to which this device is attached sends and event.
66 - indio_dev->channels:
67         Specification of device channels. Most attributes etc are built
68         form this spec.
69 - indio_dev->num_channels:
70         How many channels are there?
72 Once these are set up, a call to iio_device_register(indio_dev),
73 will register the device with the iio core.
75 Worth noting here is that, if a ring buffer is to be used, it can be
76 allocated prior to registering the device with the iio-core, but must
77 be registered afterwards (otherwise the whole parentage of devices
78 gets confused)
80 On remove, iio_device_unregister(indio_dev) will remove the device from
81 the core, and iio_free_device will clean up.