xref: /linux/drivers/pinctrl/meson/pinctrl-meson8-pmx.h (revision be709d48329a500621d2a05835283150ae137b45)
1 /*
2  * First generation of pinmux driver for Amlogic Meson SoCs
3  *
4  * Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
5  * Copyright (C) 2017 Jerome Brunet  <jbrunet@baylibre.com>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * version 2 as published by the Free Software Foundation.
10  *
11  * You should have received a copy of the GNU General Public License
12  * along with this program. If not, see <http://www.gnu.org/licenses/>.
13  */
14 
15 struct meson8_pmx_data {
16 	bool is_gpio;
17 	unsigned int reg;
18 	unsigned int bit;
19 };
20 
21 #define PMX_DATA(r, b, g)						\
22 	{								\
23 		.reg = r,						\
24 		.bit = b,						\
25 		.is_gpio = g,						\
26 	}
27 
28 #define GROUP(grp, r, b)						\
29 	{								\
30 		.name = #grp,						\
31 		.pins = grp ## _pins,					\
32 		.num_pins = ARRAY_SIZE(grp ## _pins),			\
33 		.data = (const struct meson8_pmx_data[]){		\
34 			PMX_DATA(r, b, false),				\
35 		},							\
36 	 }
37 
38 #define GPIO_GROUP(gpio)						\
39 	{								\
40 		.name = #gpio,						\
41 		.pins = (const unsigned int[]){ gpio },			\
42 		.num_pins = 1,						\
43 		.data = (const struct meson8_pmx_data[]){		\
44 			PMX_DATA(0, 0, true),				\
45 		},							\
46 	}
47 
48 extern const struct pinmux_ops meson8_pmx_ops;
49