brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 98e2b5d Raw
115 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Hardware monitoring driver for Maxim MAX160644 *5 * Copyright (c) 2011 Ericsson AB.6 */7 8#include <linux/kernel.h>9#include <linux/module.h>10#include <linux/init.h>11#include <linux/err.h>12#include <linux/i2c.h>13#include "pmbus.h"14 15#define MAX16064_MFR_VOUT_PEAK		0xd416#define MAX16064_MFR_TEMPERATURE_PEAK	0xd617 18static int max16064_read_word_data(struct i2c_client *client, int page,19				   int phase, int reg)20{21	int ret;22 23	switch (reg) {24	case PMBUS_VIRT_READ_VOUT_MAX:25		ret = pmbus_read_word_data(client, page, phase,26					   MAX16064_MFR_VOUT_PEAK);27		break;28	case PMBUS_VIRT_READ_TEMP_MAX:29		ret = pmbus_read_word_data(client, page, phase,30					   MAX16064_MFR_TEMPERATURE_PEAK);31		break;32	case PMBUS_VIRT_RESET_VOUT_HISTORY:33	case PMBUS_VIRT_RESET_TEMP_HISTORY:34		ret = 0;35		break;36	default:37		ret = -ENODATA;38		break;39	}40	return ret;41}42 43static int max16064_write_word_data(struct i2c_client *client, int page,44				    int reg, u16 word)45{46	int ret;47 48	switch (reg) {49	case PMBUS_VIRT_RESET_VOUT_HISTORY:50		ret = pmbus_write_word_data(client, page,51					    MAX16064_MFR_VOUT_PEAK, 0);52		break;53	case PMBUS_VIRT_RESET_TEMP_HISTORY:54		ret = pmbus_write_word_data(client, page,55					    MAX16064_MFR_TEMPERATURE_PEAK,56					    0xffff);57		break;58	default:59		ret = -ENODATA;60		break;61	}62	return ret;63}64 65static struct pmbus_driver_info max16064_info = {66	.pages = 4,67	.format[PSC_VOLTAGE_IN] = direct,68	.format[PSC_VOLTAGE_OUT] = direct,69	.format[PSC_TEMPERATURE] = direct,70	.m[PSC_VOLTAGE_IN] = 19995,71	.b[PSC_VOLTAGE_IN] = 0,72	.R[PSC_VOLTAGE_IN] = -1,73	.m[PSC_VOLTAGE_OUT] = 19995,74	.b[PSC_VOLTAGE_OUT] = 0,75	.R[PSC_VOLTAGE_OUT] = -1,76	.m[PSC_TEMPERATURE] = -7612,77	.b[PSC_TEMPERATURE] = 335,78	.R[PSC_TEMPERATURE] = -3,79	.func[0] = PMBUS_HAVE_VOUT | PMBUS_HAVE_TEMP80		| PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_TEMP,81	.func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT,82	.func[2] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT,83	.func[3] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT,84	.read_word_data = max16064_read_word_data,85	.write_word_data = max16064_write_word_data,86};87 88static int max16064_probe(struct i2c_client *client)89{90	return pmbus_do_probe(client, &max16064_info);91}92 93static const struct i2c_device_id max16064_id[] = {94	{"max16064"},95	{}96};97 98MODULE_DEVICE_TABLE(i2c, max16064_id);99 100/* This is the driver that will be inserted */101static struct i2c_driver max16064_driver = {102	.driver = {103		   .name = "max16064",104		   },105	.probe = max16064_probe,106	.id_table = max16064_id,107};108 109module_i2c_driver(max16064_driver);110 111MODULE_AUTHOR("Guenter Roeck");112MODULE_DESCRIPTION("PMBus driver for Maxim MAX16064");113MODULE_LICENSE("GPL");114MODULE_IMPORT_NS(PMBUS);115