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