swh:1:snp:173f8deb0c56c557784b4fd217e7608ac6197844
Raw File
Tip revision: 22763c5cf3690a681551162c15d34d935308c8d7 authored by Linus Torvalds on 03 December 2009, 03:51:21 UTC
Linux 2.6.32
Tip revision: 22763c5
device.txt
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();

The 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.
back to top