summaryrefslogtreecommitdiff
path: root/src/ec/lenovo/h8/h8.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ec/lenovo/h8/h8.c')
-rw-r--r--src/ec/lenovo/h8/h8.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/ec/lenovo/h8/h8.c b/src/ec/lenovo/h8/h8.c
index 933a6de4ed..84766d000e 100644
--- a/src/ec/lenovo/h8/h8.c
+++ b/src/ec/lenovo/h8/h8.c
@@ -79,6 +79,24 @@ static void h8_fn_ctrl_swap(int on)
ec_clr_bit(0xce, 4);
}
+enum battery {
+ SECONDARY_BATTERY = 0,
+ PRIMARY_BATTERY = 1,
+};
+
+/* h8 charge priority. Defines if primary or secondary
+ * battery is charged first.
+ * Because NVRAM is complete the otherway around as this register,
+ * it's inverted by if
+ */
+static void h8_charge_priority(enum battery battery)
+{
+ if (battery == PRIMARY_BATTERY)
+ ec_clr_bit(0x0, 4);
+ else
+ ec_set_bit(0x0, 4);
+}
+
static void h8_sticky_fn(int on)
{
if (on)
@@ -187,7 +205,7 @@ struct device_operations h8_dev_ops = {
static void h8_enable(struct device *dev)
{
struct ec_lenovo_h8_config *conf = dev->chip_info;
- u8 val, tmp;
+ u8 val;
u8 beepmask0, beepmask1, config1;
dev->ops = &h8_dev_ops;
@@ -287,12 +305,9 @@ static void h8_enable(struct device *dev)
h8_sticky_fn(val);
if (get_option(&val, "first_battery") != CB_SUCCESS)
- val = 1;
+ val = PRIMARY_BATTERY;
+ h8_charge_priority(val);
- tmp = ec_read(H8_CONFIG3);
- tmp &= ~(1 << 4);
- tmp |= (val & 1) << 4;
- ec_write(H8_CONFIG3, tmp);
h8_set_audio_mute(0);
#if !IS_ENABLED(CONFIG_H8_DOCK_EARLY_INIT)