pinctrl-common.h (2267B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (c) 2020 TOSHIBA CORPORATION 4 * Copyright (c) 2020 Toshiba Electronic Devices & Storage Corporation 5 * 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__ */