All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <guenter.roeck@ericsson.com>
To: lm-sensors@vger.kernel.org
Subject: Re: [lm-sensors] [PATCH] hwmon: Driver for INA219 current and power
Date: Wed, 11 May 2011 14:14:20 +0000	[thread overview]
Message-ID: <20110511141420.GB5928@ericsson.com> (raw)
In-Reply-To: <1305038767-13241-1-git-send-email-mort@bork.org>

On Wed, May 11, 2011 at 08:39:12AM -0400, Jean Delvare wrote:
> Hi Guenter, Ira,
> 
> On Tue, 10 May 2011 19:26:47 -0700, Guenter Roeck wrote:
> > On Tue, May 10, 2011 at 04:38:44PM -0400, Ira W. Snyder wrote:
> > > I've been maintaining my own port of the ina209 driver. Now that the
> > > "in*_lcrit" interfaces are added to the sysfs-interface, we only have
> > > two disagreements:
> > > 
> > > 1) shunt voltage is reported in uV instead of mV
> > > 
> > > This avoids losing half of the precision supported by the chip. This
> > > makes a big difference for my application: I need it. IMHO, the
> > > sysfs-interface was short sighted.
> 
> I'm fairly certain I already explained months ago, but...
> 
> The sysfs interface was originally designed in 2005. Back then, the
> lowest monitored system voltage was 3.3V, with memory voltage at 1.8V
> (DDR2) and CPU core voltage in the 1.0-1.5V. Most monitoring chips were
> using ADCs with a resolution of 16 mV. Using 1 mV as the base unit
> seemed totally reasonable. As a matter of fact, we now see ADCs with
> resolution 12 mV or 8 mV, and our 1 mV unit is still totally fine.
> 
> Your problem is that you are not monitoring a voltage. You are
> monitoring a current, so requirements are totally different. And it's
> not always possible to anticipate future requirements. Current
> measurement was totally out of the scope of hardware monitoring
> initially... And I would claim it still is, BTW. Probably the IIO
> subsystem would be better suited at the need.
> 
I disagree here. Current measurement is critical to detect over-current
conditions. This may indicate a short or some other problem, and require
an immediate system shutdown to prevent (further) damage to the HW - especially
to the voltage converters.

> > > We'll see more chips in the future
> > > that are sensitive enough to report in uV.
> >
> > mV seems to be pretty accurate for voltage measurements.
> > The shunt voltage is really just a reflection of the voltage across
> > the current shunt resistor and reflects a current, not a voltage.
> > 
> > Sure, chips can sense voltages in the uV range, but that is typically 
> > not used for voltage but for current measurements. With a 0.001 Ohm
> > shunt resistor, 1uV translates to 1mA. Reporting that "voltage" in mA
> > makes, in my opinion, more sense than reporting it in uV and expecting
> > a common library to perform a translation of a reported voltage into mA.
> > 
> > Having said that, Jean has a support ticket open to implement such a conversion:
> > 	http://www.lm-sensors.org/ticket/2258
> > If he ever gets to it, I suspect we will have to address the uV issue,
> > since mV are definitely insufficient for reporting shunt resistor voltages.
> 
> Yes, I remember we discussed this lately, and I didn't have the time to
> work on this so far, sorry.
> 
No need to be sorry. I don't even know if it is a good idea - definitely 
not for cases like here, where it is well known that the measured object
reflects a current.

> I have nothing against extending the sysfs interface to support uV
> voltages. But this must be done in a way which doesn't break current
> installations. Arbitrarily reporting in uV instead of the standard mV
> isn't an option, neither for the ina209 driver alone, nor for all
> drivers.
> 
> One way to do it would be to invent a brand new set of attributes for
> uV voltages. For example volt[0-*]_input, etc. This is straightforward
> and won't break anything, and would be transparent for applications,
> however this would incur a lot of redundancy in the sysfs interface
> definition document and in libsensors. If done smartly, this may be
> bearable. The user constraints would be: you need the latest version of
> libsensors for ina219 support, otherwise the attributes in question
> aren't visible at all.
> 
> Another way would be to create a dedicated attribute for hwmon drivers
> to advertise whether they are reporting voltages in uV or mV. For
> example, file "unit_in" would contain -6 when the chip reports voltages
> in uV, -3 if the chip reports voltages in mV (which would be the
> default for backwards compatibility.) This would require very little
> work in the sysfs-interface document and in libsensors, and would be
> transparent to applications. The user constraints would be: you need
> the latest version of libsensors for ina219 support, otherwise the
> attributes in question are improperly scaled. Whether this is better or
> worse than the constraints of the first option can be discussed... It
> has the problem that the incorrectness is silent, but the advantage
> that it can be corrected in sensors.conf if known (with, again, the
> problem that a future update of libsensors will require a fix of
> sensors.conf.)
> 
I would prefer something like inX_unit, ie per-sensor attributes.
But I don't have a strong opinion about it either.

