brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · 7f87e11 Raw
91 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Driver for MPS MPQ8785 Step-Down Converter4 */5 6#include <linux/i2c.h>7#include <linux/module.h>8#include <linux/of_device.h>9#include "pmbus.h"10 11static int mpq8785_identify(struct i2c_client *client,12			    struct pmbus_driver_info *info)13{14	int vout_mode;15 16	vout_mode = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE);17	if (vout_mode < 0 || vout_mode == 0xff)18		return vout_mode < 0 ? vout_mode : -ENODEV;19	switch (vout_mode >> 5) {20	case 0:21		info->format[PSC_VOLTAGE_OUT] = linear;22		break;23	case 1:24	case 2:25		info->format[PSC_VOLTAGE_OUT] = direct,26		info->m[PSC_VOLTAGE_OUT] = 64;27		info->b[PSC_VOLTAGE_OUT] = 0;28		info->R[PSC_VOLTAGE_OUT] = 1;29		break;30	default:31		return -ENODEV;32	}33 34	return 0;35};36 37static struct pmbus_driver_info mpq8785_info = {38	.pages = 1,39	.format[PSC_VOLTAGE_IN] = direct,40	.format[PSC_CURRENT_OUT] = direct,41	.format[PSC_TEMPERATURE] = direct,42	.m[PSC_VOLTAGE_IN] = 4,43	.b[PSC_VOLTAGE_IN] = 0,44	.R[PSC_VOLTAGE_IN] = 1,45	.m[PSC_CURRENT_OUT] = 16,46	.b[PSC_CURRENT_OUT] = 0,47	.R[PSC_CURRENT_OUT] = 0,48	.m[PSC_TEMPERATURE] = 1,49	.b[PSC_TEMPERATURE] = 0,50	.R[PSC_TEMPERATURE] = 0,51	.func[0] =52		PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT |53		PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT |54		PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT |55		PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,56	.identify = mpq8785_identify,57};58 59static int mpq8785_probe(struct i2c_client *client)60{61	return pmbus_do_probe(client, &mpq8785_info);62};63 64static const struct i2c_device_id mpq8785_id[] = {65	{ "mpq8785" },66	{ },67};68MODULE_DEVICE_TABLE(i2c, mpq8785_id);69 70static const struct of_device_id __maybe_unused mpq8785_of_match[] = {71	{ .compatible = "mps,mpq8785" },72	{}73};74MODULE_DEVICE_TABLE(of, mpq8785_of_match);75 76static struct i2c_driver mpq8785_driver = {77	.driver = {78		   .name = "mpq8785",79		   .of_match_table = of_match_ptr(mpq8785_of_match),80	},81	.probe = mpq8785_probe,82	.id_table = mpq8785_id,83};84 85module_i2c_driver(mpq8785_driver);86 87MODULE_AUTHOR("Charles Hsu <ythsu0511@gmail.com>");88MODULE_DESCRIPTION("PMBus driver for MPS MPQ8785");89MODULE_LICENSE("GPL");90MODULE_IMPORT_NS(PMBUS);91