1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <ec/acpi/ec.h>
6 #define CHAUSIE_EC_CMD 0x666
7 #define CHAUSIE_EC_DATA 0x662
9 #define EC_GPIO_3_ADDR 0xA3
10 #define EC_GPIO_LOM_RESET_AUX BIT(1)
12 #define EC_GPIO_7_ADDR 0xA7
13 #define EC_GPIO_DT_PWREN BIT(2)
14 #define EC_GPIO_WWAN_MODULE_RST BIT(5)
16 #define EC_GPIO_8_ADDR 0xA8
17 #define EC_GPIO_SMBUS0_EN BIT(0)
19 #define EC_GPIO_A_ADDR 0xAA
20 #define EC_GPIO_WWAN_PWREN BIT(3)
21 #define EC_GPIO_WLAN_PWREN BIT(4)
22 #define EC_GPIO_M2_SSD0_PWREN BIT(6)
23 #define EC_GPIO_LOM_PWREN BIT(7)
25 #define EC_GPIO_B_ADDR 0xAB
26 #define EC_GPIO_WL_RADIO_DIS BIT(0)
27 #define EC_GPIO_BT_RADIO_DIS BIT(2)
28 #define EC_GPIO_GNSS_RADIO_DIS_N BIT(5)
29 #define EC_GPIO_MAIN_RADIO_DIS_N BIT(6)
30 #define EC_GPIO_WWAN_POWER_OFF_N BIT(7)
32 #define EC_GPIO_C_ADDR 0xAC
33 #define EC_GPIO_DT_N_WLAN_SW BIT(1)
34 #define EC_GPIO_MP2_SEL BIT(2)
35 #define EC_GPIO_WWAN_N_LOM_SW BIT(3)
37 #define EC_SW02_ADDR 0xB7
38 #define EC_SW02_MS BIT(7)
40 static void configure_ec_gpio(void)
44 tmp
= ec_read(EC_GPIO_3_ADDR
);
45 tmp
|= EC_GPIO_LOM_RESET_AUX
;
46 ec_write(EC_GPIO_3_ADDR
, tmp
);
48 tmp
= ec_read(EC_GPIO_7_ADDR
);
49 tmp
|= EC_GPIO_WWAN_MODULE_RST
| EC_GPIO_DT_PWREN
;
50 ec_write(EC_GPIO_7_ADDR
, tmp
);
52 tmp
= ec_read(EC_GPIO_8_ADDR
);
53 tmp
|= EC_GPIO_SMBUS0_EN
;
54 ec_write(EC_GPIO_8_ADDR
, tmp
);
56 tmp
= ec_read(EC_GPIO_A_ADDR
);
57 tmp
|= EC_GPIO_M2_SSD0_PWREN
| EC_GPIO_LOM_PWREN
;
58 tmp
|= EC_GPIO_WLAN_PWREN
| EC_GPIO_WWAN_PWREN
;
59 ec_write(EC_GPIO_A_ADDR
, tmp
);
61 tmp
= ec_read(EC_GPIO_B_ADDR
);
62 tmp
|= EC_GPIO_GNSS_RADIO_DIS_N
| EC_GPIO_MAIN_RADIO_DIS_N
;
63 tmp
|= EC_GPIO_WWAN_POWER_OFF_N
;
64 tmp
&= ~EC_GPIO_WL_RADIO_DIS
& ~EC_GPIO_BT_RADIO_DIS
;
65 ec_write(EC_GPIO_B_ADDR
, tmp
);
67 tmp
= ec_read(EC_GPIO_C_ADDR
);
68 tmp
|= EC_GPIO_WWAN_N_LOM_SW
| EC_GPIO_MP2_SEL
| EC_GPIO_DT_N_WLAN_SW
;
69 ec_write(EC_GPIO_C_ADDR
, tmp
);
71 tmp
= ec_read(EC_SW02_ADDR
);
73 ec_write(EC_SW02_ADDR
, tmp
);
76 void chausie_ec_init(void)
78 ec_set_ports(CHAUSIE_EC_CMD
, CHAUSIE_EC_DATA
);