1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Marvell Berlin SoC pinctrl driver. |
4 | * |
5 | * Copyright (C) 2014 Marvell Technology Group Ltd. |
6 | * |
7 | * Antoine Ténart <antoine.tenart@free-electrons.com> |
8 | */ |
9 | |
10 | #ifndef __PINCTRL_BERLIN_H |
11 | #define __PINCTRL_BERLIN_H |
12 | |
13 | struct berlin_desc_function { |
14 | const char *name; |
15 | u8 muxval; |
16 | }; |
17 | |
18 | struct berlin_desc_group { |
19 | const char *name; |
20 | u8 offset; |
21 | u8 bit_width; |
22 | u8 lsb; |
23 | struct berlin_desc_function *functions; |
24 | }; |
25 | |
26 | struct berlin_pinctrl_desc { |
27 | const struct berlin_desc_group *groups; |
28 | unsigned ngroups; |
29 | }; |
30 | |
31 | struct berlin_pinctrl_function { |
32 | const char *name; |
33 | const char **groups; |
34 | unsigned ngroups; |
35 | }; |
36 | |
37 | #define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...) \ |
38 | { \ |
39 | .name = _name, \ |
40 | .offset = _offset, \ |
41 | .bit_width = _width, \ |
42 | .lsb = _lsb, \ |
43 | .functions = (struct berlin_desc_function[]){ \ |
44 | __VA_ARGS__, { } }, \ |
45 | } |
46 | |
47 | #define BERLIN_PINCTRL_FUNCTION(_muxval, _name) \ |
48 | { \ |
49 | .name = _name, \ |
50 | .muxval = _muxval, \ |
51 | } |
52 | |
53 | #define BERLIN_PINCTRL_FUNCTION_UNKNOWN {} |
54 | |
55 | int berlin_pinctrl_probe(struct platform_device *pdev, |
56 | const struct berlin_pinctrl_desc *desc); |
57 | |
58 | int berlin_pinctrl_probe_regmap(struct platform_device *pdev, |
59 | const struct berlin_pinctrl_desc *desc, |
60 | struct regmap *regmap); |
61 | |
62 | #endif /* __PINCTRL_BERLIN_H */ |
63 | |