hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/* 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 */