.. | .. |
---|
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) { |
---|