Skip to content

Commit 2e9ba1d

Browse files
thom24linusw
authored andcommitted
pinctrl: core: add devm_pinctrl_register_mappings()
Using devm_pinctrl_register_mappings(), the core can automatically unregister pinctrl mappings. Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Thomas Richard <thomas.richard@bootlin.com> Link: https://lore.kernel.org/20250520-aaeon-up-board-pinctrl-support-v6-3-dcb3756be3c6@bootlin.com Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
1 parent 223657c commit 2e9ba1d

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

drivers/pinctrl/core.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1530,6 +1530,35 @@ void pinctrl_unregister_mappings(const struct pinctrl_map *map)
15301530
}
15311531
EXPORT_SYMBOL_GPL(pinctrl_unregister_mappings);
15321532

1533+
static void devm_pinctrl_unregister_mappings(void *maps)
1534+
{
1535+
pinctrl_unregister_mappings(maps);
1536+
}
1537+
1538+
/**
1539+
* devm_pinctrl_register_mappings() - Resource managed pinctrl_register_mappings()
1540+
* @dev: device for which mappings are registered
1541+
* @maps: the pincontrol mappings table to register. Note the pinctrl-core
1542+
* keeps a reference to the passed in maps, so they should _not_ be
1543+
* marked with __initdata.
1544+
* @num_maps: the number of maps in the mapping table
1545+
*
1546+
* Returns: 0 on success, or negative errno on failure.
1547+
*/
1548+
int devm_pinctrl_register_mappings(struct device *dev,
1549+
const struct pinctrl_map *maps,
1550+
unsigned int num_maps)
1551+
{
1552+
int ret;
1553+
1554+
ret = pinctrl_register_mappings(maps, num_maps);
1555+
if (ret)
1556+
return ret;
1557+
1558+
return devm_add_action_or_reset(dev, devm_pinctrl_unregister_mappings, (void *)maps);
1559+
}
1560+
EXPORT_SYMBOL_GPL(devm_pinctrl_register_mappings);
1561+
15331562
/**
15341563
* pinctrl_force_sleep() - turn a given controller device into sleep state
15351564
* @pctldev: pin controller device

include/linux/pinctrl/machine.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,12 +149,16 @@ struct pinctrl_map {
149149
#define PIN_MAP_CONFIGS_GROUP_HOG_DEFAULT(dev, grp, cfgs) \
150150
PIN_MAP_CONFIGS_GROUP(dev, PINCTRL_STATE_DEFAULT, dev, grp, cfgs)
151151

152+
struct device;
152153
struct pinctrl_map;
153154

154155
#ifdef CONFIG_PINCTRL
155156

156157
int pinctrl_register_mappings(const struct pinctrl_map *map,
157158
unsigned int num_maps);
159+
int devm_pinctrl_register_mappings(struct device *dev,
160+
const struct pinctrl_map *map,
161+
unsigned int num_maps);
158162
void pinctrl_unregister_mappings(const struct pinctrl_map *map);
159163
void pinctrl_provide_dummies(void);
160164
#else
@@ -165,6 +169,13 @@ static inline int pinctrl_register_mappings(const struct pinctrl_map *map,
165169
return 0;
166170
}
167171

172+
static inline int devm_pinctrl_register_mappings(struct device *dev,
173+
const struct pinctrl_map *map,
174+
unsigned int num_maps)
175+
{
176+
return 0;
177+
}
178+
168179
static inline void pinctrl_unregister_mappings(const struct pinctrl_map *map)
169180
{
170181
}

0 commit comments

Comments
 (0)