18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Marvell Berlin SoC pinctrl driver.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2014 Marvell Technology Group Ltd.
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Antoine Ténart <antoine.tenart@free-electrons.com>
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#ifndef __PINCTRL_BERLIN_H
118c2ecf20Sopenharmony_ci#define __PINCTRL_BERLIN_H
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cistruct berlin_desc_function {
148c2ecf20Sopenharmony_ci	const char	*name;
158c2ecf20Sopenharmony_ci	u8		muxval;
168c2ecf20Sopenharmony_ci};
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cistruct berlin_desc_group {
198c2ecf20Sopenharmony_ci	const char			*name;
208c2ecf20Sopenharmony_ci	u8				offset;
218c2ecf20Sopenharmony_ci	u8				bit_width;
228c2ecf20Sopenharmony_ci	u8				lsb;
238c2ecf20Sopenharmony_ci	struct berlin_desc_function	*functions;
248c2ecf20Sopenharmony_ci};
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cistruct berlin_pinctrl_desc {
278c2ecf20Sopenharmony_ci	const struct berlin_desc_group	*groups;
288c2ecf20Sopenharmony_ci	unsigned			ngroups;
298c2ecf20Sopenharmony_ci};
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_cistruct berlin_pinctrl_function {
328c2ecf20Sopenharmony_ci	const char	*name;
338c2ecf20Sopenharmony_ci	const char	**groups;
348c2ecf20Sopenharmony_ci	unsigned	ngroups;
358c2ecf20Sopenharmony_ci};
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci#define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...)		\
388c2ecf20Sopenharmony_ci	{								\
398c2ecf20Sopenharmony_ci		.name = _name,						\
408c2ecf20Sopenharmony_ci		.offset = _offset,					\
418c2ecf20Sopenharmony_ci		.bit_width = _width,					\
428c2ecf20Sopenharmony_ci		.lsb = _lsb,						\
438c2ecf20Sopenharmony_ci		.functions = (struct berlin_desc_function[]){		\
448c2ecf20Sopenharmony_ci			__VA_ARGS__, { } },				\
458c2ecf20Sopenharmony_ci	}
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci#define BERLIN_PINCTRL_FUNCTION(_muxval, _name)		\
488c2ecf20Sopenharmony_ci	{						\
498c2ecf20Sopenharmony_ci		.name = _name,				\
508c2ecf20Sopenharmony_ci		.muxval = _muxval,			\
518c2ecf20Sopenharmony_ci	}
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci#define BERLIN_PINCTRL_FUNCTION_UNKNOWN		{}
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ciint berlin_pinctrl_probe(struct platform_device *pdev,
568c2ecf20Sopenharmony_ci			 const struct berlin_pinctrl_desc *desc);
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ciint berlin_pinctrl_probe_regmap(struct platform_device *pdev,
598c2ecf20Sopenharmony_ci				const struct berlin_pinctrl_desc *desc,
608c2ecf20Sopenharmony_ci				struct regmap *regmap);
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci#endif /* __PINCTRL_BERLIN_H */
63