1/*
2 * Interface the pinconfig portions of the pinctrl subsystem
3 *
4 * Copyright (C) 2011 ST-Ericsson SA
5 * Written on behalf of Linaro for ST-Ericsson
6 * This interface is used in the core to keep track of pins.
7 *
8 * Author: Linus Walleij <linus.walleij@linaro.org>
9 *
10 * License terms: GNU General Public License (GPL) version 2
11 */
12#ifndef __LINUX_PINCTRL_PINCONF_H
13#define __LINUX_PINCTRL_PINCONF_H
14
15#ifdef CONFIG_PINCONF
16
17#include <linux/pinctrl/machine.h>
18
19struct pinctrl_dev;
20struct seq_file;
21
22/**
23 * struct pinconf_ops - pin config operations, to be implemented by
24 * pin configuration capable drivers.
25 * @is_generic: for pin controllers that want to use the generic interface,
26 *	this flag tells the framework that it's generic.
27 * @pin_config_get: get the config of a certain pin, if the requested config
28 *	is not available on this controller this should return -ENOTSUPP
29 *	and if it is available but disabled it should return -EINVAL
30 * @pin_config_set: configure an individual pin
31 * @pin_config_group_get: get configurations for an entire pin group
32 * @pin_config_group_set: configure all pins in a group
33 * @pin_config_dbg_parse_modify: optional debugfs to modify a pin configuration
34 * @pin_config_dbg_show: optional debugfs display hook that will provide
35 *	per-device info for a certain pin in debugfs
36 * @pin_config_group_dbg_show: optional debugfs display hook that will provide
37 *	per-device info for a certain group in debugfs
38 * @pin_config_config_dbg_show: optional debugfs display hook that will decode
39 *	and display a driver's pin configuration parameter
40 */
41struct pinconf_ops {
42#ifdef CONFIG_GENERIC_PINCONF
43	bool is_generic;
44#endif
45	int (*pin_config_get) (struct pinctrl_dev *pctldev,
46			       unsigned pin,
47			       unsigned long *config);
48	int (*pin_config_set) (struct pinctrl_dev *pctldev,
49			       unsigned pin,
50			       unsigned long *configs,
51			       unsigned num_configs);
52	int (*pin_config_group_get) (struct pinctrl_dev *pctldev,
53				     unsigned selector,
54				     unsigned long *config);
55	int (*pin_config_group_set) (struct pinctrl_dev *pctldev,
56				     unsigned selector,
57				     unsigned long *configs,
58				     unsigned num_configs);
59	int (*pin_config_dbg_parse_modify) (struct pinctrl_dev *pctldev,
60					   const char *arg,
61					   unsigned long *config);
62	void (*pin_config_dbg_show) (struct pinctrl_dev *pctldev,
63				     struct seq_file *s,
64				     unsigned offset);
65	void (*pin_config_group_dbg_show) (struct pinctrl_dev *pctldev,
66					   struct seq_file *s,
67					   unsigned selector);
68	void (*pin_config_config_dbg_show) (struct pinctrl_dev *pctldev,
69					    struct seq_file *s,
70					    unsigned long config);
71};
72
73#endif
74
75#endif /* __LINUX_PINCTRL_PINCONF_H */
76