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