summaryrefslogtreecommitdiff
path: root/zephyr/projects/volteer/volteer/include/gpio_map.h
blob: 0b2f33f86d7f78fd62668e8b86922d9a7bbc69b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/* Copyright 2020 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef __ZEPHYR_GPIO_MAP_H
#define __ZEPHYR_GPIO_MAP_H

#include <devicetree.h>
#include <gpio_signal.h>

#include "extpower.h"
#include "lid_switch.h"
#include "power_button.h"

/*
 * Without https://github.com/zephyrproject-rtos/zephyr/pull/29282, we need
 * to manually link GPIO_ defines that platform/ec code expects to the
 * enum gpio_signal values that are generated by device tree bindings.
 *
 * Note we only need to create aliases for GPIOs that are referenced in common
 * platform/ec code.
 */
#define GPIO_AC_PRESENT            NAMED_GPIO(acok_od)
#define GPIO_CPU_PROCHOT           NAMED_GPIO(ec_prochot_odl)
#define GPIO_EC_ALS_RGB_INT_L      NAMED_GPIO(ec_als_rgb_int_l)
#define GPIO_EC_BATT_PRES_ODL      NAMED_GPIO(ec_batt_pres_odl)
#define GPIO_EC_INT_L              NAMED_GPIO(ec_pch_int_odl)
#define GPIO_EC_IMU_INT_L          NAMED_GPIO(ec_imu_int_l)
#define GPIO_EC_PCH_SYS_PWROK      NAMED_GPIO(ec_pch_sys_pwrok)
#define GPIO_EC_PCH_WAKE_ODL       NAMED_GPIO(ec_pch_wake_odl)
#define GPIO_EC_WP_L               NAMED_GPIO(ec_wp_l)
#define GPIO_EN_PP3300_A           NAMED_GPIO(en_pp3300_a)
#define GPIO_EN_PP5000             NAMED_GPIO(en_pp5000_a)
#define GPIO_EN_PP5000_A           NAMED_GPIO(en_pp5000_a)
#define GPIO_EN_PPVAR_VCCIN        NAMED_GPIO(en_ppvar_vccin)
#define GPIO_ENABLE_BACKLIGHT      NAMED_GPIO(ec_edp_bl_en)
#define GPIO_ENTERING_RW           NAMED_GPIO(ec_entering_rw)
#define GPIO_KBD_KSO2              NAMED_GPIO(ec_kso_02_inv)
#define GPIO_LID_OPEN              NAMED_GPIO(ec_lid_open)
#define GPIO_PACKET_MODE_EN        NAMED_GPIO(ec_h1_packet_mode)
#define GPIO_PCH_DSW_PWROK         NAMED_GPIO(ec_pch_dsw_pwrok)
#define GPIO_PCH_PWRBTN_L          NAMED_GPIO(ec_pch_pwr_btn_odl)
#define GPIO_PCH_RSMRST_L          NAMED_GPIO(ec_pch_rsmrst_odl)
#define GPIO_PCH_RTCRST            NAMED_GPIO(ec_pch_rtcrst)
#define GPIO_PCH_SLP_S0_L          NAMED_GPIO(slp_s0_l)
#define GPIO_PCH_SLP_S3_L          NAMED_GPIO(slp_s3_l)
#define GPIO_PCH_SLP_SUS_L         NAMED_GPIO(slp_sus_l)
#define GPIO_PG_EC_ALL_SYS_PWRGD   NAMED_GPIO(pg_ec_all_sys_pwrgd)
#define GPIO_PG_EC_DSW_PWROK       NAMED_GPIO(pg_ec_dsw_pwrok)
#define GPIO_PG_EC_RSMRST_ODL      NAMED_GPIO(pg_ec_rsmrst_odl)
#define GPIO_POWER_BUTTON_L        NAMED_GPIO(h1_ec_pwr_btn_odl)
#define GPIO_RSMRST_L_PGOOD        NAMED_GPIO(pg_ec_rsmrst_odl)
#define GPIO_SLP_SUS_L             NAMED_GPIO(slp_sus_l)
#define GPIO_SYS_RESET_L           NAMED_GPIO(sys_rst_odl)
#define GPIO_TABLET_MODE_L         NAMED_GPIO(tablet_mode_l)
#define GPIO_VOLUME_DOWN_L         NAMED_GPIO(ec_voldn_btn_odl)
#define GPIO_VOLUME_UP_L           NAMED_GPIO(ec_volup_btn_odl)
#define GPIO_WP_L                  NAMED_GPIO(ec_wp_l)
#define CONFIG_TEMP_SENSOR_POWER_GPIO NAMED_GPIO(pg_ec_dsw_pwrok)

