Commit 08e39fcb authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'hwmon-for-v5.6-rc5' of...

Merge tag 'hwmon-for-v5.6-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull hwmon fixes from Guenter Roeck:
 "Fix an error return in the adt7462 driver, bad voltage limits reported
  by the xdpe12284 driver, and a broken documentation reference in the
  adm1177 driver documentation"

* tag 'hwmon-for-v5.6-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (adt7462) Fix an error return in ADT7462_REG_VOLT()
  hwmon: (pmbus/xdpe12284) Add callback for vout limits conversion
  docs: adm1177: fix a broken reference
parents c20c4a08 44f2f882
......@@ -20,8 +20,7 @@ Usage Notes
-----------
This driver does not auto-detect devices. You will have to instantiate the
devices explicitly. Please see Documentation/i2c/instantiating-devices for
details.
devices explicitly. Please see :doc:`/i2c/instantiating-devices` for details.
Sysfs entries
......
......@@ -413,7 +413,7 @@ static int ADT7462_REG_VOLT(struct adt7462_data *data, int which)
return 0x95;
break;
}
return -ENODEV;
return 0;
}
/* Provide labels for sysfs */
......
......@@ -18,6 +18,59 @@
#define XDPE122_AMD_625MV 0x10 /* AMD mode 6.25mV */
#define XDPE122_PAGE_NUM 2
static int xdpe122_read_word_data(struct i2c_client *client, int page, int reg)
{
const struct pmbus_driver_info *info = pmbus_get_driver_info(client);
long val;
s16 exponent;
s32 mantissa;
int ret;
switch (reg) {
case PMBUS_VOUT_OV_FAULT_LIMIT:
case PMBUS_VOUT_UV_FAULT_LIMIT:
ret = pmbus_read_word_data(client, page, reg);
if (ret < 0)
return ret;
/* Convert register value to LINEAR11 data. */
exponent = ((s16)ret) >> 11;
mantissa = ((s16)((ret & GENMASK(10, 0)) << 5)) >> 5;
val = mantissa * 1000L;
if (exponent >= 0)
val <<= exponent;
else
val >>= -exponent;
/* Convert data to VID register. */
switch (info->vrm_version[page]) {
case vr13:
if (val >= 500)
return 1 + DIV_ROUND_CLOSEST(val - 500, 10);
return 0;
case vr12:
if (val >= 250)
return 1 + DIV_ROUND_CLOSEST(val - 250, 5);
return 0;
case imvp9:
if (val >= 200)
return 1 + DIV_ROUND_CLOSEST(val - 200, 10);
return 0;
case amd625mv:
if (val >= 200 && val <= 1550)
return DIV_ROUND_CLOSEST((1550 - val) * 100,
625);
return 0;
default:
return -EINVAL;
}
default:
return -ENODATA;
}
return 0;
}
static int xdpe122_identify(struct i2c_client *client,
struct pmbus_driver_info *info)
{
......@@ -70,6 +123,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,
.read_word_data = xdpe122_read_word_data,
};
static int xdpe122_probe(struct i2c_client *client,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment