diff options
author | Zhikui Ren <zhikui.ren@intel.com> | 2022-02-19 03:56:11 +0300 |
---|---|---|
committer | Zhikui Ren <zhikui.ren@intel.com> | 2022-03-16 22:54:36 +0300 |
commit | dea62fa707259a121d2adf0261249a10221e014a (patch) | |
tree | 3612dd050bbffdc21dc15969139663e75886e38f /drivers/hwmon | |
parent | 12bcf6254d70528ca1bb41222b608705bdfc4294 (diff) | |
download | linux-dea62fa707259a121d2adf0261249a10221e014a.tar.xz |
hwmon: (pmbus) Add Renesas RAA229126 VR driver
Added pmbus driver for the new device Renesas raa229126
voltage regulator.
Signed-off-by: Zhikui Ren <zhikui.ren@intel.com>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/pmbus/Kconfig | 9 | ||||
-rw-r--r-- | drivers/hwmon/pmbus/Makefile | 1 | ||||
-rw-r--r-- | drivers/hwmon/pmbus/raa229126.c | 92 |
3 files changed, 102 insertions, 0 deletions
diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig index b56bd8542864..960cc47f4e93 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig @@ -321,6 +321,15 @@ config SENSORS_Q54SJ108A2 This driver can also be built as a module. If so, the module will be called q54sj108a2. +config SENSORS_RAA229126 + tristate "Renesas RAA229126" + help + If you say yes here you get hardware monitoring support for Renesas + RAA229126. + + This driver can also be built as a module. If so, the module will + be called raa229126. + config SENSORS_STPDDC60 tristate "ST STPDDC60" help diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile index 61cdc24b1309..09c73316c0bc 100644 --- a/drivers/hwmon/pmbus/Makefile +++ b/drivers/hwmon/pmbus/Makefile @@ -35,6 +35,7 @@ obj-$(CONFIG_SENSORS_MP5023) += mp5023.o obj-$(CONFIG_SENSORS_PM6764TR) += pm6764tr.o obj-$(CONFIG_SENSORS_PXE1610) += pxe1610.o obj-$(CONFIG_SENSORS_Q54SJ108A2) += q54sj108a2.o +obj-$(CONFIG_SENSORS_RAA229126) += raa229126.o obj-$(CONFIG_SENSORS_STPDDC60) += stpddc60.o obj-$(CONFIG_SENSORS_TPS40422) += tps40422.o obj-$(CONFIG_SENSORS_TPS53679) += tps53679.o diff --git a/drivers/hwmon/pmbus/raa229126.c b/drivers/hwmon/pmbus/raa229126.c new file mode 100644 index 000000000000..cd2de3ceb5a2 --- /dev/null +++ b/drivers/hwmon/pmbus/raa229126.c @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Hardware monitoring driver for RAA229126 + * + * Copyright (c) 2022 Intel Corporation. + */ + +#include <linux/err.h> +#include <linux/i2c.h> +#include <linux/kernel.h> +#include <linux/module.h> + +#include "pmbus.h" + +#define RAA229126_NUM_PAGES 2 + +static struct pmbus_driver_info raa229126_info = { + .pages = RAA229126_NUM_PAGES, + .format[PSC_VOLTAGE_IN] = direct, + .format[PSC_VOLTAGE_OUT] = direct, + .format[PSC_CURRENT_IN] = direct, + .format[PSC_CURRENT_OUT] = direct, + .format[PSC_TEMPERATURE] = direct, + .format[PSC_POWER] = direct, + .m[PSC_TEMPERATURE] = 1, + .m[PSC_VOLTAGE_OUT] = 1, + .R[PSC_VOLTAGE_OUT] = 3, + .m[PSC_CURRENT_OUT] = 1, + .m[PSC_POWER] = 1, + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_IIN | + PMBUS_HAVE_IOUT | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | + PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_VOUT | + PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT | + PMBUS_HAVE_STATUS_TEMP, + .func[1] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_IIN | + PMBUS_HAVE_IOUT | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT | + PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_VOUT | + PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT | + PMBUS_HAVE_STATUS_TEMP, +}; + +static int raa229126_probe(struct i2c_client *client) +{ + struct pmbus_driver_info *info; + u8 buf[I2C_SMBUS_BLOCK_MAX]; + int ret; + + if (!i2c_check_functionality(client->adapter, + I2C_FUNC_SMBUS_READ_BYTE_DATA | + I2C_FUNC_SMBUS_READ_WORD_DATA | + I2C_FUNC_SMBUS_READ_BLOCK_DATA)) + return -ENODEV; + + /* Read Manufacturer id */ + ret = i2c_smbus_read_block_data(client, PMBUS_IC_DEVICE_ID, buf); + if (ret < 0) { + dev_err(&client->dev, "Failed to read PMBUS_IC_DEVICE_ID\n"); + return ret; + } + if (ret != 4 || strncmp(buf, "\x00\x82\xd2\x49", 4)) { + dev_err(&client->dev, "DEVICE_ID unrecognized\n"); + return -ENODEV; + } + + info = devm_kmemdup(&client->dev, &raa229126_info, sizeof(*info), GFP_KERNEL); + if (!info) + return -ENOMEM; + + return pmbus_do_probe(client, info); +} + +static const struct i2c_device_id raa229126_id[] = { + {"raa229126", 0}, + {} +}; + +MODULE_DEVICE_TABLE(i2c, raa229126_id); + +static struct i2c_driver raa229126_driver = { + .driver = { + .name = "raa229126", + }, + .probe_new = raa229126_probe, + .id_table = raa229126_id, +}; + +module_i2c_driver(raa229126_driver); + +MODULE_AUTHOR("Zhikui Ren <zhikui.ren@intel.com>"); +MODULE_DESCRIPTION("PMBus driver for Renesas RAA229126"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS(PMBUS); |