pinctrl: refactor struct pinctrl handling in core.c vs pinmux.c
This change separates two aspects of struct pinctrl: a) The data representation of the parsed mapping table, into: 1) The top-level struct pinctrl object, a single entity returned by pinctrl_get(). 2) The parsed version of each mapping table entry, struct pinctrl_setting, of which there is one per mapping table entry. b) The code that handles this; the code for (1) above is in core.c, and the code to parse/execute each entry in (2) above is in pinmux.c, while the iteration over multiple settings is lifted to core.c. This will allow the following future changes: 1) pinctrl_get() API rework, so that struct pinctrl represents all states for the device, and the device can select between them without calling put()/get() again. 2) To support that, a struct pinctrl_state object will be inserted into the data model between the struct pinctrl and struct pinctrl_setting. 3) The mapping table will be extended to allow specification of pin config settings too. To support this, struct pinctrl_setting will be enhanced to store either mux settings or config settings, and functions will be added to pinconf.c to parse/execute pin configuration settings. Signed-off-by: Stephen Warren <swarren@nvidia.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Dong Aisheng <dong.aisheng@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Cette révision appartient à :

révisé par
Linus Walleij

Parent
57b676f9c1
révision
7ecdb16fe6
@@ -49,22 +49,31 @@ struct pinctrl_dev {
|
||||
* struct pinctrl - per-device pin control state holder
|
||||
* @node: global list node
|
||||
* @dev: the device using this pin control handle
|
||||
* @state: the state name passed to pinctrl_get()
|
||||
* @usecount: the number of active users of this pin controller setting, used
|
||||
* to keep track of nested use cases
|
||||
* @pctldev: pin control device handling this pin control handle
|
||||
* @groups: the group selectors for the pinmux device and
|
||||
* selector combination handling this pinmux, this is a list that
|
||||
* will be traversed on all pinmux operations such as
|
||||
* get/put/enable/disable
|
||||
* @settings: a list of settings for this device/state
|
||||
*/
|
||||
struct pinctrl {
|
||||
struct list_head node;
|
||||
struct device *dev;
|
||||
const char *state;
|
||||
unsigned usecount;
|
||||
struct list_head settings;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct pinctrl_setting - an individual mux setting
|
||||
* @node: list node for struct pinctrl's @settings field
|
||||
* @pctldev: pin control device handling to be programmed
|
||||
* @group_selector: the group selector to program
|
||||
* @func_selector: the function selector to program
|
||||
*/
|
||||
struct pinctrl_setting {
|
||||
struct list_head node;
|
||||
struct pinctrl_dev *pctldev;
|
||||
#ifdef CONFIG_PINMUX
|
||||
struct list_head groups;
|
||||
#endif
|
||||
unsigned group_selector;
|
||||
unsigned func_selector;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur