Skip to content

Commit

Permalink
hwmon: pmbus: add driver for ltp8800-1a, ltp8800-4a, and ltp8800-2
Browse files Browse the repository at this point in the history
LTP8800-1A 150A DC/DC µModule Regulator with PMBus Interface
LTP8800-4A 200A DC/DC µModule Regulator with PMBus Interface
LTP8800-2 54V, 135A DC/DC μModule Regulator with PMBus Interface

Signed-off-by: Cedric Encarnacion <cedricjustine.encarnacion@analog.com>
  • Loading branch information
cencarna committed Oct 14, 2024
1 parent 9e888c7 commit d7eed31
Show file tree
Hide file tree
Showing 6 changed files with 201 additions and 0 deletions.
1 change: 1 addition & 0 deletions Documentation/hwmon/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ Hardware Monitoring Kernel Drivers
ltc4245
ltc4260
ltc4261
ltp8800
max127
max15301
max16064
Expand Down
103 changes: 103 additions & 0 deletions Documentation/hwmon/ltp8800.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
.. SPDX-License-Identifier: GPL-2.0
Kernel driver ltp8800
=====================

Supported chips:

* Analog Devices LTP8800-1A

Prefix: 'ltp8800-1a'

Addresses scanned: I2C 0x40 - 0x4F

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

* Analog Devices LTP8800-4A

Prefix: 'ltp8800-4a'

Addresses scanned: I2C 0x40 - 0x4F

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

* Analog Devices LTP8800-2

Prefix: 'ltp8800-2'

Addresses scanned: I2C 0x40 - 0x4F

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

Authors:
- Cedric Encarnacion <cedricjustine.encarnacion@analog.com>


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

The LTP8800 is a family of step-down μModule regulators that provides
microprocessor core voltage from 54V power distribution architecture. LTP8800
features telemetry monitoring of input/output voltage, input current, output
power, and temperature over PMBus.

The driver is a client driver to the core PMBus driver. Please see
Documentation/hwmon/pmbus.rst for details on PMBus client drivers.

Usage Notes
-----------

This driver does not auto-detect devices. You will have to instantiate the
devices explicitly. Please see Documentation/i2c/instantiating-devices.rst for
details.

Platform data support
---------------------

The driver supports standard PMBus driver platform data. Please see
Documentation/hwmon/pmbus.rst for details.

Sysfs Attributes
----------------

======================= ===========================
curr1_label "iin"
curr1_input Measured input current
curr1_crit Critical maximum current
curr1_crit_alarm Current critical high alarm

curr2_label "iout1"
curr2_input Measured output current
curr2_lcrit Critical minimum current
curr2_crit Critical maximum current
curr2_max Maximum output current
curr2_alarm Current alarm

in1_label "vin"
in1_input Measured input voltage
in1_lcrit Critical minimum input voltage
in1_lcrit_alarm Input voltage critical low alarm
in1_crit Critical maximum input voltage
in1_crit_alarm Input voltage critical high alarm

in2_label "vout1"
in2_input Measured output voltage
in2_lcrit Critical minimum output voltage
in2_lcrit_alarm Output voltage critical low alarm
in2_crit Critical maximum output voltage
in2_crit_alarm Output voltage critical high alarm
in2_max Maximum output voltage
in2_max_alarm Output voltage high alarm
in2_min Minimum output voltage
in2_min_alarm Output voltage low alarm

power1_label "pout1"
power1_input Measured output power
power1_crit Critical maximum output power

temp1_input Measured temperature
temp1_lcrit Critical low temperature
temp1_lcrit_alarm Chip temperature critical low alarm
temp1_crit Critical high temperature
temp1_crit_alarm Chiptemperature critical high alarm
======================= ===========================
2 changes: 2 additions & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -12260,6 +12260,8 @@ M: Cedric Encarnacion <cedricjustine.encarnacion@analog.com>
L: linux-hwmon@vger.kernel.org
S: Maintained
F: Documentation/devicetree/bindings/hwmon/pmbus/adi,ltp8800.yaml
F: Documentation/hwmon/ltp8800.rst
F: drivers/hwmon/pmbus/ltp8800.c

