xref: /openbmc/linux/drivers/pinctrl/berlin/berlin.h (revision 3de68d33)
13de68d33SAntoine Tenart /*
23de68d33SAntoine Tenart  * Marvell Berlin SoC pinctrl driver.
33de68d33SAntoine Tenart  *
43de68d33SAntoine Tenart  * Copyright (C) 2014 Marvell Technology Group Ltd.
53de68d33SAntoine Tenart  *
63de68d33SAntoine Tenart  * Antoine Ténart <antoine.tenart@free-electrons.com>
73de68d33SAntoine Tenart  *
83de68d33SAntoine Tenart  * This file is licensed under the terms of the GNU General Public
93de68d33SAntoine Tenart  * License version 2. This program is licensed "as is" without any
103de68d33SAntoine Tenart  * warranty of any kind, whether express or implied.
113de68d33SAntoine Tenart  */
123de68d33SAntoine Tenart 
133de68d33SAntoine Tenart #ifndef __PINCTRL_BERLIN_H
143de68d33SAntoine Tenart #define __PINCTRL_BERLIN_H
153de68d33SAntoine Tenart 
163de68d33SAntoine Tenart struct berlin_desc_function {
173de68d33SAntoine Tenart 	const char	*name;
183de68d33SAntoine Tenart 	u8		muxval;
193de68d33SAntoine Tenart };
203de68d33SAntoine Tenart 
213de68d33SAntoine Tenart struct berlin_desc_group {
223de68d33SAntoine Tenart 	const char			*name;
233de68d33SAntoine Tenart 	u8				offset;
243de68d33SAntoine Tenart 	u8				bit_width;
253de68d33SAntoine Tenart 	u8				lsb;
263de68d33SAntoine Tenart 	struct berlin_desc_function	*functions;
273de68d33SAntoine Tenart };
283de68d33SAntoine Tenart 
293de68d33SAntoine Tenart struct berlin_pinctrl_desc {
303de68d33SAntoine Tenart 	const struct berlin_desc_group	*groups;
313de68d33SAntoine Tenart 	unsigned			ngroups;
323de68d33SAntoine Tenart };
333de68d33SAntoine Tenart 
343de68d33SAntoine Tenart struct berlin_pinctrl_function {
353de68d33SAntoine Tenart 	const char	*name;
363de68d33SAntoine Tenart 	const char	**groups;
373de68d33SAntoine Tenart 	unsigned	ngroups;
383de68d33SAntoine Tenart };
393de68d33SAntoine Tenart 
403de68d33SAntoine Tenart #define BERLIN_PINCTRL_GROUP(_name, _offset, _width, _lsb, ...)		\
413de68d33SAntoine Tenart 	{								\
423de68d33SAntoine Tenart 		.name = _name,						\
433de68d33SAntoine Tenart 		.offset = _offset,					\
443de68d33SAntoine Tenart 		.bit_width = _width,					\
453de68d33SAntoine Tenart 		.lsb = _lsb,						\
463de68d33SAntoine Tenart 		.functions = (struct berlin_desc_function[]){		\
473de68d33SAntoine Tenart 			__VA_ARGS__, { } },				\
483de68d33SAntoine Tenart 	}
493de68d33SAntoine Tenart 
503de68d33SAntoine Tenart #define BERLIN_PINCTRL_FUNCTION(_muxval, _name)		\
513de68d33SAntoine Tenart 	{						\
523de68d33SAntoine Tenart 		.name = _name,				\
533de68d33SAntoine Tenart 		.muxval = _muxval,			\
543de68d33SAntoine Tenart 	}
553de68d33SAntoine Tenart 
563de68d33SAntoine Tenart #define BERLIN_PINCTRL_FUNCTION_UNKNOWN		{}
573de68d33SAntoine Tenart 
583de68d33SAntoine Tenart int berlin_pinctrl_probe(struct platform_device *pdev,
593de68d33SAntoine Tenart 			 const struct berlin_pinctrl_desc *desc);
603de68d33SAntoine Tenart 
613de68d33SAntoine Tenart #endif /* __PINCTRL_BERLIN_H */
62