1*7c9dcfedSJerome Brunet /* SPDX-License-Identifier: GPL-2.0+ */
2*7c9dcfedSJerome Brunet /*
3*7c9dcfedSJerome Brunet  * Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
4*7c9dcfedSJerome Brunet  * Copyright (C) 2017 Jerome Brunet  <jbrunet@baylibre.com>
5*7c9dcfedSJerome Brunet  */
6*7c9dcfedSJerome Brunet 
7*7c9dcfedSJerome Brunet #ifndef __PINCTRL_MESON_GX_H__
8*7c9dcfedSJerome Brunet #define __PINCTRL_MESON_GX_H__
9*7c9dcfedSJerome Brunet 
10*7c9dcfedSJerome Brunet #include "pinctrl-meson.h"
11*7c9dcfedSJerome Brunet 
12*7c9dcfedSJerome Brunet struct meson_gx_pmx_data {
13*7c9dcfedSJerome Brunet 	bool is_gpio;
14*7c9dcfedSJerome Brunet 	unsigned int reg;
15*7c9dcfedSJerome Brunet 	unsigned int bit;
16*7c9dcfedSJerome Brunet };
17*7c9dcfedSJerome Brunet 
18*7c9dcfedSJerome Brunet #define PMX_DATA(r, b, g)						\
19*7c9dcfedSJerome Brunet 	{								\
20*7c9dcfedSJerome Brunet 		.reg = r,						\
21*7c9dcfedSJerome Brunet 		.bit = b,						\
22*7c9dcfedSJerome Brunet 		.is_gpio = g,						\
23*7c9dcfedSJerome Brunet 	}
24*7c9dcfedSJerome Brunet 
25*7c9dcfedSJerome Brunet #define GROUP(grp, r, b)						\
26*7c9dcfedSJerome Brunet 	{								\
27*7c9dcfedSJerome Brunet 		.name = #grp,						\
28*7c9dcfedSJerome Brunet 		.pins = grp ## _pins,					\
29*7c9dcfedSJerome Brunet 		.num_pins = ARRAY_SIZE(grp ## _pins),			\
30*7c9dcfedSJerome Brunet 			.data = (const struct meson_gx_pmx_data[]){	\
31*7c9dcfedSJerome Brunet 			PMX_DATA(r, b, false),				\
32*7c9dcfedSJerome Brunet 		},							\
33*7c9dcfedSJerome Brunet 	}
34*7c9dcfedSJerome Brunet 
35*7c9dcfedSJerome Brunet #define GPIO_GROUP(gpio, b)						\
36*7c9dcfedSJerome Brunet 	{								\
37*7c9dcfedSJerome Brunet 		.name = #gpio,						\
38*7c9dcfedSJerome Brunet 		.pins = (const unsigned int[]){ PIN(gpio, b) },		\
39*7c9dcfedSJerome Brunet 		.num_pins = 1,						\
40*7c9dcfedSJerome Brunet 		.data = (const struct meson_gx_pmx_data[]){		\
41*7c9dcfedSJerome Brunet 			PMX_DATA(0, 0, true),				\
42*7c9dcfedSJerome Brunet 		},							\
43*7c9dcfedSJerome Brunet 	}
44*7c9dcfedSJerome Brunet 
45*7c9dcfedSJerome Brunet extern const struct pinctrl_ops meson_gx_pinctrl_ops;
46*7c9dcfedSJerome Brunet extern const struct driver meson_gx_gpio_driver;
47*7c9dcfedSJerome Brunet 
48*7c9dcfedSJerome Brunet #endif /* __PINCTRL_MESON_GX_H__ */
49