From mboxrd@z Thu Jan 1 00:00:00 1970 From: jic23@kernel.org (Jonathan Cameron) Date: Sat, 2 Dec 2017 14:51:37 +0000 Subject: [PATCH v6 02/13] docs: driver-api: add iio hw consumer section In-Reply-To: <1512150020-20335-3-git-send-email-arnaud.pouliquen@st.com> References: <1512150020-20335-1-git-send-email-arnaud.pouliquen@st.com> <1512150020-20335-3-git-send-email-arnaud.pouliquen@st.com> Message-ID: <20171202145137.159e7a0e@archlinux> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Fri, 1 Dec 2017 18:40:09 +0100 Arnaud Pouliquen wrote: > This adds a section about the Hardware consumer > API of the IIO subsystem to the driver API > documentation. > > Signed-off-by: Arnaud Pouliquen Reviewed-by: Jonathan Cameron > --- > Documentation/driver-api/iio/hw-consumer.rst | 51 ++++++++++++++++++++++++++++ > Documentation/driver-api/iio/index.rst | 1 + > 2 files changed, 52 insertions(+) > create mode 100644 Documentation/driver-api/iio/hw-consumer.rst > > diff --git a/Documentation/driver-api/iio/hw-consumer.rst b/Documentation/driver-api/iio/hw-consumer.rst > new file mode 100644 > index 0000000..8facce6 > --- /dev/null > +++ b/Documentation/driver-api/iio/hw-consumer.rst > @@ -0,0 +1,51 @@ > +=========== > +HW consumer > +=========== > +An IIO device can be directly connected to another device in hardware. in this > +case the buffers between IIO provider and IIO consumer are handled by hardware. > +The Industrial I/O HW consumer offers a way to bond these IIO devices without > +software buffer for data. The implementation can be found under > +:file:`drivers/iio/buffer/hw-consumer.c` > + > + > +* struct :c:type:`iio_hw_consumer` ? Hardware consumer structure > +* :c:func:`iio_hw_consumer_alloc` ? Allocate IIO hardware consumer > +* :c:func:`iio_hw_consumer_free` ? Free IIO hardware consumer > +* :c:func:`iio_hw_consumer_enable` ? Enable IIO hardware consumer > +* :c:func:`iio_hw_consumer_disable` ? Disable IIO hardware consumer > + > + > +HW consumer setup > +================= > + > +As standard IIO device the implementation is based on IIO provider/consumer. > +A typical IIO HW consumer setup looks like this:: > + > + static struct iio_hw_consumer *hwc; > + > + static const struct iio_info adc_info = { > + .read_raw = adc_read_raw, > + }; > + > + static int adc_read_raw(struct iio_dev *indio_dev, > + struct iio_chan_spec const *chan, int *val, > + int *val2, long mask) > + { > + ret = iio_hw_consumer_enable(hwc); > + > + /* Acquire data */ > + > + ret = iio_hw_consumer_disable(hwc); > + } > + > + static int adc_probe(struct platform_device *pdev) > + { > + hwc = devm_iio_hw_consumer_alloc(&iio->dev); > + } > + > +More details > +============ > +.. kernel-doc:: include/linux/iio/hw-consumer.h > +.. kernel-doc:: drivers/iio/buffer/industrialio-hw-consumer.c > + :export: > + > diff --git a/Documentation/driver-api/iio/index.rst b/Documentation/driver-api/iio/index.rst > index e5c3922..7fba341 100644 > --- a/Documentation/driver-api/iio/index.rst > +++ b/Documentation/driver-api/iio/index.rst > @@ -15,3 +15,4 @@ Contents: > buffers > triggers > triggered-buffers > + hw-consumer