1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Internal interface between the core pin control system and the
4*4882a593Smuzhiyun * pinmux portions
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * Copyright (C) 2011 ST-Ericsson SA
7*4882a593Smuzhiyun * Written on behalf of Linaro for ST-Ericsson
8*4882a593Smuzhiyun * Based on bits of regulator core, gpio core and clk core
9*4882a593Smuzhiyun *
10*4882a593Smuzhiyun * Author: Linus Walleij <linus.walleij@linaro.org>
11*4882a593Smuzhiyun */
12*4882a593Smuzhiyun #ifdef CONFIG_PINMUX
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun int pinmux_check_ops(struct pinctrl_dev *pctldev);
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun int pinmux_validate_map(const struct pinctrl_map *map, int i);
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, unsigned pin);
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun int pinmux_request_gpio(struct pinctrl_dev *pctldev,
21*4882a593Smuzhiyun struct pinctrl_gpio_range *range,
22*4882a593Smuzhiyun unsigned pin, unsigned gpio);
23*4882a593Smuzhiyun void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
24*4882a593Smuzhiyun struct pinctrl_gpio_range *range);
25*4882a593Smuzhiyun int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
26*4882a593Smuzhiyun struct pinctrl_gpio_range *range,
27*4882a593Smuzhiyun unsigned pin, bool input);
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun int pinmux_map_to_setting(const struct pinctrl_map *map,
30*4882a593Smuzhiyun struct pinctrl_setting *setting);
31*4882a593Smuzhiyun void pinmux_free_setting(const struct pinctrl_setting *setting);
32*4882a593Smuzhiyun int pinmux_enable_setting(const struct pinctrl_setting *setting);
33*4882a593Smuzhiyun void pinmux_disable_setting(const struct pinctrl_setting *setting);
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun #else
36*4882a593Smuzhiyun
pinmux_check_ops(struct pinctrl_dev * pctldev)37*4882a593Smuzhiyun static inline int pinmux_check_ops(struct pinctrl_dev *pctldev)
38*4882a593Smuzhiyun {
39*4882a593Smuzhiyun return 0;
40*4882a593Smuzhiyun }
41*4882a593Smuzhiyun
pinmux_validate_map(const struct pinctrl_map * map,int i)42*4882a593Smuzhiyun static inline int pinmux_validate_map(const struct pinctrl_map *map, int i)
43*4882a593Smuzhiyun {
44*4882a593Smuzhiyun return 0;
45*4882a593Smuzhiyun }
46*4882a593Smuzhiyun
pinmux_can_be_used_for_gpio(struct pinctrl_dev * pctldev,unsigned pin)47*4882a593Smuzhiyun static inline bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev,
48*4882a593Smuzhiyun unsigned pin)
49*4882a593Smuzhiyun {
50*4882a593Smuzhiyun return true;
51*4882a593Smuzhiyun }
52*4882a593Smuzhiyun
pinmux_request_gpio(struct pinctrl_dev * pctldev,struct pinctrl_gpio_range * range,unsigned pin,unsigned gpio)53*4882a593Smuzhiyun static inline int pinmux_request_gpio(struct pinctrl_dev *pctldev,
54*4882a593Smuzhiyun struct pinctrl_gpio_range *range,
55*4882a593Smuzhiyun unsigned pin, unsigned gpio)
56*4882a593Smuzhiyun {
57*4882a593Smuzhiyun return 0;
58*4882a593Smuzhiyun }
59*4882a593Smuzhiyun
pinmux_free_gpio(struct pinctrl_dev * pctldev,unsigned pin,struct pinctrl_gpio_range * range)60*4882a593Smuzhiyun static inline void pinmux_free_gpio(struct pinctrl_dev *pctldev,
61*4882a593Smuzhiyun unsigned pin,
62*4882a593Smuzhiyun struct pinctrl_gpio_range *range)
63*4882a593Smuzhiyun {
64*4882a593Smuzhiyun }
65*4882a593Smuzhiyun
pinmux_gpio_direction(struct pinctrl_dev * pctldev,struct pinctrl_gpio_range * range,unsigned pin,bool input)66*4882a593Smuzhiyun static inline int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
67*4882a593Smuzhiyun struct pinctrl_gpio_range *range,
68*4882a593Smuzhiyun unsigned pin, bool input)
69*4882a593Smuzhiyun {
70*4882a593Smuzhiyun return 0;
71*4882a593Smuzhiyun }
72*4882a593Smuzhiyun
pinmux_map_to_setting(const struct pinctrl_map * map,struct pinctrl_setting * setting)73*4882a593Smuzhiyun static inline int pinmux_map_to_setting(const struct pinctrl_map *map,
74*4882a593Smuzhiyun struct pinctrl_setting *setting)
75*4882a593Smuzhiyun {
76*4882a593Smuzhiyun return 0;
77*4882a593Smuzhiyun }
78*4882a593Smuzhiyun
pinmux_free_setting(const struct pinctrl_setting * setting)79*4882a593Smuzhiyun static inline void pinmux_free_setting(const struct pinctrl_setting *setting)
80*4882a593Smuzhiyun {
81*4882a593Smuzhiyun }
82*4882a593Smuzhiyun
pinmux_enable_setting(const struct pinctrl_setting * setting)83*4882a593Smuzhiyun static inline int pinmux_enable_setting(const struct pinctrl_setting *setting)
84*4882a593Smuzhiyun {
85*4882a593Smuzhiyun return 0;
86*4882a593Smuzhiyun }
87*4882a593Smuzhiyun
pinmux_disable_setting(const struct pinctrl_setting * setting)88*4882a593Smuzhiyun static inline void pinmux_disable_setting(const struct pinctrl_setting *setting)
89*4882a593Smuzhiyun {
90*4882a593Smuzhiyun }
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun #endif
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun #if defined(CONFIG_PINMUX) && defined(CONFIG_DEBUG_FS)
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun void pinmux_show_map(struct seq_file *s, const struct pinctrl_map *map);
97*4882a593Smuzhiyun void pinmux_show_setting(struct seq_file *s,
98*4882a593Smuzhiyun const struct pinctrl_setting *setting);
99*4882a593Smuzhiyun void pinmux_init_device_debugfs(struct dentry *devroot,
100*4882a593Smuzhiyun struct pinctrl_dev *pctldev);
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun #else
103*4882a593Smuzhiyun
pinmux_show_map(struct seq_file * s,const struct pinctrl_map * map)104*4882a593Smuzhiyun static inline void pinmux_show_map(struct seq_file *s,
105*4882a593Smuzhiyun const struct pinctrl_map *map)
106*4882a593Smuzhiyun {
107*4882a593Smuzhiyun }
108*4882a593Smuzhiyun
pinmux_show_setting(struct seq_file * s,const struct pinctrl_setting * setting)109*4882a593Smuzhiyun static inline void pinmux_show_setting(struct seq_file *s,
110*4882a593Smuzhiyun const struct pinctrl_setting *setting)
111*4882a593Smuzhiyun {
112*4882a593Smuzhiyun }
113*4882a593Smuzhiyun
pinmux_init_device_debugfs(struct dentry * devroot,struct pinctrl_dev * pctldev)114*4882a593Smuzhiyun static inline void pinmux_init_device_debugfs(struct dentry *devroot,
115*4882a593Smuzhiyun struct pinctrl_dev *pctldev)
116*4882a593Smuzhiyun {
117*4882a593Smuzhiyun }
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun #endif
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun /**
124*4882a593Smuzhiyun * struct function_desc - generic function descriptor
125*4882a593Smuzhiyun * @name: name of the function
126*4882a593Smuzhiyun * @group_names: array of pin group names
127*4882a593Smuzhiyun * @num_group_names: number of pin group names
128*4882a593Smuzhiyun * @data: pin controller driver specific data
129*4882a593Smuzhiyun */
130*4882a593Smuzhiyun struct function_desc {
131*4882a593Smuzhiyun const char *name;
132*4882a593Smuzhiyun const char **group_names;
133*4882a593Smuzhiyun int num_group_names;
134*4882a593Smuzhiyun void *data;
135*4882a593Smuzhiyun };
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun int pinmux_generic_get_function_count(struct pinctrl_dev *pctldev);
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun const char *
140*4882a593Smuzhiyun pinmux_generic_get_function_name(struct pinctrl_dev *pctldev,
141*4882a593Smuzhiyun unsigned int selector);
142*4882a593Smuzhiyun
143*4882a593Smuzhiyun int pinmux_generic_get_function_groups(struct pinctrl_dev *pctldev,
144*4882a593Smuzhiyun unsigned int selector,
145*4882a593Smuzhiyun const char * const **groups,
146*4882a593Smuzhiyun unsigned * const num_groups);
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun struct function_desc *pinmux_generic_get_function(struct pinctrl_dev *pctldev,
149*4882a593Smuzhiyun unsigned int selector);
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun int pinmux_generic_add_function(struct pinctrl_dev *pctldev,
152*4882a593Smuzhiyun const char *name,
153*4882a593Smuzhiyun const char **groups,
154*4882a593Smuzhiyun unsigned const num_groups,
155*4882a593Smuzhiyun void *data);
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun int pinmux_generic_remove_function(struct pinctrl_dev *pctldev,
158*4882a593Smuzhiyun unsigned int selector);
159*4882a593Smuzhiyun
160*4882a593Smuzhiyun void pinmux_generic_free_functions(struct pinctrl_dev *pctldev);
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun #else
163*4882a593Smuzhiyun
pinmux_generic_free_functions(struct pinctrl_dev * pctldev)164*4882a593Smuzhiyun static inline void pinmux_generic_free_functions(struct pinctrl_dev *pctldev)
165*4882a593Smuzhiyun {
166*4882a593Smuzhiyun }
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun #endif /* CONFIG_GENERIC_PINMUX_FUNCTIONS */
169