xref: /linux/drivers/hwmon/pmbus/max20860a.c (revision 9611c0ce215a66770ccbe5c126bf57ba8c31bcad)
1*9e8475a0SSyed Arif // SPDX-License-Identifier: GPL-2.0-or-later
2*9e8475a0SSyed Arif /*
3*9e8475a0SSyed Arif  * Hardware monitoring driver for Analog Devices MAX20860A
4*9e8475a0SSyed Arif  *
5*9e8475a0SSyed Arif  * SPDX-FileCopyrightText: Copyright Hewlett Packard Enterprise Development LP
6*9e8475a0SSyed Arif  */
7*9e8475a0SSyed Arif 
8*9e8475a0SSyed Arif #include <linux/i2c.h>
9*9e8475a0SSyed Arif #include <linux/module.h>
10*9e8475a0SSyed Arif #include <linux/regulator/driver.h>
11*9e8475a0SSyed Arif #include "pmbus.h"
12*9e8475a0SSyed Arif 
13*9e8475a0SSyed Arif #if IS_ENABLED(CONFIG_SENSORS_MAX20860A_REGULATOR)
14*9e8475a0SSyed Arif static const struct regulator_desc max20860a_reg_desc[] = {
15*9e8475a0SSyed Arif 	PMBUS_REGULATOR_ONE("vout"),
16*9e8475a0SSyed Arif };
17*9e8475a0SSyed Arif #endif
18*9e8475a0SSyed Arif 
19*9e8475a0SSyed Arif static struct pmbus_driver_info max20860a_info = {
20*9e8475a0SSyed Arif 	.pages = 1,
21*9e8475a0SSyed Arif 	.format[PSC_VOLTAGE_IN] = linear,
22*9e8475a0SSyed Arif 	.format[PSC_VOLTAGE_OUT] = linear,
23*9e8475a0SSyed Arif 	.format[PSC_CURRENT_OUT] = linear,
24*9e8475a0SSyed Arif 	.format[PSC_TEMPERATURE] = linear,
25*9e8475a0SSyed Arif 	.func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT |
26*9e8475a0SSyed Arif 		PMBUS_HAVE_STATUS_VOUT |
27*9e8475a0SSyed Arif 		PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT |
28*9e8475a0SSyed Arif 		PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 |
29*9e8475a0SSyed Arif 		PMBUS_HAVE_STATUS_TEMP | PMBUS_HAVE_STATUS_INPUT,
30*9e8475a0SSyed Arif #if IS_ENABLED(CONFIG_SENSORS_MAX20860A_REGULATOR)
31*9e8475a0SSyed Arif 	.num_regulators = 1,
32*9e8475a0SSyed Arif 	.reg_desc = max20860a_reg_desc,
33*9e8475a0SSyed Arif #endif
34*9e8475a0SSyed Arif };
35*9e8475a0SSyed Arif 
36*9e8475a0SSyed Arif static int max20860a_probe(struct i2c_client *client)
37*9e8475a0SSyed Arif {
38*9e8475a0SSyed Arif 	return pmbus_do_probe(client, &max20860a_info);
39*9e8475a0SSyed Arif }
40*9e8475a0SSyed Arif 
41*9e8475a0SSyed Arif static const struct i2c_device_id max20860a_id[] = {
42*9e8475a0SSyed Arif 	{"max20860a"},
43*9e8475a0SSyed Arif 	{}
44*9e8475a0SSyed Arif };
45*9e8475a0SSyed Arif MODULE_DEVICE_TABLE(i2c, max20860a_id);
46*9e8475a0SSyed Arif 
47*9e8475a0SSyed Arif static const struct of_device_id max20860a_of_match[] = {
48*9e8475a0SSyed Arif 	{ .compatible = "adi,max20860a" },
49*9e8475a0SSyed Arif 	{}
50*9e8475a0SSyed Arif };
51*9e8475a0SSyed Arif MODULE_DEVICE_TABLE(of, max20860a_of_match);
52*9e8475a0SSyed Arif 
53*9e8475a0SSyed Arif static struct i2c_driver max20860a_driver = {
54*9e8475a0SSyed Arif 	.driver = {
55*9e8475a0SSyed Arif 		.name = "max20860a",
56*9e8475a0SSyed Arif 		.of_match_table = max20860a_of_match,
57*9e8475a0SSyed Arif 	},
58*9e8475a0SSyed Arif 	.probe = max20860a_probe,
59*9e8475a0SSyed Arif 	.id_table = max20860a_id,
60*9e8475a0SSyed Arif };
61*9e8475a0SSyed Arif 
62*9e8475a0SSyed Arif module_i2c_driver(max20860a_driver);
63*9e8475a0SSyed Arif 
64*9e8475a0SSyed Arif MODULE_AUTHOR("Syed Arif <arif.syed@hpe.com>");
65*9e8475a0SSyed Arif MODULE_AUTHOR("Sanman Pradhan <psanman@juniper.net>");
66*9e8475a0SSyed Arif MODULE_DESCRIPTION("PMBus driver for Analog Devices MAX20860A");
67*9e8475a0SSyed Arif MODULE_LICENSE("GPL");
68*9e8475a0SSyed Arif MODULE_IMPORT_NS("PMBUS");
69