mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
![Tony Lindgren](/assets/img/avatar_default.png)
Having the pin control framework call pin controller functions before it's probe has finished is not nice as the pin controller device driver does not yet have struct pinctrl_dev handle. Let's fix this issue by adding deferred work for late init. This is needed to be able to add pinctrl generic helper functions that expect to know struct pinctrl_dev handle. Note that we now need to call create_pinctrl() directly as we don't want to add the pin controller to the list of controllers until the hogs are claimed. We also need to pass the pinctrl_dev to the device tree parser functions as they otherwise won't find the right controller at this point. Signed-off-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
66 lines
1.7 KiB
C
66 lines
1.7 KiB
C
/*
|
|
* Internal interface to pinctrl device tree integration
|
|
*
|
|
* Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
struct of_phandle_args;
|
|
|
|
#ifdef CONFIG_OF
|
|
|
|
bool pinctrl_dt_has_hogs(struct pinctrl_dev *pctldev);
|
|
|
|
void pinctrl_dt_free_maps(struct pinctrl *p);
|
|
int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev);
|
|
|
|
int pinctrl_count_index_with_args(const struct device_node *np,
|
|
const char *list_name);
|
|
|
|
int pinctrl_parse_index_with_args(const struct device_node *np,
|
|
const char *list_name, int index,
|
|
struct of_phandle_args *out_args);
|
|
|
|
#else
|
|
|
|
static inline bool pinctrl_dt_has_hogs(struct pinctrl_dev *pctldev)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline int pinctrl_dt_to_map(struct pinctrl *p,
|
|
struct pinctrl_dev *pctldev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void pinctrl_dt_free_maps(struct pinctrl *p)
|
|
{
|
|
}
|
|
|
|
static inline int pinctrl_count_index_with_args(const struct device_node *np,
|
|
const char *list_name)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
static inline int
|
|
pinctrl_parse_index_with_args(const struct device_node *np,
|
|
const char *list_name, int index,
|
|
struct of_phandle_args *out_args)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
#endif
|