1*4882a593Smuzhiyun=========== 2*4882a593SmuzhiyunHW consumer 3*4882a593Smuzhiyun=========== 4*4882a593SmuzhiyunAn IIO device can be directly connected to another device in hardware. In this 5*4882a593Smuzhiyuncase the buffers between IIO provider and IIO consumer are handled by hardware. 6*4882a593SmuzhiyunThe Industrial I/O HW consumer offers a way to bond these IIO devices without 7*4882a593Smuzhiyunsoftware buffer for data. The implementation can be found under 8*4882a593Smuzhiyun:file:`drivers/iio/buffer/hw-consumer.c` 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun* struct iio_hw_consumer — Hardware consumer structure 12*4882a593Smuzhiyun* :c:func:`iio_hw_consumer_alloc` — Allocate IIO hardware consumer 13*4882a593Smuzhiyun* :c:func:`iio_hw_consumer_free` — Free IIO hardware consumer 14*4882a593Smuzhiyun* :c:func:`iio_hw_consumer_enable` — Enable IIO hardware consumer 15*4882a593Smuzhiyun* :c:func:`iio_hw_consumer_disable` — Disable IIO hardware consumer 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunHW consumer setup 19*4882a593Smuzhiyun================= 20*4882a593Smuzhiyun 21*4882a593SmuzhiyunAs standard IIO device the implementation is based on IIO provider/consumer. 22*4882a593SmuzhiyunA typical IIO HW consumer setup looks like this:: 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun static struct iio_hw_consumer *hwc; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun static const struct iio_info adc_info = { 27*4882a593Smuzhiyun .read_raw = adc_read_raw, 28*4882a593Smuzhiyun }; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun static int adc_read_raw(struct iio_dev *indio_dev, 31*4882a593Smuzhiyun struct iio_chan_spec const *chan, int *val, 32*4882a593Smuzhiyun int *val2, long mask) 33*4882a593Smuzhiyun { 34*4882a593Smuzhiyun ret = iio_hw_consumer_enable(hwc); 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* Acquire data */ 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun ret = iio_hw_consumer_disable(hwc); 39*4882a593Smuzhiyun } 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun static int adc_probe(struct platform_device *pdev) 42*4882a593Smuzhiyun { 43*4882a593Smuzhiyun hwc = devm_iio_hw_consumer_alloc(&iio->dev); 44*4882a593Smuzhiyun } 45*4882a593Smuzhiyun 46*4882a593SmuzhiyunMore details 47*4882a593Smuzhiyun============ 48*4882a593Smuzhiyun.. kernel-doc:: drivers/iio/buffer/industrialio-hw-consumer.c 49*4882a593Smuzhiyun :export: 50*4882a593Smuzhiyun 51