162306a36Sopenharmony_ci===========
262306a36Sopenharmony_ciHW consumer
362306a36Sopenharmony_ci===========
462306a36Sopenharmony_ciAn IIO device can be directly connected to another device in hardware. In this
562306a36Sopenharmony_cicase the buffers between IIO provider and IIO consumer are handled by hardware.
662306a36Sopenharmony_ciThe Industrial I/O HW consumer offers a way to bond these IIO devices without
762306a36Sopenharmony_cisoftware buffer for data. The implementation can be found under
862306a36Sopenharmony_ci:file:`drivers/iio/buffer/hw-consumer.c`
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci* struct iio_hw_consumer — Hardware consumer structure
1262306a36Sopenharmony_ci* :c:func:`iio_hw_consumer_alloc` — Allocate IIO hardware consumer
1362306a36Sopenharmony_ci* :c:func:`iio_hw_consumer_free` — Free IIO hardware consumer
1462306a36Sopenharmony_ci* :c:func:`iio_hw_consumer_enable` — Enable IIO hardware consumer
1562306a36Sopenharmony_ci* :c:func:`iio_hw_consumer_disable` — Disable IIO hardware consumer
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciHW consumer setup
1962306a36Sopenharmony_ci=================
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciAs standard IIO device the implementation is based on IIO provider/consumer.
2262306a36Sopenharmony_ciA typical IIO HW consumer setup looks like this::
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci	static struct iio_hw_consumer *hwc;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	static const struct iio_info adc_info = {
2762306a36Sopenharmony_ci		.read_raw = adc_read_raw,
2862306a36Sopenharmony_ci	};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	static int adc_read_raw(struct iio_dev *indio_dev,
3162306a36Sopenharmony_ci				struct iio_chan_spec const *chan, int *val,
3262306a36Sopenharmony_ci				int *val2, long mask)
3362306a36Sopenharmony_ci	{
3462306a36Sopenharmony_ci		ret = iio_hw_consumer_enable(hwc);
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci		/* Acquire data */
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci		ret = iio_hw_consumer_disable(hwc);
3962306a36Sopenharmony_ci	}
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci	static int adc_probe(struct platform_device *pdev)
4262306a36Sopenharmony_ci	{
4362306a36Sopenharmony_ci		hwc = devm_iio_hw_consumer_alloc(&iio->dev);
4462306a36Sopenharmony_ci	}
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ciMore details
4762306a36Sopenharmony_ci============
4862306a36Sopenharmony_ci.. kernel-doc:: drivers/iio/buffer/industrialio-hw-consumer.c
4962306a36Sopenharmony_ci   :export:
5062306a36Sopenharmony_ci
51