97 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (c) 2020 TOSHIBA CORPORATION4 * Copyright (c) 2020 Toshiba Electronic Devices & Storage Corporation5 * Copyright (c) 2020 Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>6 */7 8#ifndef __VISCONTI_PINCTRL_COMMON_H__9#define __VISCONTI_PINCTRL_COMMON_H__10 11struct pinctrl_pin_desc;12 13/* PIN */14#define VISCONTI_PINS(pins_name, ...) \15 static const unsigned int pins_name ## _pins[] = { __VA_ARGS__ }16 17struct visconti_desc_pin {18 struct pinctrl_pin_desc pin;19 unsigned int dsel_offset;20 unsigned int dsel_shift;21 unsigned int pude_offset;22 unsigned int pudsel_offset;23 unsigned int pud_shift;24};25 26#define VISCONTI_PIN(_pin, dsel, d_sh, pude, pudsel, p_sh) \27{ \28 .pin = _pin, \29 .dsel_offset = dsel, \30 .dsel_shift = d_sh, \31 .pude_offset = pude, \32 .pudsel_offset = pudsel, \33 .pud_shift = p_sh, \34}35 36/* Group */37#define VISCONTI_GROUPS(groups_name, ...) \38 static const char * const groups_name ## _grps[] = { __VA_ARGS__ }39 40struct visconti_mux {41 unsigned int offset;42 unsigned int mask;43 unsigned int val;44};45 46struct visconti_pin_group {47 const char *name;48 const unsigned int *pins;49 unsigned int nr_pins;50 struct visconti_mux mux;51};52 53#define VISCONTI_PIN_GROUP(group_name, off, msk, v) \54{ \55 .name = __stringify(group_name) "_grp", \56 .pins = group_name ## _pins, \57 .nr_pins = ARRAY_SIZE(group_name ## _pins), \58 .mux = { \59 .offset = off, \60 .mask = msk, \61 .val = v, \62 } \63}64 65/* MUX */66struct visconti_pin_function {67 const char *name;68 const char * const *groups;69 unsigned int nr_groups;70};71 72#define VISCONTI_PIN_FUNCTION(func) \73{ \74 .name = #func, \75 .groups = func ## _grps, \76 .nr_groups = ARRAY_SIZE(func ## _grps), \77}78 79/* chip dependent data */80struct visconti_pinctrl_devdata {81 const struct visconti_desc_pin *pins;82 unsigned int nr_pins;83 const struct visconti_pin_group *groups;84 unsigned int nr_groups;85 const struct visconti_pin_function *functions;86 unsigned int nr_functions;87 88 const struct visconti_mux *gpio_mux;89 90 void (*unlock)(void __iomem *base);91};92 93int visconti_pinctrl_probe(struct platform_device *pdev,94 const struct visconti_pinctrl_devdata *devdata);95 96#endif /* __VISCONTI_PINCTRL_COMMON_H__ */97