• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <ec/acpi/ec.h>
4 #include "ec.h"
5 
6 #define CHAUSIE_EC_CMD		0x666
7 #define CHAUSIE_EC_DATA		0x662
8 
9 #define EC_GPIO_3_ADDR		0xA3
10 #define EC_GPIO_LOM_RESET_AUX		BIT(1)
11 
12 #define EC_GPIO_7_ADDR		0xA7
13 #define EC_GPIO_DT_PWREN		BIT(2)
14 #define EC_GPIO_WWAN_MODULE_RST		BIT(5)
15 
16 #define EC_GPIO_8_ADDR		0xA8
17 #define EC_GPIO_SMBUS0_EN		BIT(0)
18 
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)
24 
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)
31 
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)
36 
37 #define EC_SW02_ADDR		0xB7
38 #define EC_SW02_MS			BIT(7)
39 
configure_ec_gpio(void)40 static void configure_ec_gpio(void)
41 {
42 	uint8_t tmp;
43 
44 	tmp = ec_read(EC_GPIO_3_ADDR);
45 	tmp |= EC_GPIO_LOM_RESET_AUX;
46 	ec_write(EC_GPIO_3_ADDR, tmp);
47 
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);
51 
52 	tmp = ec_read(EC_GPIO_8_ADDR);
53 	tmp |= EC_GPIO_SMBUS0_EN;
54 	ec_write(EC_GPIO_8_ADDR, tmp);
55 
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);
60 
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);
66 
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);
70 
71 	tmp = ec_read(EC_SW02_ADDR);
72 	tmp |= EC_SW02_MS;
73 	ec_write(EC_SW02_ADDR, tmp);
74 }
75 
chausie_ec_init(void)76 void chausie_ec_init(void)
77 {
78 	ec_set_ports(CHAUSIE_EC_CMD, CHAUSIE_EC_DATA);
79 	configure_ec_gpio();
80 }
81