1 /* SPDX-License-Identifier: GPL-2.0-only */
3 /* TODO: Update for mayan */
5 #include <ec/acpi/ec.h>
8 #define MAYAN_EC_CMD 0x666
9 #define MAYAN_EC_DATA 0x662
11 #define EC_GPIO_1_ADDR 0xA1
12 #define EC_GPIO_EVAL_PWREN BIT(1)
14 #define EC_GPIO_2_ADDR 0xA2
15 #define EC_GPIO_EVAL_SLOT_PWR BIT(5)
17 #define EC_GPIO_3_ADDR 0xA3
18 #define EC_GPIO_EVAL_RST_AUX BIT(0)
19 #define EC_GPIO_LOM_RESET_AUX BIT(1)
20 #define EC_GPIO_DT_RESET_AUX BIT(2)
22 #define EC_GPIO_7_ADDR 0xA7
23 #define EC_GPIO_DT_PWREN BIT(2)
24 #define EC_GPIO_WWAN_MODULE_RST BIT(5)
26 #define EC_GPIO_8_ADDR 0xA8
27 #define EC_GPIO_SMBUS0_EN BIT(0)
29 #define EC_GPIO_9_ADDR 0xA9
30 #define EC_GPIO_M2SSD1_PWREN BIT(5)
32 #define EC_GPIO_A_ADDR 0xAA
33 #define EC_GPIO_WWAN_PWREN BIT(3)
34 #define EC_GPIO_M2_SSD0_PWREN BIT(6)
35 #define EC_GPIO_LOM_PWREN BIT(7)
37 #define EC_GPIO_C_ADDR 0xAC
38 #define EC_GPIO_DT_N_WLAN_SW BIT(1)
39 #define EC_GPIO_MP2_SEL BIT(2)
40 #define EC_GPIO_WWAN_N_LOM_SW BIT(3)
41 #define EC_GPIO_M2SSD1_HDD_SW BIT(6)
43 #define EC_SW02_ADDR 0xB7
44 #define EC_SW02_MS BIT(7)
46 static void configure_ec_gpio(void)
51 tmp
= ec_read(EC_GPIO_1_ADDR
);
52 tmp
|= EC_GPIO_EVAL_PWREN
;
53 ec_write(EC_GPIO_1_ADDR
, tmp
);
55 tmp
= ec_read(EC_GPIO_2_ADDR
);
56 tmp
|= EC_GPIO_EVAL_SLOT_PWR
;
57 ec_write(EC_GPIO_2_ADDR
, tmp
);
59 tmp
= ec_read(EC_GPIO_3_ADDR
);
60 tmp
|= EC_GPIO_LOM_RESET_AUX
| EC_GPIO_EVAL_RST_AUX
;
61 tmp
|= EC_GPIO_LOM_RESET_AUX
;
63 if (CONFIG(ENABLE_DT_SLOT_MAYAN
))
64 tmp
|= EC_GPIO_DT_RESET_AUX
;
66 tmp
&= (~EC_GPIO_DT_RESET_AUX
);
68 ec_write(EC_GPIO_3_ADDR
, tmp
);
70 tmp
= ec_read(EC_GPIO_7_ADDR
);
71 tmp
|= EC_GPIO_WWAN_MODULE_RST
;
72 if (CONFIG(ENABLE_DT_SLOT_MAYAN
))
73 tmp
|= EC_GPIO_DT_PWREN
;
75 tmp
&= (~EC_GPIO_DT_PWREN
);
77 ec_write(EC_GPIO_7_ADDR
, tmp
);
79 tmp
= ec_read(EC_GPIO_8_ADDR
);
80 tmp
|= EC_GPIO_SMBUS0_EN
;
81 ec_write(EC_GPIO_8_ADDR
, tmp
);
83 tmp
= ec_read(EC_GPIO_9_ADDR
);
84 /* Enable M2 SSD1 slot */
85 if (CONFIG(ENABLE_M2_SSD1_MAYAN
))
86 tmp
|= EC_GPIO_M2SSD1_PWREN
;
88 tmp
&= (~EC_GPIO_M2SSD1_PWREN
);
90 ec_write(EC_GPIO_9_ADDR
, tmp
);
92 tmp
= ec_read(EC_GPIO_A_ADDR
);
93 tmp
|= EC_GPIO_M2_SSD0_PWREN
| EC_GPIO_LOM_PWREN
| EC_GPIO_WWAN_PWREN
;
94 ec_write(EC_GPIO_A_ADDR
, tmp
);
96 tmp
= ec_read(EC_GPIO_C_ADDR
);
97 tmp
|= EC_GPIO_WWAN_N_LOM_SW
| EC_GPIO_MP2_SEL
| EC_GPIO_DT_N_WLAN_SW
;
98 if (CONFIG(ENABLE_DT_SLOT_MAYAN
)) {
99 tmp
|= EC_GPIO_M2SSD1_HDD_SW
;
100 tmp
&= (~EC_GPIO_DT_N_WLAN_SW
);
102 if (CONFIG(ENABLE_M2_SSD1_MAYAN
)) {
103 tmp
|= EC_GPIO_DT_N_WLAN_SW
;
104 tmp
&= (~EC_GPIO_M2SSD1_HDD_SW
);
106 ec_write(EC_GPIO_C_ADDR
, tmp
);
108 tmp
= ec_read(EC_SW02_ADDR
);
110 ec_write(EC_SW02_ADDR
, tmp
);
113 void mayan_ec_init(void)
115 ec_set_ports(MAYAN_EC_CMD
, MAYAN_EC_DATA
);