From: Jonathan Cameron <jic23@kernel.org>
To: Naresh Solanki <naresh.solanki@9elements.com>
Cc: Lee Jones <lee@kernel.org>, Lars-Peter Clausen <lars@metafoo.de>,
Patrick Rudolph <patrick.rudolph@9elements.com>,
linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org
Subject: Re: [PATCH v2 1/2] iio: max597x: Add support for max597x
Date: Sat, 1 Apr 2023 14:44:02 +0100 [thread overview]
Message-ID: <20230401144402.42a3959c@jic23-huawei> (raw)
In-Reply-To: <4188a480-15dd-0e17-b3e9-7572eee3ea0c@9elements.com>
On Tue, 28 Mar 2023 00:14:16 +0530
Naresh Solanki <naresh.solanki@9elements.com> wrote:
> Hi,
>
> On 26-03-2023 01:06 am, Jonathan Cameron wrote:
> > On Thu, 23 Mar 2023 20:45:48 +0100
> > Naresh Solanki <naresh.solanki@9elements.com> wrote:
> >
> >> From: Patrick Rudolph <patrick.rudolph@9elements.com>
> >>
> >> max597x has 10bit ADC for voltage & current monitoring.
> >> Use iio framework to expose the same in sysfs.
> >>
> >> Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
> >> Signed-off-by: Naresh Solanki <Naresh.Solanki@9elements.com>
> >
> > I'm not a fan of wild cards in driver names. This doesn't
> > for example support the max5974, max5971 etc
> >
> > Much better to name it after one of the supported parts.
> > Obviously can't do much about the mfd driver now, but I'd prefer
> > not to carry that through to the IIO driver if possible.
> >
> > One concern I have here is that from the max5978 datasheet I see
> > this device supports features that are very much directed at hwmon
> > type usecases. In particular warning and critical threshold detection.
> > We don't support multiple thresholds (in same direction) for a single
> > channel via IIO. If you want those features in the future you may want
> > to consider using the hwmon subsystem.
> >
> > We tend to be flexible with devices that sit near the boundary of IIO
> > and hwmon because we can bridge many of the features using the iio-hwmon
> > bridge driver. That doesn't work for more complex event handling and
> > I suspect some of the other features this device provides.
> I believe it is the most appropriate approach for our use case at the
> moment. If we decide to incorporate more complex event handling or need
> to support multiple thresholds in the future, we will definitely
> consider using the hwmon subsystem. Thank for your input.
It's not easy to move a driver (because of need to maintain ABI compatibility
in most cases). Hence I'd suggest at least CCing the hwmon list and maintainers
on future versions with a cover letter than explains your reasoning on why
this particular support should use IIO.
> >
> >
> >> +
> >> +static int max597x_iio_read_raw(struct iio_dev *iio_dev,
> >> + struct iio_chan_spec const *chan,
> >> + int *val, int *val2, long info)
> >> +{
> >> + int ret;
> >> + struct max597x_iio *data = iio_priv(iio_dev);
> >> + unsigned int reg_l, reg_h;
> >> +
> >> + switch (info) {
> >> + case IIO_CHAN_INFO_RAW:
> >> + ret = regmap_read(data->regmap, chan->address, ®_l);
> >> + if (ret < 0)
> >> + return ret;
> >> + ret = regmap_read(data->regmap, chan->address - 1, ®_h);
> >> + if (ret < 0)
> >> + return ret;
> >> + *val = (reg_h << 2) | (reg_l & 3);
> >
> > I replied late to previous patch, but I'd prefer to see a bulk read if
> > possible. It might ensure a matched pair, or if not reduce the chance of
> > tearing (when reg_l & 3 transitions from 3 to 0 for example and
> > reg_h & 1 is going from 0 to 1)
> >
> > You could try a repeated read if the sampling rate is fairly low as
> > simply getting same high bits on either side of the low bit read is probably
> > enough to say tearing didn't happen.
> Yes. will use something like:
> ret = regmap_bulk_read(data->regmap, chan->address - 1, ®_l, 2);
> if (ret < 0)
> return ret;
> reg_h = reg_l & 0xff;
> reg_l = (reg_l >> 8) & 0xff;
> *val = (reg_h << 2) | (reg_l & 3);
As you are going to handle them as separate registers (which makes sense under the
circumstances) read into a u8 regs[2] then express this as the following which also
deals with endian issues by make the registering ordering explicit.
*val = (reg[0] << 2) | (reg[1] & 3);
Thanks,
Jonathan
prev parent reply other threads:[~2023-04-01 13:28 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-23 19:45 [PATCH v2 1/2] iio: max597x: Add support for max597x Naresh Solanki
2023-03-23 20:06 ` Christophe JAILLET
2023-03-24 10:10 ` Naresh Solanki
2023-03-25 19:36 ` Jonathan Cameron
2023-03-27 18:44 ` Naresh Solanki
2023-04-01 13:44 ` Jonathan Cameron [this message]
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=20230401144402.42a3959c@jic23-huawei \
--to=jic23@kernel.org \
--cc=lars@metafoo.de \
--cc=lee@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=naresh.solanki@9elements.com \
--cc=patrick.rudolph@9elements.com \
/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