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