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

Add driver for LTP8800-1A, LTP8800-4A and LTP8800-2 #2611

Open
wants to merge 3 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
6 changes: 6 additions & 0 deletions Documentation/devicetree/bindings/trivial-devices.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ properties:
- adi,adp5589
# Analog Devices LT7182S Dual Channel 6A, 20V PolyPhase Step-Down Silent Switcher
- adi,lt7182s
# Analog Devices LTP8800-1A 150A, 54V DC/DC μModule regulator
- adi,ltp8800-1a
# Analog Devices LTP8800-2 135A, 54V DC/DC μModule regulator
- adi,ltp8800-2
# Analog Devices LTP8800-4A 200A, 54V DC/DC μModule regulator
- adi,ltp8800-4a
# AMS iAQ-Core VOC Sensor
- ams,iaq-core
# i2c serial eeprom (24cxx)
Expand Down
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
======================= ===========================
7 changes: 7 additions & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -12255,6 +12255,13 @@ S: Maintained
W: http://linux-test-project.github.io/
T: git git://github.com/linux-test-project/ltp.git

LTP8800 HARDWARE MONITOR DRIVER
M: Cedric Encarnacion <cedricjustine.encarnacion@analog.com>
L: linux-hwmon@vger.kernel.org
S: Supported
F: Documentation/hwmon/ltp8800.rst
F: drivers/hwmon/pmbus/ltp8800.c

LYNX 28G SERDES PHY DRIVER
M: Ioana Ciornei <ioana.ciornei@nxp.com>
L: netdev@vger.kernel.org
Expand Down
2 changes: 2 additions & 0 deletions drivers/hwmon/Kconfig.adi
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ config HWMON_ALL_ADI_DRIVERS
imply SENSORS_LTC4245
imply SENSORS_LTC4260
imply SENSORS_LTC4261
imply SENSORS_LTP8800
imply SENSORS_LTP8800_REGULATOR
imply MAX31827
imply SENSORS_MAX31760
imply SENSORS_LT7182S
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;
cencarna marked this conversation as resolved.
Show resolved Hide resolved

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

return pmbus_do_probe(client, &ltp8800_info);
}

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

static const struct of_device_id ltp8800_of_match[] = {
{ .compatible = "adi,ltp8800-1a"},
{ .compatible = "adi,ltp8800-2"},
{ .compatible = "adi,ltp8800-4a"},
{}
};
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);
Loading