1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Simple GPIO access from SPL. This only supports a single GPIO space, 4 * typically the SoC GPIO banks. 5 * 6 * Copyright 2018 Google LLC 7 */ 8 9 #ifndef __SPL_GPIO_H 10 #define __SPL_GPIO_H 11 12 #include <asm/gpio.h> 13 14 /* 15 * The functions listed here should be implemented in the SoC GPIO driver. 16 * They correspond to the normal GPIO API (asm-generic/gpio.h). The GPIO 17 * number is encoded in an unsigned int by an SoC-specific means. Pull 18 * values are also SoC-specific. 19 * 20 * This API should only be used in TPL/SPL where GPIO access is needed but 21 * driver model is not available (yet) or adds too much overhead. 22 * 23 * The caller must supply the GPIO register base since this information is 24 * often specific to a particular SoC generation. This allows the GPIO 25 * code to be fairly generic. 26 * 27 * Only a single implementation of each of these functions can be provided. 28 * 29 * The 'gpio' value can include both a bank and a GPIO number, if desired. The 30 * encoding is SoC-specific. 31 */ 32 33 /** 34 * spl_gpio_set_pull() - Set the pull up/down state of a GPIO 35 * 36 * @regs: Pointer to GPIO registers 37 * @gpio: GPIO to adjust (SoC-specific) 38 * @pull: Pull value (SoC-specific) 39 * @return return 0 if OK, -ve on error 40 */ 41 int spl_gpio_set_pull(void *regs, uint gpio, int pull); 42 43 /** 44 * spl_gpio_output() - Set a GPIO as an output 45 * 46 * @regs: Pointer to GPIO registers 47 * @gpio: GPIO to adjust (SoC-specific) 48 * @value: 0 to set the output low, 1 to set it high 49 * @return return 0 if OK, -ve on error 50 */ 51 int spl_gpio_output(void *regs, uint gpio, int value); 52 53 /** 54 * spl_gpio_input() - Set a GPIO as an input 55 * 56 * @regs: Pointer to GPIO registers 57 * @gpio: GPIO to adjust (SoC-specific) 58 * @return return 0 if OK, -ve on error 59 */ 60 int spl_gpio_input(void *regs, uint gpio); 61 62 #endif /* __SPL_GPIO_H */ 63