From: Jonathan Cameron <jic23@kernel.org>
To: Olivier Moysan <olivier.moysan@st.com>
Cc: <knaack.h@gmx.de>, <lars@metafoo.de>, <pmeerw@pmeerw.net>,
<mcoquelin.stm32@gmail.com>, <alexandre.torgue@st.com>,
<fabrice.gasnier@st.com>, <linux-iio@vger.kernel.org>,
<linux-stm32@st-md-mailman.stormreply.com>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <benjamin.gaignard@st.com>
Subject: Re: [PATCH 3/5] iio: adc: stm32-dfsdm: manage data resolution in trigger mode
Date: Sat, 22 Jun 2019 10:23:15 +0100 [thread overview]
Message-ID: <20190622102315.2484d6de@archlinux> (raw)
In-Reply-To: <1560949431-22948-4-git-send-email-olivier.moysan@st.com>
On Wed, 19 Jun 2019 15:03:49 +0200
Olivier Moysan <olivier.moysan@st.com> wrote:
> Add output sample resolution management in scan mode.
> Add stm32_dfsdm_process_data() function to share sample
> processing between continuous and trigger modes.
>
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
Makes sense, though I would have preferred a little bit more info
on what the user visible effects fo this change are in
the patch description. I think I know from reading the code,
but not every one will do that ;)
Applied to the togreg branch of iio.git and pushed out as
testing for the autobuilders to play with it.
Thanks,
Jonathan
> ---
> drivers/iio/adc/stm32-dfsdm-adc.c | 41 ++++++++++++++++++++++++++-------------
> 1 file changed, 28 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
> index 6b90a40882f2..5b19a88412a6 100644
> --- a/drivers/iio/adc/stm32-dfsdm-adc.c
> +++ b/drivers/iio/adc/stm32-dfsdm-adc.c
> @@ -779,6 +779,30 @@ static unsigned int stm32_dfsdm_adc_dma_residue(struct stm32_dfsdm_adc *adc)
> return 0;
> }
>
> +static inline void stm32_dfsdm_process_data(struct stm32_dfsdm_adc *adc,
> + s32 *buffer)
> +{
> + struct stm32_dfsdm_filter *fl = &adc->dfsdm->fl_list[adc->fl_id];
> + struct stm32_dfsdm_filter_osr *flo = &fl->flo;
> + unsigned int i = adc->nconv;
> + s32 *ptr = buffer;
> +
> + while (i--) {
> + /* Mask 8 LSB that contains the channel ID */
> + *ptr &= 0xFFFFFF00;
> + /* Convert 2^(n-1) sample to 2^(n-1)-1 to avoid wrap-around */
> + if (*ptr > flo->max)
> + *ptr -= 1;
> + /*
> + * Samples from filter are retrieved with 23 bits resolution
> + * or less. Shift left to align MSB on 24 bits.
> + */
> + *ptr <<= flo->lshift;
> +
> + ptr++;
> + }
> +}
> +
> static irqreturn_t stm32_dfsdm_adc_trigger_handler(int irq, void *p)
> {
> struct iio_poll_func *pf = p;
> @@ -787,7 +811,9 @@ static irqreturn_t stm32_dfsdm_adc_trigger_handler(int irq, void *p)
> int available = stm32_dfsdm_adc_dma_residue(adc);
>
> while (available >= indio_dev->scan_bytes) {
> - u32 *buffer = (u32 *)&adc->rx_buf[adc->bufi];
> + s32 *buffer = (s32 *)&adc->rx_buf[adc->bufi];
> +
> + stm32_dfsdm_process_data(adc, buffer);
>
> iio_push_to_buffers_with_timestamp(indio_dev, buffer,
> pf->timestamp);
> @@ -806,8 +832,6 @@ static void stm32_dfsdm_dma_buffer_done(void *data)
> {
> struct iio_dev *indio_dev = data;
> struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
> - struct stm32_dfsdm_filter *fl = &adc->dfsdm->fl_list[adc->fl_id];
> - struct stm32_dfsdm_filter_osr *flo = &fl->flo;
> int available = stm32_dfsdm_adc_dma_residue(adc);
> size_t old_pos;
>
> @@ -832,16 +856,7 @@ static void stm32_dfsdm_dma_buffer_done(void *data)
> while (available >= indio_dev->scan_bytes) {
> s32 *buffer = (s32 *)&adc->rx_buf[adc->bufi];
>
> - /* Mask 8 LSB that contains the channel ID */
> - *buffer &= 0xFFFFFF00;
> - /* Convert 2^(n-1) sample to 2^(n-1)-1 to avoid wrap-around */
> - if (*buffer > flo->max)
> - *buffer -= 1;
> - /*
> - * Samples from filter are retrieved with 23 bits resolution
> - * or less. Shift left to align MSB on 24 bits.
> - */
> - *buffer <<= flo->lshift;
> + stm32_dfsdm_process_data(adc, buffer);
>
> available -= indio_dev->scan_bytes;
> adc->bufi += indio_dev->scan_bytes;
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron <jic23@kernel.org>
To: Olivier Moysan <olivier.moysan@st.com>
Cc: lars@metafoo.de, alexandre.torgue@st.com,
linux-iio@vger.kernel.org, pmeerw@pmeerw.net,
linux-kernel@vger.kernel.org, mcoquelin.stm32@gmail.com,
knaack.h@gmx.de, fabrice.gasnier@st.com,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org, benjamin.gaignard@st.com
Subject: Re: [PATCH 3/5] iio: adc: stm32-dfsdm: manage data resolution in trigger mode
Date: Sat, 22 Jun 2019 10:23:15 +0100 [thread overview]
Message-ID: <20190622102315.2484d6de@archlinux> (raw)
In-Reply-To: <1560949431-22948-4-git-send-email-olivier.moysan@st.com>
On Wed, 19 Jun 2019 15:03:49 +0200
Olivier Moysan <olivier.moysan@st.com> wrote:
> Add output sample resolution management in scan mode.
> Add stm32_dfsdm_process_data() function to share sample
> processing between continuous and trigger modes.
>
> Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
Makes sense, though I would have preferred a little bit more info
on what the user visible effects fo this change are in
the patch description. I think I know from reading the code,
but not every one will do that ;)
Applied to the togreg branch of iio.git and pushed out as
testing for the autobuilders to play with it.
Thanks,
Jonathan
> ---
> drivers/iio/adc/stm32-dfsdm-adc.c | 41 ++++++++++++++++++++++++++-------------
> 1 file changed, 28 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
> index 6b90a40882f2..5b19a88412a6 100644
> --- a/drivers/iio/adc/stm32-dfsdm-adc.c
> +++ b/drivers/iio/adc/stm32-dfsdm-adc.c
> @@ -779,6 +779,30 @@ static unsigned int stm32_dfsdm_adc_dma_residue(struct stm32_dfsdm_adc *adc)
> return 0;
> }
>
> +static inline void stm32_dfsdm_process_data(struct stm32_dfsdm_adc *adc,
> + s32 *buffer)
> +{
> + struct stm32_dfsdm_filter *fl = &adc->dfsdm->fl_list[adc->fl_id];
> + struct stm32_dfsdm_filter_osr *flo = &fl->flo;
> + unsigned int i = adc->nconv;
> + s32 *ptr = buffer;
> +
> + while (i--) {
> + /* Mask 8 LSB that contains the channel ID */
> + *ptr &= 0xFFFFFF00;
> + /* Convert 2^(n-1) sample to 2^(n-1)-1 to avoid wrap-around */
> + if (*ptr > flo->max)
> + *ptr -= 1;
> + /*
> + * Samples from filter are retrieved with 23 bits resolution
> + * or less. Shift left to align MSB on 24 bits.
> + */
> + *ptr <<= flo->lshift;
> +
> + ptr++;
> + }
> +}
> +
> static irqreturn_t stm32_dfsdm_adc_trigger_handler(int irq, void *p)
> {
> struct iio_poll_func *pf = p;
> @@ -787,7 +811,9 @@ static irqreturn_t stm32_dfsdm_adc_trigger_handler(int irq, void *p)
> int available = stm32_dfsdm_adc_dma_residue(adc);
>
> while (available >= indio_dev->scan_bytes) {
> - u32 *buffer = (u32 *)&adc->rx_buf[adc->bufi];
> + s32 *buffer = (s32 *)&adc->rx_buf[adc->bufi];
> +
> + stm32_dfsdm_process_data(adc, buffer);
>
> iio_push_to_buffers_with_timestamp(indio_dev, buffer,
> pf->timestamp);
> @@ -806,8 +832,6 @@ static void stm32_dfsdm_dma_buffer_done(void *data)
> {
> struct iio_dev *indio_dev = data;
> struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
> - struct stm32_dfsdm_filter *fl = &adc->dfsdm->fl_list[adc->fl_id];
> - struct stm32_dfsdm_filter_osr *flo = &fl->flo;
> int available = stm32_dfsdm_adc_dma_residue(adc);
> size_t old_pos;
>
> @@ -832,16 +856,7 @@ static void stm32_dfsdm_dma_buffer_done(void *data)
> while (available >= indio_dev->scan_bytes) {
> s32 *buffer = (s32 *)&adc->rx_buf[adc->bufi];
>
> - /* Mask 8 LSB that contains the channel ID */
> - *buffer &= 0xFFFFFF00;
> - /* Convert 2^(n-1) sample to 2^(n-1)-1 to avoid wrap-around */
> - if (*buffer > flo->max)
> - *buffer -= 1;
> - /*
> - * Samples from filter are retrieved with 23 bits resolution
> - * or less. Shift left to align MSB on 24 bits.
> - */
> - *buffer <<= flo->lshift;
> + stm32_dfsdm_process_data(adc, buffer);
>
> available -= indio_dev->scan_bytes;
> adc->bufi += indio_dev->scan_bytes;
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-06-22 9:23 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-19 13:03 [PATCH 0/5] iio: adc: stm32-dfsdm: fix and improve output data managementiio: adc: stm32-dfsdm: fix and improve output data management Olivier Moysan
2019-06-19 13:03 ` Olivier Moysan
2019-06-19 13:03 ` [PATCH 1/5] iio: adc: stm32-dfsdm: fix output resolution Olivier Moysan
2019-06-19 13:03 ` Olivier Moysan
2019-06-22 9:18 ` Jonathan Cameron
2019-06-22 9:18 ` Jonathan Cameron
2019-06-19 13:03 ` [PATCH 2/5] iio: adc: stm32-dfsdm: fix data type Olivier Moysan
2019-06-19 13:03 ` Olivier Moysan
2019-06-22 9:21 ` Jonathan Cameron
2019-06-22 9:21 ` Jonathan Cameron
2019-06-19 13:03 ` [PATCH 3/5] iio: adc: stm32-dfsdm: manage data resolution in trigger mode Olivier Moysan
2019-06-19 13:03 ` Olivier Moysan
2019-06-22 9:23 ` Jonathan Cameron [this message]
2019-06-22 9:23 ` Jonathan Cameron
2019-06-19 13:03 ` [PATCH 4/5] iio: adc: stm32-dfsdm: add fast mode support Olivier Moysan
2019-06-19 13:03 ` Olivier Moysan
2019-06-22 9:30 ` Jonathan Cameron
2019-06-22 9:30 ` Jonathan Cameron
2019-06-19 13:03 ` [PATCH 5/5] iio: adc: stm32-dfsdm: add comment for 16 bits record Olivier Moysan
2019-06-19 13:03 ` Olivier Moysan
2019-06-22 9:33 ` Jonathan Cameron
2019-06-22 9:33 ` Jonathan Cameron
2019-06-19 15:04 ` [PATCH 0/5] iio: adc: stm32-dfsdm: fix and improve output data managementiio: adc: stm32-dfsdm: fix and improve output data management Fabrice Gasnier
2019-06-19 15:04 ` Fabrice Gasnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190622102315.2484d6de@archlinux \
--to=jic23@kernel.org \
--cc=alexandre.torgue@st.com \
--cc=benjamin.gaignard@st.com \
--cc=fabrice.gasnier@st.com \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=mcoquelin.stm32@gmail.com \
--cc=olivier.moysan@st.com \
--cc=pmeerw@pmeerw.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.