On Sat, 24 Mar 2018 13:53:19 +0000 Jonathan Cameron <jic23@xxxxxxxxxx> wrote: > 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-channels and same above. > > + 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 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html