blob: 1abb80cb884ecc5d69c9e8792458dd4f70b8a9ba [file] [log] [blame]
Jonathan Cameronc57f1ba2009-08-18 18:06:32 +01001IIO Device drivers
2
3This is not intended to provide a comprehensive guide to writing an
4IIO device driver. For further information see the drivers within the
5subsystem.
6
7The crucial structure for device drivers in iio is iio_dev.
8
9First allocate one using:
10
Jonathan Cameron44d8b352011-05-18 14:42:40 +010011struct iio_dev *indio_dev = iio_allocate_device(sizeof(struct chip_state));
12where chip_state is a structure of local state data for this instance of
13the chip.
14
15That data can be accessed using iio_priv(struct iio_dev *)
Jonathan Cameronc57f1ba2009-08-18 18:06:32 +010016
Amit Kucheria51bf00a2009-11-09 15:10:15 +020017Then fill in the following:
Jonathan Cameronc57f1ba2009-08-18 18:06:32 +010018
Jonathan Cameron44d8b352011-05-18 14:42:40 +010019- 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.
Jonathan Cameronc57f1ba2009-08-18 18:06:32 +010024
Jonathan Cameron44d8b352011-05-18 14:42:40 +010025- 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.
Jonathan Cameronc57f1ba2009-08-18 18:06:32 +010058
Jonathan Cameron44d8b352011-05-18 14:42:40 +010059- 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?
Jonathan Cameronc57f1ba2009-08-18 18:06:32 +010071
72Once these are set up, a call to iio_device_register(indio_dev),
73will register the device with the iio core.
74
75Worth noting here is that, if a ring buffer is to be used, it can be
76allocated prior to registering the device with the iio-core, but must
77be registered afterwards (otherwise the whole parentage of devices
78gets confused)
79
Amit Kucheria51bf00a2009-11-09 15:10:15 +020080On remove, iio_device_unregister(indio_dev) will remove the device from
Jonathan Cameronc57f1ba2009-08-18 18:06:32 +010081the core, and iio_free_device will clean up.