blob: e9b30f95b03e3c72c68d0dd1ffa1957d930416c9 [file] [log] [blame]
Antoine Tenart3de68d32014-05-19 19:36:29 +02001/*
2 * Marvell Berlin SoC pinctrl driver.
3 *
4 * Copyright (C) 2014 Marvell Technology Group Ltd.
5 *
Antoine Ténart1d48fb6e2015-10-13 23:31:41 +02006 * Antoine Ténart <antoine.tenart@free-electrons.com>
Antoine Tenart3de68d32014-05-19 19:36:29 +02007 *
8 * This file is licensed under the terms of the GNU General Public
9 * License version 2. This program is licensed "as is" without any
10 * warranty of any kind, whether express or implied.
11 */
12
13#ifndef __PINCTRL_BERLIN_H
14#define __PINCTRL_BERLIN_H
15
16struct berlin_desc_function {
17 const char *name;
18 u8 muxval;
19};
20
21struct berlin_desc_group {
22 const char *name;
23 u8 offset;
24 u8 bit_width;
25 u8 lsb;
26 struct berlin_desc_function *functions;
27};
28
29struct berlin_pinctrl_desc {
30 const struct berlin_desc_group *groups;
31 unsigned ngroups;
32};
33
34struct berlin_pinctrl_function {
35 const char *name;
36 const char **groups;
37 unsigned ngroups;
38};
39
40#define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...) \
41 { \
42 .name = _name, \
43 .offset = _offset, \
44 .bit_width = _width, \
45 .lsb = _lsb, \
46 .functions = (struct berlin_desc_function[]){ \
47 __VA_ARGS__, { } }, \
48 }
49
50#define BERLIN_PINCTRL_FUNCTION(_muxval, _name) \
51 { \
52 .name = _name, \
53 .muxval = _muxval, \
54 }
55
56#define BERLIN_PINCTRL_FUNCTION_UNKNOWN {}
57
58int berlin_pinctrl_probe(struct platform_device *pdev,
59 const struct berlin_pinctrl_desc *desc);
60
Jisheng Zhangd5c79fc2015-10-16 15:37:06 +080061int berlin_pinctrl_probe_regmap(struct platform_device *pdev,
62 const struct berlin_pinctrl_desc *desc,
63 struct regmap *regmap);
64
Antoine Tenart3de68d32014-05-19 19:36:29 +020065#endif /* __PINCTRL_BERLIN_H */