0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 struct meson_pmx_bank {
0012 const char *name;
0013 unsigned int first;
0014 unsigned int last;
0015 unsigned int reg;
0016 unsigned int offset;
0017 };
0018
0019 struct meson_axg_pmx_data {
0020 struct meson_pmx_bank *pmx_banks;
0021 unsigned int num_pmx_banks;
0022 };
0023
0024 #define BANK_PMX(n, f, l, r, o) \
0025 { \
0026 .name = n, \
0027 .first = f, \
0028 .last = l, \
0029 .reg = r, \
0030 .offset = o, \
0031 }
0032
0033 struct meson_pmx_axg_data {
0034 unsigned int func;
0035 };
0036
0037 #define PMX_DATA(f) \
0038 { \
0039 .func = f, \
0040 }
0041
0042 #define GROUP(grp, f) \
0043 { \
0044 .name = #grp, \
0045 .pins = grp ## _pins, \
0046 .num_pins = ARRAY_SIZE(grp ## _pins), \
0047 .data = (const struct meson_pmx_axg_data[]){ \
0048 PMX_DATA(f), \
0049 }, \
0050 }
0051
0052 #define GPIO_GROUP(gpio) \
0053 { \
0054 .name = #gpio, \
0055 .pins = (const unsigned int[]){ gpio }, \
0056 .num_pins = 1, \
0057 .data = (const struct meson_pmx_axg_data[]){ \
0058 PMX_DATA(0), \
0059 }, \
0060 }
0061
0062 extern const struct pinmux_ops meson_axg_pmx_ops;