-
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 Texas Instruments tps53679 device
The below lists of VOUT_MODE command readout with their related VID protocols, Digital to Analog Converter steps, supported by the device: VR12.0 mode, 5-mV DAC - 0x21 VR12.5 mode, 10-mV DAC - 0x22 VR13.0 mode, 10-mV DAC - 0x24 IMVP8 mode, 5-mV DAC - 0x25 VR13.0 mode, 5-mV DAC - 0x27 Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
- Loading branch information
Vadim Pasternak
authored and
Guenter Roeck
committed
Aug 31, 2017
1 parent
4e6fe29
commit 6105265
Showing
3 changed files
with
123 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
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,113 @@ | ||
/* | ||
* Hardware monitoring driver for Texas Instruments TPS53679 | ||
* | ||
* Copyright (c) 2017 Mellanox Technologies. All rights reserved. | ||
* Copyright (c) 2017 Vadim Pasternak <vadimp@mellanox.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
*/ | ||
|
||
#include <linux/err.h> | ||
#include <linux/i2c.h> | ||
#include <linux/init.h> | ||
#include <linux/kernel.h> | ||
#include <linux/module.h> | ||
#include "pmbus.h" | ||
|
||
#define TPS53679_PROT_VR12_5MV 0x01 /* VR12.0 mode, 5-mV DAC */ | ||
#define TPS53679_PROT_VR12_5_10MV 0x02 /* VR12.5 mode, 10-mV DAC */ | ||
#define TPS53679_PROT_VR13_10MV 0x04 /* VR13.0 mode, 10-mV DAC */ | ||
#define TPS53679_PROT_IMVP8_5MV 0x05 /* IMVP8 mode, 5-mV DAC */ | ||
#define TPS53679_PROT_VR13_5MV 0x07 /* VR13.0 mode, 5-mV DAC */ | ||
#define TPS53679_PAGE_NUM 2 | ||
|
||
static int tps53679_identify(struct i2c_client *client, | ||
struct pmbus_driver_info *info) | ||
{ | ||
u8 vout_params; | ||
int ret; | ||
|
||
/* Read the register with VOUT scaling value.*/ | ||
ret = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); | ||
if (ret < 0) | ||
return ret; | ||
|
||
vout_params = ret & GENMASK(4, 0); | ||
|
||
switch (vout_params) { | ||
case TPS53679_PROT_VR13_10MV: | ||
case TPS53679_PROT_VR12_5_10MV: | ||
info->vrm_version = vr13; | ||
break; | ||
case TPS53679_PROT_VR13_5MV: | ||
case TPS53679_PROT_VR12_5MV: | ||
case TPS53679_PROT_IMVP8_5MV: | ||
info->vrm_version = vr12; | ||
break; | ||
default: | ||
return -EINVAL; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
static struct pmbus_driver_info tps53679_info = { | ||
.pages = TPS53679_PAGE_NUM, | ||
.format[PSC_VOLTAGE_IN] = linear, | ||
.format[PSC_VOLTAGE_OUT] = vid, | ||
.format[PSC_TEMPERATURE] = linear, | ||
.format[PSC_CURRENT_OUT] = linear, | ||
.format[PSC_POWER] = linear, | ||
.func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | | ||
PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | | ||
PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | | ||
PMBUS_HAVE_POUT, | ||
.func[1] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | | ||
PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | | ||
PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | | ||
PMBUS_HAVE_POUT, | ||
.identify = tps53679_identify, | ||
}; | ||
|
||
static int tps53679_probe(struct i2c_client *client, | ||
const struct i2c_device_id *id) | ||
{ | ||
return pmbus_do_probe(client, id, &tps53679_info); | ||
} | ||
|
||
static const struct i2c_device_id tps53679_id[] = { | ||
{"tps53679", 0}, | ||
{} | ||
}; | ||
|
||
MODULE_DEVICE_TABLE(i2c, tps53679_id); | ||
|
||
static const struct of_device_id tps53679_of_match[] = { | ||
{.compatible = "ti,tps53679"}, | ||
{} | ||
}; | ||
MODULE_DEVICE_TABLE(of, tps53679_of_match); | ||
|
||
static struct i2c_driver tps53679_driver = { | ||
.driver = { | ||
.name = "tps53679", | ||
.of_match_table = of_match_ptr(tps53679_of_match), | ||
}, | ||
.probe = tps53679_probe, | ||
.remove = pmbus_do_remove, | ||
.id_table = tps53679_id, | ||
}; | ||
|
||
module_i2c_driver(tps53679_driver); | ||
|
||
MODULE_AUTHOR("Vadim Pasternak <vadimp@mellanox.com>"); | ||
MODULE_DESCRIPTION("PMBus driver for Texas Instruments TPS53679"); | ||
MODULE_LICENSE("GPL"); |