|
@@ -104,6 +104,62 @@ void mx28_power_set_linreg(void)
|
|
|
POWER_VDDIOCTRL_LINREG_OFFSET_1STEPS_BELOW);
|
|
|
}
|
|
|
|
|
|
+int mx28_get_batt_volt(void)
|
|
|
+{
|
|
|
+ struct mx28_power_regs *power_regs =
|
|
|
+ (struct mx28_power_regs *)MXS_POWER_BASE;
|
|
|
+ uint32_t volt = readl(&power_regs->hw_power_battmonitor);
|
|
|
+ volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
|
|
|
+ volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
|
|
|
+ volt *= 8;
|
|
|
+ return volt;
|
|
|
+}
|
|
|
+
|
|
|
+int mx28_is_batt_ready(void)
|
|
|
+{
|
|
|
+ return (mx28_get_batt_volt() >= 3600);
|
|
|
+}
|
|
|
+
|
|
|
+int mx28_is_batt_good(void)
|
|
|
+{
|
|
|
+ struct mx28_power_regs *power_regs =
|
|
|
+ (struct mx28_power_regs *)MXS_POWER_BASE;
|
|
|
+ uint32_t volt = mx28_get_batt_volt();
|
|
|
+
|
|
|
+ if ((volt >= 2400) && (volt <= 4300))
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ clrsetbits_le32(&power_regs->hw_power_5vctrl,
|
|
|
+ POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
|
|
|
+ 0x3 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
|
|
|
+ writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
|
|
|
+ &power_regs->hw_power_5vctrl_clr);
|
|
|
+
|
|
|
+ clrsetbits_le32(&power_regs->hw_power_charge,
|
|
|
+ POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
|
|
|
+ POWER_CHARGE_STOP_ILIMIT_10MA | 0x3);
|
|
|
+
|
|
|
+ writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_clr);
|
|
|
+ writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
|
|
|
+ &power_regs->hw_power_5vctrl_clr);
|
|
|
+
|
|
|
+ early_delay(500000);
|
|
|
+
|
|
|
+ volt = mx28_get_batt_volt();
|
|
|
+
|
|
|
+ if (volt >= 3500)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ if (volt >= 2400)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
|
|
|
+ &power_regs->hw_power_charge_clr);
|
|
|
+ writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
void mx28_power_setup_5v_detect(void)
|
|
|
{
|
|
|
struct mx28_power_regs *power_regs =
|
|
@@ -486,22 +542,6 @@ void mx28_handle_5v_conflict(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-int mx28_get_batt_volt(void)
|
|
|
-{
|
|
|
- struct mx28_power_regs *power_regs =
|
|
|
- (struct mx28_power_regs *)MXS_POWER_BASE;
|
|
|
- uint32_t volt = readl(&power_regs->hw_power_battmonitor);
|
|
|
- volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
|
|
|
- volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
|
|
|
- volt *= 8;
|
|
|
- return volt;
|
|
|
-}
|
|
|
-
|
|
|
-int mx28_is_batt_ready(void)
|
|
|
-{
|
|
|
- return (mx28_get_batt_volt() >= 3600);
|
|
|
-}
|
|
|
-
|
|
|
void mx28_5v_boot(void)
|
|
|
{
|
|
|
struct mx28_power_regs *power_regs =
|
|
@@ -553,54 +593,6 @@ void mx28_switch_vddd_to_dcdc_source(void)
|
|
|
POWER_VDDDCTRL_DISABLE_STEPPING);
|
|
|
}
|
|
|
|
|
|
-int mx28_is_batt_good(void)
|
|
|
-{
|
|
|
- struct mx28_power_regs *power_regs =
|
|
|
- (struct mx28_power_regs *)MXS_POWER_BASE;
|
|
|
- uint32_t volt;
|
|
|
-
|
|
|
- volt = readl(&power_regs->hw_power_battmonitor);
|
|
|
- volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
|
|
|
- volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
|
|
|
- volt *= 8;
|
|
|
-
|
|
|
- if ((volt >= 2400) && (volt <= 4300))
|
|
|
- return 1;
|
|
|
-
|
|
|
- clrsetbits_le32(&power_regs->hw_power_5vctrl,
|
|
|
- POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
|
|
|
- 0x3 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
|
|
|
- writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
|
|
|
- &power_regs->hw_power_5vctrl_clr);
|
|
|
-
|
|
|
- clrsetbits_le32(&power_regs->hw_power_charge,
|
|
|
- POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
|
|
|
- POWER_CHARGE_STOP_ILIMIT_10MA | 0x3);
|
|
|
-
|
|
|
- writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_clr);
|
|
|
- writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
|
|
|
- &power_regs->hw_power_5vctrl_clr);
|
|
|
-
|
|
|
- early_delay(500000);
|
|
|
-
|
|
|
- volt = readl(&power_regs->hw_power_battmonitor);
|
|
|
- volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
|
|
|
- volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
|
|
|
- volt *= 8;
|
|
|
-
|
|
|
- if (volt >= 3500)
|
|
|
- return 0;
|
|
|
-
|
|
|
- if (volt >= 2400)
|
|
|
- return 1;
|
|
|
-
|
|
|
- writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
|
|
|
- &power_regs->hw_power_charge_clr);
|
|
|
- writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
void mx28_power_configure_power_source(void)
|
|
|
{
|
|
|
mx28_src_power_init();
|