Skip to content
Snippets Groups Projects
gpio.h 2.16 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * Copyright (C) 2016, STMicroelectronics - All Rights Reserved
     * Author(s): Vikas Manocha, <vikas.manocha@st.com> for STMicroelectronics.
     *
     * SPDX-License-Identifier:	GPL-2.0+
     */
    
    #ifndef _GPIO_H_
    #define _GPIO_H_
    
    enum stm32_gpio_port {
    	STM32_GPIO_PORT_A = 0,
    	STM32_GPIO_PORT_B,
    	STM32_GPIO_PORT_C,
    	STM32_GPIO_PORT_D,
    	STM32_GPIO_PORT_E,
    	STM32_GPIO_PORT_F,
    	STM32_GPIO_PORT_G,
    	STM32_GPIO_PORT_H,
    	STM32_GPIO_PORT_I
    };
    
    enum stm32_gpio_pin {
    	STM32_GPIO_PIN_0 = 0,
    	STM32_GPIO_PIN_1,
    	STM32_GPIO_PIN_2,
    	STM32_GPIO_PIN_3,
    	STM32_GPIO_PIN_4,
    	STM32_GPIO_PIN_5,
    	STM32_GPIO_PIN_6,
    	STM32_GPIO_PIN_7,
    	STM32_GPIO_PIN_8,
    	STM32_GPIO_PIN_9,
    	STM32_GPIO_PIN_10,
    	STM32_GPIO_PIN_11,
    	STM32_GPIO_PIN_12,
    	STM32_GPIO_PIN_13,
    	STM32_GPIO_PIN_14,
    	STM32_GPIO_PIN_15
    };
    
    enum stm32_gpio_mode {
    	STM32_GPIO_MODE_IN = 0,
    	STM32_GPIO_MODE_OUT,
    	STM32_GPIO_MODE_AF,
    	STM32_GPIO_MODE_AN
    };
    
    enum stm32_gpio_otype {
    	STM32_GPIO_OTYPE_PP = 0,
    	STM32_GPIO_OTYPE_OD
    };
    
    enum stm32_gpio_speed {
    	STM32_GPIO_SPEED_2M = 0,
    	STM32_GPIO_SPEED_25M,
    	STM32_GPIO_SPEED_50M,
    	STM32_GPIO_SPEED_100M
    };
    
    enum stm32_gpio_pupd {
    	STM32_GPIO_PUPD_NO = 0,
    	STM32_GPIO_PUPD_UP,
    	STM32_GPIO_PUPD_DOWN
    };
    
    enum stm32_gpio_af {
    	STM32_GPIO_AF0 = 0,
    	STM32_GPIO_AF1,
    	STM32_GPIO_AF2,
    	STM32_GPIO_AF3,
    	STM32_GPIO_AF4,
    	STM32_GPIO_AF5,
    	STM32_GPIO_AF6,
    	STM32_GPIO_AF7,
    	STM32_GPIO_AF8,
    	STM32_GPIO_AF9,
    	STM32_GPIO_AF10,
    	STM32_GPIO_AF11,
    	STM32_GPIO_AF12,
    	STM32_GPIO_AF13,
    	STM32_GPIO_AF14,
    	STM32_GPIO_AF15
    };
    
    struct stm32_gpio_dsc {
    	enum stm32_gpio_port	port;
    	enum stm32_gpio_pin	pin;
    };
    
    struct stm32_gpio_ctl {
    	enum stm32_gpio_mode	mode;
    	enum stm32_gpio_otype	otype;
    	enum stm32_gpio_speed	speed;
    	enum stm32_gpio_pupd	pupd;
    	enum stm32_gpio_af	af;
    };
    
    struct stm32_gpio_regs {
    	u32 moder;	/* GPIO port mode */
    	u32 otyper;	/* GPIO port output type */
    	u32 ospeedr;	/* GPIO port output speed */
    	u32 pupdr;	/* GPIO port pull-up/pull-down */
    	u32 idr;	/* GPIO port input data */
    	u32 odr;	/* GPIO port output data */
    	u32 bsrr;	/* GPIO port bit set/reset */
    	u32 lckr;	/* GPIO port configuration lock */
    	u32 afr[2];	/* GPIO alternate function */
    };
    
    struct stm32_gpio_priv {
    	struct stm32_gpio_regs *regs;
    };
    
    #endif /* _GPIO_H_ */