xref: /linux/drivers/pinctrl/cix/pinctrl-sky1.h (revision a110f942672c8995dc1cacb5a44c6730856743aa)
1*920500c5SGary Yang /* SPDX-License-Identifier: GPL-2.0+ */
2*920500c5SGary Yang /*
3*920500c5SGary Yang  * Author: Jerry Zhu <Jerry.Zhu@cixtech.com>
4*920500c5SGary Yang  */
5*920500c5SGary Yang 
6*920500c5SGary Yang #ifndef __DRIVERS_PINCTRL_SKY1_H
7*920500c5SGary Yang #define __DRIVERS_PINCTRL_SKY1_H
8*920500c5SGary Yang 
9*920500c5SGary Yang struct sky1_pinctrl_group {
10*920500c5SGary Yang 	const char *name;
11*920500c5SGary Yang 	unsigned long config;
12*920500c5SGary Yang 	unsigned int pin;
13*920500c5SGary Yang };
14*920500c5SGary Yang 
15*920500c5SGary Yang struct sky1_pin_desc {
16*920500c5SGary Yang 	const struct pinctrl_pin_desc pin;
17*920500c5SGary Yang 	const char * const *func_group;
18*920500c5SGary Yang 	unsigned int nfunc;
19*920500c5SGary Yang };
20*920500c5SGary Yang 
21*920500c5SGary Yang struct sky1_pinctrl_soc_info {
22*920500c5SGary Yang 	const struct sky1_pin_desc *pins;
23*920500c5SGary Yang 	unsigned int npins;
24*920500c5SGary Yang };
25*920500c5SGary Yang 
26*920500c5SGary Yang #define SKY_PINFUNCTION(_pin, _func)				\
27*920500c5SGary Yang ((struct sky1_pin_desc) {					\
28*920500c5SGary Yang 		.pin = _pin,					\
29*920500c5SGary Yang 		.func_group = _func##_group,			\
30*920500c5SGary Yang 		.nfunc = ARRAY_SIZE(_func##_group),		\
31*920500c5SGary Yang 	})
32*920500c5SGary Yang /**
33*920500c5SGary Yang  * @dev: a pointer back to containing device
34*920500c5SGary Yang  * @base: the offset to the controller in virtual memory
35*920500c5SGary Yang  */
36*920500c5SGary Yang struct sky1_pinctrl {
37*920500c5SGary Yang 	struct device *dev;
38*920500c5SGary Yang 	struct pinctrl_dev *pctl;
39*920500c5SGary Yang 	void __iomem *base;
40*920500c5SGary Yang 	const struct sky1_pinctrl_soc_info *info;
41*920500c5SGary Yang 	struct sky1_pinctrl_group *groups;
42*920500c5SGary Yang 	const char **grp_names;
43*920500c5SGary Yang };
44*920500c5SGary Yang 
45*920500c5SGary Yang int sky1_base_pinctrl_probe(struct platform_device *pdev,
46*920500c5SGary Yang 			const struct sky1_pinctrl_soc_info *info);
47*920500c5SGary Yang 
48*920500c5SGary Yang #endif /* __DRIVERS_PINCTRL_SKY1_H */
49