1a7caba8aSNishad Kamdar /* SPDX-License-Identifier: GPL-2.0 */ 2aceb16dcSMaxime Coquelin /* 3aceb16dcSMaxime Coquelin * Copyright (C) Maxime Coquelin 2015 4e7c0e2f3SBenjamin Gaignard * Copyright (C) STMicroelectronics 2017 5aceb16dcSMaxime Coquelin * Author: Maxime Coquelin <mcoquelin.stm32@gmail.com> 6aceb16dcSMaxime Coquelin */ 7aceb16dcSMaxime Coquelin #ifndef __PINCTRL_STM32_H 8aceb16dcSMaxime Coquelin #define __PINCTRL_STM32_H 9aceb16dcSMaxime Coquelin 10aceb16dcSMaxime Coquelin #include <linux/pinctrl/pinctrl.h> 11aceb16dcSMaxime Coquelin #include <linux/pinctrl/pinconf-generic.h> 12aceb16dcSMaxime Coquelin 1338a3fbf1SMaxime Coquelin #define STM32_PIN_NO(x) ((x) << 8) 1438a3fbf1SMaxime Coquelin #define STM32_GET_PIN_NO(x) ((x) >> 8) 1538a3fbf1SMaxime Coquelin #define STM32_GET_PIN_FUNC(x) ((x) & 0xff) 1638a3fbf1SMaxime Coquelin 1738a3fbf1SMaxime Coquelin #define STM32_PIN_GPIO 0 1838a3fbf1SMaxime Coquelin #define STM32_PIN_AF(x) ((x) + 1) 1938a3fbf1SMaxime Coquelin #define STM32_PIN_ANALOG (STM32_PIN_AF(15) + 1) 2038a3fbf1SMaxime Coquelin 216918bf43SAlexandre Torgue /* package information */ 226918bf43SAlexandre Torgue #define STM32MP_PKG_AA BIT(0) 236918bf43SAlexandre Torgue #define STM32MP_PKG_AB BIT(1) 246918bf43SAlexandre Torgue #define STM32MP_PKG_AC BIT(2) 256918bf43SAlexandre Torgue #define STM32MP_PKG_AD BIT(3) 266918bf43SAlexandre Torgue 27aceb16dcSMaxime Coquelin struct stm32_desc_function { 28aceb16dcSMaxime Coquelin const char *name; 29aceb16dcSMaxime Coquelin const unsigned char num; 30aceb16dcSMaxime Coquelin }; 31aceb16dcSMaxime Coquelin 32aceb16dcSMaxime Coquelin struct stm32_desc_pin { 33aceb16dcSMaxime Coquelin struct pinctrl_pin_desc pin; 34aceb16dcSMaxime Coquelin const struct stm32_desc_function *functions; 35cc528862SAlexandre Torgue const unsigned int pkg; 36aceb16dcSMaxime Coquelin }; 37aceb16dcSMaxime Coquelin 38aceb16dcSMaxime Coquelin #define STM32_PIN(_pin, ...) \ 39aceb16dcSMaxime Coquelin { \ 40aceb16dcSMaxime Coquelin .pin = _pin, \ 41aceb16dcSMaxime Coquelin .functions = (struct stm32_desc_function[]){ \ 42aceb16dcSMaxime Coquelin __VA_ARGS__, { } }, \ 43aceb16dcSMaxime Coquelin } 44aceb16dcSMaxime Coquelin 45cc528862SAlexandre Torgue #define STM32_PIN_PKG(_pin, _pkg, ...) \ 46cc528862SAlexandre Torgue { \ 47cc528862SAlexandre Torgue .pin = _pin, \ 48cc528862SAlexandre Torgue .pkg = _pkg, \ 49cc528862SAlexandre Torgue .functions = (struct stm32_desc_function[]){ \ 50cc528862SAlexandre Torgue __VA_ARGS__, { } }, \ 51cc528862SAlexandre Torgue } 52aceb16dcSMaxime Coquelin #define STM32_FUNCTION(_num, _name) \ 53aceb16dcSMaxime Coquelin { \ 54aceb16dcSMaxime Coquelin .num = _num, \ 55aceb16dcSMaxime Coquelin .name = _name, \ 56aceb16dcSMaxime Coquelin } 57aceb16dcSMaxime Coquelin 58aceb16dcSMaxime Coquelin struct stm32_pinctrl_match_data { 59aceb16dcSMaxime Coquelin const struct stm32_desc_pin *pins; 60aceb16dcSMaxime Coquelin const unsigned int npins; 61aceb16dcSMaxime Coquelin }; 62aceb16dcSMaxime Coquelin 63acaa0379SAlexandre TORGUE struct stm32_gpio_bank; 64aceb16dcSMaxime Coquelin 65acaa0379SAlexandre TORGUE int stm32_pctl_probe(struct platform_device *pdev); 66acaa0379SAlexandre TORGUE void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, 67acaa0379SAlexandre TORGUE int pin, u32 *mode, u32 *alt); 68e2f3cf18SAlexandre Torgue int stm32_pinctrl_resume(struct device *dev); 69e2f3cf18SAlexandre Torgue 70aceb16dcSMaxime Coquelin #endif /* __PINCTRL_STM32_H */ 71aceb16dcSMaxime Coquelin 72