xref: /openbmc/linux/drivers/pinctrl/berlin/berlin.h (revision c6114f21)
1c6114f21SJisheng Zhang /* SPDX-License-Identifier: GPL-2.0 */
23de68d33SAntoine Tenart /*
33de68d33SAntoine Tenart  * Marvell Berlin SoC pinctrl driver.
43de68d33SAntoine Tenart  *
53de68d33SAntoine Tenart  * Copyright (C) 2014 Marvell Technology Group Ltd.
63de68d33SAntoine Tenart  *
71d48fb6eSAntoine Ténart  * Antoine Ténart <antoine.tenart@free-electrons.com>
83de68d33SAntoine Tenart  */
93de68d33SAntoine Tenart 
103de68d33SAntoine Tenart #ifndef __PINCTRL_BERLIN_H
113de68d33SAntoine Tenart #define __PINCTRL_BERLIN_H
123de68d33SAntoine Tenart 
133de68d33SAntoine Tenart struct berlin_desc_function {
143de68d33SAntoine Tenart 	const char	*name;
153de68d33SAntoine Tenart 	u8		muxval;
163de68d33SAntoine Tenart };
173de68d33SAntoine Tenart 
183de68d33SAntoine Tenart struct berlin_desc_group {
193de68d33SAntoine Tenart 	const char			*name;
203de68d33SAntoine Tenart 	u8				offset;
213de68d33SAntoine Tenart 	u8				bit_width;
223de68d33SAntoine Tenart 	u8				lsb;
233de68d33SAntoine Tenart 	struct berlin_desc_function	*functions;
243de68d33SAntoine Tenart };
253de68d33SAntoine Tenart 
263de68d33SAntoine Tenart struct berlin_pinctrl_desc {
273de68d33SAntoine Tenart 	const struct berlin_desc_group	*groups;
283de68d33SAntoine Tenart 	unsigned			ngroups;
293de68d33SAntoine Tenart };
303de68d33SAntoine Tenart 
313de68d33SAntoine Tenart struct berlin_pinctrl_function {
323de68d33SAntoine Tenart 	const char	*name;
333de68d33SAntoine Tenart 	const char	**groups;
343de68d33SAntoine Tenart 	unsigned	ngroups;
353de68d33SAntoine Tenart };
363de68d33SAntoine Tenart 
373de68d33SAntoine Tenart #define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...)		\
383de68d33SAntoine Tenart 	{								\
393de68d33SAntoine Tenart 		.name = _name,						\
403de68d33SAntoine Tenart 		.offset = _offset,					\
413de68d33SAntoine Tenart 		.bit_width = _width,					\
423de68d33SAntoine Tenart 		.lsb = _lsb,						\
433de68d33SAntoine Tenart 		.functions = (struct berlin_desc_function[]){		\
443de68d33SAntoine Tenart 			__VA_ARGS__, { } },				\
453de68d33SAntoine Tenart 	}
463de68d33SAntoine Tenart 
473de68d33SAntoine Tenart #define BERLIN_PINCTRL_FUNCTION(_muxval, _name)		\
483de68d33SAntoine Tenart 	{						\
493de68d33SAntoine Tenart 		.name = _name,				\
503de68d33SAntoine Tenart 		.muxval = _muxval,			\
513de68d33SAntoine Tenart 	}
523de68d33SAntoine Tenart 
533de68d33SAntoine Tenart #define BERLIN_PINCTRL_FUNCTION_UNKNOWN		{}
543de68d33SAntoine Tenart 
553de68d33SAntoine Tenart int berlin_pinctrl_probe(struct platform_device *pdev,
563de68d33SAntoine Tenart 			 const struct berlin_pinctrl_desc *desc);
573de68d33SAntoine Tenart 
58d5c79fcbSJisheng Zhang int berlin_pinctrl_probe_regmap(struct platform_device *pdev,
59d5c79fcbSJisheng Zhang 				const struct berlin_pinctrl_desc *desc,
60d5c79fcbSJisheng Zhang 				struct regmap *regmap);
61d5c79fcbSJisheng Zhang 
623de68d33SAntoine Tenart #endif /* __PINCTRL_BERLIN_H */
63