From: Song Qiang <songqiang1304521@gmail.com>
To: Matt Ranostay <matt.ranostay@konsulko.com>
Cc: Jonathan Cameron <jic23@kernel.org>,
Hartmut Knaack <knaack.h@gmx.de>,
Lars-Peter Clausen <lars@metafoo.de>,
Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] iio: proximity: lidar-v2: replace i2c block access method with the one already implemented.
Date: Fri, 14 Sep 2018 09:48:06 +0800 [thread overview]
Message-ID: <20180914014806.GA25667@Eros> (raw)
In-Reply-To: <CAJCx=gk3Md910hfD2ZiTRNj6mv1nf+r6p_0tYMu7uKiEp4ZvOw@mail.gmail.com>
On Thu, Sep 13, 2018 at 02:43:35PM -0700, Matt Ranostay wrote:
> On Wed, Sep 12, 2018 at 8:51 PM Song Qiang <songqiang1304521@gmail.com> wrote:
> >
> > This driver tries to access a block of data on a i2c bus and it tries
> > to manually make a device command frame and a consecutively read frame,
> > then uses i2c_transfer() to read data. But this has already been
> > implemented in i2c_smbus_read_i2c_block_data().
> > Sorry for not having this device by my hand, which is a little expansive
> > for me, but I have another i2c device and tested with both i2c_transfer()
> > and i2c_smbus_read_i2c_block_data() and they all ends the same.
> > I'm not familiar with the SMBus, don't know if the lidar_smbus_xfer()
> > function is the same as i2c_smbus_read_block_data()? The original code
> > is commented with something I'm not sure, but I think if it's a standard
> > SMBus, it should be able to use in here.
> > Hoping for someone to explain.
> >
>
> Yes actually there is a reason for this insanity!
>
> It isn't actually SMBUS (note the lidar_smbus_xfer function below it)
> and has a odd way to read registers via I2C.
> Basically the I2C_M_STOP flags is the reason you can use the standard
> i2c_smbus_read_i2c_block_data().
>
> Page 6 in this datasheet
> * http://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf
>
> > Signed-off-by: Song Qiang <songqiang.1304521@gmail.com>
> > ---
> > .../iio/proximity/pulsedlight-lidar-lite-v2.c | 18 +-----------------
> > 1 file changed, 1 insertion(+), 17 deletions(-)
> >
> > diff --git a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
> > index 47af54f14756..ca880ba8e820 100644
> > --- a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
> > +++ b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c
> > @@ -63,23 +63,7 @@ static const struct iio_chan_spec lidar_channels[] = {
> >
> > static int lidar_i2c_xfer(struct lidar_data *data, u8 reg, u8 *val, int len)
> > {
> > - struct i2c_client *client = data->client;
> > - struct i2c_msg msg[2];
> > - int ret;
> > -
> > - msg[0].addr = client->addr;
> > - msg[0].flags = client->flags | I2C_M_STOP;
> > - msg[0].len = 1;
> > - msg[0].buf = (char *) ®
> > -
> > - msg[1].addr = client->addr;
> > - msg[1].flags = client->flags | I2C_M_RD;
> > - msg[1].len = len;
> > - msg[1].buf = (char *) val;
> > -
> > - ret = i2c_transfer(client->adapter, msg, 2);
> > -
> > - return (ret == 2) ? 0 : -EIO;
> > + return i2c_smbus_read_i2c_block_data(data->client, reg, len, val);
> > }
> >
> > static int lidar_smbus_xfer(struct lidar_data *data, u8 reg, u8 *val, int len)
> > --
> > 2.17.1
> >
Hi Matt,
Thanks for the explanition, now I understand why we have to use
lidar_smbus_xfer() here.
So we can use the standard i2c_smbus_read_i2c_block_data() here?
I'm thinking since you are the author it seems like you have the
hardware, would you mind to test if it's working? I'd appriciate
that.
yours,
Song Qiang
next prev parent reply other threads:[~2018-09-14 7:00 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-13 3:51 [PATCH] iio: proximity: lidar-v2: replace i2c block access method with the one already implemented Song Qiang
2018-09-13 21:43 ` Matt Ranostay
2018-09-14 1:48 ` Song Qiang [this message]
2018-09-14 12:09 ` Himanshu Jha
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=20180914014806.GA25667@Eros \
--to=songqiang1304521@gmail.com \
--cc=jic23@kernel.org \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matt.ranostay@konsulko.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).