On Mon, 19 Mar 2018 18:02:45 +0100 Peter Rosin <peda@xxxxxxxxxx> wrote: > Allow linear scaling and modification of the type of an io-channel. > > When an ADC channel measures the midpoint of a voltage divider, the > interesting voltage is often the voltage over the full resistance > of the divider. Likewise, measuring the voltage over a resistor is > often a way to get to the current through it. > > This binding allows description of such hardware which is external > to the ADC. > > Signed-off-by: Peter Rosin <peda@xxxxxxxxxx> > --- > .../iio/wrapper/io-channel-unit-converter.txt | 84 ++++++++++++++++++++++ Hmm. I'm not convinced by the naming really though I can see where you care coming from as it can effectively use a voltage ADC to measure a current. Lets see if the devicetree people or anyone else has a suggestion on this. Could go with AFE as that is how a chip doing this would normally be described. It's just that here we are doing it in old fashioned resistors... There are a few unusual elements in here binding wise so definitely looking for input on the bindings! Thanks, Jonathan > MAINTAINERS | 6 ++ > 2 files changed, 90 insertions(+) > create mode 100644 Documentation/devicetree/bindings/iio/wrapper/io-channel-unit-converter.txt > > diff --git a/Documentation/devicetree/bindings/iio/wrapper/io-channel-unit-converter.txt b/Documentation/devicetree/bindings/iio/wrapper/io-channel-unit-converter.txt > new file mode 100644 > index 000000000000..23af661abe32 > --- /dev/null > +++ b/Documentation/devicetree/bindings/iio/wrapper/io-channel-unit-converter.txt > @@ -0,0 +1,84 @@ > +I/O channel unit converter bindings > + > +Allow linear scaling and modification of the type of an io-channel. I can certainly conceive that we will have simple non linear cases in future though they get awfully hard to describe so we can tackle that when it happens. > + > +When an ADC channel measures the midpoint of a voltage divider, the > +interesting voltage is often the voltage over the full resistance > +of the divider. Likewise, measuring the voltage over a resistor is > +often a way to get to the current through it. > + > +Required properties: > +- compatible : "io-channel-unit-converter" > +- io-channels : Channel node of the parent channel. > +- io-channel-names : Should be "parent". > + > +Optional properties: > +- numerator : The parent channel scale is multiplied by this value (default 1). > +- denominator : The parent channel scale is divided by this value (default 1). > +- type : The type of the wrapped channel is modified to this type. The default > + is to use the same type as the parent channel. Recognized types are: > + "voltage" > + "current" > + > +Example 1: > +The system voltage is circa 12V, but divided down with a 22/200 > +voltage divider to adjust it to the ADC range. > + > +SYSV ADC GND > + + + + > + | .-----. | .----. | > + '--| 200 |-+-| 22 |--' > + '-----' '----' > + > +sysv { > + compatible = "io-channel-unit-converter"; > + io-channles = <&maxadc 1>; > + io-channel-names = "parent"; > + > + /* multiply the ADC voltage by 222/22 to get the system voltage */ > + numerator = <222>; /* 200 + 22 */ > + denominator = <22>; > +} > + > +&spi { > + maxadc: adc@0 { > + compatible = "maxim,max1027"; > + reg = <0>; > + #io-channel-cells = <1>; > + interrupt-parent = <&gpio5>; > + interrupts = <15 IRQ_TYPE_EDGE_RISING>; > + spi-max-frequency = <1000000>; > + }; > +}; > + > +Example 2: > +The system current is measured by measuring the voltage over a > +3.3 ohm resistor. > + > +sysi { > + compatible = "io-channel-unit-converter"; > + io-channles = <&tiadc 0>; > + io-channel-names = "parent"; > + > + /* divide the ADC voltage by 33/10 (i.e. 3.3) to get current */ > + numerator = <10>; > + denominator = <33>; > + type = "current"; > +} > + > +&i2c { > + tiadc: adc@48 { > + compatible = "ti,ads1015"; > + reg = <0x48>; > + #io-channel-cells = <1>; > + > + #address-cells = <1>; > + #size-cells = <0>; > + > + channel@0 { /* IN0,IN1 differential */ > + reg = <0>; > + ti,gain = <1>; > + ti,datarate = <4>; > + }; > + }; > +}; > diff --git a/MAINTAINERS b/MAINTAINERS > index 96e5503bfb60..5dd555c7b1b0 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -6884,6 +6884,12 @@ F: drivers/staging/iio/ > F: include/linux/iio/ > F: tools/iio/ > > +IIO UNIT CONVERTER > +M: Peter Rosin <peda@xxxxxxxxxx> > +L: linux-iio@xxxxxxxxxxxxxxx > +S: Maintained > +F: Documentation/devicetree/bindings/iio/wrapper/io-channel-unit-converter.txt > + > IKANOS/ADI EAGLE ADSL USB DRIVER > M: Matthieu Castet <castet.matthieu@xxxxxxx> > M: Stanislaw Gruszka <stf_xl@xxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html