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) 203296c473SFabien Dessenne #define STM32_CONFIG_NUM (STM32_PIN_ANALOG + 1) 2138a3fbf1SMaxime Coquelin 226918bf43SAlexandre Torgue /* package information */ 236918bf43SAlexandre Torgue #define STM32MP_PKG_AA BIT(0) 246918bf43SAlexandre Torgue #define STM32MP_PKG_AB BIT(1) 256918bf43SAlexandre Torgue #define STM32MP_PKG_AC BIT(2) 266918bf43SAlexandre Torgue #define STM32MP_PKG_AD BIT(3) 27*619f8ca4SAlexandre Torgue #define STM32MP_PKG_AI BIT(8) 28*619f8ca4SAlexandre Torgue #define STM32MP_PKG_AK BIT(10) 29*619f8ca4SAlexandre Torgue #define STM32MP_PKG_AL BIT(11) 306918bf43SAlexandre Torgue 31aceb16dcSMaxime Coquelin struct stm32_desc_function { 32aceb16dcSMaxime Coquelin const char *name; 33aceb16dcSMaxime Coquelin const unsigned char num; 34aceb16dcSMaxime Coquelin }; 35aceb16dcSMaxime Coquelin 36aceb16dcSMaxime Coquelin struct stm32_desc_pin { 37aceb16dcSMaxime Coquelin struct pinctrl_pin_desc pin; 383296c473SFabien Dessenne const struct stm32_desc_function functions[STM32_CONFIG_NUM]; 39cc528862SAlexandre Torgue const unsigned int pkg; 40aceb16dcSMaxime Coquelin }; 41aceb16dcSMaxime Coquelin 42aceb16dcSMaxime Coquelin #define STM32_PIN(_pin, ...) \ 43aceb16dcSMaxime Coquelin { \ 44aceb16dcSMaxime Coquelin .pin = _pin, \ 453296c473SFabien Dessenne .functions = { \ 463296c473SFabien Dessenne __VA_ARGS__}, \ 47aceb16dcSMaxime Coquelin } 48aceb16dcSMaxime Coquelin 49cc528862SAlexandre Torgue #define STM32_PIN_PKG(_pin, _pkg, ...) \ 50cc528862SAlexandre Torgue { \ 51cc528862SAlexandre Torgue .pin = _pin, \ 52cc528862SAlexandre Torgue .pkg = _pkg, \ 533296c473SFabien Dessenne .functions = { \ 543296c473SFabien Dessenne __VA_ARGS__}, \ 55cc528862SAlexandre Torgue } 56aceb16dcSMaxime Coquelin #define STM32_FUNCTION(_num, _name) \ 573296c473SFabien Dessenne [_num] = { \ 58aceb16dcSMaxime Coquelin .num = _num, \ 59aceb16dcSMaxime Coquelin .name = _name, \ 60aceb16dcSMaxime Coquelin } 61aceb16dcSMaxime Coquelin 62aceb16dcSMaxime Coquelin struct stm32_pinctrl_match_data { 63aceb16dcSMaxime Coquelin const struct stm32_desc_pin *pins; 64aceb16dcSMaxime Coquelin const unsigned int npins; 653389b098SFabien Dessenne bool secure_control; 66aceb16dcSMaxime Coquelin }; 67aceb16dcSMaxime Coquelin 68acaa0379SAlexandre TORGUE struct stm32_gpio_bank; 69aceb16dcSMaxime Coquelin 70acaa0379SAlexandre TORGUE int stm32_pctl_probe(struct platform_device *pdev); 71acaa0379SAlexandre TORGUE void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, 72acaa0379SAlexandre TORGUE int pin, u32 *mode, u32 *alt); 73c954531bSFabien Dessenne int stm32_pinctrl_suspend(struct device *dev); 74e2f3cf18SAlexandre Torgue int stm32_pinctrl_resume(struct device *dev); 75e2f3cf18SAlexandre Torgue 76aceb16dcSMaxime Coquelin #endif /* __PINCTRL_STM32_H */ 77aceb16dcSMaxime Coquelin 78