xref: /rk3399_ARM-atf/include/drivers/nxp/gpio/nxp_gpio.h (revision 87311b4c16730b884c7e4ff01e3faea83f2731be)
1*050a99a6SPankaj Gupta /*
2*050a99a6SPankaj Gupta  * Copyright 2021 NXP
3*050a99a6SPankaj Gupta  *
4*050a99a6SPankaj Gupta  * SPDX-License-Identifier: BSD-3-Clause
5*050a99a6SPankaj Gupta  *
6*050a99a6SPankaj Gupta  */
7*050a99a6SPankaj Gupta 
8*050a99a6SPankaj Gupta #ifndef PLAT_GPIO_H
9*050a99a6SPankaj Gupta #define PLAT_GPIO_H
10*050a99a6SPankaj Gupta 
11*050a99a6SPankaj Gupta #include <endian.h>
12*050a99a6SPankaj Gupta #include <lib/mmio.h>
13*050a99a6SPankaj Gupta 
14*050a99a6SPankaj Gupta /* GPIO Register offset */
15*050a99a6SPankaj Gupta #define GPIO_SEL_MASK		0x7F
16*050a99a6SPankaj Gupta #define GPIO_BIT_MASK		0x1F
17*050a99a6SPankaj Gupta #define GPDIR_REG_OFFSET	0x0
18*050a99a6SPankaj Gupta #define GPDAT_REG_OFFSET	0x8
19*050a99a6SPankaj Gupta 
20*050a99a6SPankaj Gupta #define GPIO_ID_BASE_ADDR_SHIFT 5U
21*050a99a6SPankaj Gupta #define GPIO_BITS_PER_BASE_REG	32U
22*050a99a6SPankaj Gupta 
23*050a99a6SPankaj Gupta #define GPIO_0			0
24*050a99a6SPankaj Gupta #define GPIO_1			1
25*050a99a6SPankaj Gupta #define GPIO_2			2
26*050a99a6SPankaj Gupta #define GPIO_3			3
27*050a99a6SPankaj Gupta 
28*050a99a6SPankaj Gupta #define GPIO_SUCCESS		0x0
29*050a99a6SPankaj Gupta #define GPIO_FAILURE		0x1
30*050a99a6SPankaj Gupta 
31*050a99a6SPankaj Gupta #ifdef NXP_GPIO_BE
32*050a99a6SPankaj Gupta #define gpio_read32(a)           bswap32(mmio_read_32((uintptr_t)(a)))
33*050a99a6SPankaj Gupta #define gpio_write32(a, v)       mmio_write_32((uintptr_t)(a), bswap32(v))
34*050a99a6SPankaj Gupta #elif defined(NXP_GPIO_LE)
35*050a99a6SPankaj Gupta #define gpio_read32(a)           mmio_read_32((uintptr_t)(a))
36*050a99a6SPankaj Gupta #define gpio_write32(a, v)       mmio_write_32((uintptr_t)(a), (v))
37*050a99a6SPankaj Gupta #else
38*050a99a6SPankaj Gupta #error Please define GPIO register endianness
39*050a99a6SPankaj Gupta #endif
40*050a99a6SPankaj Gupta 
41*050a99a6SPankaj Gupta typedef struct {
42*050a99a6SPankaj Gupta 	uintptr_t gpio1_base_addr;
43*050a99a6SPankaj Gupta 	uintptr_t gpio2_base_addr;
44*050a99a6SPankaj Gupta 	uintptr_t gpio3_base_addr;
45*050a99a6SPankaj Gupta 	uintptr_t gpio4_base_addr;
46*050a99a6SPankaj Gupta } gpio_init_info_t;
47*050a99a6SPankaj Gupta 
48*050a99a6SPankaj Gupta void gpio_init(gpio_init_info_t *gpio_init_data);
49*050a99a6SPankaj Gupta uint32_t *select_gpio_n_bitnum(uint32_t povdd_gpio, uint32_t *bit_num);
50*050a99a6SPankaj Gupta int clr_gpio_bit(uint32_t *gpio_base_addr, uint32_t bit_num);
51*050a99a6SPankaj Gupta int set_gpio_bit(uint32_t *gpio_base_addr, uint32_t bit_num);
52*050a99a6SPankaj Gupta 
53*050a99a6SPankaj Gupta #endif /* PLAT_GPIO_H */
54