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