/drivers/staging/iio/Documentation/device.txt
https://bitbucket.org/wisechild/galaxy-nexus · Plain Text · 81 lines · 69 code · 12 blank · 0 comment · 0 complexity · 0c0f882f29b708efbd61b19a8dee9bf3 MD5 · raw file
- 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(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->num_interrupt_lines:
- Number of event triggering hardware lines the device has.
- * 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 caliboffset.
- * 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 and event.
- - indio_dev->channels:
- Specification of device channels. Most attributes etc are built
- form 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_free_device will clean up.