forked from Minki/linux
9af1e44fb4
A pin controller's names array is no longer marked __refdata. Hence, we can avoid copying a pin's name into the descriptor when registering it. Instead, just point at the string supplied in the pin array. This both simplifies and speeds up pin controller initialization, but also removes the hard-coded maximum pin name length. Signed-off-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
73 lines
2.4 KiB
C
73 lines
2.4 KiB
C
/*
|
|
* Core private header for the pin control subsystem
|
|
*
|
|
* Copyright (C) 2011 ST-Ericsson SA
|
|
* Written on behalf of Linaro for ST-Ericsson
|
|
*
|
|
* Author: Linus Walleij <linus.walleij@linaro.org>
|
|
*
|
|
* License terms: GNU General Public License (GPL) version 2
|
|
*/
|
|
|
|
/**
|
|
* struct pinctrl_dev - pin control class device
|
|
* @node: node to include this pin controller in the global pin controller list
|
|
* @desc: the pin controller descriptor supplied when initializing this pin
|
|
* 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
|
|
* @dev: the device entry for this pin controller
|
|
* @owner: module providing the pin controller, used for refcounting
|
|
* @driver_data: driver data for drivers registering to the pin controller
|
|
* subsystem
|
|
* @pinmux_hogs_lock: lock for the pinmux hog list
|
|
* @pinmux_hogs: list of pinmux maps hogged by this device
|
|
*/
|
|
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;
|
|
#ifdef CONFIG_PINMUX
|
|
struct mutex pinmux_hogs_lock;
|
|
struct list_head pinmux_hogs;
|
|
#endif
|
|
};
|
|
|
|
/**
|
|
* struct pin_desc - pin descriptor for each physical pin in the arch
|
|
* @pctldev: corresponding pin control device
|
|
* @name: a name for the pin, e.g. the name of the pin/pad/finger on a
|
|
* datasheet or such
|
|
* @lock: a lock to protect the descriptor structure
|
|
* @mux_requested: whether the pin is already requested by pinmux or not
|
|
* @mux_function: a named muxing function for the pin that will be passed to
|
|
* subdrivers and shown in debugfs etc
|
|
*/
|
|
struct pin_desc {
|
|
struct pinctrl_dev *pctldev;
|
|
const char *name;
|
|
spinlock_t lock;
|
|
/* These fields only added when supporting pinmux drivers */
|
|
#ifdef CONFIG_PINMUX
|
|
bool mux_requested;
|
|
char mux_function[16];
|
|
#endif
|
|
};
|
|
|
|
struct pinctrl_dev *get_pinctrl_dev_from_dev(struct device *dev,
|
|
const char *dev_name);
|
|
struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, int pin);
|
|
int pinctrl_get_device_gpio_range(unsigned gpio,
|
|
struct pinctrl_dev **outdev,
|
|
struct pinctrl_gpio_range **outrange);
|