diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2024-02-19 08:46:30 +0100 |
---|---|---|
committer | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2024-03-08 22:01:09 +0100 |
commit | 9ecfbf70537fe1209d0d27b5378260eb3e473c2f (patch) | |
tree | f46a3ef23fa1e9fc1e29b706ad4a32ce9e42ebfb /drivers/siox | |
parent | 2c12932b8e65227030cd079d18ff6ad42d262491 (diff) |
siox: Provide a devm variant of siox_master_alloc()
This allows to simplify siox master drivers in the next step.
Acked-by: Thorsten Scherer <t.scherer@eckelmann.de>
Link: https://lore.kernel.org/r/ad141dd22c7d95ad0bd347f257ce586e1afb22a4.1708328466.git.u.kleine-koenig@pengutronix.de
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Diffstat (limited to 'drivers/siox')
-rw-r--r-- | drivers/siox/siox-core.c | 25 | ||||
-rw-r--r-- | drivers/siox/siox.h | 2 |
2 files changed, 27 insertions, 0 deletions
diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c index d4acab7036d6..86ce2f3cde91 100644 --- a/drivers/siox/siox-core.c +++ b/drivers/siox/siox-core.c @@ -707,6 +707,31 @@ struct siox_master *siox_master_alloc(struct device *dev, } EXPORT_SYMBOL_GPL(siox_master_alloc); +static void devm_siox_master_put(void *data) +{ + struct siox_master *smaster = data; + + siox_master_put(smaster); +} + +struct siox_master *devm_siox_master_alloc(struct device *dev, + size_t size) +{ + struct siox_master *smaster; + int ret; + + smaster = siox_master_alloc(dev, size); + if (!smaster) + return NULL; + + ret = devm_add_action_or_reset(dev, devm_siox_master_put, smaster); + if (ret) + return NULL; + + return smaster; +} +EXPORT_SYMBOL_GPL(devm_siox_master_alloc); + int siox_master_register(struct siox_master *smaster) { int ret; diff --git a/drivers/siox/siox.h b/drivers/siox/siox.h index f08b43b713c5..b227e18b697a 100644 --- a/drivers/siox/siox.h +++ b/drivers/siox/siox.h @@ -45,5 +45,7 @@ static inline void siox_master_put(struct siox_master *smaster) put_device(&smaster->dev); } +struct siox_master *devm_siox_master_alloc(struct device *dev, size_t size); + int siox_master_register(struct siox_master *smaster); void siox_master_unregister(struct siox_master *smaster); |