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
13struct berlin_desc_function {
14 const char *name;
15 u8 muxval;
16};
17
18struct 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
26struct berlin_pinctrl_desc {
27 const struct berlin_desc_group *groups;
28 unsigned ngroups;
29};
30
31struct 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
55int berlin_pinctrl_probe(struct platform_device *pdev,
56 const struct berlin_pinctrl_desc *desc);
57
58int 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

source code of linux/drivers/pinctrl/berlin/berlin.h