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.

Reply via email to