/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2020 TOSHIBA CORPORATION * Copyright (c) 2020 Toshiba Electronic Devices & Storage Corporation * Copyright (c) 2020 Nobuhiro Iwamatsu */ #ifndef __VISCONTI_PINCTRL_COMMON_H__ #define __VISCONTI_PINCTRL_COMMON_H__ struct pinctrl_pin_desc; /* PIN */ #define VISCONTI_PINS(pins_name, ...) \ static const unsigned int pins_name ## _pins[] = { __VA_ARGS__ } struct visconti_desc_pin { struct pinctrl_pin_desc pin; unsigned int dsel_offset; unsigned int dsel_shift; unsigned int pude_offset; unsigned int pudsel_offset; unsigned int pud_shift; }; #define VISCONTI_PIN(_pin, dsel, d_sh, pude, pudsel, p_sh) \ { \ .pin = _pin, \ .dsel_offset = dsel, \ .dsel_shift = d_sh, \ .pude_offset = pude, \ .pudsel_offset = pudsel, \ .pud_shift = p_sh, \ } /* Group */ #define VISCONTI_GROUPS(groups_name, ...) \ static const char * const groups_name ## _grps[] = { __VA_ARGS__ } struct visconti_mux { unsigned int offset; unsigned int mask; unsigned int val; }; struct visconti_pin_group { const char *name; const unsigned int *pins; unsigned int nr_pins; struct visconti_mux mux; }; #define VISCONTI_PIN_GROUP(group_name, off, msk, v) \ { \ .name = __stringify(group_name) "_grp", \ .pins = group_name ## _pins, \ .nr_pins = ARRAY_SIZE(group_name ## _pins), \ .mux = { \ .offset = off, \ .mask = msk, \ .val = v, \ } \ } /* MUX */ struct visconti_pin_function { const char *name; const char * const *groups; unsigned int nr_groups; }; #define VISCONTI_PIN_FUNCTION(func) \ { \ .name = #func, \ .groups = func ## _grps, \ .nr_groups = ARRAY_SIZE(func ## _grps), \ } /* chip dependent data */ struct visconti_pinctrl_devdata { const struct visconti_desc_pin *pins; unsigned int nr_pins; const struct visconti_pin_group *groups; unsigned int nr_groups; const struct visconti_pin_function *functions; unsigned int nr_functions; const struct visconti_mux *gpio_mux; void (*unlock)(void __iomem *base); }; int visconti_pinctrl_probe(struct platform_device *pdev, const struct visconti_pinctrl_devdata *devdata); #endif /* __VISCONTI_PINCTRL_COMMON_H__ */