From 0ba0d03140941a558f2aa990a7489ab683822335 Mon Sep 17 00:00:00 2001 From: Vince Liu Date: Fri, 28 Mar 2025 11:34:15 +0800 Subject: [PATCH] mb/google/skywalker: Implement regulator interface Control regulator more easily with regulator interface. BUG=b:379008996 BRANCH=none TEST=build passed. Signed-off-by: Zhigang Qin Change-Id: Ie7bfc9c3fb4e5f50cdf1ed8174366bdafaf3c49a Reviewed-on: https://review.coreboot.org/c/coreboot/+/87794 Reviewed-by: Yu-Ping Wu Tested-by: build bot (Jenkins) Reviewed-by: Yidi Lin --- src/mainboard/google/skywalker/Makefile.mk | 2 + src/mainboard/google/skywalker/regulator.c | 102 +++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 src/mainboard/google/skywalker/regulator.c diff --git a/src/mainboard/google/skywalker/Makefile.mk b/src/mainboard/google/skywalker/Makefile.mk index 6c863fe287..3e5bad3f37 100644 --- a/src/mainboard/google/skywalker/Makefile.mk +++ b/src/mainboard/google/skywalker/Makefile.mk @@ -7,6 +7,8 @@ all-y += reset.c bootblock-y += bootblock.c romstage-y += romstage.c +romstage-y += regulator.c ramstage-y += boardid.c ramstage-y += mainboard.c +ramstage-y += regulator.c diff --git a/src/mainboard/google/skywalker/regulator.c b/src/mainboard/google/skywalker/regulator.c new file mode 100644 index 0000000000..46d0e2b8a2 --- /dev/null +++ b/src/mainboard/google/skywalker/regulator.c @@ -0,0 +1,102 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ + +#include +#include +#include + +#define MTK_REGULATOR_INVALID -1 + +static int get_mt6359p_regulator_id(enum mtk_regulator regulator) +{ + switch (regulator) { + case MTK_REGULATOR_VPROC12: + return MT6359P_VMODEM; + case MTK_REGULATOR_VSRAM_PROC12: + return MT6359P_VSRAM_MD; + case MTK_REGULATOR_VMCH: + return MT6359P_PA; + case MTK_REGULATOR_VMC: + return MT6359P_SIM1; + default: + return MTK_REGULATOR_INVALID; + } +} + +void mainboard_set_regulator_voltage(enum mtk_regulator regulator, uint32_t voltage_uv) +{ + int id; + + id = get_mt6359p_regulator_id(regulator); + if (id < 0) { + printk(BIOS_ERR, "%s: Invalid regulator ID: %d\n", __func__, regulator); + return; + } + + switch (id) { + case MT6359P_VMODEM: + mt6359p_buck_set_voltage(MT6359P_VMODEM, voltage_uv); + break; + case MT6359P_VSRAM_MD: + mt6359p_buck_set_voltage(MT6359P_VSRAM_MD, voltage_uv); + break; + case MT6359P_PA: + mt6359p_buck_set_voltage(MT6359P_PA, voltage_uv); + break; + case MT6359P_SIM1: + mt6359p_set_vsim1_voltage(voltage_uv); + break; + default: + printk(BIOS_ERR, "%s: Regulator ID %d: not supported\n", __func__, regulator); + break; + } +} + +uint32_t mainboard_get_regulator_voltage(enum mtk_regulator regulator) +{ + int id; + + id = get_mt6359p_regulator_id(regulator); + if (id < 0) { + printk(BIOS_ERR, "%s: Invalid regulator ID: %d\n", __func__, regulator); + return 0; + } + + switch (id) { + case MT6359P_VMODEM: + return mt6359p_buck_get_voltage(MT6359P_VMODEM); + case MT6359P_VSRAM_MD: + return mt6359p_buck_get_voltage(MT6359P_VSRAM_MD); + case MT6359P_PA: + return mt6359p_buck_get_voltage(MT6359P_PA); + case MT6359P_SIM1: + return mt6359p_get_vsim1_voltage(); + default: + printk(BIOS_ERR, "%s: Regulator ID %d: not supported\n", __func__, regulator); + return 0; + } +} + +int mainboard_enable_regulator(enum mtk_regulator regulator, bool enable) +{ + int id; + + id = get_mt6359p_regulator_id(regulator); + if (id < 0) { + printk(BIOS_ERR, "%s: Invalid regulator ID: %d\n", __func__, regulator); + return -1; + } + + switch (id) { + case MT6359P_PA: + mt6359p_enable_vpa(enable); + break; + case MT6359P_SIM1: + mt6359p_enable_vsim1(enable); + break; + default: + printk(BIOS_ERR, "%s: Regulator ID %d: not supported\n", __func__, regulator); + break; + } + + return 0; +}