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 <device/mmio.h>
4 #include <assert.h>
5 #include <gpio.h>
6 #include <soc/gpio.h>
7 #include <soc/grf.h>
8 #include <soc/soc.h>
9 #include <types.h>
10 
11 static void gpio_set_dir(gpio_t gpio, enum gpio_dir dir)
12 {
14  1 << gpio.num, dir << gpio.num);
15 }
16 
18 {
19  u32 pull_val = gpio_get_pull_val(gpio, pull);
20  if (is_pmu_gpio(gpio) && CONFIG(SOC_ROCKCHIP_RK3288))
21  clrsetbits32(gpio_grf_reg(gpio), 3 << (gpio.idx * 2),
22  pull_val << (gpio.idx * 2));
23  else
24  write32(gpio_grf_reg(gpio), RK_CLRSETBITS(3 << (gpio.idx * 2),
25  pull_val << (gpio.idx * 2)));
26 }
27 
29 {
32 }
33 
35 {
38 }
39 
41 {
44 }
45 
47 {
48  uint32_t int_polarity, inttype_level;
49  uint32_t mask = BIT(gpio.num);
50 
51  /* gpio pull only PULLNONE, PULLUP, PULLDOWN status */
53 
56 
57  int_polarity = inttype_level = 0;
58  switch (type) {
60  int_polarity = mask;
61  inttype_level = mask;
62  break;
64  inttype_level = mask;
65  break;
67  int_polarity = mask;
68  break;
69  case IRQ_TYPE_LEVEL_LOW:
70  break;
71  }
73  mask, int_polarity);
75  mask, inttype_level);
76 
77  setbits32(&gpio_port[gpio.port]->inten, mask);
79 }
80 
82 {
83  uint32_t mask = BIT(gpio.num);
84  uint32_t int_status = read32(&gpio_port[gpio.port]->int_status);
85 
86  if (!(int_status & mask))
87  return 0;
88 
90  return 1;
91 }
92 
94 {
95  return (read32(&gpio_port[gpio.port]->ext_porta) >> gpio.num) & 0x1;
96 }
97 
99 {
100  clrsetbits32(&gpio_port[gpio.port]->swporta_dr, 1 << gpio.num,
101  !!value << gpio.num);
102 }
103 
105 {
106  gpio_set(gpio, value);
109 }
#define GPIO_OUTPUT
Definition: gpio_ftns.h:23
#define GPIO_INPUT
Definition: gpio_ftns.h:24
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
#define assert(statement)
Definition: assert.h:74
@ CONFIG
Definition: dsi_common.h:201
#define BIT(nr)
Definition: ec_commands.h:45
#define setbits32(addr, set)
Definition: mmio.h:21
#define clrsetbits32(addr, clear, set)
Definition: mmio.h:16
#define clrbits32(addr, clear)
Definition: mmio.h:26
unsigned int type
Definition: edid.c:57
gpio_irq_type
Definition: gpio_common.h:54
@ IRQ_TYPE_EDGE_RISING
Definition: gpio_common.h:55
@ IRQ_TYPE_EDGE_FALLING
Definition: gpio_common.h:56
@ IRQ_TYPE_LEVEL_HIGH
Definition: gpio_common.h:57
@ IRQ_TYPE_LEVEL_LOW
Definition: gpio_common.h:58
gpio_pull
Definition: gpio_common.h:61
#define RK_CLRSETBITS(clr, set)
Definition: soc.h:8
void gpio_set(gpio_t gpio_num, int value)
Definition: gpio.c:174
void gpio_output(gpio_t gpio_num, int value)
Definition: gpio.c:194
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
static const int mask[4]
Definition: gpio.c:308
void gpio_set_pull(gpio_t gpio, enum pull_enable enable, enum pull_select select)
Definition: gpio.c:17
void gpio_input_irq(gpio_t gpio, enum gpio_irq_type type, uint32_t pull)
Definition: gpio.c:65
int gpio_irq_status(gpio_t gpio)
Definition: gpio.c:79
static void gpio_set_dir(gpio_t gpio, enum gpio_dir dir)
Definition: gpio.c:11
gpio_dir
Definition: gpio.h:67
@ GPIO_PULLNONE
Definition: gpio.h:62
@ GPIO_PULLDOWN
Definition: gpio.h:64
@ GPIO_PULLUP
Definition: gpio.h:63
int is_pmu_gpio(gpio_t gpio)
Definition: gpio.c:24
u32 gpio_get_pull_val(gpio_t gpio, enum gpio_pull pull)
Definition: gpio.c:39
void * gpio_grf_reg(gpio_t gpio)
Definition: gpio.c:31
struct rockchip_gpio_regs * gpio_port[]
Definition: gpio.c:10
unsigned int uint32_t
Definition: stdint.h:14
uint32_t u32
Definition: stdint.h:51
Definition: pinmux.c:36
u32 int_polarity
Definition: gpio.h:17
u32 swporta_dr
Definition: gpio.h:11
u32 inttype_level
Definition: gpio.h:16
u32 swporta_ddr
Definition: gpio.h:12
u32 int_status
Definition: gpio.h:18