Skip to content

Commit

Permalink
hwmon: (adm1275) Add support for peak attributes
Browse files Browse the repository at this point in the history
Add support for voltage and current peak (historic maximum) attributes.

Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Reviewed-by: Robert Coulson <robert.coulson@ericsson.com>
  • Loading branch information
Guenter Roeck committed Jul 29, 2011
1 parent 6f183d3 commit c576e30
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 2 deletions.
8 changes: 6 additions & 2 deletions Documentation/hwmon/adm1275
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ Documentation/hwmon/pmbus for details.
Sysfs entries
-------------

The following attributes are supported. Limits are read-write; all other
attributes are read-only.
The following attributes are supported. Limits are read-write, history reset
attributes are write-only, all other attributes are read-only.

in1_label "vin1" or "vout1" depending on chip variant and
configuration.
Expand All @@ -53,8 +53,12 @@ in1_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register.
in1_max Maximum voltage. From VOUT_OV_WARN_LIMIT register.
in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
in1_highest Historical maximum voltage.
in1_reset_history Write any value to reset history.

curr1_label "iout1"
curr1_input Measured current. From READ_IOUT register.
curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register.
curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register.
curr1_highest Historical maximum current.
curr1_reset_history Write any value to reset history.
60 changes: 60 additions & 0 deletions drivers/hwmon/pmbus/adm1275.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,68 @@
#include <linux/i2c.h>
#include "pmbus.h"

#define ADM1275_PEAK_IOUT 0xd0
#define ADM1275_PEAK_VIN 0xd1
#define ADM1275_PEAK_VOUT 0xd2
#define ADM1275_PMON_CONFIG 0xd4

#define ADM1275_VIN_VOUT_SELECT (1 << 6)
#define ADM1275_VRANGE (1 << 5)

static int adm1275_read_word_data(struct i2c_client *client, int page, int reg)
{
int ret;

if (page)
return -EINVAL;

switch (reg) {
case PMBUS_VIRT_READ_IOUT_MAX:
ret = pmbus_read_word_data(client, 0, ADM1275_PEAK_IOUT);
break;
case PMBUS_VIRT_READ_VOUT_MAX:
ret = pmbus_read_word_data(client, 0, ADM1275_PEAK_VOUT);
break;
case PMBUS_VIRT_READ_VIN_MAX:
ret = pmbus_read_word_data(client, 0, ADM1275_PEAK_VIN);
break;
case PMBUS_VIRT_RESET_IOUT_HISTORY:
case PMBUS_VIRT_RESET_VOUT_HISTORY:
case PMBUS_VIRT_RESET_VIN_HISTORY:
ret = 0;
break;
default:
ret = -ENODATA;
break;
}
return ret;
}

static int adm1275_write_word_data(struct i2c_client *client, int page, int reg,
u16 word)
{
int ret;

if (page)
return -EINVAL;

switch (reg) {
case PMBUS_VIRT_RESET_IOUT_HISTORY:
ret = pmbus_write_word_data(client, 0, ADM1275_PEAK_IOUT, 0);
break;
case PMBUS_VIRT_RESET_VOUT_HISTORY:
ret = pmbus_write_word_data(client, 0, ADM1275_PEAK_VOUT, 0);
break;
case PMBUS_VIRT_RESET_VIN_HISTORY:
ret = pmbus_write_word_data(client, 0, ADM1275_PEAK_VIN, 0);
break;
default:
ret = -ENODATA;
break;
}
return ret;
}

static int adm1275_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
Expand Down Expand Up @@ -58,6 +115,9 @@ static int adm1275_probe(struct i2c_client *client,
info->R[PSC_CURRENT_OUT] = -1;
info->func[0] = PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT;

info->read_word_data = adm1275_read_word_data;
info->write_word_data = adm1275_write_word_data;

if (config & ADM1275_VRANGE) {
info->m[PSC_VOLTAGE_IN] = 19199;
info->b[PSC_VOLTAGE_IN] = 0;
Expand Down

0 comments on commit c576e30

Please sign in to comment.