diff options
Diffstat (limited to 'drivers/staging/iio/Documentation/device.txt')
-rw-r--r-- | drivers/staging/iio/Documentation/device.txt | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/drivers/staging/iio/Documentation/device.txt b/drivers/staging/iio/Documentation/device.txt new file mode 100644 index 000000000..8be32e5a0 --- /dev/null +++ b/drivers/staging/iio/Documentation/device.txt @@ -0,0 +1,79 @@ +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_device_alloc(sizeof(struct chip_state)); +where chip_state is a structure of local state data for this instance of +the chip. + +That data can be accessed using iio_priv(struct iio_dev *). + +Then fill in the following: + +- indio_dev->dev.parent + Struct device associated with the underlying hardware. +- indio_dev->name + Name of the device being driven - made available as the name + attribute in sysfs. + +- indio_dev->info + pointer to a structure with elements that tend to be fixed for + large sets of different parts supported by a given driver. + This contains: + * info->driver_module: + Set to THIS_MODULE. Used to ensure correct ownership + of various resources allocate by the core. + * info->event_attrs: + Attributes used to enable / disable hardware events. + * info->attrs: + General device attributes. Typically used for the weird + and the wonderful bits not covered by the channel specification. + * info->read_raw: + Raw data reading function. Used for both raw channel access + and for associate parameters such as offsets and scales. + * info->write_raw: + Raw value writing function. Used for writable device values such + as DAC values and calibbias. + * info->read_event_config: + Typically only set if there are some interrupt lines. This + is used to read if an on sensor event detector is enabled. + * info->write_event_config: + Enable / disable an on sensor event detector. + * info->read_event_value: + Read value associated with on sensor event detectors. Note that + the meaning of the returned value is dependent on the event + type. + * info->write_event_value: + Write the value associated with on sensor event detectors. E.g. + a threshold above which an interrupt occurs. Note that the + meaning of the value to be set is event type dependant. + +- indio_dev->modes: + Specify whether direct access and / or ring buffer access is supported. +- indio_dev->buffer: + An optional associated buffer. +- indio_dev->pollfunc: + Poll function related elements. This controls what occurs when a trigger + to which this device is attached sends an event. +- indio_dev->channels: + Specification of device channels. Most attributes etc. are built + from this spec. +- indio_dev->num_channels: + How many channels are there? + +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_device_free(indio_dev) will clean up. |