-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Alexandru Tachici
authored and
Guenter Roeck
committed
Sep 23, 2020
1 parent
d2e08eb
commit 9514a22
Showing
5 changed files
with
113 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -30,6 +30,7 @@ Hardware Monitoring Kernel Drivers | |
adm1026 | ||
adm1031 | ||
adm1177 | ||
adm1266 | ||
adm1275 | ||
adm9240 | ||
ads7828 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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"); |