core.h revision ab78029ecc347debbd737f06688d788bd9d60c1d
1/* 2 * Core private header for the pin control subsystem 3 * 4 * Copyright (C) 2011 ST-Ericsson SA 5 * Written on behalf of Linaro for ST-Ericsson 6 * 7 * Author: Linus Walleij <linus.walleij@linaro.org> 8 * 9 * License terms: GNU General Public License (GPL) version 2 10 */ 11 12#include <linux/kref.h> 13#include <linux/mutex.h> 14#include <linux/radix-tree.h> 15#include <linux/pinctrl/pinconf.h> 16#include <linux/pinctrl/machine.h> 17 18struct pinctrl_gpio_range; 19 20/** 21 * struct pinctrl_dev - pin control class device 22 * @node: node to include this pin controller in the global pin controller list 23 * @desc: the pin controller descriptor supplied when initializing this pin 24 * controller 25 * @pin_desc_tree: each pin descriptor for this pin controller is stored in 26 * this radix tree 27 * @gpio_ranges: a list of GPIO ranges that is handled by this pin controller, 28 * ranges are added to this list at runtime 29 * @dev: the device entry for this pin controller 30 * @owner: module providing the pin controller, used for refcounting 31 * @driver_data: driver data for drivers registering to the pin controller 32 * subsystem 33 * @p: result of pinctrl_get() for this device 34 * @hog_default: default state for pins hogged by this device 35 * @hog_sleep: sleep state for pins hogged by this device 36 * @device_root: debugfs root for this device 37 */ 38struct pinctrl_dev { 39 struct list_head node; 40 struct pinctrl_desc *desc; 41 struct radix_tree_root pin_desc_tree; 42 struct list_head gpio_ranges; 43 struct device *dev; 44 struct module *owner; 45 void *driver_data; 46 struct pinctrl *p; 47 struct pinctrl_state *hog_default; 48 struct pinctrl_state *hog_sleep; 49#ifdef CONFIG_DEBUG_FS 50 struct dentry *device_root; 51#endif 52}; 53 54/** 55 * struct pinctrl - per-device pin control state holder 56 * @node: global list node 57 * @dev: the device using this pin control handle 58 * @states: a list of states for this device 59 * @state: the current state 60 * @dt_maps: the mapping table chunks dynamically parsed from device tree for 61 * this device, if any 62 * @users: reference count 63 */ 64struct pinctrl { 65 struct list_head node; 66 struct device *dev; 67 struct list_head states; 68 struct pinctrl_state *state; 69 struct list_head dt_maps; 70 struct kref users; 71}; 72 73/** 74 * struct pinctrl_state - a pinctrl state for a device 75 * @node: list not for struct pinctrl's @states field 76 * @name: the name of this state 77 * @settings: a list of settings for this state 78 */ 79struct pinctrl_state { 80 struct list_head node; 81 const char *name; 82 struct list_head settings; 83}; 84 85/** 86 * struct pinctrl_setting_mux - setting data for MAP_TYPE_MUX_GROUP 87 * @group: the group selector to program 88 * @func: the function selector to program 89 */ 90struct pinctrl_setting_mux { 91 unsigned group; 92 unsigned func; 93}; 94 95/** 96 * struct pinctrl_setting_configs - setting data for MAP_TYPE_CONFIGS_* 97 * @group_or_pin: the group selector or pin ID to program 98 * @configs: a pointer to an array of config parameters/values to program into 99 * hardware. Each individual pin controller defines the format and meaning 100 * of config parameters. 101 * @num_configs: the number of entries in array @configs 102 */ 103struct pinctrl_setting_configs { 104 unsigned group_or_pin; 105 unsigned long *configs; 106 unsigned num_configs; 107}; 108 109/** 110 * struct pinctrl_setting - an individual mux or config setting 111 * @node: list node for struct pinctrl_settings's @settings field 112 * @type: the type of setting 113 * @pctldev: pin control device handling to be programmed. Not used for 114 * PIN_MAP_TYPE_DUMMY_STATE. 115 * @dev_name: the name of the device using this state 116 * @data: Data specific to the setting type 117 */ 118struct pinctrl_setting { 119 struct list_head node; 120 enum pinctrl_map_type type; 121 struct pinctrl_dev *pctldev; 122 const char *dev_name; 123 union { 124 struct pinctrl_setting_mux mux; 125 struct pinctrl_setting_configs configs; 126 } data; 127}; 128 129/** 130 * struct pin_desc - pin descriptor for each physical pin in the arch 131 * @pctldev: corresponding pin control device 132 * @name: a name for the pin, e.g. the name of the pin/pad/finger on a 133 * datasheet or such 134 * @dynamic_name: if the name of this pin was dynamically allocated 135 * @mux_usecount: If zero, the pin is not claimed, and @owner should be NULL. 136 * If non-zero, this pin is claimed by @owner. This field is an integer 137 * rather than a boolean, since pinctrl_get() might process multiple 138 * mapping table entries that refer to, and hence claim, the same group 139 * or pin, and each of these will increment the @usecount. 140 * @mux_owner: The name of device that called pinctrl_get(). 141 * @mux_setting: The most recent selected mux setting for this pin, if any. 142 * @gpio_owner: If pinctrl_request_gpio() was called for this pin, this is 143 * the name of the GPIO that "owns" this pin. 144 */ 145struct pin_desc { 146 struct pinctrl_dev *pctldev; 147 const char *name; 148 bool dynamic_name; 149 /* These fields only added when supporting pinmux drivers */ 150#ifdef CONFIG_PINMUX 151 unsigned mux_usecount; 152 const char *mux_owner; 153 const struct pinctrl_setting_mux *mux_setting; 154 const char *gpio_owner; 155#endif 156}; 157 158struct pinctrl_dev *get_pinctrl_dev_from_devname(const char *dev_name); 159int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name); 160const char *pin_get_name(struct pinctrl_dev *pctldev, const unsigned pin); 161int pinctrl_get_group_selector(struct pinctrl_dev *pctldev, 162 const char *pin_group); 163 164static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, 165 unsigned int pin) 166{ 167 return radix_tree_lookup(&pctldev->pin_desc_tree, pin); 168} 169 170int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps, 171 bool dup, bool locked); 172void pinctrl_unregister_map(struct pinctrl_map const *map); 173 174extern int pinctrl_force_sleep(struct pinctrl_dev *pctldev); 175extern int pinctrl_force_default(struct pinctrl_dev *pctldev); 176 177extern struct mutex pinctrl_mutex; 178extern struct list_head pinctrldev_list; 179