1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0+ or MIT) */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2017 Baylibre SAS. 4*4882a593Smuzhiyun * Author: Jerome Brunet <jbrunet@baylibre.com> 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Copyright (c) 2017 Amlogic, Inc. All rights reserved. 7*4882a593Smuzhiyun * Author: Xingyu Chen <xingyu.chen@amlogic.com> 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun struct meson_pmx_bank { 12*4882a593Smuzhiyun const char *name; 13*4882a593Smuzhiyun unsigned int first; 14*4882a593Smuzhiyun unsigned int last; 15*4882a593Smuzhiyun unsigned int reg; 16*4882a593Smuzhiyun unsigned int offset; 17*4882a593Smuzhiyun }; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun struct meson_axg_pmx_data { 20*4882a593Smuzhiyun struct meson_pmx_bank *pmx_banks; 21*4882a593Smuzhiyun unsigned int num_pmx_banks; 22*4882a593Smuzhiyun }; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define BANK_PMX(n, f, l, r, o) \ 25*4882a593Smuzhiyun { \ 26*4882a593Smuzhiyun .name = n, \ 27*4882a593Smuzhiyun .first = f, \ 28*4882a593Smuzhiyun .last = l, \ 29*4882a593Smuzhiyun .reg = r, \ 30*4882a593Smuzhiyun .offset = o, \ 31*4882a593Smuzhiyun } 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun struct meson_pmx_axg_data { 34*4882a593Smuzhiyun unsigned int func; 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define PMX_DATA(f) \ 38*4882a593Smuzhiyun { \ 39*4882a593Smuzhiyun .func = f, \ 40*4882a593Smuzhiyun } 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #define GROUP(grp, f) \ 43*4882a593Smuzhiyun { \ 44*4882a593Smuzhiyun .name = #grp, \ 45*4882a593Smuzhiyun .pins = grp ## _pins, \ 46*4882a593Smuzhiyun .num_pins = ARRAY_SIZE(grp ## _pins), \ 47*4882a593Smuzhiyun .data = (const struct meson_pmx_axg_data[]){ \ 48*4882a593Smuzhiyun PMX_DATA(f), \ 49*4882a593Smuzhiyun }, \ 50*4882a593Smuzhiyun } 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #define GPIO_GROUP(gpio) \ 53*4882a593Smuzhiyun { \ 54*4882a593Smuzhiyun .name = #gpio, \ 55*4882a593Smuzhiyun .pins = (const unsigned int[]){ gpio }, \ 56*4882a593Smuzhiyun .num_pins = 1, \ 57*4882a593Smuzhiyun .data = (const struct meson_pmx_axg_data[]){ \ 58*4882a593Smuzhiyun PMX_DATA(0), \ 59*4882a593Smuzhiyun }, \ 60*4882a593Smuzhiyun } 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun extern const struct pinmux_ops meson_axg_pmx_ops; 63