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