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