1 /* SPDX-License-Identifier: GPL-2.0-only */ 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> 11 */ 12 #ifdef CONFIG_PINMUX 13 14 int pinmux_check_ops(struct pinctrl_dev *pctldev); 15 16 int pinmux_validate_map(const struct pinctrl_map *map, int i); 17 18 bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, unsigned pin); 19 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); 28 29 int pinmux_map_to_setting(const struct pinctrl_map *map, 30 struct pinctrl_setting *setting); 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); 34 35 #else 36 37 static inline int pinmux_check_ops(struct pinctrl_dev *pctldev) 38 { 39 return 0; 40 } 41 42 static inline int pinmux_validate_map(const struct pinctrl_map *map, int i) 43 { 44 return 0; 45 } 46 47 static inline bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, 48 unsigned pin) 49 { 50 return true; 51 } 52 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 73 static inline int pinmux_map_to_setting(const struct pinctrl_map *map, 74 struct pinctrl_setting *setting) 75 { 76 return 0; 77 } 78 79 static inline void pinmux_free_setting(const struct pinctrl_setting *setting) 80 { 81 } 82 83 static inline int pinmux_enable_setting(const struct pinctrl_setting *setting) 84 { 85 return 0; 86 } 87 88 static inline void pinmux_disable_setting(const struct pinctrl_setting *setting) 89 { 90 } 91 92 #endif 93 94 #if defined(CONFIG_PINMUX) && defined(CONFIG_DEBUG_FS) 95 96 void pinmux_show_map(struct seq_file *s, const struct pinctrl_map *map); 97 void pinmux_show_setting(struct seq_file *s, 98 const struct pinctrl_setting *setting); 99 void pinmux_init_device_debugfs(struct dentry *devroot, 100 struct pinctrl_dev *pctldev); 101 102 #else 103 104 static inline void pinmux_show_map(struct seq_file *s, 105 const struct pinctrl_map *map) 106 { 107 } 108 109 static inline void pinmux_show_setting(struct seq_file *s, 110 const struct pinctrl_setting *setting) 111 { 112 } 113 114 static inline void pinmux_init_device_debugfs(struct dentry *devroot, 115 struct pinctrl_dev *pctldev) 116 { 117 } 118 119 #endif 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 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 */ 169