// SPDX-License-Identifier: GPL-2.0 /* * Copyright (C) Maxime Coquelin 2015 * Copyright (C) STMicroelectronics 2017 * Author: Maxime Coquelin <mcoquelin.stm32@gmail.com> */ #ifndef __PINCTRL_STM32_H #define __PINCTRL_STM32_H #include <linux/pinctrl/pinctrl.h> #include <linux/pinctrl/pinconf-generic.h> #define STM32_PIN_NO(x) ((x) << 8) #define STM32_GET_PIN_NO(x) ((x) >> 8) #define STM32_GET_PIN_FUNC(x) ((x) & 0xff) #define STM32_PIN_GPIO 0 #define STM32_PIN_AF(x) ((x) + 1) #define STM32_PIN_ANALOG (STM32_PIN_AF(15) + 1) /* package information */ #define STM32MP_PKG_AA BIT(0) #define STM32MP_PKG_AB BIT(1) #define STM32MP_PKG_AC BIT(2) #define STM32MP_PKG_AD BIT(3) struct stm32_desc_function { const char *name; const unsigned char num; }; struct stm32_desc_pin { struct pinctrl_pin_desc pin; const struct stm32_desc_function *functions; const unsigned int pkg; }; #define STM32_PIN(_pin, ...) \ { \ .pin = _pin, \ .functions = (struct stm32_desc_function[]){ \ __VA_ARGS__, { } }, \ } #define STM32_PIN_PKG(_pin, _pkg, ...) \ { \ .pin = _pin, \ .pkg = _pkg, \ .functions = (struct stm32_desc_function[]){ \ __VA_ARGS__, { } }, \ } #define STM32_FUNCTION(_num, _name) \ { \ .num = _num, \ .name = _name, \ } struct stm32_pinctrl_match_data { const struct stm32_desc_pin *pins; const unsigned int npins; }; struct stm32_gpio_bank; int stm32_pctl_probe(struct platform_device *pdev); void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, int pin, u32 *mode, u32 *alt); int stm32_pinctrl_resume(struct device *dev); #endif /* __PINCTRL_STM32_H */ |