From: Jonathan Cameron <jic23@kernel.org>
To: justinpopo6@gmail.com
Cc: linux-iio@vger.kernel.org, knaack.h@gmx.de, lars@metafoo.de,
linux-kernel@vger.kernel.org, f.fainelli@gmail.com,
Mark Brown <broonie@kernel.org>
Subject: Re: [PATCH v2] iio: adc: ti-ads7950: inconsistency with spi msg
Date: Sat, 26 Jan 2019 18:30:11 +0000 [thread overview]
Message-ID: <20190126183011.00f03cc3@archlinux> (raw)
In-Reply-To: <1548440422-27943-1-git-send-email-justinpopo6@gmail.com>
On Fri, 25 Jan 2019 10:20:22 -0800
justinpopo6@gmail.com wrote:
> From: Justin Chen <justinpopo6@gmail.com>
>
> To read a channel we require 3 cycles to send, process, and receive
> the data. The transfer buffer for the third transaction is left blank.
> This leaves it up to the SPI driver to decide what to do.
Interesting. I think that means you may have a bug in your SPI driver.
The pointer in question is always left set to NULL in the adc
driver (not explicitly but it will be because ultimately comes from
a kzalloc).
Documentation for an SPI message makes it clear that NULL is
allowed. From include/linux/spi/spi.h
"* Those segments always read the same number of bits as they
* write; but one or the other is easily ignored by passing a null buffer
* pointer. "
Hmm. It does say 'ignored'. My assumption has always been that
means it would be filled with zeros, but maybe I'm wrong.
Mark?
>
> In one particular case, if the tx buffer is not set the spi driver
> sets it to 0xff. This puts the ADC in a alarm programming state,
> therefore the following read to a channel becomes erroneous.
>
> Instead of leaving us to the mercy of the SPI driver, we send the
> ADC cmd on the third transaction to prevent inconsistent behavior.
>
> Fixes: 902c4b2446d4 ("iio: adc: New driver for TI ADS7950 chips")
> Signed-off-by: Justin Chen <justinpopo6@gmail.com>
> ---
> drivers/iio/adc/ti-ads7950.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/iio/adc/ti-ads7950.c b/drivers/iio/adc/ti-ads7950.c
> index 0ad6359..1255d8b 100644
> --- a/drivers/iio/adc/ti-ads7950.c
> +++ b/drivers/iio/adc/ti-ads7950.c
> @@ -422,6 +422,7 @@ static int ti_ads7950_probe(struct spi_device *spi)
> st->scan_single_xfer[1].tx_buf = &st->single_tx;
> st->scan_single_xfer[1].len = 2;
> st->scan_single_xfer[1].cs_change = 1;
> + st->scan_single_xfer[2].tx_buf = &st->single_tx;
> st->scan_single_xfer[2].rx_buf = &st->single_rx;
> st->scan_single_xfer[2].len = 2;
>
next prev parent reply other threads:[~2019-01-26 18:30 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-25 18:20 [PATCH v2] iio: adc: ti-ads7950: inconsistency with spi msg justinpopo6
2019-01-25 18:38 ` Florian Fainelli
2019-01-26 18:30 ` Jonathan Cameron [this message]
2019-01-31 5:15 ` Justin Chen
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=20190126183011.00f03cc3@archlinux \
--to=jic23@kernel.org \
--cc=broonie@kernel.org \
--cc=f.fainelli@gmail.com \
--cc=justinpopo6@gmail.com \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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.