mmc: core: add devm_mmc_alloc_host
Add a device-managed version of mmc_alloc_host(). The argument order is reversed compared to mmc_alloc_host() because device-managed functions typically have the device argument first. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Link: https://lore.kernel.org/r/6d8f9fdc-7c9e-8e4f-e6ef-5470b971c74e@gmail.com Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
56f34e8ddc
commit
80df83c2c5
@ -588,6 +588,32 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
|
|||||||
|
|
||||||
EXPORT_SYMBOL(mmc_alloc_host);
|
EXPORT_SYMBOL(mmc_alloc_host);
|
||||||
|
|
||||||
|
static void devm_mmc_host_release(struct device *dev, void *res)
|
||||||
|
{
|
||||||
|
mmc_free_host(*(struct mmc_host **)res);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct mmc_host *devm_mmc_alloc_host(struct device *dev, int extra)
|
||||||
|
{
|
||||||
|
struct mmc_host **dr, *host;
|
||||||
|
|
||||||
|
dr = devres_alloc(devm_mmc_host_release, sizeof(*dr), GFP_KERNEL);
|
||||||
|
if (!dr)
|
||||||
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
|
host = mmc_alloc_host(extra, dev);
|
||||||
|
if (IS_ERR(host)) {
|
||||||
|
devres_free(dr);
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
|
||||||
|
*dr = host;
|
||||||
|
devres_add(dev, dr);
|
||||||
|
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(devm_mmc_alloc_host);
|
||||||
|
|
||||||
static int mmc_validate_host_caps(struct mmc_host *host)
|
static int mmc_validate_host_caps(struct mmc_host *host)
|
||||||
{
|
{
|
||||||
struct device *dev = host->parent;
|
struct device *dev = host->parent;
|
||||||
|
@ -527,6 +527,7 @@ struct mmc_host {
|
|||||||
struct device_node;
|
struct device_node;
|
||||||
|
|
||||||
struct mmc_host *mmc_alloc_host(int extra, struct device *);
|
struct mmc_host *mmc_alloc_host(int extra, struct device *);
|
||||||
|
struct mmc_host *devm_mmc_alloc_host(struct device *dev, int extra);
|
||||||
int mmc_add_host(struct mmc_host *);
|
int mmc_add_host(struct mmc_host *);
|
||||||
void mmc_remove_host(struct mmc_host *);
|
void mmc_remove_host(struct mmc_host *);
|
||||||
void mmc_free_host(struct mmc_host *);
|
void mmc_free_host(struct mmc_host *);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user