18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (c) 2017 Baylibre SAS.
48c2ecf20Sopenharmony_ci * Author:  Jerome Brunet  <jbrunet@baylibre.com>
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * Copyright (c) 2017 Amlogic, Inc. All rights reserved.
78c2ecf20Sopenharmony_ci * Author: Xingyu Chen <xingyu.chen@amlogic.com>
88c2ecf20Sopenharmony_ci *
98c2ecf20Sopenharmony_ci */
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cistruct meson_pmx_bank {
128c2ecf20Sopenharmony_ci	const char *name;
138c2ecf20Sopenharmony_ci	unsigned int first;
148c2ecf20Sopenharmony_ci	unsigned int last;
158c2ecf20Sopenharmony_ci	unsigned int reg;
168c2ecf20Sopenharmony_ci	unsigned int offset;
178c2ecf20Sopenharmony_ci};
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_cistruct meson_axg_pmx_data {
208c2ecf20Sopenharmony_ci	struct meson_pmx_bank *pmx_banks;
218c2ecf20Sopenharmony_ci	unsigned int num_pmx_banks;
228c2ecf20Sopenharmony_ci};
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci#define BANK_PMX(n, f, l, r, o)				\
258c2ecf20Sopenharmony_ci	{							\
268c2ecf20Sopenharmony_ci		.name   = n,					\
278c2ecf20Sopenharmony_ci		.first	= f,					\
288c2ecf20Sopenharmony_ci		.last	= l,					\
298c2ecf20Sopenharmony_ci		.reg	= r,					\
308c2ecf20Sopenharmony_ci		.offset = o,					\
318c2ecf20Sopenharmony_ci	}
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cistruct meson_pmx_axg_data {
348c2ecf20Sopenharmony_ci        unsigned int func;
358c2ecf20Sopenharmony_ci};
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci#define PMX_DATA(f)							\
388c2ecf20Sopenharmony_ci	{								\
398c2ecf20Sopenharmony_ci		.func = f,						\
408c2ecf20Sopenharmony_ci	}
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci#define GROUP(grp, f)							\
438c2ecf20Sopenharmony_ci	{								\
448c2ecf20Sopenharmony_ci		.name = #grp,						\
458c2ecf20Sopenharmony_ci		.pins = grp ## _pins,                                   \
468c2ecf20Sopenharmony_ci		.num_pins = ARRAY_SIZE(grp ## _pins),			\
478c2ecf20Sopenharmony_ci		.data = (const struct meson_pmx_axg_data[]){		\
488c2ecf20Sopenharmony_ci			PMX_DATA(f),					\
498c2ecf20Sopenharmony_ci		},							\
508c2ecf20Sopenharmony_ci	}
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci#define GPIO_GROUP(gpio)						\
538c2ecf20Sopenharmony_ci	{								\
548c2ecf20Sopenharmony_ci		.name = #gpio,						\
558c2ecf20Sopenharmony_ci		.pins = (const unsigned int[]){ gpio },			\
568c2ecf20Sopenharmony_ci		.num_pins = 1,						\
578c2ecf20Sopenharmony_ci		.data = (const struct meson_pmx_axg_data[]){		\
588c2ecf20Sopenharmony_ci			PMX_DATA(0),					\
598c2ecf20Sopenharmony_ci		},							\
608c2ecf20Sopenharmony_ci	}
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ciextern const struct pinmux_ops meson_axg_pmx_ops;
63