diff options
-rw-r--r-- | src/mainboard/google/geralt/Makefile.inc | 1 | ||||
-rw-r--r-- | src/mainboard/google/geralt/regulator.c | 77 | ||||
-rw-r--r-- | src/soc/mediatek/common/include/soc/regulator.h | 2 |
3 files changed, 80 insertions, 0 deletions
diff --git a/src/mainboard/google/geralt/Makefile.inc b/src/mainboard/google/geralt/Makefile.inc index 4720dc586f..d1d9ff3b0e 100644 --- a/src/mainboard/google/geralt/Makefile.inc +++ b/src/mainboard/google/geralt/Makefile.inc @@ -13,4 +13,5 @@ romstage-y += romstage.c ramstage-y += memlayout.ld ramstage-y += chromeos.c ramstage-y += mainboard.c +ramstage-y += regulator.c ramstage-y += reset.c diff --git a/src/mainboard/google/geralt/regulator.c b/src/mainboard/google/geralt/regulator.c new file mode 100644 index 0000000000..6089af90d6 --- /dev/null +++ b/src/mainboard/google/geralt/regulator.c @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <console/console.h> +#include <soc/mt6359p.h> +#include <soc/regulator.h> + +#define MTK_REGULATOR_INVALID -1 + +static int get_mt6359p_regulator_id(enum mtk_regulator regulator) +{ + switch (regulator) { + case MTK_REGULATOR_VCORE: + return MT6359P_GPU11; + case MTK_REGULATOR_VPROC11: + return MT6359P_CORE; + case MTK_REGULATOR_VSRAM_PROC11: + return MT6359P_SRAM_PROC1; + 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, "Invalid regulator ID: %d\n", regulator); + return; + } + + if (id == MT6359P_SIM1) + mt6359p_set_vsim1_voltage(voltage_uv); + else + mt6359p_buck_set_voltage(id, voltage_uv); +} + +uint32_t mainboard_get_regulator_voltage(enum mtk_regulator regulator) +{ + int id; + + id = get_mt6359p_regulator_id(regulator); + if (id < 0) { + printk(BIOS_ERR, "Invalid regulator ID: %d\n", regulator); + return 0; + } + + if (id == MT6359P_SIM1) + return mt6359p_get_vsim1_voltage(); + + return mt6359p_buck_get_voltage(id); +} + +int mainboard_enable_regulator(enum mtk_regulator regulator, bool enable) +{ + int id; + + id = get_mt6359p_regulator_id(regulator); + if (id < 0) { + printk(BIOS_ERR, "Invalid regulator ID: %d\n", regulator); + return -1; + } + + if (id == MT6359P_SIM1) + mt6359p_enable_vsim1(enable); + else if (id == MT6359P_PA) + mt6359p_enable_vpa(enable); + else + printk(BIOS_INFO, "No need to enable regulator ID: %d\n", regulator); + + return 0; +} diff --git a/src/soc/mediatek/common/include/soc/regulator.h b/src/soc/mediatek/common/include/soc/regulator.h index 2ff122637a..7f3bd49e04 100644 --- a/src/soc/mediatek/common/include/soc/regulator.h +++ b/src/soc/mediatek/common/include/soc/regulator.h @@ -16,7 +16,9 @@ enum mtk_regulator { MTK_REGULATOR_VDRAM1, MTK_REGULATOR_VMCH, MTK_REGULATOR_VMC, + MTK_REGULATOR_VPROC11, MTK_REGULATOR_VPROC12, + MTK_REGULATOR_VSRAM_PROC11, MTK_REGULATOR_VSRAM_PROC12, MTK_REGULATOR_VRF12, MTK_REGULATOR_VCN33, |