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