/* USB-C interrupts */
#define GPIO_USB_C0_TCPC_INT_ODL   NAMED_GPIO(usb_c0_tcpc_int_odl)
#define GPIO_USB_C1_TCPC_INT_ODL   NAMED_GPIO(usb_c1_tcpc_int_odl)

#define GPIO_USB_C0_PPC_INT_ODL    NAMED_GPIO(usb_c0_ppc_int_odl)
#define GPIO_USB_C1_PPC_INT_ODL    NAMED_GPIO(usb_c1_ppc_int_odl)

#define GPIO_USB_C0_BC12_INT_ODL   NAMED_GPIO(usb_c0_bc12_int_odl)
#define GPIO_USB_C1_MIX_INT_ODL    NAMED_GPIO(usb_c1_mix_int_odl)

#define GPIO_USB_C0_OC_ODL         NAMED_GPIO(usb_c0_oc_odl)
#define GPIO_USB_C1_OC_ODL         NAMED_GPIO(usb_c1_oc_odl)

/* USB and USBC Signals */
#define GPIO_EN_PP5000_USBA        NAMED_GPIO(en_pp5000_usba)
#define GPIO_USB_C1_FRS_EN         NAMED_GPIO(usb_c1_frs_en)
#define GPIO_USB_C1_RT_RST_ODL \
	NAMED_GPIO_NODELABEL(usb_c1_bb_retimer, reset_gpios)

/* Fan control */
#define GPIO_EN_PP5000_FAN         NAMED_GPIO(en_pp5000_fan)

/* Don't have a load switch for retimer */
/* TODO(b/176559881): How to do unimplemented GPIOs? */
#define GPIO_USB_C1_LS_EN \
	NAMED_GPIO_NODELABEL(usb_c1_bb_retimer, ls_en_gpios)

#define GPIO_USB_C1_BC12_INT_ODL   GPIO_USB_C1_MIX_INT_ODL

#define GPIO_EC_PROCHOT_IN_L       NAMED_GPIO(ec_prochot_in_l)

/* Helper macros for generating CROS_EC_GPIO_INTERRUPTS */
#ifdef CONFIG_PLATFORM_EC_POWERSEQ
#define POWER_SIGNAL_INT(gpio, edge) \
	GPIO_INT(gpio, edge, power_signal_interrupt)
#define AP_PROCHOT_INT(gpio, edge) \
	GPIO_INT(gpio, edge, throttle_ap_prochot_input_interrupt)
#define POWER_BUTTON_INT(gpio, edge) \
	GPIO_INT(gpio, edge, power_button_interrupt)
#else
#define POWER_SIGNAL_INT(gpio, edge)
#define AP_PROCHOT_INT(gpio, edge)
#define POWER_BUTTON_INT(gpio, edge)
#endif

#ifdef CONFIG_PLATFORM_EC_USBC
#define TCPC_ALERT_INT(gpio, edge) GPIO_INT(gpio, edge, tcpc_alert_event)
#define PPC_INT(gpio, edge) GPIO_INT(gpio, edge, ppc_interrupt)
#define BC12_INT(gpio, edge) GPIO_INT(gpio, edge, bc12_interrupt)
#else
#define TCPC_ALERT_INT(gpio, edge)
#define PPC_INT(gpio, edge)
#define BC12_INT(gpio, edge)
#endif

#ifdef CONFIG_PLATFORM_EC_ALS_TCS3400
#define TCS3400_INT(gpio, edge) GPIO_INT(gpio, edge, tcs3400_interrupt)
#else
#define TCS3400_INT(gpio, edge)
#endif

#ifdef CONFIG_PLATFORM_EC_ACCELGYRO_BMI260
#define BMI260_INT(gpio, edge) GPIO_INT(gpio, edge, bmi260_interrupt)
#else
#define BMI260_INT(gpio, edge)
#endif

