On Wed, Mar 13, 2019 at 12:31:53PM +0000, Grönke, Christian wrote: > Hello all, > > I am currently working on a hwmon/pmbus driver for a PMBus capable 3Y > Power/FSP power supply (YH5301-1EAR). > > The datasheet has limited information. But with the help of some online > sources, other datasheets from the vendor and the pmbus sub-system I could > figure out most of it. > > However, I did run in some troubles with the VOUT values. To my understanding > (and from what I could validate) the device does encode _all_ values as > "LINEAR11". Meaning all values have a mantissa of 11 bit and the exponent in > the other 5 bits of the register word. This causes some troubles with the > read out of the VOUT registers (e.g. READ_VOUT). The pmbus subsystem expects > these values to be in "LINEAR16" encoding. Hence the full word register is > the mantissa and the exponent is supposed to be in VOUT_MODE. > Sadly, the VOUT_MODE register isn't supported. It reads 0xFF. > ... violating its own specification...
> In my first attempt to work around this, I provided a custom read_word_data > function that would fixup the value. However, that did lead to problems with > negative values and also had a precision loss (12,09V -> 12V). I tried to > compensate by faking the values as 'direct' and adjusting the m/b/R values to > match. This is also not perfect, as it is messy and also seems to report the > wrong values in some cases. Messy is relative. Polluting generic code is just as messy. What are those cases where a wrong value is reported ? > > I think the best solution would be to prevent pmbus (more specifically > 'pmbus_reg2data_linear') to treat the obtained value as LINEAR16. A quick > hack shows me that this would work with all the reported values of the > device. However, this means proving da vendor/device specific workaround by > changing a generic component. > > I am not sure how you feel about this. Ultimately, I'd like to upstream the > driver (and potential fix), so I would like to find a solution that is fine > with you all. > > My current proposal would be to introduce a flag in pmbus_platform_data.flags > that allows to disable the LINEAR16 switch in case the sensor has the class > PSC_VOLTAGE_OUT. At least this seems the change with the smallest impact. I > am not sure how to name the flag but to propose something I'd say > 'PMBUS_VOUT_IS_LINEAR11' > > What do you think? Not sure if that is less messy. Have you tried to fake the VOUT_MODE command and to provide an exponent that makes sense ? While LINEAR16 does not support negative values, I don't immediately see that as a practical problem, unless the power supply indeed reports negative output voltages. Thanks, Guenter P.s.: I asked for more information from the vendor, but I don't really expect to get anything. Worth trying, though.
