1*e1c5cd7eSHoward.Chiu@quantatw.com // SPDX-License-Identifier: GPL-2.0-or-later 2*e1c5cd7eSHoward.Chiu@quantatw.com /* 3*e1c5cd7eSHoward.Chiu@quantatw.com * Driver for MPS MP5023 Hot-Swap Controller 4*e1c5cd7eSHoward.Chiu@quantatw.com */ 5*e1c5cd7eSHoward.Chiu@quantatw.com 6*e1c5cd7eSHoward.Chiu@quantatw.com #include <linux/i2c.h> 7*e1c5cd7eSHoward.Chiu@quantatw.com #include <linux/module.h> 8*e1c5cd7eSHoward.Chiu@quantatw.com #include <linux/of_device.h> 9*e1c5cd7eSHoward.Chiu@quantatw.com #include "pmbus.h" 10*e1c5cd7eSHoward.Chiu@quantatw.com 11*e1c5cd7eSHoward.Chiu@quantatw.com static struct pmbus_driver_info mp5023_info = { 12*e1c5cd7eSHoward.Chiu@quantatw.com .pages = 1, 13*e1c5cd7eSHoward.Chiu@quantatw.com 14*e1c5cd7eSHoward.Chiu@quantatw.com .format[PSC_VOLTAGE_IN] = direct, 15*e1c5cd7eSHoward.Chiu@quantatw.com .format[PSC_VOLTAGE_OUT] = direct, 16*e1c5cd7eSHoward.Chiu@quantatw.com .format[PSC_CURRENT_OUT] = direct, 17*e1c5cd7eSHoward.Chiu@quantatw.com .format[PSC_POWER] = direct, 18*e1c5cd7eSHoward.Chiu@quantatw.com .format[PSC_TEMPERATURE] = direct, 19*e1c5cd7eSHoward.Chiu@quantatw.com 20*e1c5cd7eSHoward.Chiu@quantatw.com .m[PSC_VOLTAGE_IN] = 32, 21*e1c5cd7eSHoward.Chiu@quantatw.com .b[PSC_VOLTAGE_IN] = 0, 22*e1c5cd7eSHoward.Chiu@quantatw.com .R[PSC_VOLTAGE_IN] = 0, 23*e1c5cd7eSHoward.Chiu@quantatw.com .m[PSC_VOLTAGE_OUT] = 32, 24*e1c5cd7eSHoward.Chiu@quantatw.com .b[PSC_VOLTAGE_OUT] = 0, 25*e1c5cd7eSHoward.Chiu@quantatw.com .R[PSC_VOLTAGE_OUT] = 0, 26*e1c5cd7eSHoward.Chiu@quantatw.com .m[PSC_CURRENT_OUT] = 16, 27*e1c5cd7eSHoward.Chiu@quantatw.com .b[PSC_CURRENT_OUT] = 0, 28*e1c5cd7eSHoward.Chiu@quantatw.com .R[PSC_CURRENT_OUT] = 0, 29*e1c5cd7eSHoward.Chiu@quantatw.com .m[PSC_POWER] = 1, 30*e1c5cd7eSHoward.Chiu@quantatw.com .b[PSC_POWER] = 0, 31*e1c5cd7eSHoward.Chiu@quantatw.com .R[PSC_POWER] = 0, 32*e1c5cd7eSHoward.Chiu@quantatw.com .m[PSC_TEMPERATURE] = 2, 33*e1c5cd7eSHoward.Chiu@quantatw.com .b[PSC_TEMPERATURE] = 0, 34*e1c5cd7eSHoward.Chiu@quantatw.com .R[PSC_TEMPERATURE] = 0, 35*e1c5cd7eSHoward.Chiu@quantatw.com 36*e1c5cd7eSHoward.Chiu@quantatw.com .func[0] = 37*e1c5cd7eSHoward.Chiu@quantatw.com PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_PIN | 38*e1c5cd7eSHoward.Chiu@quantatw.com PMBUS_HAVE_TEMP | PMBUS_HAVE_IOUT | 39*e1c5cd7eSHoward.Chiu@quantatw.com PMBUS_HAVE_STATUS_INPUT | PMBUS_HAVE_STATUS_TEMP, 40*e1c5cd7eSHoward.Chiu@quantatw.com }; 41*e1c5cd7eSHoward.Chiu@quantatw.com 42*e1c5cd7eSHoward.Chiu@quantatw.com static int mp5023_probe(struct i2c_client *client) 43*e1c5cd7eSHoward.Chiu@quantatw.com { 44*e1c5cd7eSHoward.Chiu@quantatw.com return pmbus_do_probe(client, &mp5023_info); 45*e1c5cd7eSHoward.Chiu@quantatw.com } 46*e1c5cd7eSHoward.Chiu@quantatw.com 47*e1c5cd7eSHoward.Chiu@quantatw.com static const struct of_device_id __maybe_unused mp5023_of_match[] = { 48*e1c5cd7eSHoward.Chiu@quantatw.com { .compatible = "mps,mp5023", }, 49*e1c5cd7eSHoward.Chiu@quantatw.com {} 50*e1c5cd7eSHoward.Chiu@quantatw.com }; 51*e1c5cd7eSHoward.Chiu@quantatw.com 52*e1c5cd7eSHoward.Chiu@quantatw.com MODULE_DEVICE_TABLE(of, mp5023_of_match); 53*e1c5cd7eSHoward.Chiu@quantatw.com 54*e1c5cd7eSHoward.Chiu@quantatw.com static struct i2c_driver mp5023_driver = { 55*e1c5cd7eSHoward.Chiu@quantatw.com .driver = { 56*e1c5cd7eSHoward.Chiu@quantatw.com .name = "mp5023", 57*e1c5cd7eSHoward.Chiu@quantatw.com .of_match_table = of_match_ptr(mp5023_of_match), 58*e1c5cd7eSHoward.Chiu@quantatw.com }, 59*e1c5cd7eSHoward.Chiu@quantatw.com .probe_new = mp5023_probe, 60*e1c5cd7eSHoward.Chiu@quantatw.com }; 61*e1c5cd7eSHoward.Chiu@quantatw.com 62*e1c5cd7eSHoward.Chiu@quantatw.com module_i2c_driver(mp5023_driver); 63*e1c5cd7eSHoward.Chiu@quantatw.com 64*e1c5cd7eSHoward.Chiu@quantatw.com MODULE_AUTHOR("Howard Chiu <howard.chiu@quantatw.com>"); 65*e1c5cd7eSHoward.Chiu@quantatw.com MODULE_DESCRIPTION("PMBus driver for MPS MP5023 HSC"); 66*e1c5cd7eSHoward.Chiu@quantatw.com MODULE_LICENSE("GPL"); 67*e1c5cd7eSHoward.Chiu@quantatw.com MODULE_IMPORT_NS(PMBUS); 68