RE: [hwmon-next v1 2/2] hwmon: (pmbus/xdpe12284) Add custom format for vout limits conversion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Guenter Roeck <groeck7@xxxxxxxxx> On Behalf Of Guenter Roeck
> Sent: Monday, February 24, 2020 4:27 PM
> To: Vadim Pasternak <vadimp@xxxxxxxxxxxx>
> Cc: linux-hwmon@xxxxxxxxxxxxxxx
> Subject: Re: [hwmon-next v1 2/2] hwmon: (pmbus/xdpe12284) Add custom
> format for vout limits conversion
> 
> On 2/24/20 5:12 AM, Vadim Pasternak wrote:
> > Provide callback for overvoltage and undervoltage output readouts
> > conversion. These registers are presented in 'slinear11' format, while
> > default conversion for 'vout' class for the devices is 'vid'. It is
> > resulted in wrong conversion in pmbus_reg2data() for in{3-4}_lcrit and
> > in{3-4}_crit attributes.
> >
> > Signed-off-by: Vadim Pasternak <vadimp@xxxxxxxxxxxx>
> > ---
> >   drivers/hwmon/pmbus/xdpe12284.c | 23 +++++++++++++++++++++++
> >   1 file changed, 23 insertions(+)
> >
> > diff --git a/drivers/hwmon/pmbus/xdpe12284.c
> > b/drivers/hwmon/pmbus/xdpe12284.c index ecd9b65627ec..751c8e18c881
> > 100644
> > --- a/drivers/hwmon/pmbus/xdpe12284.c
> > +++ b/drivers/hwmon/pmbus/xdpe12284.c
> > @@ -18,6 +18,28 @@
> >   #define XDPE122_AMD_625MV		0x10 /* AMD mode 6.25mV */
> >   #define XDPE122_PAGE_NUM		2
> >
> > +static int xdpe122_reg2data(u16 reg, int data, long *val) {
> > +	s16 exponent;
> > +	s32 mantissa;
> > +
> > +	switch (reg) {
> > +	case PMBUS_VOUT_OV_FAULT_LIMIT:
> > +	case PMBUS_VOUT_UV_FAULT_LIMIT:
> 
> Another situation where having a datasheet would be quite valuable.
> 
> I would suggest to implement reading those two registers locally and convert
> them to the expected data format. That seems to be more straightforward than
> re-implementing slinear conversion.

Hi Guenter,

Do you mean to implement them locally through the virtual registers?
	case PMBUS_VIRT_VMON_OV_FAULT_LIMIT:
	case PMBUS_VIRT_VMON_UV_FAULT_LIMIT:

Thanks,
Vadim.

> 
> Thanks,
> Guenter
> 
> > +		/* Convert to LINEAR11. */
> > +		exponent = ((s16)data) >> 11;
> > +		mantissa = ((s16)((data & GENMASK(10, 0)) << 5)) >> 5;
> > +		*val = mantissa * 1000L;
> > +		if (exponent >= 0)
> > +			*val <<= exponent;
> > +		else
> > +			*val >>= -exponent;
> > +		return 0;
> > +	default:
> > +		return -ENODATA;
> > +	}
> > +}
> > +
> >   static int xdpe122_identify(struct i2c_client *client,
> >   			    struct pmbus_driver_info *info)
> >   {
> > @@ -70,6 +92,7 @@ static struct pmbus_driver_info xdpe122_info = {
> >   		PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP |
> >   		PMBUS_HAVE_POUT | PMBUS_HAVE_PIN |
> PMBUS_HAVE_STATUS_INPUT,
> >   	.identify = xdpe122_identify,
> > +	.reg2data = xdpe122_reg2data,
> >   };
> >
> >   static int xdpe122_probe(struct i2c_client *client,
> >





[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux