This patch series adds support for the devantech srf04 ultrasonic ranger as IIO device. The device is able to recognize objects in a range of 1 cm and 3 meters. The theoretical resolution is about 3 mm, practically more or less 1 cm. Use cases for this device are level metering in tanks or distance measuring in robotics. This driver works by triggering the device and waiting for the echo, for which a GPIO is set when send out and reset when the echo is received. The echo must be an interrupt and the time between rising and falling is measured. The returned distance is calculated with a ultrasonic speed of 343 m/s which is the correct value at 20 degrees celsius. For different temperatures one might want to compensate the temperature. Look at the source code for a more detailed explanation of the calculation and bounds. The measurement cycle as timing diagram looks like: (taken from the source code to illustrate here) +---+ GPIO | | trig: --+ +------------------------------------------------------ ^ ^ |<->| udelay(10) ultra +-+ +-+ +-+ sonic | | | | | | burst: ---------+ +-+ +-+ +----------------------------------------- . ultra . +-+ +-+ +-+ sonic . | | | | | | echo: ----------------------------------+ +-+ +-+ +---------------- . . +------------------------+ GPIO | | echo: -------------------+ +--------------- ^ ^ interrupt interrupt (ts_rising) (ts_falling) |<---------------------->| pulse time measured --> one round trip of ultra sonic waves Documenation can be found at: http://www.robot-electronics.co.uk/htm/srf04tech.htm Changes in v2: Many thanks to the thorough reviews of Peter and Lars-Peter. Many improvements have been identified and are now implemented in the driver. * Patch 1: iio: distance: add dt binding for devantech-srf04 - add more explanation about the GPIOs and there usage * Patch 2: iio: distance: add devantech us ranger srf04 - add documentation about how the driver is supposed to work together with a small timing diagram - improved locking: mutex is hold during the measurement cycle to ensure only one tasks set the output and waits for the response - documentation about maximum time accepted as valid ultrasonic response - removed dev_info(); it was there for debugging reasons and is no longer needed - usage of devm_request_irq() and iio_device_register() Andreas Klinger (2): iio: distance: add dt binding for devantech-srf04 iio: distance: add devantech us ranger srf04 .../bindings/iio/proximity/devantech-srf04.txt | 28 ++ MAINTAINERS | 6 + drivers/iio/proximity/Kconfig | 11 + drivers/iio/proximity/Makefile | 1 + drivers/iio/proximity/srf04.c | 313 +++++++++++++++++++++ 5 files changed, 359 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/proximity/devantech-srf04.txt create mode 100644 drivers/iio/proximity/srf04.c -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html