> I don't have a strong opinion. I don't think the INA219 chip is popular
> enough that the second option is problematic. But if we go that route,
> we should implement the libsensors side immediately so that it starts
> propagating to the user base.
> 
> Note, the second option would also have the benefit that we can switch
> to nV or V or kV at any time if we need to support strange hardware
> monitoring devices. I don't expect it, but I didn't expect that we'd
> need uV either, so...
> 
I am still not sure if we need it now. As we both noticed, what is
really measured here is current, not voltage.

> If we go for the second option, I presume we would do the same for
> current and power. Just in case...
> 
> > > I'm sure this is why the power* sysfs-interface is exported in uW
> > > (microwatt). Eventually, devices will be sensitive enough to provide
> > > data with this very fine sensitivity.
> >
> > I don't know for sure, but I suspect it is simply because mV * mA = uW.
> 
> Yes, I think that was the reasoning behind it. And also a simple "play
> it safe" decision, because the feature was new and we didn't really
> know what to expect from devices (contrary to voltages in 2005 as we
> had 7 years of experience behind us.)
> 
> But you know, maybe someday someone will need nW and yell at us because
> we didn't anticipate it ;)
> 
... or because measuring uW is really ridiculous and we should have picked
mW instead for consistency ;).

> > > 2) current calculation is not handled on-chip, it is handled by
> > > libsensors
> > > 
> > > This was done to sidestep the "configuration register" setup which is
> > > needed for the chip. The value of this register must be computed using
> > > the datasheet and your specific sense resistor value in your specific
> > > circuit. By computing current in userspace using the sense voltage, we
> > > sidestep the issue completely.
> >
> > The chips provide current as
> > 	Current Register = Shunt Register * Calibration Register / 4096
> > 
> > so the question for me would be why it would be necessary report the raw value
> > of the shunt resistor voltage in the first place and not just stick with in0
> > (in mV) and curr1 (in mA). If you want to report the "raw" value, you could
> > report it in mA as suggested above (ie assume a 0.001 Ohm shunt resistor).
> > 
> > Part of the problem here is how to provide configuration data.
> > The overall expectation for chip configuration is that it should be handled
> > in the BIOS, ie before Linux starts. For applications where this is
> > not the case, would be to define platform data to provide the necessary
> > information. Another alternative would be to use OF (see the ads1015 driver
> > for an example). Using sysfs attributes for this purpose is not a good idea.
> 
> +1
> 
> > Jean had some reservations about assuming a 0.001 Ohm shunt resistor. See 
> > 	http://article.gmane.org/gmane.linux.documentation/2744/
> > Providing platform data to configure the chips would definitely be
> > a better option. 
> 
> Well well... If it makes everyone's life easier, I would be happy to
> (let you) document the 0.001 Ohm rule in D/h/sysfs-interface and
> possibly sensors.conf.5.
> 
I would not call it a rule ... maybe a guideline. If there is something better
than "assume a 0.001 Ohm shunt resistor", I'd be all for it. It is just the best
idea I was able to up with ...

I still think that is better than reporting known current measurements as voltages
and expecting user space to convert it to currents - especially if it is as obvious
as it is here.

Thanks,
Guenter

_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

  parent reply	other threads:[~2011-05-11 14:14 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-10 14:46 [lm-sensors] [PATCH] hwmon: Driver for INA219 current and power Martin Hicks
2011-05-10 16:07 ` Guenter Roeck
2011-05-10 17:03 ` Jean Delvare
2011-05-10 20:38 ` Ira W. Snyder
2011-05-11  2:26 ` Guenter Roeck
2011-05-11 12:39 ` Jean Delvare
2011-05-11 14:14 ` Guenter Roeck [this message]
2011-05-11 14:47 ` Martin Hicks
2011-05-11 15:41 ` Ira W. Snyder
2011-05-11 16:57 ` Jean Delvare
2011-05-11 18:40 ` Guenter Roeck
2011-05-11 19:17 ` Jean Delvare
2011-05-11 23:36 ` Guenter Roeck

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=20110511141420.GB5928@ericsson.com \
    --to=guenter.roeck@ericsson.com \
    --cc=lm-sensors@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.