From nobody Fri Oct 3 19:39:35 2025 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E8E9D23BCF2; Mon, 30 Jun 2025 11:21:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751282495; cv=none; b=rJjKVROo3BGJZ3KiZ8tv6WqBJrAGO0Ufsz+3DssT0e4vRnqfgXZ74vtNn3EvZMYQKbtcapmSfpSINcmjeGtoi8k2Dr/GZlINU7dh8yp1TVTleZu5R2BvHzey7UO8Y+cNygrw8l4uz8Bs31H/A40lMRRHrFzlM8nTsUPp77G3nRI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751282495; c=relaxed/simple; bh=70JYZSn9O67rilspuqI5DcMZWYRNGuJCQk+R9y0Nmb4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=W8jqY0FeBxne7GWk8mS5VQMiCJilDV3LdK+QhVDhAmsgjmN4DqewQvQXx+PtfDGlAFZRDb6+Ao/vaaGHz0RQim2gKzrW5s8H+UVrlWBsbiOVbxhzt75Ra6knsvih+fn0xoZ9umUQQvV1olTAbtntMYWtOuIktNUb79hqefx60gg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=edsbGENl; arc=none smtp.client-ip=209.85.210.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="edsbGENl" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-7426c44e014so4486798b3a.3; Mon, 30 Jun 2025 04:21:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751282493; x=1751887293; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NeoROtSfJkK8b4LRPnYj+jOGBDZuvGw4BS1v/80Yysg=; b=edsbGENl9EEcnS99QIzgqrQYuerPmoUiJGweWC3a5esx3BzrFFXbNyRUWrOmnXllsT C+7yc4u3kBA7rgPYdpyEuWm6kot5z3LT62Mt2QcCaDn1r4UmqD5cicARxv16r/PE0DVt y1g5nE8+x0Y3Nom6QlQa8rXlYbbcqjYc3DFApW6DbvoH0M/cWh+2U/nsrzowb4oHZ92D G0trYdJc0hPSwUqJ/U1JlWZ0n+nYmxNS/6exN4gigTyRFUzUNw9xdD5+Flg8+THVOYOP Bc8Tp7mPOZ6gGEcwPvXRYIg6UKhr0tFX4K52r4FyEIfd4ozyi1UNjGgN0J4Eifz/wpL1 7i+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751282493; x=1751887293; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NeoROtSfJkK8b4LRPnYj+jOGBDZuvGw4BS1v/80Yysg=; b=ioixFdHuYQOKDjls1yGbM4W1V9VfKRdluyozGU2hqUDAUHpelp8Xc1g1JqU8p70K4c dKjuEXV0y1GF5L39mXxvprofgtIPKNMqW10y3lO4NoNjQNwXfugXaQXHVkKKFWvp219n hi3DGARjJVSN7T0vHk7K8ClnHaMSvGdYCHm57vZBqMnUdVaAZ4uAvCLMIDKOVZe548vC 6W6wdOjPycXOg1fX4NTidC24ie0iIhHzXjh+Z3alkSMnbScEP6i/KzqCv+dwdYpKLldy bjFwGyL4J7//hZ0IMP3ZN5aQL4vIOmwEHYb2No88GkYNzfTONuTEiN164TQK6nFA4V7F gxMA== X-Forwarded-Encrypted: i=1; AJvYcCUAcmuPmbeGZrYl6RFAeBBxxSpih1aCl5zz1hyc2+Tp6+qds4iIqyywvkpthH15imz5q84ZaZE0pxPWQSol@vger.kernel.org, AJvYcCUUCsZNdJaT8GrC9EYCtVuOwr1RfJKDSlpjWm9c0t6/2uLCI8SRKIfHezIaY9W1lb0g5rfC1q45xQA1@vger.kernel.org, AJvYcCVmne/px/MOlaTBOFehFTfK3Bphq8CYP5MbyZmZhqmL9g7dCpYYJaSvnMTcKcd1Qsch7lSMVe49PRKb1Kw=@vger.kernel.org, AJvYcCX3gP/zB6jnNS6iUgstFHEOb0J03/pKwkhUOaYencv1lPUsL7xFNYbABAMwWb+plJTFcPBFGC8OzS9t@vger.kernel.org X-Gm-Message-State: AOJu0YysALIOwG7l6+OvCtbqounx27iGM8g73Jte5l0Z9d8tTt6OoZlA YSkQZqHwMdhyUfSAB22ERRqXltT6gZRKqg6eZEkRC89/7kR7I5bZpXqA X-Gm-Gg: ASbGncvxF9UxzmTSm25MyWARr7u7xUWyJMvSEtfK+UVRt3kornstEV9ZJSwwirqdpFN VcYKMzO0qiBF/oATyic6kI5XtgWKZpZOtKmUaRkgK0MR1Lj3aSjd5OqSvRHtB38XUaP2WOO02jx DGEtO4KL7ZWvvckgvCAAixBmhnBPmVTbVrbgOrEAg0DN1uFfockFCVglSjblwmUwHNDjtjHwLbj WC/NiDMmua+R/GEMp/XUysdkTY57VM8rzpwK6Hm300ooSaHuUY6wgSqbaXvgBmE9RCgiGCVzV5V 0KyZSif98c96oCVzt94n8R+0gw/XjiE0f5hKMiQKGeLBy+xXxXeeiziYnAEBBxKdQtKTzPYOrRc 2fj7GQHcYAJRUAc590WH4 X-Google-Smtp-Source: AGHT+IGKN0CyI3OIOs2vT0SPFHP1/Q1qkjarft8qiZhROX44mOzO7H9AkMbWKPyuKbIWBcSOE0h8DQ== X-Received: by 2002:a05:6300:6b0d:b0:222:2a34:624b with SMTP id adf61e73a8af0-2222a346af3mr458275637.15.1751282492975; Mon, 30 Jun 2025 04:21:32 -0700 (PDT) Received: from localhost (61-220-246-151.hinet-ip.hinet.net. [61.220.246.151]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74af54098a3sm8978611b3a.16.2025.06.30.04.21.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 04:21:32 -0700 (PDT) From: tzuhao.wtmh@gmail.com X-Google-Original-From: Henry_Wu@quantatw.com To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jean Delvare , Guenter Roeck , Jonathan Corbet , Jonathan Cameron , Naresh Solanki , Rodrigo Gobbi , Fabio Estevam , Michal Simek , Henry Wu , Grant Peltier , Laurent Pinchart , Cedric Encarnacion , Nuno Sa , Cherrence Sarip , Jerome Brunet , Leo Yang , John Erasmus Mari Geronimo , Kim Seer Paller , Alex Vdovydchenko , Ninad Palsule , Mariel Tinaco , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org Cc: peteryin.openbmc@gmail.com Subject: [PATCH v2 1/2] hwmon: (pmbus) Add support for MPS multi-phase mp2869a/mp29612a controllers Date: Mon, 30 Jun 2025 19:20:50 +0800 Message-ID: <20250630112120.588246-2-Henry_Wu@quantatw.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250630112120.588246-1-Henry_Wu@quantatw.com> References: <20250630112120.588246-1-Henry_Wu@quantatw.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Henry Wu Add support for the mp2869a and mp29612a controllers from Monolithic Power Systems, Inc. (MPS). These are dual-loop, digital, multi-phase modulation controllers. Signed-off-by: Henry Wu --- Documentation/hwmon/index.rst | 1 + Documentation/hwmon/mp2869a.rst | 86 +++++++++ drivers/hwmon/pmbus/Kconfig | 10 ++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/mp2869a.c | 299 ++++++++++++++++++++++++++++++++ 5 files changed, 397 insertions(+) create mode 100644 Documentation/hwmon/mp2869a.rst create mode 100644 drivers/hwmon/pmbus/mp2869a.c diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst index b45bfb4ebf30..10bf4bd77f7b 100644 --- a/Documentation/hwmon/index.rst +++ b/Documentation/hwmon/index.rst @@ -172,6 +172,7 @@ Hardware Monitoring Kernel Drivers menf21bmc mlxreg-fan mp2856 + mp2869a mp2888 mp2891 mp2975 diff --git a/Documentation/hwmon/mp2869a.rst b/Documentation/hwmon/mp2869a.= rst new file mode 100644 index 000000000000..a98ccb3d630d --- /dev/null +++ b/Documentation/hwmon/mp2869a.rst @@ -0,0 +1,86 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Kernel driver mp2896a +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Supported chips: + + * MPS MP2896A + + Prefix: 'mp2896a' + + * MPS MP29612A + + Prefix: 'mp29612a' + +Author: + + Henry Wu + +Description +----------- + +This driver implements support for Monolithic Power Systems, Inc. (MPS) +MP2896A, a digital, multi-phase voltage regulator controller with PMBus in= terface. + +This device: + +- Supports up to two power rails. +- Supports multiple PMBus pages for telemetry and configuration. +- Supports VOUT readout in **VID format only** (no support for direct form= at). +- Supports AMD SVI3 VID protocol with 5-mV/LSB resolution (if applicable). +- Uses vendor-specific registers for VOUT scaling and phase configuration. + +Device supports: + +- SVID interface. +- AVSBus interface. + +Device compliant with: + +- PMBus rev 1.3 interface. + +Sysfs Interface +--------------- + +The driver provides the following sysfs attributes: + +**Current measurements:** + +- Index 1: "iin" +- Indexes 2, 3: "iout" + +**curr[1-3]_alarm** +**curr[1-3]_input** +**curr[1-3]_label** + +**Voltage measurements:** + +- Index 1: "vin" +- Indexes 2, 3: "vout" + +**in[1-3]_crit** +**in[1-3]_crit_alarm** +**in[1-3]_input** +**in[1-3]_label** +**in[1-3]_lcrit** +**in[1-3]_lcrit_alarm** + +**Power measurements:** + +- Index 1: "pin" +- Indexes 2, 3: "pout" + +**power[1-3]_alarm** +**power[1-3]_input** +**power[1-3]_label** + +**Temperature measurements:** + +**temp[1-2]_crit** +**temp[1-2]_crit_alarm** +**temp[1-2]_input** +**temp[1-2]_max** +**temp[1-2]_max_alarm** + + diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig index 441f984a859d..93b558761cc6 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig @@ -364,6 +364,16 @@ config SENSORS_MP2856 This driver can also be built as a module. If so, the module will be called mp2856. =20 +config SENSORS_MP2869A + tristate "MP2869A PMBus sensor" + depends on I2C && PMBUS + help + If you say yes here you get support for the MPS MP2869A MP29612A + voltage regulator via the PMBus interface. + + This driver can also be built as a module. If so, the module + will be called mp2869a. + config SENSORS_MP2888 tristate "MPS MP2888" help diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile index 29cd8a3317d2..42087d0dedbc 100644 --- a/drivers/hwmon/pmbus/Makefile +++ b/drivers/hwmon/pmbus/Makefile @@ -37,6 +37,7 @@ obj-$(CONFIG_SENSORS_MAX31785) +=3D max31785.o obj-$(CONFIG_SENSORS_MAX34440) +=3D max34440.o obj-$(CONFIG_SENSORS_MAX8688) +=3D max8688.o obj-$(CONFIG_SENSORS_MP2856) +=3D mp2856.o +obj-$(CONFIG_SENSORS_MP2869A) +=3D mp2869a.o obj-$(CONFIG_SENSORS_MP2888) +=3D mp2888.o obj-$(CONFIG_SENSORS_MP2891) +=3D mp2891.o obj-$(CONFIG_SENSORS_MP2975) +=3D mp2975.o diff --git a/drivers/hwmon/pmbus/mp2869a.c b/drivers/hwmon/pmbus/mp2869a.c new file mode 100644 index 000000000000..e61f1380dbc1 --- /dev/null +++ b/drivers/hwmon/pmbus/mp2869a.c @@ -0,0 +1,299 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Hardware monitoring driver for MP2856A/MP29612A + * Monolithic Power Systems VR Controller + * + * Copyright (C) 2023 Quanta Computer lnc. + */ + +#include +#include +#include +#include +#include +#include +#include "pmbus.h" + +/* Vendor specific registers. */ +#define MP2869A_VOUT_MODE 0x20 +#define MP2869A_VOUT_MODE_MASK GENMASK(7, 5) +#define MP2869A_VOUT_MODE_VID (0 << 5) + +#define MP2869A_READ_VOUT 0x8b + +#define MP2869A_MFR_VOUT_SCALE_LOOP 0x29 +#define MP2869A_VID_RES_MASK GENMASK(12, 10) +#define MP2869A_VOUT_SCALE_MASK GENMASK(7, 0) + +#define MP2869A_MAX_PHASE_RAIL1 16 +#define MP2869A_MAX_PHASE_RAIL2 8 +#define MP29612A_MAX_PHASE_RAIL1 12 +#define MP29612A_MAX_PHASE_RAIL2 6 + +#define MP2869A_PAGE_NUM 2 +#define MP29612A_PAGE_NUM 2 + +#define MP2869A_GAIN_BASE 32000 + +enum chips { mp2869a =3D 1, mp29612a }; + +static const int mp2869a_max_phases[][MP2869A_PAGE_NUM] =3D { + [mp2869a] =3D { MP2869A_MAX_PHASE_RAIL1, MP2869A_MAX_PHASE_RAIL2 }, + [mp29612a] =3D { MP29612A_MAX_PHASE_RAIL1, MP29612A_MAX_PHASE_RAIL2}, +}; + +static const struct i2c_device_id mp2869a_id[] =3D { + { "mp2869a", mp2869a }, + { "mp29612a", mp29612a }, + {} +}; + +MODULE_DEVICE_TABLE(i2c, mp2869a_id); + +struct mp2869a_data { + struct pmbus_driver_info info; + int vout_format[MP2869A_PAGE_NUM]; + int curr_sense_gain[MP2869A_PAGE_NUM]; + const int *max_phases; + enum chips chip_id; +}; + +#define to_mp2869a_data(x) container_of(x, struct mp2869a_data, info) + +static int +mp2869a_read_word_helper(struct i2c_client *client, int page, int phase, u= 8 reg, + u16 mask) +{ + int ret =3D pmbus_read_word_data(client, page, phase, reg); + + return (ret > 0) ? ret & mask : ret; +} + +struct mp2869a_vout_info { + int vid_step_uv; + int vdiff_gain_ratio; +}; + +static int +mp2869a_read_vid_and_scale(struct i2c_client *client, struct mp2869a_data = *data, + int page, int phase, + struct mp2869a_vout_info *out) +{ + int ret; + u16 reg_val; + u8 vid_sel, vscale; + + ret =3D pmbus_read_word_data(client, page, phase, + MP2869A_MFR_VOUT_SCALE_LOOP); + if (ret < 0) + return ret; + + reg_val =3D (u16)ret; + + /* Analyze VID Step Resolution=EF=BC=88bits 12:10=EF=BC=89 */ + vid_sel =3D (reg_val >> 10) & 0x7; + switch (vid_sel) { + case 0b000: + out->vid_step_uv =3D 6250; + break; + case 0b001: + out->vid_step_uv =3D 5000; + break; + case 0b010: + out->vid_step_uv =3D 2500; + break; + case 0b011: + out->vid_step_uv =3D 2000; + break; + case 0b100: + out->vid_step_uv =3D 1000; + break; + case 0b101: + /* 1000000 / 256 */ + out->vid_step_uv =3D 3906; + break; + case 0b110: + /* 1000000 / 512 */ + out->vid_step_uv =3D 1953; + break; + case 0b111: + /* 1000000 / 1024 */ + out->vid_step_uv =3D 977; + break; + default: + return -EINVAL; + } + + /* Analyze VOUT_SCALE_LOOP=EF=BC=88bits 7:0=EF=BC=89 */ + vscale =3D reg_val & 0xff; + if (vscale =3D=3D 0) + return -EINVAL; + /* Store as "magnification * 1000" to avoid floating point */ + out->vdiff_gain_ratio =3D MP2869A_GAIN_BASE / vscale; + + return 0; +} + +static int +mp2869a_read_vout(struct i2c_client *client, struct mp2869a_data *data, + int page, int phase, u8 reg) +{ + int ret; + int raw; + struct mp2869a_vout_info vout_info; + + raw =3D mp2869a_read_word_helper(client, page, phase, reg, GENMASK(11, 0)= ); + if (raw < 0) + return raw; + + ret =3D mp2869a_read_vid_and_scale(client, data, page, phase, &vout_info); + if (ret < 0) + return ret; + + int m =3D 1; + int R =3D 0; + int step =3D vout_info.vid_step_uv; + + /* Let step =3D 10^R / m */ + while (step % 10 =3D=3D 0 && R > -6) { + step /=3D 10; + R--; + } + /* approximate if step =E2=89=A0 1mV, 5mV, etc */ + m =3D 1000000 / vout_info.vid_step_uv; + + data->info.m[PSC_VOLTAGE_OUT] =3D m; + data->info.R[PSC_VOLTAGE_OUT] =3D R+3; + data->info.b[PSC_VOLTAGE_OUT] =3D 0; + + return raw; +} + +static int +mp2869a_read_word_data(struct i2c_client *client, int page, + int phase, int reg) +{ + const struct pmbus_driver_info *info =3D pmbus_get_driver_info(client); + struct mp2869a_data *data =3D to_mp2869a_data(info); + int ret; + + switch (reg) { + case PMBUS_READ_VOUT: + ret =3D mp2869a_read_vout(client, data, page, phase, reg); + break; + default: + return -ENODATA; + } + + return ret; +} + +static int +mp2869a_read_byte_data(struct i2c_client *client, int page, int reg) +{ + switch (reg) { + case PMBUS_VOUT_MODE: + /* Enforce VOUT direct format. */ + return PB_VOUT_MODE_DIRECT; + default: + return -ENODATA; + } +} + +static int +mp2869a_identify_vout_format(struct i2c_client *client, + struct mp2869a_data *data) +{ + int i, ret; + + for (i =3D 0; i < data->info.pages; i++) { + ret =3D i2c_smbus_write_byte_data(client, PMBUS_PAGE, i); + if (ret < 0) + return ret; + + ret =3D i2c_smbus_read_word_data(client, MP2869A_VOUT_MODE); + if (ret < 0) + return ret; + + switch (ret & MP2869A_VOUT_MODE_MASK) { + case MP2869A_VOUT_MODE_VID: + data->vout_format[i] =3D vid; + break; + default: + return -EINVAL; + } + } + return 0; +} + +static const struct pmbus_driver_info mp2869a_info =3D { + .pages =3D MP2869A_PAGE_NUM, + .format[PSC_VOLTAGE_IN] =3D linear, + .format[PSC_VOLTAGE_OUT] =3D direct, + .format[PSC_TEMPERATURE] =3D linear, + .format[PSC_CURRENT_IN] =3D linear, + .format[PSC_CURRENT_OUT] =3D linear, + .format[PSC_POWER] =3D linear, + .m[PSC_VOLTAGE_OUT] =3D 1, + .b[PSC_VOLTAGE_OUT] =3D 0, + .R[PSC_VOLTAGE_OUT] =3D -3, + .func[0] =3D PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | + PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | + PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | PMBUS_HAVE_POUT | + PMBUS_HAVE_PIN | PMBUS_HAVE_STATUS_INPUT, + .func[1] =3D PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_IOUT | + PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_POUT | PMBUS_HAVE_TEMP, + .read_byte_data =3D mp2869a_read_byte_data, + .read_word_data =3D mp2869a_read_word_data, +}; + +static int mp2869a_probe(struct i2c_client *client) +{ + struct pmbus_driver_info *info; + struct mp2869a_data *data; + int ret; + + data =3D devm_kzalloc(&client->dev, sizeof(struct mp2869a_data), + GFP_KERNEL); + if (!data) + return -ENOMEM; + + data->chip_id =3D (enum chips)(kernel_ulong_t)i2c_get_match_data(client); + data->max_phases =3D mp2869a_max_phases[data->chip_id]; + info =3D &data->info; + *info =3D mp2869a_info; + + /* Identify vout format. */ + ret =3D mp2869a_identify_vout_format(client, data); + if (ret) + return ret; + + /* set the device to page 0 */ + i2c_smbus_write_byte_data(client, PMBUS_PAGE, 0); + + return pmbus_do_probe(client, info); +} + +static const struct of_device_id __maybe_unused mp2869a_of_match[] =3D { + { .compatible =3D "mps,mp2869a", .data =3D (void *)mp2869a }, + { .compatible =3D "mps,mp29612a", .data =3D (void *)mp29612a}, + {} +}; + +MODULE_DEVICE_TABLE(of, mp2869a_of_match); + +static struct i2c_driver mp2869a_driver =3D { + .driver =3D { + .name =3D "mp2869a", + .of_match_table =3D mp2869a_of_match, + }, + .probe =3D mp2869a_probe, + .id_table =3D mp2869a_id, +}; + +module_i2c_driver(mp2869a_driver); + +MODULE_AUTHOR("Henry Wu "); +MODULE_DESCRIPTION("PMBus driver for MPS MP2869A/MP29612A device"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS("PMBUS"); --=20 2.43.0 From nobody Fri Oct 3 19:39:35 2025 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9C9825C807; Mon, 30 Jun 2025 11:21:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751282507; cv=none; b=LtlYlGP4snkc9ghsy+5ChEq0WGV54DlCNSEjlznpsR2uK8UTJjHgdFitTxSvOyzzT3a4O78h09bh6tJG9tyQVDBpK6tvkWLlDpirnvjvs20qVuMtvhiS/IU4qHrK5aa22DaBBwC/J8QBGGn+B9u6t+ADUCEkWsYA/ra7XPTN1Z4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751282507; c=relaxed/simple; bh=pvXD6KeDURX4UpmQi/NlGLO9mceU4Q0W2vgwOpEK1Fg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RD1plsdz5/Km951YCDuF6Sxh1xY478oDBJ9g5ceZ2sLwrOrlUI2ninDsQ2kx7Xpa1WZKGnLStmVV1jbhzZ6gEqrZzLffs5bw5BkD7U/7CxviJqA1kk1jWbbCxOs4B45zrQn4SYxQ02fPLsOut+i9344mHJZV1xGhuVCTaVVxSlg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Z0HiAD4U; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Z0HiAD4U" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-236470b2dceso13811685ad.0; Mon, 30 Jun 2025 04:21:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751282503; x=1751887303; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2WYtjpN0wIOV07YHe+0X8eRhjynp8w7rK9GL5xUtRUI=; b=Z0HiAD4U3t+MNATZrfylytUOeeFvY1OtlaF31zDcWsPfh7z1bZ2RZ/WhZeroR1P6QM WkKhbfpO50AbkSk1nzAMAbkOCRLmhYWNsSY78IkG42uZHgH/hMGY7SoNh7RlfZadKlcm OTVwHjzB8j6w7f8/+l6FidRb5Q1tKBJmD4UTx5JAtqCOVtt3Vgyhjws/h1tWpbLlCatc 5wgoWsvGz+2GVfY3bHQJYedXNpPlpefVx/k4W/2/nDzSpQsp+8zRs3e0PPs1VdLG3CU/ jtT+ci2wIRimMoFv2r9+UdwG0rddhq78V4k/PbLKFrKUhm2xzdHRbHC7th5WKYs6hBqD GKjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751282503; x=1751887303; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2WYtjpN0wIOV07YHe+0X8eRhjynp8w7rK9GL5xUtRUI=; b=nnOr2zqf5wGi0np20MvM4Yh0VW1xNbpxarGbQ81s1P5BZcBqyVXLp49677XzpXvqrR Oa4rMmviA5vkYl7vbjzQXA5u8JP+wNWxvehnc+S1F57rezzm7QVtR283iflzWm6HTuJR +nqxDW8sPnBdOlM27HWxI0OAxZLqSbkYsSrvMd6cvGOb1PgQdafsYvK7tS6uLLsY+IUY oAj2dHD9elzS9tzY6GV+0uMEBKbNVoISaWyeuqbkamWGiNJH5hmhmBtIP2Y7OowkjOzo JPJ9q6Hf5Hqs5zqgLOY5fvq28Avh5JCmGwS/zA2ArhZykGW5U/Qv4BKdpIYT9ZTPPnW/ FAfQ== X-Forwarded-Encrypted: i=1; AJvYcCU9wlpXhQJvmSHwNEErbMrY0jwFF4Fn/eocPdz/1y0Owr2CrQricOR9kFFNCFezIld2pKHFHzLZV/p/@vger.kernel.org, AJvYcCW+IOpDs2CD6EmMBg1E5UddjvhsPjexK+2EouMJ/JEf7OvQHNN1+D/DlZtTLaQmKmgA0L8MaJSqQ2ApZvx4@vger.kernel.org, AJvYcCW/WxG+9vWEgEpEhST0CWl+KxgFjRVkxRUNPHQJFuUA0h+tGXd7xGE/njobzGOMguxm186gV9FZZnsvHuM=@vger.kernel.org, AJvYcCXITAz2JrxAo0cXhtzfRFvzB100QHhNoKZSxG+SlkYa1Q4Wuf4Bz86h3y1omYQDiUlrGMSNNxvgrepu@vger.kernel.org X-Gm-Message-State: AOJu0YwCL8Gg95fAHl348J8QPNLI5cgaq+CNckbVCw3UHrewl8e5ZMSX RtmPmip0L7+rUmKgwB22RSri6gCWoJZlUF+C8cWW4vHVeCTLc6PGK6jS X-Gm-Gg: ASbGnculCwk5pfgOy0PWs7L1yzazQt7LWFr78vPh/qt3vNJpL0De2Pn+jwNgytvWnBx juEQcbWPNqCjUS0FflcMjZQEBAmycd7smV63ipPaJV+DAgPXdHbtdFNYHo8RRp23DZXfgv+TPDC OtWnrtqiy5bp/kDtAV5xRChjVc3Vi2PuqpG4319wuwnZR7dcjcx+zDGGVR2e0OzQ0PHquq0jz+S ZA/ZHC34ouSLhM0QziWflLpQR0O0L/i61FG6yPByt5Jln1Ffg6djmx39iEyYwtfcU4zfnkSAUVO sYp68XEdFUNAZS+WcLvlbt64a+q1Mvwda56GEebcPHh8KHfakkRTTiE9lk+s+i/Lf3y4XqChpNR MMH6RukpkaK9gcYuzHmtb X-Google-Smtp-Source: AGHT+IGkCueCr+E0S2CN2ENK3mfpdLQX62pD7/25UN7OWo5koATblrs3JQleJcXe85kMNXbX+JOzmw== X-Received: by 2002:a17:902:e551:b0:234:9375:e081 with SMTP id d9443c01a7336-23ac460719bmr192857675ad.42.1751282502763; Mon, 30 Jun 2025 04:21:42 -0700 (PDT) Received: from localhost (61-220-246-151.hinet-ip.hinet.net. [61.220.246.151]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23acb3b7f5dsm76812315ad.179.2025.06.30.04.21.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 04:21:42 -0700 (PDT) From: tzuhao.wtmh@gmail.com X-Google-Original-From: Henry_Wu@quantatw.com To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jean Delvare , Guenter Roeck , Jonathan Corbet , Jonathan Cameron , Rodrigo Gobbi , Michal Simek , Fabio Estevam , Naresh Solanki , Henry Wu , Grant Peltier , Laurent Pinchart , Cedric Encarnacion , Mariel Tinaco , Alex Vdovydchenko , John Erasmus Mari Geronimo , Leo Yang , Ninad Palsule , Jerome Brunet , Kim Seer Paller , Nuno Sa , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org Cc: peteryin.openbmc@gmail.com Subject: [PATCH v2 2/2] dt-bindings: trivial-devices: Add mp2869a/mp29612a device entry Date: Mon, 30 Jun 2025 19:20:51 +0800 Message-ID: <20250630112120.588246-3-Henry_Wu@quantatw.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250630112120.588246-1-Henry_Wu@quantatw.com> References: <20250630112120.588246-1-Henry_Wu@quantatw.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Henry Wu Add trivial-devices binding for mp2869a/mp29612a to enable automatic matchi= ng in device tree. Signed-off-by: Henry Wu --- Documentation/devicetree/bindings/trivial-devices.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Docum= entation/devicetree/bindings/trivial-devices.yaml index 27930708ccd5..5657fdcabb45 100644 --- a/Documentation/devicetree/bindings/trivial-devices.yaml +++ b/Documentation/devicetree/bindings/trivial-devices.yaml @@ -285,10 +285,14 @@ properties: - mps,mp2856 # Monolithic Power Systems Inc. multi-phase controller mp2857 - mps,mp2857 + # Monolithic Power Systems Inc. multi-phase controller mp2869a + - mps,mp2869a # Monolithic Power Systems Inc. multi-phase controller mp2888 - mps,mp2888 # Monolithic Power Systems Inc. multi-phase controller mp2891 - mps,mp2891 + # Monolithic Power Systems Inc. multi-phase controller mp29612a + - mps,mp29612a # Monolithic Power Systems Inc. multi-phase controller mp2993 - mps,mp2993 # Monolithic Power Systems Inc. multi-phase hot-swap controlle= r mp5920 --=20 2.43.0