aboutsummaryrefslogtreecommitdiff
path: root/src/soc/mediatek/mt8183/mt6358.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/mediatek/mt8183/mt6358.c')
-rw-r--r--src/soc/mediatek/mt8183/mt6358.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/soc/mediatek/mt8183/mt6358.c b/src/soc/mediatek/mt8183/mt6358.c
index 705424337f..ea4274f14b 100644
--- a/src/soc/mediatek/mt8183/mt6358.c
+++ b/src/soc/mediatek/mt8183/mt6358.c
@@ -13,6 +13,7 @@
* GNU General Public License for more details.
*/
+#include <assert.h>
#include <console/console.h>
#include <soc/pmic_wrap.h>
#include <soc/mt6358.h>
@@ -733,6 +734,46 @@ void pmic_set_power_hold(bool enable)
pwrap_write_field(PMIC_PWRHOLD, (enable) ? 1 : 0, 0x1, 0);
}
+void pmic_set_vsim2_cali(unsigned int vsim2_mv)
+{
+ u16 vsim2_reg, cali_mv;
+
+ cali_mv = vsim2_mv % 100;
+ assert(cali_mv % 10 == 0);
+
+ switch (vsim2_mv - cali_mv) {
+ case 1700:
+ vsim2_reg = 0x3;
+ break;
+
+ case 1800:
+ vsim2_reg = 0x4;
+ break;
+
+ case 2700:
+ vsim2_reg = 0x8;
+ break;
+
+ case 3000:
+ vsim2_reg = 0xb;
+ break;
+
+ case 3100:
+ vsim2_reg = 0xc;
+ break;
+
+ default:
+ assert(0);
+ return;
+ };
+
+ /* [11:8]=0x8, RG_VSIM2_VOSEL */
+ pwrap_write_field(PMIC_VSIM2_ANA_CON0, vsim2_reg, 0xF, 8);
+
+ /* [3:0], RG_VSIM2_VOCAL */
+ pwrap_write_field(PMIC_VSIM2_ANA_CON0, cali_mv / 10, 0xF, 0);
+}
+
static void pmic_wdt_set(void)
{
/* [5]=1, RG_WDTRSTB_DEB */