/ src / piolib / include / hardware / gpio.h
gpio.h
 1  // SPDX-License-Identifier: GPL-2.0
 2  /*
 3   * Copyright (c) 2024 Raspberry Pi Ltd.
 4   * All rights reserved.
 5   */
 6  #ifndef _HARDWARE_GPIO_H
 7  #define _HARDWARE_GPIO_H
 8  
 9  #include "pio_platform.h"
10  
11  #ifndef PARAM_ASSERTIONS_ENABLED_GPIO
12  #define PARAM_ASSERTIONS_ENABLED_GPIO 0
13  #endif
14  
15  #define NUM_BANK0_GPIOS 32
16  
17  enum gpio_function {
18      GPIO_FUNC_XIP = 0,
19      GPIO_FUNC_SPI = 1,
20      GPIO_FUNC_UART = 2,
21      GPIO_FUNC_I2C = 3,
22      GPIO_FUNC_PWM = 4,
23      GPIO_FUNC_SIO = 5,
24      GPIO_FUNC_PIO0 = 6,
25      GPIO_FUNC_PIO1 = 7,
26      GPIO_FUNC_GPCK = 8,
27      GPIO_FUNC_USB = 9,
28      GPIO_FUNC_NULL = 0x1f,
29  };
30  
31  #define GPIO_OUT 1
32  #define GPIO_IN 0
33  
34  enum gpio_irq_level {
35      GPIO_IRQ_LEVEL_LOW = 0x1u,
36      GPIO_IRQ_LEVEL_HIGH = 0x2u,
37      GPIO_IRQ_EDGE_FALL = 0x4u,
38      GPIO_IRQ_EDGE_RISE = 0x8u,
39  };
40  
41  enum gpio_override {
42      GPIO_OVERRIDE_NORMAL =
43          0, ///< peripheral signal selected via \ref gpio_set_function
44      GPIO_OVERRIDE_INVERT =
45          1, ///< invert peripheral signal selected via \ref gpio_set_function
46      GPIO_OVERRIDE_LOW = 2,  ///< drive low/disable output
47      GPIO_OVERRIDE_HIGH = 3, ///< drive high/enable output
48  };
49  enum gpio_slew_rate {
50      GPIO_SLEW_RATE_SLOW = 0, ///< Slew rate limiting enabled
51      GPIO_SLEW_RATE_FAST = 1  ///< Slew rate limiting disabled
52  };
53  
54  enum gpio_drive_strength {
55      GPIO_DRIVE_STRENGTH_2MA = 0, ///< 2 mA nominal drive strength
56      GPIO_DRIVE_STRENGTH_4MA = 1, ///< 4 mA nominal drive strength
57      GPIO_DRIVE_STRENGTH_8MA = 2, ///< 8 mA nominal drive strength
58      GPIO_DRIVE_STRENGTH_12MA = 3 ///< 12 mA nominal drive strength
59  };
60  
61  static inline void check_gpio_param(__unused uint gpio) {
62      invalid_params_if(GPIO, gpio >= NUM_BANK0_GPIOS);
63  }
64  
65  #endif