@@ -53,7 +53,11 @@ COND_CODE_1(DT_NODE_EXISTS(DT_INST(1, ite_it8xxx2_usbpd)), (2), (1))
53
53
#define CLK_DIV_LOW_FIELDS (n ) FIELD_PREP(GENMASK(3, 0), n)
54
54
55
55
#ifdef CONFIG_SOC_IT8XXX2_GPIO_Q_GROUP_SUPPORTED
56
- #define ELPM_BASE_ADDR 0xF03E00
56
+ #define ELPM_BASE_ADDR DT_REG_ADDR(DT_INST(0, ite_it8xxx2_power_elpm))
57
+ #define ELPMF1_WAKE_UP_CTRL_3 0xF1
58
+ #define FIRMWARE_CTRL_EN BIT(1)
59
+ #define FIRMWARE_CTRL_OUTPUT_H BIT(0)
60
+
57
61
#define ELPMF5_INPUT_EN 0xF5
58
62
#define XLPIN_INPUT_ENABLE_MASK GENMASK(5, 0)
59
63
#endif /* CONFIG_SOC_IT8XXX2_GPIO_Q_GROUP_SUPPORTED */
@@ -534,6 +538,16 @@ static int ite_it8xxx2_init(void)
534
538
#endif /* (SOC_USBPD_ITE_PHY_PORT_COUNT > 0) */
535
539
536
540
#ifdef CONFIG_SOC_IT8XXX2_GPIO_Q_GROUP_SUPPORTED
541
+ #if DT_HAS_COMPAT_STATUS_OKAY (ite_it8xxx2_power_elpm )
542
+ /* drive xlpout high and then enable elpm firmware control mode if
543
+ * the elpm node is marked as okay.
544
+ */
545
+ sys_write8 (sys_read8 (ELPM_BASE_ADDR + ELPMF1_WAKE_UP_CTRL_3 ) | FIRMWARE_CTRL_OUTPUT_H ,
546
+ ELPM_BASE_ADDR + ELPMF1_WAKE_UP_CTRL_3 );
547
+ sys_write8 (sys_read8 (ELPM_BASE_ADDR + ELPMF1_WAKE_UP_CTRL_3 ) | FIRMWARE_CTRL_EN ,
548
+ ELPM_BASE_ADDR + ELPMF1_WAKE_UP_CTRL_3 );
549
+ #endif /* DT_HAS_COMPAT_STATUS_OKAY(ite_it8xxx2_power_elpm) */
550
+
537
551
/* set gpio-q group as gpio by default */
538
552
sys_write8 (sys_read8 (ELPM_BASE_ADDR + ELPMF5_INPUT_EN ) & ~XLPIN_INPUT_ENABLE_MASK ,
539
553
ELPM_BASE_ADDR + ELPMF5_INPUT_EN );
0 commit comments