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->ring:
	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.
