Linux Audio

Check our new training course

Loading...
v5.9
  1// SPDX-License-Identifier: GPL-2.0-or-later
  2/*
  3 * Hardware monitoring driver for Maxim MAX16064
  4 *
  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		0xd4
 16#define MAX16064_MFR_TEMPERATURE_PEAK	0xd6
 17
 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_TEMP
 80		| 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			  const struct i2c_device_id *id)
 90{
 91	return pmbus_do_probe(client, id, &max16064_info);
 92}
 93
 94static const struct i2c_device_id max16064_id[] = {
 95	{"max16064", 0},
 96	{}
 97};
 98
 99MODULE_DEVICE_TABLE(i2c, max16064_id);
100
101/* This is the driver that will be inserted */
102static struct i2c_driver max16064_driver = {
103	.driver = {
104		   .name = "max16064",
105		   },
106	.probe = max16064_probe,
107	.remove = pmbus_do_remove,
108	.id_table = max16064_id,
109};
110
111module_i2c_driver(max16064_driver);
112
113MODULE_AUTHOR("Guenter Roeck");
114MODULE_DESCRIPTION("PMBus driver for Maxim MAX16064");
115MODULE_LICENSE("GPL");
v6.2
  1// SPDX-License-Identifier: GPL-2.0-or-later
  2/*
  3 * Hardware monitoring driver for Maxim MAX16064
  4 *
  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		0xd4
 16#define MAX16064_MFR_TEMPERATURE_PEAK	0xd6
 17
 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_TEMP
 80		| 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", 0},
 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_new = 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);