From: Uwe Kleine-König Date: Mon, 19 Feb 2024 07:46:30 +0000 (+0100) Subject: siox: Provide a devm variant of siox_master_alloc() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=9ecfbf70537fe1209d0d27b5378260eb3e473c2f;p=linux.git siox: Provide a devm variant of siox_master_alloc() This allows to simplify siox master drivers in the next step. Acked-by: Thorsten Scherer Link: https://lore.kernel.org/r/ad141dd22c7d95ad0bd347f257ce586e1afb22a4.1708328466.git.u.kleine-koenig@pengutronix.de Signed-off-by: Uwe Kleine-König --- diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c index d4acab7036d66..86ce2f3cde919 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 f08b43b713c5c..b227e18b697a4 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);