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.