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)40static 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)76void chausie_ec_init(void) 77 { 78 ec_set_ports(CHAUSIE_EC_CMD, CHAUSIE_EC_DATA); 79 configure_ec_gpio(); 80 } 81