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