1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (c) 2020 TOSHIBA CORPORATION
4 * Copyright (c) 2020 Toshiba Electronic Devices & Storage Corporation
5 * Copyright (c) 2020 Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
6 */
7
8#ifndef __VISCONTI_PINCTRL_COMMON_H__
9#define __VISCONTI_PINCTRL_COMMON_H__
10
11struct pinctrl_pin_desc;
12
13/* PIN */
14#define VISCONTI_PINS(pins_name, ...) \
15 static const unsigned int pins_name ## _pins[] = { __VA_ARGS__ }
16
17struct visconti_desc_pin {
18 struct pinctrl_pin_desc pin;
19 unsigned int dsel_offset;
20 unsigned int dsel_shift;
21 unsigned int pude_offset;
22 unsigned int pudsel_offset;
23 unsigned int pud_shift;
24};
25
26#define VISCONTI_PIN(_pin, dsel, d_sh, pude, pudsel, p_sh) \
27{ \
28 .pin = _pin, \
29 .dsel_offset = dsel, \
30 .dsel_shift = d_sh, \
31 .pude_offset = pude, \
32 .pudsel_offset = pudsel, \
33 .pud_shift = p_sh, \
34}
35
36/* Group */
37#define VISCONTI_GROUPS(groups_name, ...) \
38 static const char * const groups_name ## _grps[] = { __VA_ARGS__ }
39
40struct visconti_mux {
41 unsigned int offset;
42 unsigned int mask;
43 unsigned int val;
44};
45
46struct visconti_pin_group {
47 const char *name;
48 const unsigned int *pins;
49 unsigned int nr_pins;
50 struct visconti_mux mux;
51};
52
53#define VISCONTI_PIN_GROUP(group_name, off, msk, v) \
54{ \
55 .name = __stringify(group_name) "_grp", \
56 .pins = group_name ## _pins, \
57 .nr_pins = ARRAY_SIZE(group_name ## _pins), \
58 .mux = { \
59 .offset = off, \
60 .mask = msk, \
61 .val = v, \
62 } \
63}
64
65/* MUX */
66struct visconti_pin_function {
67 const char *name;
68 const char * const *groups;
69 unsigned int nr_groups;
70};
71
72#define VISCONTI_PIN_FUNCTION(func) \
73{ \
74 .name = #func, \
75 .groups = func ## _grps, \
76 .nr_groups = ARRAY_SIZE(func ## _grps), \
77}
78
79/* chip dependent data */
80struct visconti_pinctrl_devdata {
81 const struct visconti_desc_pin *pins;
82 unsigned int nr_pins;
83 const struct visconti_pin_group *groups;
84 unsigned int nr_groups;
85 const struct visconti_pin_function *functions;
86 unsigned int nr_functions;
87
88 const struct visconti_mux *gpio_mux;
89
90 void (*unlock)(void __iomem *base);
91};
92
93int visconti_pinctrl_probe(struct platform_device *pdev,
94 const struct visconti_pinctrl_devdata *devdata);
95
96#endif /* __VISCONTI_PINCTRL_COMMON_H__ */
97

source code of linux/drivers/pinctrl/visconti/pinctrl-common.h