| .. | .. | 
|---|
| 516 | 516 |  | 
|---|
| 517 | 517 | EXPORT_SYMBOL(mmc_alloc_host); | 
|---|
| 518 | 518 |  | 
|---|
|  | 519 | +static void devm_mmc_host_release(struct device *dev, void *res) | 
|---|
|  | 520 | +{ | 
|---|
|  | 521 | +	mmc_free_host(*(struct mmc_host **)res); | 
|---|
|  | 522 | +} | 
|---|
|  | 523 | + | 
|---|
|  | 524 | +struct mmc_host *devm_mmc_alloc_host(struct device *dev, int extra) | 
|---|
|  | 525 | +{ | 
|---|
|  | 526 | +	struct mmc_host **dr, *host; | 
|---|
|  | 527 | + | 
|---|
|  | 528 | +	dr = devres_alloc(devm_mmc_host_release, sizeof(*dr), GFP_KERNEL); | 
|---|
|  | 529 | +	if (!dr) | 
|---|
|  | 530 | +		return ERR_PTR(-ENOMEM); | 
|---|
|  | 531 | + | 
|---|
|  | 532 | +	host = mmc_alloc_host(extra, dev); | 
|---|
|  | 533 | +	if (IS_ERR(host)) { | 
|---|
|  | 534 | +		devres_free(dr); | 
|---|
|  | 535 | +		return host; | 
|---|
|  | 536 | +	} | 
|---|
|  | 537 | + | 
|---|
|  | 538 | +	*dr = host; | 
|---|
|  | 539 | +	devres_add(dev, dr); | 
|---|
|  | 540 | + | 
|---|
|  | 541 | +	return host; | 
|---|
|  | 542 | +} | 
|---|
|  | 543 | +EXPORT_SYMBOL(devm_mmc_alloc_host); | 
|---|
|  | 544 | + | 
|---|
| 519 | 545 | static int mmc_validate_host_caps(struct mmc_host *host) | 
|---|
| 520 | 546 | { | 
|---|
| 521 | 547 | if (host->caps & MMC_CAP_SDIO_IRQ && !host->ops->enable_sdio_irq) { | 
|---|