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: BSD-3-Clause */
2 
3 #include <device/mmio.h>
4 #include <gpio.h>
5 #include <soc/iomap.h>
6 
7 /*******************************************************
8 Function description: check for invalid GPIO #
9 Arguments :
10 gpio_t gpio - Gpio number
11 
12 Return : GPIO Valid(0)/Invalid(1)
13 *******************************************************/
14 
15 static inline int gpio_not_valid(gpio_t gpio)
16 {
17  return (gpio > GPIO_MAX_NUM);
18 }
19 
20 /*******************************************************
21 Function description: configure GPIO functionality
22 Arguments :
23 gpio_t gpio - Gpio number
24 unsigned func - Functionality number
25 unsigned pull - pull up/down, no pull range(0-3)
26 unsigned drvstr - range (0 - 7)-> (2- 16)MA steps of 2
27 unsigned enable - 0 Disable, 1 - Enable.
28 
29 Return : None
30 *******************************************************/
31 
32 void gpio_tlmm_config_set(gpio_t gpio, unsigned int func,
33  unsigned int pull, unsigned int drvstr,
34  unsigned int enable)
35 {
36  unsigned int val = 0;
37 
38  if (gpio_not_valid(gpio))
39  return;
40 
43  val |= (drvstr & GPIO_CFG_DRV_MASK) << GPIO_CFG_DRV_SHIFT;
44  val |= (enable & GPIO_CFG_OE_MASK) << GPIO_CFG_OE_SHIFT;
45 
47 }
48 
49 /*******************************************************
50 Function description: Get GPIO configuration
51 Arguments :
52 gpio_t gpio - Gpio number
53 unsigned *func - Functionality number
54 unsigned *pull - pull up/down, no pull range(0-3)
55 unsigned *drvstr - range (0 - 7)-> (2- 16)MA steps of 2
56 unsigned *enable - 0 - Disable, 1- Enable.
57 
58 Return : None
59 *******************************************************/
60 
61 void gpio_tlmm_config_get(gpio_t gpio, unsigned int *func,
62  unsigned int *pull, unsigned int *drvstr,
63  unsigned int *enable)
64 {
65  unsigned int val;
66  void *addr = GPIO_CONFIG_ADDR(gpio);
67 
68  if (gpio_not_valid(gpio))
69  return;
70 
71  val = read32(addr);
72 
75  *drvstr = (val >> GPIO_CFG_DRV_SHIFT) & GPIO_CFG_DRV_MASK;
76  *enable = (val >> GPIO_CFG_OE_SHIFT) & GPIO_CFG_OE_MASK;
77 }
78 
79 /*******************************************************
80 Function description: get GPIO IO functionality details
81 Arguments :
82 gpio_t gpio - Gpio number
83 unsigned *in - Value of GPIO input
84 unsigned *out - Value of GPIO output
85 
86 Return : None
87 *******************************************************/
89 {
90  if (gpio_not_valid(gpio))
91  return -1;
92 
95 }
96 
98 {
99  if (gpio_not_valid(gpio))
100  return;
101 
103 }
104 
106 {
109 }
110 
112 {
115 }
116 
118 {
121 }
pte_t value
Definition: mmu.c:91
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
static uint32_t read32(const void *addr)
Definition: mmio.h:22
#define pull
Definition: asmlib.h:26
static u32 addr
Definition: cirrus.c:14
@ GPIO_2MA
Definition: gpio_common.h:70
@ GPIO_NO_PULL
Definition: gpio_common.h:62
#define GPIO_CONFIG_ADDR(x)
Definition: iomap.h:66
#define GPIO_IN_OUT_ADDR(x)
Definition: iomap.h:67
void gpio_set(gpio_t gpio_num, int value)
Definition: gpio.c:174
int gpio_get(gpio_t gpio_num)
Definition: gpio.c:166
void gpio_input_pullup(gpio_t gpio_num)
Definition: gpio.c:184
void gpio_input_pulldown(gpio_t gpio_num)
Definition: gpio.c:179
void gpio_input(gpio_t gpio_num)
Definition: gpio.c:189
void gpio_tlmm_config_set(gpio_t gpio, unsigned int func, unsigned int pull, unsigned int drvstr, unsigned int enable)
Definition: gpio.c:32
static int gpio_not_valid(gpio_t gpio)
Definition: gpio.c:15
void gpio_tlmm_config_get(gpio_t gpio, unsigned int *func, unsigned int *pull, unsigned int *drvstr, unsigned int *enable)
Definition: gpio.c:61
#define GPIO_CFG_DRV_MASK
Definition: gpio.h:46
#define GPIO_CFG_FUNC_MASK
Definition: gpio.h:45
#define GPIO_DISABLE
Definition: gpio.h:37
#define GPIO_IO_IN_SHIFT
Definition: gpio.h:66
#define GPIO_IO_OUT_SHIFT
Definition: gpio.h:67
#define GPIO_MAX_NUM
Definition: gpio.h:41
#define GPIO_CFG_PULL_MASK
Definition: gpio.h:44
#define GPIO_CFG_DRV_SHIFT
Definition: gpio.h:55
#define GPIO_PULL_UP
Definition: gpio.h:24
#define GPIO_FUNC_DISABLE
Definition: gpio.h:10
#define GPIO_CFG_FUNC_SHIFT
Definition: gpio.h:54
#define GPIO_CFG_OE_MASK
Definition: gpio.h:47
#define GPIO_PULL_DOWN
Definition: gpio.h:23
#define GPIO_CFG_OE_SHIFT
Definition: gpio.h:56
#define GPIO_CFG_PULL_SHIFT
Definition: gpio.h:53
#define GPIO_IO_IN_MASK
Definition: gpio.h:62
Definition: pinmux.c:36
u8 val
Definition: sys.c:300