18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * First generation of pinmux driver for Amlogic Meson SoCs
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
68c2ecf20Sopenharmony_ci * Copyright (C) 2017 Jerome Brunet  <jbrunet@baylibre.com>
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cistruct meson8_pmx_data {
108c2ecf20Sopenharmony_ci	bool is_gpio;
118c2ecf20Sopenharmony_ci	unsigned int reg;
128c2ecf20Sopenharmony_ci	unsigned int bit;
138c2ecf20Sopenharmony_ci};
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define PMX_DATA(r, b, g)						\
168c2ecf20Sopenharmony_ci	{								\
178c2ecf20Sopenharmony_ci		.reg = r,						\
188c2ecf20Sopenharmony_ci		.bit = b,						\
198c2ecf20Sopenharmony_ci		.is_gpio = g,						\
208c2ecf20Sopenharmony_ci	}
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci#define GROUP(grp, r, b)						\
238c2ecf20Sopenharmony_ci	{								\
248c2ecf20Sopenharmony_ci		.name = #grp,						\
258c2ecf20Sopenharmony_ci		.pins = grp ## _pins,					\
268c2ecf20Sopenharmony_ci		.num_pins = ARRAY_SIZE(grp ## _pins),			\
278c2ecf20Sopenharmony_ci		.data = (const struct meson8_pmx_data[]){		\
288c2ecf20Sopenharmony_ci			PMX_DATA(r, b, false),				\
298c2ecf20Sopenharmony_ci		},							\
308c2ecf20Sopenharmony_ci	 }
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci#define GPIO_GROUP(gpio)						\
338c2ecf20Sopenharmony_ci	{								\
348c2ecf20Sopenharmony_ci		.name = #gpio,						\
358c2ecf20Sopenharmony_ci		.pins = (const unsigned int[]){ gpio },			\
368c2ecf20Sopenharmony_ci		.num_pins = 1,						\
378c2ecf20Sopenharmony_ci		.data = (const struct meson8_pmx_data[]){		\
388c2ecf20Sopenharmony_ci			PMX_DATA(0, 0, true),				\
398c2ecf20Sopenharmony_ci		},							\
408c2ecf20Sopenharmony_ci	}
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciextern const struct pinmux_ops meson8_pmx_ops;
43