Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

hwmon: (pmbus/adp1050): Support adp1051 and adp1055 #2629

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,24 @@ maintainers:
- Radu Sabau <[email protected]>

description: |
The ADP1050 is used to monitor system voltages, currents and temperatures.
The ADP1050 and similar devices are used to monitor system voltages,
currents, power, and temperatures.

Through the PMBus interface, the ADP1050 targets isolated power supplies
and has four individual monitors for input/output voltage, input current
and temperature.
Datasheet:
https://www.analog.com/en/products/adp1050.html
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just add here the links to new datasheets

https://www.analog.com/en/products/adp1051.html
https://www.analog.com/en/products/adp1055.html

properties:

compatible:
const: adi,adp1050
enum:
- adi,adp1050
- adi,adp1051
- adi,adp1055

reg:
maxItems: 1
Expand Down
52 changes: 48 additions & 4 deletions Documentation/hwmon/adp1050.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,33 @@ Supported chips:

Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ADP1050.pdf

* Analog Devices ADP1051

Prefix: 'adp1051'

Addresses scanned: I2C 0x70 - 0x77

Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ADP1051.pdf

* Analog Devices ADP1055

Prefix: 'adp1055'

Addresses scanned: I2C 0x4B - 0x77

Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ADP1055.pdf

Authors:

- Radu Sabau <[email protected]>


Description
-----------

This driver supprts hardware monitoring for Analog Devices ADP1050 Digital
Controller for Isolated Power Supply with PMBus interface.
This driver supports hardware monitoring for Analog Devices ADP1050, ADP1051, and
ADP1055 Digital Controller for Isolated Power Supply with PMBus interface.

The ADP1050 is an advanced digital controller with a PMBus™
The ADP105X is an advanced digital controller with a PMBus™
interface targeting high density, high efficiency dc-to-dc power
conversion used to monitor system temperatures, voltages and currents.
Through the PMBus interface, the device can monitor input/output voltages,
Expand All @@ -49,16 +64,45 @@ Sysfs Attributes
in1_label "vin"
in1_input Measured input voltage
in1_alarm Input voltage alarm
in1_crit Critical maximum input voltage
in1_crit_alarm Input voltage high alarm
in1_lcrit Critical minimum input voltage
in1_lcrit_alarm Input voltage critical low alarm
in2_label "vout1"
in2_input Measured output voltage
in2_crit Critical maximum output voltage
in2_crit_alarm Output voltage high alarm
in2_lcrit Critical minimum output voltage
in2_lcrit_alarm Output voltage critical low alarm
in2_max Critical maximum output voltage
in2_max_alarm Output voltage critical max alarm
in2_min Critical minimum output voltage
in2_min_alarm Output voltage critical min alarm
curr1_label "iin"
curr1_input Measured input current.
curr1_alarm Input current alarm
curr1_crit Critical maximum input current
curr1_crit_alarm Input current high alarm
curr2_label "iout1"
curr2_input Measured output current
curr2_crit Critical maximum output current
curr2_crit_alarm Output current high alarm
curr2_lcrit Critical minimum output current
curr2_lcrit_alarm Output current critical low alarm
curr2_max Critical maximum output current
curr2_max_alarm Output current critical max alarm
power1_label "pout1"
power1_input Measured output power
power1_crit Critical maximum output power
power1_crit_alarm Output power high alarm
temp1_input Measured temperature
temp1_crit Critical high temperature
temp1_crit_alarm Chip temperature critical high alarm
temp1_max Critical maximum temperature
temp1_max_alarm Temperature critical max alarm
temp2_input Measured temperature
temp2_crit Critical high temperature
temp2_crit_alarm Chip temperature critical high alarm
temp2_max Critical maximum temperature
temp2_max_alarm Temperature critical max alarm
================= ========================================
42 changes: 39 additions & 3 deletions drivers/hwmon/pmbus/adp1050.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,57 @@ static struct pmbus_driver_info adp1050_info = {
| PMBUS_HAVE_STATUS_TEMP,
};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also unrelated change. I would drop it (or add it in a different patch)


static struct pmbus_driver_info adp1051_info = {
.pages = 1,
.format[PSC_VOLTAGE_IN] = linear,
.format[PSC_VOLTAGE_OUT] = linear,
.format[PSC_CURRENT_IN] = linear,
.format[PSC_TEMPERATURE] = linear,
.func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | PMBUS_HAVE_VOUT
| PMBUS_HAVE_IOUT | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_VOUT
| PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT
| PMBUS_HAVE_STATUS_TEMP,
};

static struct pmbus_driver_info adp1055_info = {
.pages = 1,
.format[PSC_VOLTAGE_IN] = linear,
.format[PSC_VOLTAGE_OUT] = linear,
.format[PSC_CURRENT_IN] = linear,
.format[PSC_TEMPERATURE] = linear,
.func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | PMBUS_HAVE_VOUT
| PMBUS_HAVE_IOUT | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3
| PMBUS_HAVE_POUT | PMBUS_HAVE_STATUS_VOUT
| PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT
| PMBUS_HAVE_STATUS_TEMP,
};

/* 6.1 probe() function still uses the second struct i2c_device_id argument */
static int adp1050_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
return pmbus_do_probe(client, &adp1050_info);
const struct pmbus_driver_info *info;

info = device_get_match_data(&client->dev);
if (!info)
return -ENODEV;

return pmbus_do_probe(client, info);
}

static const struct i2c_device_id adp1050_id[] = {
{"adp1050", 0},
{ .name = "adp1050", .driver_data = (kernel_ulong_t)&adp1050_info},
{ .name = "adp1051", .driver_data = (kernel_ulong_t)&adp1051_info},
{ .name = "adp1055", .driver_data = (kernel_ulong_t)&adp1055_info},
{}
};

MODULE_DEVICE_TABLE(i2c, adp1050_id);

static const struct of_device_id adp1050_of_match[] = {
{ .compatible = "adi,adp1050"},
{ .compatible = "adi,adp1050", .data = &adp1050_info},
{ .compatible = "adi,adp1051", .data = &adp1051_info},
{ .compatible = "adi,adp1055", .data = &adp1055_info},
{}
};
MODULE_DEVICE_TABLE(of, adp1050_of_match);
Expand Down
Loading