1 /* 2 * (C) Copyright 2011 3 * Yuri Tikhonov, Emcraft Systems, yur@emcraft.com 4 * 5 * (C) Copyright 2015 6 * Kamil Lulko, <rev13@wp.pl> 7 * 8 * SPDX-License-Identifier: GPL-2.0+ 9 */ 10 11 #ifndef _STM32_GPIO_H_ 12 #define _STM32_GPIO_H_ 13 14 enum stm32_gpio_port { 15 STM32_GPIO_PORT_A = 0, 16 STM32_GPIO_PORT_B, 17 STM32_GPIO_PORT_C, 18 STM32_GPIO_PORT_D, 19 STM32_GPIO_PORT_E, 20 STM32_GPIO_PORT_F, 21 STM32_GPIO_PORT_G, 22 STM32_GPIO_PORT_H, 23 STM32_GPIO_PORT_I 24 }; 25 26 enum stm32_gpio_pin { 27 STM32_GPIO_PIN_0 = 0, 28 STM32_GPIO_PIN_1, 29 STM32_GPIO_PIN_2, 30 STM32_GPIO_PIN_3, 31 STM32_GPIO_PIN_4, 32 STM32_GPIO_PIN_5, 33 STM32_GPIO_PIN_6, 34 STM32_GPIO_PIN_7, 35 STM32_GPIO_PIN_8, 36 STM32_GPIO_PIN_9, 37 STM32_GPIO_PIN_10, 38 STM32_GPIO_PIN_11, 39 STM32_GPIO_PIN_12, 40 STM32_GPIO_PIN_13, 41 STM32_GPIO_PIN_14, 42 STM32_GPIO_PIN_15 43 }; 44 45 enum stm32_gpio_mode { 46 STM32_GPIO_MODE_IN = 0, 47 STM32_GPIO_MODE_OUT, 48 STM32_GPIO_MODE_AF, 49 STM32_GPIO_MODE_AN 50 }; 51 52 enum stm32_gpio_otype { 53 STM32_GPIO_OTYPE_PP = 0, 54 STM32_GPIO_OTYPE_OD 55 }; 56 57 enum stm32_gpio_speed { 58 STM32_GPIO_SPEED_2M = 0, 59 STM32_GPIO_SPEED_25M, 60 STM32_GPIO_SPEED_50M, 61 STM32_GPIO_SPEED_100M 62 }; 63 64 enum stm32_gpio_pupd { 65 STM32_GPIO_PUPD_NO = 0, 66 STM32_GPIO_PUPD_UP, 67 STM32_GPIO_PUPD_DOWN 68 }; 69 70 enum stm32_gpio_af { 71 STM32_GPIO_AF0 = 0, 72 STM32_GPIO_AF1, 73 STM32_GPIO_AF2, 74 STM32_GPIO_AF3, 75 STM32_GPIO_AF4, 76 STM32_GPIO_AF5, 77 STM32_GPIO_AF6, 78 STM32_GPIO_AF7, 79 STM32_GPIO_AF8, 80 STM32_GPIO_AF9, 81 STM32_GPIO_AF10, 82 STM32_GPIO_AF11, 83 STM32_GPIO_AF12, 84 STM32_GPIO_AF13, 85 STM32_GPIO_AF14, 86 STM32_GPIO_AF15 87 }; 88 89 struct stm32_gpio_dsc { 90 enum stm32_gpio_port port; 91 enum stm32_gpio_pin pin; 92 }; 93 94 struct stm32_gpio_ctl { 95 enum stm32_gpio_mode mode; 96 enum stm32_gpio_otype otype; 97 enum stm32_gpio_speed speed; 98 enum stm32_gpio_pupd pupd; 99 enum stm32_gpio_af af; 100 }; 101 102 static inline unsigned stm32_gpio_to_port(unsigned gpio) 103 { 104 return gpio / 16; 105 } 106 107 static inline unsigned stm32_gpio_to_pin(unsigned gpio) 108 { 109 return gpio % 16; 110 } 111 112 int stm32_gpio_config(const struct stm32_gpio_dsc *gpio_dsc, 113 const struct stm32_gpio_ctl *gpio_ctl); 114 int stm32_gpout_set(const struct stm32_gpio_dsc *gpio_dsc, int state); 115 116 #endif /* _STM32_GPIO_H_ */ 117