coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
gpio.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <baseboard/gpio.h>
4 #include <baseboard/variants.h>
5 #include <gpio.h>
6 #include <soc/gpio.h>
7 #include <variant/sku.h>
9 
10 static const struct pad_config default_override_table[] = {
11  PAD_NC(GPIO_104, UP_20K),
12 
13  /* GPIO_137 -- HP_INT_ODL and would be amend by SSFC. */
14  PAD_CFG_GPI_APIC_IOS(GPIO_137, NONE, DEEP, LEVEL, INVERT, HIZCRx1,
15  DISPUPD),
16 
17  /* EN_PP3300_TOUCHSCREEN */
18  PAD_CFG_GPO_IOSSTATE_IOSTERM(GPIO_146, 0, DEEP, NONE, Tx0RxDCRx0,
19  DISPUPD),
20 
21  PAD_NC(GPIO_213, DN_20K),
22 };
23 
24 static const struct pad_config hdmi_override_table[] = {
25  PAD_NC(GPIO_104, UP_20K),
26 
27  /* HV_DDI1_DDC_SDA */
28  PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_126, NONE, DEEP, NF1, HIZCRx1,
29  DISPUPD),
30  /* HV_DDI1_DDC_SCL */
31  PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_127, NONE, DEEP, NF1, HIZCRx1,
32  DISPUPD),
33 
34  /* GPIO_137 -- HP_INT_ODL and would be amend by SSFC. */
35  PAD_CFG_GPI_APIC_IOS(GPIO_137, NONE, DEEP, LEVEL, INVERT, HIZCRx1,
36  DISPUPD),
37 
38  /* EN_PP3300_TOUCHSCREEN */
39  PAD_CFG_GPO_IOSSTATE_IOSTERM(GPIO_146, 0, DEEP, NONE, Tx0RxDCRx0,
40  DISPUPD),
41 
42  PAD_NC(GPIO_213, DN_20K),
43 
44 };
45 
46 static const struct pad_config lte_override_table[] = {
47  /* Default override table. */
48  PAD_NC(GPIO_104, UP_20K),
49 
50  /* GPIO_137 -- HP_INT_ODL and would be amend by SSFC. */
51  PAD_CFG_GPI_APIC_IOS(GPIO_137, NONE, DEEP, LEVEL, INVERT, HIZCRx1,
52  DISPUPD),
53 
54  /* EN_PP3300_TOUCHSCREEN */
55  PAD_CFG_GPO_IOSSTATE_IOSTERM(GPIO_146, 0, DEEP, NONE, Tx0RxDCRx0,
56  DISPUPD),
57 
58  PAD_NC(GPIO_213, DN_20K),
59 
60  /* Be specific to LTE SKU */
61  /* UART2-CTS_B -- EN_PP3300_DX_LTE_SOC */
62  PAD_CFG_GPO(GPIO_67, 1, PWROK),
63 
64  /* PCIE_WAKE1_B -- FULL_CARD_POWER_OFF */
65  PAD_CFG_GPO(GPIO_117, 1, PWROK),
66 
67  /* AVS_I2S1_MCLK -- PLT_RST_LTE_L */
68  PAD_CFG_GPO(GPIO_161, 1, DEEP),
69 };
70 
71 const struct pad_config *variant_override_gpio_table(size_t *num)
72 {
75 
76  switch (sku_id) {
77  case SKU_9_HDMI:
78  case SKU_19_HDMI_TS:
79  case SKU_50_HDMI:
80  case SKU_52_HDMI_TS:
82  return hdmi_override_table;
83  case SKU_17_LTE:
84  case SKU_18_LTE_TS:
87  return lte_override_table;
88  default:
91  }
92 }
93 
94 static const struct pad_config lte_early_override_table[] = {
95  /* UART2-CTS_B -- EN_PP3300_DX_LTE_SOC */
96  PAD_CFG_GPO(GPIO_67, 1, PWROK),
97 
98  /* PCIE_WAKE1_B -- FULL_CARD_POWER_OFF */
99  PAD_CFG_GPO(GPIO_117, 1, PWROK),
100 
101  /* AVS_I2S1_MCLK -- PLT_RST_LTE_L */
102  PAD_CFG_GPO(GPIO_161, 0, DEEP),
103 };
104 
106 {
108 
110 }
uint32_t sku_id(void)
#define ARRAY_SIZE(a)
Definition: helpers.h:12
uint32_t google_chromeec_get_board_sku(void)
Definition: ec_skuid.c:6
#define GPIO_161
Definition: gpio_apl.h:282
#define GPIO_213
Definition: gpio_apl.h:171
#define GPIO_127
Definition: gpio_apl.h:227
const struct pad_config *__weak variant_override_gpio_table(size_t *num)
Definition: gpio.c:450
const struct soc_amd_gpio *__weak variant_early_override_gpio_table(size_t *size)
Definition: gpio.c:317
static const struct pad_config lte_override_table[]
Definition: gpio.c:46
static const struct pad_config hdmi_override_table[]
Definition: gpio.c:24
static const struct pad_config default_override_table[]
Definition: gpio.c:10
static const struct pad_config lte_early_override_table[]
Definition: gpio.c:94
@ SKU_50_HDMI
Definition: sku.h:17
@ SKU_52_HDMI_TS
Definition: sku.h:19
@ SKU_19_HDMI_TS
Definition: sku.h:11
@ SKU_9_HDMI
Definition: sku.h:8
@ SKU_17_LTE
Definition: sku.h:9
@ SKU_18_LTE_TS
Definition: sku.h:10
@ SKU_39_1A2C_360_LTE_TS_NO_STYLUES
Definition: sku.h:15
#define GPIO_104
Definition: gpio.h:69
#define GPIO_67
Definition: gpio.h:53
#define GPIO_146
Definition: gpio.h:93
#define PAD_NC(pin)
Definition: gpio_defs.h:263
#define GPIO_137
Definition: gpio.h:92
#define GPIO_117
Definition: gpio.h:84
#define GPIO_126
Definition: gpio.h:90
#define PAD_CFG_GPI_APIC_IOS(pad, pull, rst, trig, inv, iosstate, iosterm)
Definition: gpio_defs.h:391
#define PAD_CFG_NF_IOSSTATE_IOSTERM(pad, pull, rst, func, iosstate, iosterm)
Definition: gpio_defs.h:234
#define PAD_CFG_GPO_IOSSTATE_IOSTERM(pad, val, rst, pull, iosstate, ioterm)
Definition: gpio_defs.h:277
#define PAD_CFG_GPO(pad, val, rst)
Definition: gpio_defs.h:247
unsigned int uint32_t
Definition: stdint.h:14