Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / pinctrl / berlin / berlin.h
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 */