#ifdef CONFIG_PLATFORM_EC_GMR_TABLET_MODE
#define GMR_TABLET_MODE_INT(gpio, edge) GPIO_INT(gpio, edge, \
						 gmr_tablet_switch_isr)
#define GMR_TABLET_MODE_GPIO_L	GPIO_TABLET_MODE_L
#else
#define GMR_TABLET_MODE_INT(gpio, edge)
#endif

/*
 * Set EC_CROS_GPIO_INTERRUPTS to a space-separated list of GPIO_INT items.
 *
 * Each GPIO_INT requires three parameters:
 *   gpio_signal - The enum gpio_signal for the interrupt gpio
 *   interrupt_flags - The interrupt-related flags (e.g. GPIO_INT_EDGE_BOTH)
 *   handler - The platform/ec interrupt handler.
 *
 * Ensure that this files includes all necessary headers to declare all
 * referenced handler functions.
 *
 * For example, one could use the follow definition:
 * #define EC_CROS_GPIO_INTERRUPTS \
 *   GPIO_INT(NAMED_GPIO(h1_ec_pwr_btn_odl), GPIO_INT_EDGE_BOTH, button_print)
 */
#define EC_CROS_GPIO_INTERRUPTS                                           \
	BMI260_INT(GPIO_EC_IMU_INT_L, GPIO_INT_EDGE_FALLING)              \
	GMR_TABLET_MODE_INT(GPIO_TABLET_MODE_L, GPIO_INT_EDGE_BOTH)       \
	GPIO_INT(GPIO_AC_PRESENT, GPIO_INT_EDGE_BOTH, extpower_interrupt) \
	GPIO_INT(GPIO_LID_OPEN, GPIO_INT_EDGE_BOTH, lid_interrupt)        \
	GPIO_INT(GPIO_EC_WP_L, GPIO_INT_EDGE_BOTH, switch_interrupt)      \
	POWER_SIGNAL_INT(GPIO_PCH_SLP_S0_L, GPIO_INT_EDGE_BOTH)           \
	POWER_SIGNAL_INT(GPIO_PCH_SLP_S3_L, GPIO_INT_EDGE_BOTH)           \
	POWER_SIGNAL_INT(GPIO_PCH_SLP_SUS_L, GPIO_INT_EDGE_BOTH)          \
	POWER_SIGNAL_INT(GPIO_PG_EC_DSW_PWROK, GPIO_INT_EDGE_BOTH)        \
	POWER_SIGNAL_INT(GPIO_PG_EC_RSMRST_ODL, GPIO_INT_EDGE_BOTH)       \
	POWER_SIGNAL_INT(GPIO_PCH_DSW_PWROK, GPIO_INT_EDGE_BOTH)          \
	POWER_SIGNAL_INT(GPIO_PG_EC_ALL_SYS_PWRGD, GPIO_INT_EDGE_BOTH)    \
	POWER_BUTTON_INT(GPIO_POWER_BUTTON_L, GPIO_INT_EDGE_BOTH)         \
	TCPC_ALERT_INT(GPIO_USB_C0_TCPC_INT_ODL, GPIO_INT_EDGE_BOTH)      \
	TCPC_ALERT_INT(GPIO_USB_C1_TCPC_INT_ODL, GPIO_INT_EDGE_BOTH)      \
	TCS3400_INT(GPIO_EC_ALS_RGB_INT_L, GPIO_INT_EDGE_FALLING)         \
	PPC_INT(GPIO_USB_C0_PPC_INT_ODL, GPIO_INT_EDGE_BOTH)              \
	PPC_INT(GPIO_USB_C1_PPC_INT_ODL, GPIO_INT_EDGE_BOTH)              \
	BC12_INT(GPIO_USB_C0_BC12_INT_ODL, GPIO_INT_EDGE_BOTH)            \
	BC12_INT(GPIO_USB_C1_MIX_INT_ODL, GPIO_INT_EDGE_BOTH)             \
	AP_PROCHOT_INT(GPIO_EC_PROCHOT_IN_L, GPIO_INT_EDGE_BOTH)

#endif /* __ZEPHYR_GPIO_MAP_H */