cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xdpe152c4.c (2107B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Hardware monitoring driver for Infineon Multi-phase Digital VR Controllers
      4 *
      5 * Copyright (c) 2022 Infineon Technologies. All rights reserved.
      6 */
      7
      8#include <linux/err.h>
      9#include <linux/i2c.h>
     10#include <linux/init.h>
     11#include <linux/kernel.h>
     12#include <linux/module.h>
     13#include "pmbus.h"
     14
     15#define XDPE152_PAGE_NUM 2
     16
     17static struct pmbus_driver_info xdpe152_info = {
     18	.pages = XDPE152_PAGE_NUM,
     19	.format[PSC_VOLTAGE_IN] = linear,
     20	.format[PSC_VOLTAGE_OUT] = linear,
     21	.format[PSC_TEMPERATURE] = linear,
     22	.format[PSC_CURRENT_IN] = linear,
     23	.format[PSC_CURRENT_OUT] = linear,
     24	.format[PSC_POWER] = linear,
     25	.func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT |
     26		PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT |
     27		PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_STATUS_TEMP |
     28		PMBUS_HAVE_POUT | PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT,
     29	.func[1] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT |
     30		PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT |
     31		PMBUS_HAVE_POUT | PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT,
     32};
     33
     34static int xdpe152_probe(struct i2c_client *client)
     35{
     36	struct pmbus_driver_info *info;
     37
     38	info = devm_kmemdup(&client->dev, &xdpe152_info, sizeof(*info),
     39			    GFP_KERNEL);
     40	if (!info)
     41		return -ENOMEM;
     42
     43	return pmbus_do_probe(client, info);
     44}
     45
     46static const struct i2c_device_id xdpe152_id[] = {
     47	{"xdpe152c4", 0},
     48	{"xdpe15284", 0},
     49	{}
     50};
     51
     52MODULE_DEVICE_TABLE(i2c, xdpe152_id);
     53
     54static const struct of_device_id __maybe_unused xdpe152_of_match[] = {
     55	{.compatible = "infineon,xdpe152c4"},
     56	{.compatible = "infineon,xdpe15284"},
     57	{}
     58};
     59MODULE_DEVICE_TABLE(of, xdpe152_of_match);
     60
     61static struct i2c_driver xdpe152_driver = {
     62	.driver = {
     63		.name = "xdpe152c4",
     64		.of_match_table = of_match_ptr(xdpe152_of_match),
     65	},
     66	.probe_new = xdpe152_probe,
     67	.id_table = xdpe152_id,
     68};
     69
     70module_i2c_driver(xdpe152_driver);
     71
     72MODULE_AUTHOR("Greg Schwendimann <greg.schwendimann@infineon.com>");
     73MODULE_DESCRIPTION("PMBus driver for Infineon XDPE152 family");
     74MODULE_LICENSE("GPL");
     75MODULE_IMPORT_NS(PMBUS);