xref: /openbmc/linux/Documentation/driver-api/iio/hw-consumer.rst (revision cbecf716ca618fd44feda6bd9a64a8179d031fc5)
15b178943SArnaud Pouliquen===========
25b178943SArnaud PouliquenHW consumer
35b178943SArnaud Pouliquen===========
48c56eebcSTomasz DuszynskiAn IIO device can be directly connected to another device in hardware. In this
55b178943SArnaud Pouliquencase the buffers between IIO provider and IIO consumer are handled by hardware.
65b178943SArnaud PouliquenThe Industrial I/O HW consumer offers a way to bond these IIO devices without
75b178943SArnaud Pouliquensoftware buffer for data. The implementation can be found under
85b178943SArnaud Pouliquen:file:`drivers/iio/buffer/hw-consumer.c`
95b178943SArnaud Pouliquen
105b178943SArnaud Pouliquen
11*9303c9d5SMauro Carvalho Chehab* struct iio_hw_consumer — Hardware consumer structure
125b178943SArnaud Pouliquen* :c:func:`iio_hw_consumer_alloc` — Allocate IIO hardware consumer
135b178943SArnaud Pouliquen* :c:func:`iio_hw_consumer_free` — Free IIO hardware consumer
145b178943SArnaud Pouliquen* :c:func:`iio_hw_consumer_enable` — Enable IIO hardware consumer
155b178943SArnaud Pouliquen* :c:func:`iio_hw_consumer_disable` — Disable IIO hardware consumer
165b178943SArnaud Pouliquen
175b178943SArnaud Pouliquen
185b178943SArnaud PouliquenHW consumer setup
195b178943SArnaud Pouliquen=================
205b178943SArnaud Pouliquen
215b178943SArnaud PouliquenAs standard IIO device the implementation is based on IIO provider/consumer.
225b178943SArnaud PouliquenA typical IIO HW consumer setup looks like this::
235b178943SArnaud Pouliquen
245b178943SArnaud Pouliquen	static struct iio_hw_consumer *hwc;
255b178943SArnaud Pouliquen
265b178943SArnaud Pouliquen	static const struct iio_info adc_info = {
275b178943SArnaud Pouliquen		.read_raw = adc_read_raw,
285b178943SArnaud Pouliquen	};
295b178943SArnaud Pouliquen
305b178943SArnaud Pouliquen	static int adc_read_raw(struct iio_dev *indio_dev,
315b178943SArnaud Pouliquen				struct iio_chan_spec const *chan, int *val,
325b178943SArnaud Pouliquen				int *val2, long mask)
335b178943SArnaud Pouliquen	{
345b178943SArnaud Pouliquen		ret = iio_hw_consumer_enable(hwc);
355b178943SArnaud Pouliquen
365b178943SArnaud Pouliquen		/* Acquire data */
375b178943SArnaud Pouliquen
385b178943SArnaud Pouliquen		ret = iio_hw_consumer_disable(hwc);
395b178943SArnaud Pouliquen	}
405b178943SArnaud Pouliquen
415b178943SArnaud Pouliquen	static int adc_probe(struct platform_device *pdev)
425b178943SArnaud Pouliquen	{
435b178943SArnaud Pouliquen		hwc = devm_iio_hw_consumer_alloc(&iio->dev);
445b178943SArnaud Pouliquen	}
455b178943SArnaud Pouliquen
465b178943SArnaud PouliquenMore details
475b178943SArnaud Pouliquen============
485b178943SArnaud Pouliquen.. kernel-doc:: drivers/iio/buffer/industrialio-hw-consumer.c
495b178943SArnaud Pouliquen   :export:
505b178943SArnaud Pouliquen
51