LYNX 28G SERDES PHY DRIVER
M: Ioana Ciornei <ioana.ciornei@nxp.com>
Expand Down
18 changes: 18 additions & 0 deletions drivers/hwmon/pmbus/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,24 @@ config SENSORS_LTC3815
This driver can also be built as a module. If so, the module will
be called ltc3815.

config SENSORS_LTP8800
tristate "Analog Devices LTP8800 and compatibles"
help
If you say yes here you get hardware monitoring support for Analog
Devices LTP8800-1A, LTP8800-4A, and LTP8800-2.

This driver can also be built as a module. If so, the module will
be called ltp8800.

config SENSORS_LTP8800_REGULATOR
bool "Regulator support for LTP8800 and compatibles"
depends on SENSORS_LTP8800 && REGULATOR
help
If you say yes here you get regulator support for Analog Devices
LTP8800-1A, LTP8800-4A, and LTP8800-2. LTP8800 is a family of DC/DC
µModule regulators that can provide microprocessor power from 54V
power distribution architecture.

config SENSORS_MAX15301
tristate "Maxim MAX15301"
help
Expand Down
1 change: 1 addition & 0 deletions drivers/hwmon/pmbus/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ obj-$(CONFIG_SENSORS_LM25066) += lm25066.o
obj-$(CONFIG_SENSORS_LT7182S) += lt7182s.o
obj-$(CONFIG_SENSORS_LTC2978) += ltc2978.o
obj-$(CONFIG_SENSORS_LTC3815) += ltc3815.o
obj-$(CONFIG_SENSORS_LTP8800) += ltp8800.o
obj-$(CONFIG_SENSORS_MAX15301) += max15301.o
obj-$(CONFIG_SENSORS_MAX16064) += max16064.o
obj-$(CONFIG_SENSORS_MAX16601) += max16601.o
Expand Down
76 changes: 76 additions & 0 deletions drivers/hwmon/pmbus/ltp8800.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Hardware monitoring driver for Analog Devices LTP8800
*
* Copyright (C) 2024 Analog Devices, Inc.
*/
#include <linux/bits.h>
#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include "pmbus.h"

static const struct regulator_desc ltp8800_reg_desc[] = {
PMBUS_REGULATOR("vout", 0),
};

static struct pmbus_driver_info ltp8800_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_VOUT | PMBUS_HAVE_STATUS_VOUT |
PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT |
PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT |
PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP |
PMBUS_HAVE_POUT,
};

/* 6.1 requires i2c_device_id */
static int ltp8800_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
if (!i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_READ_BYTE_DATA |
I2C_FUNC_SMBUS_READ_WORD_DATA))
return -ENODEV;

if (IS_ENABLED(CONFIG_SENSORS_LTP8800_REGULATOR)) {
ltp8800_info.num_regulators = 1;
ltp8800_info.ltp8800_reg_desc = ltp8800_reg_desc;
}

return pmbus_do_probe(client, &ltp8800_info);
}

static const struct i2c_device_id ltp8800_id[] = {
{"ltp8800-1a", 0},
{"ltp8800-4a", 0},
{"ltp8800-2", 0},
{}
};
MODULE_DEVICE_TABLE(i2c, ltp8800_id);

static const struct of_device_id ltp8800_of_match[] = {
{ .compatible = "adi,ltp8800-1a"},
{ .compatible = "adi,ltp8800-4a"},
{ .compatible = "adi,ltp8800-2"},
{}
};
MODULE_DEVICE_TABLE(of, ltp8800_of_match);

static struct i2c_driver ltp8800_driver = {
.driver = {
.name = "ltp8800",
.of_match_table = ltp8800_of_match,
},
.probe = ltp8800_probe,
.id_table = ltp8800_id,
};
module_i2c_driver(ltp8800_driver);

MODULE_AUTHOR("Cedric Encarnacion <cedricjustine.encarnacion@analog.com>");
MODULE_DESCRIPTION("Analog Devices LTP8800 HWMON PMBus Driver");
MODULE_LICENSE("GPL");
MODULE_IMPORT_NS(PMBUS);

0 comments on commit d7eed31

Please sign in to comment.