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