diff options
author | Stephen Warren <swarren@nvidia.com> | 2012-02-22 14:26:01 -0700 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2012-02-24 06:30:50 +0100 |
commit | 2304b4737f492b6ee9b714d8129e153af0bef989 (patch) | |
tree | 172859048b3a66ac06a80e0c800b4a1ebef7a485 /drivers/pinctrl/core.h | |
parent | 02f5b98951c631a3c4b3cc398dd2b14d274a6155 (diff) | |
download | linux-2304b4737f492b6ee9b714d8129e153af0bef989.tar.bz2 |
pinctrl: remove pin and hogs locks from struct pinctrl_dev
struct pinctrl_dev's pin_desc_tree_lock and pinctrl_hogs_lock aren't
useful; the data they protect is read-only except when registering or
unregistering a pinctrl_dev, and at those times, it doesn't make sense to
protect one part of the structure independently from the rest.
Move pinctrl_init_device_debugfs() to the end of pinctrl_register() so
that debugfs can't access the struct pinctrl_dev until it's fully
initialized, i.e. after the hogs are set up.
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl/core.h')
-rw-r--r-- | drivers/pinctrl/core.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/pinctrl/core.h b/drivers/pinctrl/core.h index 061c57d0e8f9..7551611666f8 100644 --- a/drivers/pinctrl/core.h +++ b/drivers/pinctrl/core.h @@ -20,7 +20,6 @@ struct pinctrl_gpio_range; * controller * @pin_desc_tree: each pin descriptor for this pin controller is stored in * this radix tree - * @pin_desc_tree_lock: lock for the descriptor tree * @gpio_ranges: a list of GPIO ranges that is handled by this pin controller, * ranges are added to this list at runtime * @gpio_ranges_lock: lock for the GPIO ranges list @@ -28,7 +27,6 @@ struct pinctrl_gpio_range; * @owner: module providing the pin controller, used for refcounting * @driver_data: driver data for drivers registering to the pin controller * subsystem - * @pinctrl_hogs_lock: lock for the pin control hog list * @pinctrl_hogs: list of pin control maps hogged by this device * @device_root: debugfs root for this device */ @@ -36,13 +34,11 @@ struct pinctrl_dev { struct list_head node; struct pinctrl_desc *desc; struct radix_tree_root pin_desc_tree; - spinlock_t pin_desc_tree_lock; struct list_head gpio_ranges; struct mutex gpio_ranges_lock; struct device *dev; struct module *owner; void *driver_data; - struct mutex pinctrl_hogs_lock; struct list_head pinctrl_hogs; #ifdef CONFIG_DEBUG_FS struct dentry *device_root; @@ -99,7 +95,12 @@ struct pin_desc { }; struct pinctrl_dev *get_pinctrl_dev_from_devname(const char *dev_name); -struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, unsigned int pin); int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name); int pinctrl_get_group_selector(struct pinctrl_dev *pctldev, const char *pin_group); + +static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, + unsigned int pin) +{ + return radix_tree_lookup(&pctldev->pin_desc_tree, pin); +} |