mirror of https://gitee.com/openkylin/linux.git
pinctrl: Enable device link creation for pin control
A pin controller may want to create a link between itself and its clients to be sure of suspend/resume call ordering. Introduce link_consumers field in pinctrl_desc structure to let pinctrl core knows that controller expect to create a link. Signed-off-by: Benjamin Gaignard <benjamin.gaignard@st.com> [Renamed create_link to link_consumers] Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
ee11f864f1
commit
036f394dd7
|
@ -1216,6 +1216,15 @@ struct pinctrl_state *pinctrl_lookup_state(struct pinctrl *p,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pinctrl_lookup_state);
|
EXPORT_SYMBOL_GPL(pinctrl_lookup_state);
|
||||||
|
|
||||||
|
static void pinctrl_link_add(struct pinctrl_dev *pctldev,
|
||||||
|
struct device *consumer)
|
||||||
|
{
|
||||||
|
if (pctldev->desc->link_consumers)
|
||||||
|
device_link_add(consumer, pctldev->dev,
|
||||||
|
DL_FLAG_PM_RUNTIME |
|
||||||
|
DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pinctrl_commit_state() - select/activate/program a pinctrl state to HW
|
* pinctrl_commit_state() - select/activate/program a pinctrl state to HW
|
||||||
* @p: the pinctrl handle for the device that requests configuration
|
* @p: the pinctrl handle for the device that requests configuration
|
||||||
|
@ -1261,6 +1270,8 @@ static int pinctrl_commit_state(struct pinctrl *p, struct pinctrl_state *state)
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto unapply_new_state;
|
goto unapply_new_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pinctrl_link_add(setting->pctldev, p->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
p->state = state;
|
p->state = state;
|
||||||
|
|
|
@ -125,6 +125,10 @@ struct pinctrl_ops {
|
||||||
* the hardware description
|
* the hardware description
|
||||||
* @custom_conf_items: Information how to print @params in debugfs, must be
|
* @custom_conf_items: Information how to print @params in debugfs, must be
|
||||||
* the same size as the @custom_params, i.e. @num_custom_params
|
* the same size as the @custom_params, i.e. @num_custom_params
|
||||||
|
* @link_consumers: If true create a device link between pinctrl and its
|
||||||
|
* consumers (i.e. the devices requesting pin control states). This is
|
||||||
|
* sometimes necessary to ascertain the right suspend/resume order for
|
||||||
|
* example.
|
||||||
*/
|
*/
|
||||||
struct pinctrl_desc {
|
struct pinctrl_desc {
|
||||||
const char *name;
|
const char *name;
|
||||||
|
@ -139,6 +143,7 @@ struct pinctrl_desc {
|
||||||
const struct pinconf_generic_params *custom_params;
|
const struct pinconf_generic_params *custom_params;
|
||||||
const struct pin_config_item *custom_conf_items;
|
const struct pin_config_item *custom_conf_items;
|
||||||
#endif
|
#endif
|
||||||
|
bool link_consumers;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* External interface to pin controller */
|
/* External interface to pin controller */
|
||||||
|
|
Loading…
Reference in New Issue