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
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
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.
22 Name of the device being driven - made available as the name
26 pointer to a structure with elements that tend to be fixed for
27 large sets of different parts supported by a given driver.
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.
35 Attributes used to enable / disable hardware events.
37 General device attributes. Typically used for the weird
38 and the wonderful bits not covered by the channel specification.
40 Raw data reading function. Used for both raw channel access
41 and for associate parameters such as offsets and scales.
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
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.
60 Specify whether direct access and / or ring buffer access is supported.
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
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
80 On remove, iio_device_unregister(indio_dev) will remove the device from
81 the core, and iio_free_device will clean up.