brintos

brintos / linux-shallow public Read only

0
0
Text · 2.2 KiB · 56a2eb0 Raw
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