Skip to content

Commit 82c4d40

Browse files
committed
hwmon: pmbus : adp1051 and adp1055: Add driver support
ADP1051: 6 PWM for I/O Voltage, I/O Current, Temperature ADP1055: 6 PWM for I/O Voltage, I/O Current, Power, Temperature Signed-off-by: Alexis Torreno <[email protected]>
1 parent 6282383 commit 82c4d40

File tree

2 files changed

+87
-7
lines changed

2 files changed

+87
-7
lines changed

Documentation/hwmon/adp1050.rst

+48-4
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,33 @@ Supported chips:
1313

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

16+
* Analog Devices ADP1051
17+
18+
Prefix: 'adp1051'
19+
20+
Addresses scanned: I2C 0x70 - 0x77
21+
22+
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ADP1051.pdf
23+
24+
* Analog Devices ADP1055
25+
26+
Prefix: 'adp1055'
27+
28+
Addresses scanned: I2C 0x4B - 0x77
29+
30+
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ADP1055.pdf
31+
1632
Authors:
1733

1834
- Radu Sabau <[email protected]>
1935

20-
2136
Description
2237
-----------
2338

24-
This driver supprts hardware monitoring for Analog Devices ADP1050 Digital
25-
Controller for Isolated Power Supply with PMBus interface.
39+
This driver supports hardware monitoring for Analog Devices ADP1050, ADP1051, and
40+
ADP1055 Digital Controller for Isolated Power Supply with PMBus interface.
2641

27-
The ADP1050 is an advanced digital controller with a PMBus™
42+
The ADP105X is an advanced digital controller with a PMBus™
2843
interface targeting high density, high efficiency dc-to-dc power
2944
conversion used to monitor system temperatures, voltages and currents.
3045
Through the PMBus interface, the device can monitor input/output voltages,
@@ -49,16 +64,45 @@ Sysfs Attributes
4964
in1_label "vin"
5065
in1_input Measured input voltage
5166
in1_alarm Input voltage alarm
67+
in1_crit Critical maximum input voltage
68+
in1_crit_alarm Input voltage high alarm
69+
in1_lcrit Critical minimum input voltage
70+
in1_lcrit_alarm Input voltage critical low alarm
5271
in2_label "vout1"
5372
in2_input Measured output voltage
5473
in2_crit Critical maximum output voltage
5574
in2_crit_alarm Output voltage high alarm
5675
in2_lcrit Critical minimum output voltage
5776
in2_lcrit_alarm Output voltage critical low alarm
77+
in2_max Critical maximum output voltage
78+
in2_max_alarm Output voltage critical max alarm
79+
in2_min Critical minimum output voltage
80+
in2_min_alarm Output voltage critical min alarm
5881
curr1_label "iin"
5982
curr1_input Measured input current.
6083
curr1_alarm Input current alarm
84+
curr1_crit Critical maximum input current
85+
curr1_crit_alarm Input current high alarm
86+
curr2_label "iout1"
87+
curr2_input Measured output current
88+
curr2_crit Critical maximum output current
89+
curr2_crit_alarm Output current high alarm
90+
curr2_lcrit Critical minimum output current
91+
curr2_lcrit_alarm Output current critical low alarm
92+
curr2_max Critical maximum output current
93+
curr2_max_alarm Output current critical max alarm
94+
power1_label "pout1"
95+
power1_input Measured output power
96+
power1_crit Critical maximum output power
97+
power1_crit_alarm Output power high alarm
6198
temp1_input Measured temperature
6299
temp1_crit Critical high temperature
63100
temp1_crit_alarm Chip temperature critical high alarm
101+
temp1_max Critical maximum temperature
102+
temp1_max_alarm Temperature critical max alarm
103+
temp2_input Measured temperature
104+
temp2_crit Critical high temperature
105+
temp2_crit_alarm Chip temperature critical high alarm
106+
temp2_max Critical maximum temperature
107+
temp2_max_alarm Temperature critical max alarm
64108
================= ========================================

drivers/hwmon/pmbus/adp1050.c

+39-3
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,57 @@ static struct pmbus_driver_info adp1050_info = {
2323
| PMBUS_HAVE_STATUS_TEMP,
2424
};
2525

26+
static struct pmbus_driver_info adp1051_info = {
27+
.pages = 1,
28+
.format[PSC_VOLTAGE_IN] = linear,
29+
.format[PSC_VOLTAGE_OUT] = linear,
30+
.format[PSC_CURRENT_IN] = linear,
31+
.format[PSC_TEMPERATURE] = linear,
32+
.func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | PMBUS_HAVE_VOUT
33+
| PMBUS_HAVE_IOUT | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_VOUT
34+
| PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT
35+
| PMBUS_HAVE_STATUS_TEMP,
36+
};
37+
38+
static struct pmbus_driver_info adp1055_info = {
39+
.pages = 1,
40+
.format[PSC_VOLTAGE_IN] = linear,
41+
.format[PSC_VOLTAGE_OUT] = linear,
42+
.format[PSC_CURRENT_IN] = linear,
43+
.format[PSC_TEMPERATURE] = linear,
44+
.func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_IIN | PMBUS_HAVE_VOUT
45+
| PMBUS_HAVE_IOUT | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3
46+
| PMBUS_HAVE_POUT | PMBUS_HAVE_STATUS_VOUT
47+
| PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT
48+
| PMBUS_HAVE_STATUS_TEMP,
49+
};
50+
2651
/* 6.1 probe() function still uses the second struct i2c_device_id argument */
2752
static int adp1050_probe(struct i2c_client *client,
2853
const struct i2c_device_id *id)
2954
{
30-
return pmbus_do_probe(client, &adp1050_info);
55+
struct pmbus_driver_info *info;
56+
57+
info = device_get_match_data(&client->dev);
58+
if (!info)
59+
return -ENODEV;
60+
61+
return pmbus_do_probe(client, info);
3162
}
3263

3364
static const struct i2c_device_id adp1050_id[] = {
34-
{"adp1050", 0},
65+
{ .name = "adp1050", .driver_data = (kernel_ulong_t)&adp1050_info},
66+
{ .name = "adp1051", .driver_data = (kernel_ulong_t)&adp1051_info},
67+
{ .name = "adp1055", .driver_data = (kernel_ulong_t)&adp1055_info},
3568
{}
3669
};
70+
3771
MODULE_DEVICE_TABLE(i2c, adp1050_id);
3872

3973
static const struct of_device_id adp1050_of_match[] = {
40-
{ .compatible = "adi,adp1050"},
74+
{ .compatible = "adi,adp1050", .data = &adp1050_info},
75+
{ .compatible = "adi,adp1051", .data = &adp1051_info},
76+
{ .compatible = "adi,adp1055", .data = &adp1055_info},
4177
{}
4278
};
4379
MODULE_DEVICE_TABLE(of, adp1050_of_match);

0 commit comments

Comments
 (0)