Commit 80df83c2 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Ulf Hansson
Browse files

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: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Link: https://lore.kernel.org/r/6d8f9fdc-7c9e-8e4f-e6ef-5470b971c74e@gmail.com


Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 56f34e8d
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -588,6 +588,32 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)

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)
{
	struct device *dev = host->parent;
+1 −0
Original line number Diff line number Diff line
@@ -527,6 +527,7 @@ struct mmc_host {
struct device_node;

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 *);
void mmc_remove_host(struct mmc_host *);
void mmc_free_host(struct mmc_host *);