xref: /rk3399_ARM-atf/plat/mediatek/mt8189/drivers/gpio/mtgpio.c (revision 6ffda26bd0b90ea62a254006947b5f616a6ebcea)
1*cecbb93cSCathy Xu /*
2*cecbb93cSCathy Xu  * Copyright (c) 2025, MediaTek Inc. All rights reserved.
3*cecbb93cSCathy Xu  *
4*cecbb93cSCathy Xu  * SPDX-License-Identifier: BSD-3-Clause
5*cecbb93cSCathy Xu  */
6*cecbb93cSCathy Xu 
7*cecbb93cSCathy Xu #include <assert.h>
8*cecbb93cSCathy Xu 
9*cecbb93cSCathy Xu #include <mtgpio.h>
10*cecbb93cSCathy Xu #include <platform_def.h>
11*cecbb93cSCathy Xu 
12*cecbb93cSCathy Xu typedef enum {
13*cecbb93cSCathy Xu 	REG_0 = 0,
14*cecbb93cSCathy Xu 	REG_1,
15*cecbb93cSCathy Xu 	REG_2,
16*cecbb93cSCathy Xu 	REG_3,
17*cecbb93cSCathy Xu 	REG_4,
18*cecbb93cSCathy Xu 	REG_5,
19*cecbb93cSCathy Xu 	REG_6,
20*cecbb93cSCathy Xu 	REG_7,
21*cecbb93cSCathy Xu 	REG_8
22*cecbb93cSCathy Xu } RegEnum;
23*cecbb93cSCathy Xu 
mt_gpio_find_reg_addr(uint32_t pin)24*cecbb93cSCathy Xu uintptr_t mt_gpio_find_reg_addr(uint32_t pin)
25*cecbb93cSCathy Xu {
26*cecbb93cSCathy Xu 	uintptr_t reg_addr = 0U;
27*cecbb93cSCathy Xu 	struct mt_pin_info gpio_info;
28*cecbb93cSCathy Xu 
29*cecbb93cSCathy Xu 	assert(pin < MAX_GPIO_PIN);
30*cecbb93cSCathy Xu 
31*cecbb93cSCathy Xu 	gpio_info = mt_pin_infos[pin];
32*cecbb93cSCathy Xu 
33*cecbb93cSCathy Xu 	switch (gpio_info.base & 0xF) {
34*cecbb93cSCathy Xu 	case REG_0:
35*cecbb93cSCathy Xu 		reg_addr = IOCFG_LM_BASE;
36*cecbb93cSCathy Xu 		break;
37*cecbb93cSCathy Xu 	case REG_1:
38*cecbb93cSCathy Xu 		reg_addr = IOCFG_RB0_BASE;
39*cecbb93cSCathy Xu 		break;
40*cecbb93cSCathy Xu 	case REG_2:
41*cecbb93cSCathy Xu 		reg_addr = IOCFG_RB1_BASE;
42*cecbb93cSCathy Xu 		break;
43*cecbb93cSCathy Xu 	case REG_3:
44*cecbb93cSCathy Xu 		reg_addr = IOCFG_BM0_BASE;
45*cecbb93cSCathy Xu 		break;
46*cecbb93cSCathy Xu 	case REG_4:
47*cecbb93cSCathy Xu 		reg_addr = IOCFG_BM1_BASE;
48*cecbb93cSCathy Xu 		break;
49*cecbb93cSCathy Xu 	case REG_5:
50*cecbb93cSCathy Xu 		reg_addr = IOCFG_BM2_BASE;
51*cecbb93cSCathy Xu 		break;
52*cecbb93cSCathy Xu 	case REG_6:
53*cecbb93cSCathy Xu 		reg_addr = IOCFG_LT0_BASE;
54*cecbb93cSCathy Xu 		break;
55*cecbb93cSCathy Xu 	case REG_7:
56*cecbb93cSCathy Xu 		reg_addr = IOCFG_LT1_BASE;
57*cecbb93cSCathy Xu 		break;
58*cecbb93cSCathy Xu 	case REG_8:
59*cecbb93cSCathy Xu 		reg_addr = IOCFG_RT_BASE;
60*cecbb93cSCathy Xu 		break;
61*cecbb93cSCathy Xu 	default:
62*cecbb93cSCathy Xu 		break;
63*cecbb93cSCathy Xu 	}
64*cecbb93cSCathy Xu 
65*cecbb93cSCathy Xu 	return reg_addr;
66*cecbb93cSCathy Xu }
67