blob: 694bfc9961faf1fdfbf737ba3c2fd699a297cd42 [file] [log] [blame]
Thomas Gleixneraf873fc2019-05-28 09:57:21 -07001/* SPDX-License-Identifier: GPL-2.0-only */
Linus Walleijae6b4d82011-10-19 18:14:33 +02002/*
3 * Internal interface between the core pin control system and the
4 * pin config 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>
Linus Walleijae6b4d82011-10-19 18:14:33 +020011 */
12
Andy Shevchenkoe5530ad2022-10-07 12:53:44 +030013#include <linux/errno.h>
14
15struct dentry;
16struct device_node;
17struct seq_file;
18
19struct pinctrl_dev;
20struct pinctrl_map;
21struct pinctrl_setting;
22
Linus Walleijae6b4d82011-10-19 18:14:33 +020023#ifdef CONFIG_PINCONF
24
Tony Lindgrenb9130b72012-01-24 16:28:08 -080025int pinconf_check_ops(struct pinctrl_dev *pctldev);
Masahiro Yamada3f713b72017-08-04 11:22:31 +090026int pinconf_validate_map(const struct pinctrl_map *map, int i);
27int pinconf_map_to_setting(const struct pinctrl_map *map,
Stephen Warren1e2082b2012-03-02 13:05:48 -070028 struct pinctrl_setting *setting);
Masahiro Yamada3f713b72017-08-04 11:22:31 +090029void pinconf_free_setting(const struct pinctrl_setting *setting);
30int pinconf_apply_setting(const struct pinctrl_setting *setting);
Linus Walleijae6b4d82011-10-19 18:14:33 +020031
Mika Westerberg15381bc2017-01-23 15:34:33 +030032int pinconf_set_config(struct pinctrl_dev *pctldev, unsigned pin,
33 unsigned long *configs, size_t nconfigs);
34
Linus Walleij394349f72011-11-24 18:27:15 +010035/*
36 * You will only be interested in these if you're using PINCONF
37 * so don't supply any stubs for these.
38 */
39int pin_config_get_for_pin(struct pinctrl_dev *pctldev, unsigned pin,
40 unsigned long *config);
41int pin_config_group_get(const char *dev_name, const char *pin_group,
42 unsigned long *config);
43
Linus Walleijae6b4d82011-10-19 18:14:33 +020044#else
45
Tony Lindgrenb9130b72012-01-24 16:28:08 -080046static inline int pinconf_check_ops(struct pinctrl_dev *pctldev)
Linus Walleijae6b4d82011-10-19 18:14:33 +020047{
48 return 0;
49}
50
Masahiro Yamada3f713b72017-08-04 11:22:31 +090051static inline int pinconf_validate_map(const struct pinctrl_map *map, int i)
Stephen Warren1e2082b2012-03-02 13:05:48 -070052{
53 return 0;
54}
55
Masahiro Yamada3f713b72017-08-04 11:22:31 +090056static inline int pinconf_map_to_setting(const struct pinctrl_map *map,
Stephen Warren1e2082b2012-03-02 13:05:48 -070057 struct pinctrl_setting *setting)
58{
59 return 0;
60}
61
Masahiro Yamada3f713b72017-08-04 11:22:31 +090062static inline void pinconf_free_setting(const struct pinctrl_setting *setting)
Stephen Warren1e2082b2012-03-02 13:05:48 -070063{
64}
65
Masahiro Yamada3f713b72017-08-04 11:22:31 +090066static inline int pinconf_apply_setting(const struct pinctrl_setting *setting)
Stephen Warren1e2082b2012-03-02 13:05:48 -070067{
68 return 0;
69}
70
Mika Westerberg15381bc2017-01-23 15:34:33 +030071static inline int pinconf_set_config(struct pinctrl_dev *pctldev, unsigned pin,
72 unsigned long *configs, size_t nconfigs)
73{
74 return -ENOTSUPP;
75}
76
Stephen Warrenc736d732012-04-11 16:45:45 -060077#endif
78
Viresh Kumar96593af2012-04-16 14:22:34 +053079#if defined(CONFIG_PINCONF) && defined(CONFIG_DEBUG_FS)
Stephen Warrenc736d732012-04-11 16:45:45 -060080
Masahiro Yamada3f713b72017-08-04 11:22:31 +090081void pinconf_show_map(struct seq_file *s, const struct pinctrl_map *map);
Stephen Warrenc736d732012-04-11 16:45:45 -060082void pinconf_show_setting(struct seq_file *s,
Masahiro Yamada3f713b72017-08-04 11:22:31 +090083 const struct pinctrl_setting *setting);
Stephen Warrenc736d732012-04-11 16:45:45 -060084void pinconf_init_device_debugfs(struct dentry *devroot,
85 struct pinctrl_dev *pctldev);
86
87#else
88
Stephen Warren1e2082b2012-03-02 13:05:48 -070089static inline void pinconf_show_map(struct seq_file *s,
Masahiro Yamada3f713b72017-08-04 11:22:31 +090090 const struct pinctrl_map *map)
Stephen Warren1e2082b2012-03-02 13:05:48 -070091{
92}
93
94static inline void pinconf_show_setting(struct seq_file *s,
Masahiro Yamada3f713b72017-08-04 11:22:31 +090095 const struct pinctrl_setting *setting)
Stephen Warren1e2082b2012-03-02 13:05:48 -070096{
97}
98
Linus Walleijae6b4d82011-10-19 18:14:33 +020099static inline void pinconf_init_device_debugfs(struct dentry *devroot,
100 struct pinctrl_dev *pctldev)
101{
102}
103
104#endif
Linus Walleij394349f72011-11-24 18:27:15 +0100105
106/*
107 * The following functions are available if the driver uses the generic
108 * pin config.
109 */
110
Sachin Kamatbf4d7be2013-03-13 17:13:46 +0530111#if defined(CONFIG_GENERIC_PINCONF) && defined(CONFIG_DEBUG_FS)
Linus Walleij394349f72011-11-24 18:27:15 +0100112
Soren Brinkmanndd4d01f2015-01-09 07:43:46 -0800113void pinconf_generic_dump_pins(struct pinctrl_dev *pctldev,
114 struct seq_file *s, const char *gname,
115 unsigned pin);
Linus Walleij394349f72011-11-24 18:27:15 +0100116
Haojian Zhuang9cfd1722013-02-17 19:42:53 +0800117void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
118 struct seq_file *s, unsigned long config);
Linus Walleij394349f72011-11-24 18:27:15 +0100119#else
120
Soren Brinkmanndd4d01f2015-01-09 07:43:46 -0800121static inline void pinconf_generic_dump_pins(struct pinctrl_dev *pctldev,
122 struct seq_file *s,
123 const char *gname, unsigned pin)
Linus Walleij394349f72011-11-24 18:27:15 +0100124{
125 return;
126}
127
Haojian Zhuang9cfd1722013-02-17 19:42:53 +0800128static inline void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
129 struct seq_file *s,
130 unsigned long config)
131{
132 return;
133}
Linus Walleij394349f72011-11-24 18:27:15 +0100134#endif
Heiko Stübner7db9af42013-06-10 21:40:29 +0200135
136#if defined(CONFIG_GENERIC_PINCONF) && defined(CONFIG_OF)
137int pinconf_generic_parse_dt_config(struct device_node *np,
Soren Brinkmanndd4d01f2015-01-09 07:43:46 -0800138 struct pinctrl_dev *pctldev,
Heiko Stübner7db9af42013-06-10 21:40:29 +0200139 unsigned long **configs,
140 unsigned int *nconfigs);
141#endif