diff --git a/src/mainboard/google/rauru/Makefile.mk b/src/mainboard/google/rauru/Makefile.mk index d5eb8afc61..d383629b5a 100644 --- a/src/mainboard/google/rauru/Makefile.mk +++ b/src/mainboard/google/rauru/Makefile.mk @@ -9,3 +9,4 @@ bootblock-y += bootblock.c romstage-y += romstage.c ramstage-y += mainboard.c +ramstage-y += regulator.c diff --git a/src/mainboard/google/rauru/regulator.c b/src/mainboard/google/rauru/regulator.c new file mode 100644 index 0000000000..f9fb90f23b --- /dev/null +++ b/src/mainboard/google/rauru/regulator.c @@ -0,0 +1,88 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ + +#include +#include +#include + +#define MTK_REGULATOR_INVALID -1 + +static int get_mt6373_regulator_id(enum mtk_regulator regulator) +{ + switch (regulator) { + case MTK_REGULATOR_VMCH: + return MT6373_VMCH; + case MTK_REGULATOR_VMC: + return MT6373_VMC; + default: + return MTK_REGULATOR_INVALID; + } +} + +void mainboard_set_regulator_voltage(enum mtk_regulator regulator, uint32_t voltage_uv) +{ + int id; + + id = get_mt6373_regulator_id(regulator); + if (id < 0) { + printk(BIOS_ERR, "Invalid regulator ID: %d\n", regulator); + return; + } + + switch (id) { + case MT6373_VMCH: + mt6373_set_vmch_voltage(voltage_uv); + break; + case MT6373_VMC: + mt6373_set_vmc_voltage(voltage_uv); + break; + default: + printk(BIOS_ERR, "Regulator ID %d: not supported\n", regulator); + break; + } +} + +uint32_t mainboard_get_regulator_voltage(enum mtk_regulator regulator) +{ + int id; + + id = get_mt6373_regulator_id(regulator); + if (id < 0) { + printk(BIOS_ERR, "Invalid regulator ID: %d\n", regulator); + return 0; + } + + switch (id) { + case MT6373_VMCH: + return mt6373_get_vmch_voltage(); + case MT6373_VMC: + return mt6373_get_vmc_voltage(); + default: + printk(BIOS_ERR, "Regulator ID %d: not supported\n", regulator); + return 0; + } +} + +int mainboard_enable_regulator(enum mtk_regulator regulator, bool enable) +{ + int id; + + id = get_mt6373_regulator_id(regulator); + if (id < 0) { + printk(BIOS_ERR, "Invalid regulator ID: %d\n", regulator); + return -1; + } + + switch (id) { + case MT6373_VMCH: + mt6373_enable_vmch(enable); + break; + case MT6373_VMC: + mt6373_enable_vmc(enable); + break; + default: + printk(BIOS_ERR, "Regulator ID %d: not supported\n", regulator); + break; + } + + return 0; +}