1aceb16dcSMaxime Coquelin /* 2aceb16dcSMaxime Coquelin * Copyright (C) Maxime Coquelin 2015 3aceb16dcSMaxime Coquelin * Author: Maxime Coquelin <mcoquelin.stm32@gmail.com> 4aceb16dcSMaxime Coquelin * License terms: GNU General Public License (GPL), version 2 5aceb16dcSMaxime Coquelin */ 6aceb16dcSMaxime Coquelin #ifndef __PINCTRL_STM32_H 7aceb16dcSMaxime Coquelin #define __PINCTRL_STM32_H 8aceb16dcSMaxime Coquelin 9aceb16dcSMaxime Coquelin #include <linux/pinctrl/pinctrl.h> 10aceb16dcSMaxime Coquelin #include <linux/pinctrl/pinconf-generic.h> 11aceb16dcSMaxime Coquelin 1238a3fbf1SMaxime Coquelin #define STM32_PIN_NO(x) ((x) << 8) 1338a3fbf1SMaxime Coquelin #define STM32_GET_PIN_NO(x) ((x) >> 8) 1438a3fbf1SMaxime Coquelin #define STM32_GET_PIN_FUNC(x) ((x) & 0xff) 1538a3fbf1SMaxime Coquelin 1638a3fbf1SMaxime Coquelin #define STM32_PIN_GPIO 0 1738a3fbf1SMaxime Coquelin #define STM32_PIN_AF(x) ((x) + 1) 1838a3fbf1SMaxime Coquelin #define STM32_PIN_ANALOG (STM32_PIN_AF(15) + 1) 1938a3fbf1SMaxime Coquelin 20aceb16dcSMaxime Coquelin struct stm32_desc_function { 21aceb16dcSMaxime Coquelin const char *name; 22aceb16dcSMaxime Coquelin const unsigned char num; 23aceb16dcSMaxime Coquelin }; 24aceb16dcSMaxime Coquelin 25aceb16dcSMaxime Coquelin struct stm32_desc_pin { 26aceb16dcSMaxime Coquelin struct pinctrl_pin_desc pin; 27aceb16dcSMaxime Coquelin const struct stm32_desc_function *functions; 28aceb16dcSMaxime Coquelin }; 29aceb16dcSMaxime Coquelin 30aceb16dcSMaxime Coquelin #define STM32_PIN(_pin, ...) \ 31aceb16dcSMaxime Coquelin { \ 32aceb16dcSMaxime Coquelin .pin = _pin, \ 33aceb16dcSMaxime Coquelin .functions = (struct stm32_desc_function[]){ \ 34aceb16dcSMaxime Coquelin __VA_ARGS__, { } }, \ 35aceb16dcSMaxime Coquelin } 36aceb16dcSMaxime Coquelin 37aceb16dcSMaxime Coquelin #define STM32_FUNCTION(_num, _name) \ 38aceb16dcSMaxime Coquelin { \ 39aceb16dcSMaxime Coquelin .num = _num, \ 40aceb16dcSMaxime Coquelin .name = _name, \ 41aceb16dcSMaxime Coquelin } 42aceb16dcSMaxime Coquelin 43aceb16dcSMaxime Coquelin struct stm32_pinctrl_match_data { 44aceb16dcSMaxime Coquelin const struct stm32_desc_pin *pins; 45aceb16dcSMaxime Coquelin const unsigned int npins; 46aceb16dcSMaxime Coquelin }; 47aceb16dcSMaxime Coquelin 48acaa0379SAlexandre TORGUE struct stm32_gpio_bank; 49aceb16dcSMaxime Coquelin 50acaa0379SAlexandre TORGUE int stm32_pctl_probe(struct platform_device *pdev); 51acaa0379SAlexandre TORGUE void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, 52acaa0379SAlexandre TORGUE int pin, u32 *mode, u32 *alt); 53aceb16dcSMaxime Coquelin #endif /* __PINCTRL_STM32_H */ 54aceb16dcSMaxime Coquelin 55