PageRenderTime 50ms CodeModel.GetById 31ms app.highlight 14ms RepoModel.GetById 1ms app.codeStats 0ms

/drivers/staging/iio/Documentation/device.txt

https://bitbucket.org/wisechild/galaxy-nexus
Plain Text | 81 lines | 69 code | 12 blank | 0 comment | 0 complexity | 0c0f882f29b708efbd61b19a8dee9bf3 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
 1IIO 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
11struct 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 *)
16
17Then fill in the following:
18
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.
24
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.
58
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?
71
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
80On remove, iio_device_unregister(indio_dev) will remove the device from
81the core, and iio_free_device will clean up.