mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
hwmon: (pmbus) Add support for ADM1266
Add pmbus probing driver for the adm1266 Cascadable Super Sequencer with Margin Control and Fault Recording. Driver is using the pmbus_core, creating sysfs files under hwmon for inputs: vh1->vh4 and vp1->vp13. Signed-off-by: Alexandru Tachici <alexandru.tachici@analog.com> Link: https://lore.kernel.org/r/20200812142055.9213-2-alexandru.tachici@analog.com [groeck: Use .probe_new function, adjust for changed pmbus_do_probe API] Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
d2e08eba09
commit
9514a22866
37
Documentation/hwmon/adm1266.rst
Normal file
37
Documentation/hwmon/adm1266.rst
Normal file
@ -0,0 +1,37 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
Kernel driver adm1266
|
||||
=====================
|
||||
|
||||
Supported chips:
|
||||
* Analog Devices ADM1266
|
||||
Prefix: 'adm1266'
|
||||
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ADM1266.pdf
|
||||
|
||||
Author: Alexandru Tachici <alexandru.tachici@analog.com>
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This driver supports hardware monitoring for Analog Devices ADM1266 sequencer.
|
||||
|
||||
ADM1266 is a sequencer that features voltage readback from 17 channels via an
|
||||
integrated 12 bit SAR ADC, accessed using a PMBus interface.
|
||||
|
||||
The driver is a client driver to the core PMBus driver. Please see
|
||||
Documentation/hwmon/pmbus for details on PMBus client drivers.
|
||||
|
||||
|
||||
Sysfs entries
|
||||
-------------
|
||||
|
||||
The following attributes are supported. Limits are read-write, history reset
|
||||
attributes are write-only, all other attributes are read-only.
|
||||
|
||||
inX_label "voutx"
|
||||
inX_input Measured voltage.
|
||||
inX_min Minimum Voltage.
|
||||
inX_max Maximum voltage.
|
||||
inX_min_alarm Voltage low alarm.
|
||||
inX_max_alarm Voltage high alarm.
|
@ -30,6 +30,7 @@ Hardware Monitoring Kernel Drivers
|
||||
adm1026
|
||||
adm1031
|
||||
adm1177
|
||||
adm1266
|
||||
adm1275
|
||||
adm9240
|
||||
ads7828
|
||||
|
@ -26,6 +26,15 @@ config SENSORS_PMBUS
|
||||
This driver can also be built as a module. If so, the module will
|
||||
be called pmbus.
|
||||
|
||||
config SENSORS_ADM1266
|
||||
tristate "Analog Devices ADM1266 Sequencer"
|
||||
help
|
||||
If you say yes here you get hardware monitoring support for Analog
|
||||
Devices ADM1266 Cascadable Super Sequencer.
|
||||
|
||||
This driver can also be built as a module. If so, the module will
|
||||
be called adm1266.
|
||||
|
||||
config SENSORS_ADM1275
|
||||
tristate "Analog Devices ADM1275 and compatibles"
|
||||
help
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
obj-$(CONFIG_PMBUS) += pmbus_core.o
|
||||
obj-$(CONFIG_SENSORS_PMBUS) += pmbus.o
|
||||
obj-$(CONFIG_SENSORS_ADM1266) += adm1266.o
|
||||
obj-$(CONFIG_SENSORS_ADM1275) += adm1275.o
|
||||
obj-$(CONFIG_SENSORS_BEL_PFE) += bel-pfe.o
|
||||
obj-$(CONFIG_SENSORS_IBM_CFFPS) += ibm-cffps.o
|
||||
|
65
drivers/hwmon/pmbus/adm1266.c
Normal file
65
drivers/hwmon/pmbus/adm1266.c
Normal file
@ -0,0 +1,65 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* ADM1266 - Cascadable Super Sequencer with Margin
|
||||
* Control and Fault Recording
|
||||
*
|
||||
* Copyright 2020 Analog Devices Inc.
|
||||
*/
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include "pmbus.h"
|
||||
#include <linux/slab.h>
|
||||
|
||||
struct adm1266_data {
|
||||
struct pmbus_driver_info info;
|
||||
struct i2c_client *client;
|
||||
};
|
||||
|
||||
static int adm1266_probe(struct i2c_client *client)
|
||||
{
|
||||
struct adm1266_data *data;
|
||||
int i;
|
||||
|
||||
data = devm_kzalloc(&client->dev, sizeof(struct adm1266_data), GFP_KERNEL);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
data->client = client;
|
||||
data->info.pages = 17;
|
||||
data->info.format[PSC_VOLTAGE_OUT] = linear;
|
||||
for (i = 0; i < data->info.pages; i++)
|
||||
data->info.func[i] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT;
|
||||
|
||||
return pmbus_do_probe(client, &data->info);
|
||||
}
|
||||
|
||||
static const struct of_device_id adm1266_of_match[] = {
|
||||
{ .compatible = "adi,adm1266" },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, adm1266_of_match);
|
||||
|
||||
static const struct i2c_device_id adm1266_id[] = {
|
||||
{ "adm1266", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, adm1266_id);
|
||||
|
||||
static struct i2c_driver adm1266_driver = {
|
||||
.driver = {
|
||||
.name = "adm1266",
|
||||
.of_match_table = adm1266_of_match,
|
||||
},
|
||||
.probe_new = adm1266_probe,
|
||||
.remove = pmbus_do_remove,
|
||||
.id_table = adm1266_id,
|
||||
};
|
||||
|
||||
module_i2c_driver(adm1266_driver);
|
||||
|
||||
MODULE_AUTHOR("Alexandru Tachici <alexandru.tachici@analog.com>");
|
||||
MODULE_DESCRIPTION("PMBus driver for Analog Devices ADM1266");
|
||||
MODULE_LICENSE("GPL v2");
|
Loading…
Reference in New Issue
Block a user