IIO Device drivers This is not intended to provide a comprehensive guide to writing an IIO device driver. For further information see the drivers within the subsystem. The crucial structure for device drivers in iio is iio_dev. First allocate one using: struct iio_dev *indio_dev = iio_allocate_device(); Then fill in the following: indio_dev->dev.parent the struct device associated with the underlying hardware. indio_dev->num_interrupt_lines number of event triggering hardware lines the device has. indio_dev->event_attrs attributes used to enable / disable hardware events - note the attributes are embedded in iio_event_attr structures with an associated iio_event_handler which may or may note be shared. If num_interrupt_lines = 0, then no need to fill this in. indio_dev->attrs general attributes such as polled access to device channels. indio_dev->dev_data private device specific data. indio_dev->driver_module typically set to THIS_MODULE. Used to specify ownership of some iio created resources. indio_dev->modes whether direct access and / or ring buffer access is supported. Once these are set up, a call to iio_device_register(indio_dev), will register the device with the iio core. Worth noting here is that, if a ring buffer is to be used, it can be allocated prior to registering the device with the iio-core, but must be registered afterwards (otherwise the whole parentage of devices gets confused) On remove, iio_device_unregister(indio_dev) will remove the device from the core, and iio_free_device will clean up.