1 /* 2 * linux/drivers/mmc/sdio.c 3 * 4 * Copyright 2006-2007 Pierre Ossman 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or (at 9 * your option) any later version. 10 */ 11 12 #include <linux/err.h> 13 #include <linux/pm_runtime.h> 14 15 #include <linux/mmc/host.h> 16 #include <linux/mmc/card.h> 17 #include <linux/mmc/sdio.h> 18 #include <linux/mmc/sdio_func.h> 19 #include <linux/mmc/sdio_ids.h> 20 21 #include "core.h" 22 #include "bus.h" 23 #include "sd.h" 24 #include "sdio_bus.h" 25 #include "mmc_ops.h" 26 #include "sd_ops.h" 27 #include "sdio_ops.h" 28 #include "sdio_cis.h" 29 30 static int sdio_read_fbr(struct sdio_func *func) 31 { 32 int ret; 33 unsigned char data; 34 35 if (mmc_card_nonstd_func_interface(func->card)) { 36 func->class = SDIO_CLASS_NONE; 37 return 0; 38 } 39 40 ret = mmc_io_rw_direct(func->card, 0, 0, 41 SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF, 0, &data); 42 if (ret) 43 goto out; 44 45 data &= 0x0f; 46 47 if (data == 0x0f) { 48 ret = mmc_io_rw_direct(func->card, 0, 0, 49 SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF_EXT, 0, &data); 50 if (ret) 51 goto out; 52 } 53 54 func->class = data; 55 56 out: 57 return ret; 58 } 59 60 static int sdio_init_func(struct mmc_card *card, unsigned int fn) 61 { 62 int ret; 63 struct sdio_func *func; 64 65 BUG_ON(fn > SDIO_MAX_FUNCS); 66 67 func = sdio_alloc_func(card); 68 if (IS_ERR(func)) 69 return PTR_ERR(func); 70 71 func->num = fn; 72 73 if (!(card->quirks & MMC_QUIRK_NONSTD_SDIO)) { 74 ret = sdio_read_fbr(func); 75 if (ret) 76 goto fail; 77 78 ret = sdio_read_func_cis(func); 79 if (ret) 80 goto fail; 81 } else { 82 func->vendor = func->card->cis.vendor; 83 func->device = func->card->cis.device; 84 func->max_blksize = func->card->cis.blksize; 85 } 86 87 card->sdio_func[fn - 1] = func; 88 89 return 0; 90 91 fail: 92 /* 93 * It is okay to remove the function here even though we hold 94 * the host lock as we haven't registered the device yet. 95 */ 96 sdio_remove_func(func); 97 return ret; 98 } 99 100 static int sdio_read_cccr(struct mmc_card *card) 101 { 102 int ret; 103 int cccr_vsn; 104 unsigned char data; 105 106 memset(&card->cccr, 0, sizeof(struct sdio_cccr)); 107 108 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CCCR, 0, &data); 109 if (ret) 110 goto out; 111 112 cccr_vsn = data & 0x0f; 113 114 if (cccr_vsn > SDIO_CCCR_REV_3_00) { 115 pr_err("%s: unrecognised CCCR structure version %d\n", 116 mmc_hostname(card->host), cccr_vsn); 117 return -EINVAL; 118 } 119 120 card->cccr.sdio_vsn = (data & 0xf0) >> 4; 121 122 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CAPS, 0, &data); 123 if (ret) 124 goto out; 125 126 if (data & SDIO_CCCR_CAP_SMB) 127 card->cccr.multi_block = 1; 128 if (data & SDIO_CCCR_CAP_LSC) 129 card->cccr.low_speed = 1; 130 if (data & SDIO_CCCR_CAP_4BLS) 131 card->cccr.wide_bus = 1; 132 133 if (cccr_vsn >= SDIO_CCCR_REV_1_10) { 134 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_POWER, 0, &data); 135 if (ret) 136 goto out; 137 138 if (data & SDIO_POWER_SMPC) 139 card->cccr.high_power = 1; 140 } 141 142 if (cccr_vsn >= SDIO_CCCR_REV_1_20) { 143 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &data); 144 if (ret) 145 goto out; 146 147 if (data & SDIO_SPEED_SHS) 148 card->cccr.high_speed = 1; 149 } 150 151 out: 152 return ret; 153 } 154 155 static int sdio_enable_wide(struct mmc_card *card) 156 { 157 int ret; 158 u8 ctrl; 159 160 if (!(card->host->caps & MMC_CAP_4_BIT_DATA)) 161 return 0; 162 163 if (card->cccr.low_speed && !card->cccr.wide_bus) 164 return 0; 165 166 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl); 167 if (ret) 168 return ret; 169 170 ctrl |= SDIO_BUS_WIDTH_4BIT; 171 172 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL); 173 if (ret) 174 return ret; 175 176 return 1; 177 } 178 179 /* 180 * If desired, disconnect the pull-up resistor on CD/DAT[3] (pin 1) 181 * of the card. This may be required on certain setups of boards, 182 * controllers and embedded sdio device which do not need the card's 183 * pull-up. As a result, card detection is disabled and power is saved. 184 */ 185 static int sdio_disable_cd(struct mmc_card *card) 186 { 187 int ret; 188 u8 ctrl; 189 190 if (!mmc_card_disable_cd(card)) 191 return 0; 192 193 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl); 194 if (ret) 195 return ret; 196 197 ctrl |= SDIO_BUS_CD_DISABLE; 198 199 return mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL); 200 } 201 202 /* 203 * Devices that remain active during a system suspend are 204 * put back into 1-bit mode. 205 */ 206 static int sdio_disable_wide(struct mmc_card *card) 207 { 208 int ret; 209 u8 ctrl; 210 211 if (!(card->host->caps & MMC_CAP_4_BIT_DATA)) 212 return 0; 213 214 if (card->cccr.low_speed && !card->cccr.wide_bus) 215 return 0; 216 217 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl); 218 if (ret) 219 return ret; 220 221 if (!(ctrl & SDIO_BUS_WIDTH_4BIT)) 222 return 0; 223 224 ctrl &= ~SDIO_BUS_WIDTH_4BIT; 225 ctrl |= SDIO_BUS_ASYNC_INT; 226 227 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL); 228 if (ret) 229 return ret; 230 231 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1); 232 233 return 0; 234 } 235 236 237 static int sdio_enable_4bit_bus(struct mmc_card *card) 238 { 239 int err; 240 241 if (card->type == MMC_TYPE_SDIO) 242 return sdio_enable_wide(card); 243 244 if ((card->host->caps & MMC_CAP_4_BIT_DATA) && 245 (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) { 246 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4); 247 if (err) 248 return err; 249 } else 250 return 0; 251 252 err = sdio_enable_wide(card); 253 if (err <= 0) 254 mmc_app_set_bus_width(card, MMC_BUS_WIDTH_1); 255 256 return err; 257 } 258 259 260 /* 261 * Test if the card supports high-speed mode and, if so, switch to it. 262 */ 263 static int mmc_sdio_switch_hs(struct mmc_card *card, int enable) 264 { 265 int ret; 266 u8 speed; 267 268 if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED)) 269 return 0; 270 271 if (!card->cccr.high_speed) 272 return 0; 273 274 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed); 275 if (ret) 276 return ret; 277 278 if (enable) 279 speed |= SDIO_SPEED_EHS; 280 else 281 speed &= ~SDIO_SPEED_EHS; 282 283 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL); 284 if (ret) 285 return ret; 286 287 return 1; 288 } 289 290 /* 291 * Enable SDIO/combo card's high-speed mode. Return 0/1 if [not]supported. 292 */ 293 static int sdio_enable_hs(struct mmc_card *card) 294 { 295 int ret; 296 297 ret = mmc_sdio_switch_hs(card, true); 298 if (ret <= 0 || card->type == MMC_TYPE_SDIO) 299 return ret; 300 301 ret = mmc_sd_switch_hs(card); 302 if (ret <= 0) 303 mmc_sdio_switch_hs(card, false); 304 305 return ret; 306 } 307 308 static unsigned mmc_sdio_get_max_clock(struct mmc_card *card) 309 { 310 unsigned max_dtr; 311 312 if (mmc_card_highspeed(card)) { 313 /* 314 * The SDIO specification doesn't mention how 315 * the CIS transfer speed register relates to 316 * high-speed, but it seems that 50 MHz is 317 * mandatory. 318 */ 319 max_dtr = 50000000; 320 } else { 321 max_dtr = card->cis.max_dtr; 322 } 323 324 if (card->type == MMC_TYPE_SD_COMBO) 325 max_dtr = min(max_dtr, mmc_sd_get_max_clock(card)); 326 327 return max_dtr; 328 } 329 330 /* 331 * Handle the detection and initialisation of a card. 332 * 333 * In the case of a resume, "oldcard" will contain the card 334 * we're trying to reinitialise. 335 */ 336 static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, 337 struct mmc_card *oldcard, int powered_resume) 338 { 339 struct mmc_card *card; 340 int err; 341 342 BUG_ON(!host); 343 WARN_ON(!host->claimed); 344 345 /* 346 * Inform the card of the voltage 347 */ 348 if (!powered_resume) { 349 err = mmc_send_io_op_cond(host, host->ocr, &ocr); 350 if (err) 351 goto err; 352 } 353 354 /* 355 * For SPI, enable CRC as appropriate. 356 */ 357 if (mmc_host_is_spi(host)) { 358 err = mmc_spi_set_crc(host, use_spi_crc); 359 if (err) 360 goto err; 361 } 362 363 /* 364 * Allocate card structure. 365 */ 366 card = mmc_alloc_card(host, NULL); 367 if (IS_ERR(card)) { 368 err = PTR_ERR(card); 369 goto err; 370 } 371 372 if ((ocr & R4_MEMORY_PRESENT) && 373 mmc_sd_get_cid(host, host->ocr & ocr, card->raw_cid, NULL) == 0) { 374 card->type = MMC_TYPE_SD_COMBO; 375 376 if (oldcard && (oldcard->type != MMC_TYPE_SD_COMBO || 377 memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) { 378 mmc_remove_card(card); 379 return -ENOENT; 380 } 381 } else { 382 card->type = MMC_TYPE_SDIO; 383 384 if (oldcard && oldcard->type != MMC_TYPE_SDIO) { 385 mmc_remove_card(card); 386 return -ENOENT; 387 } 388 } 389 390 /* 391 * Call the optional HC's init_card function to handle quirks. 392 */ 393 if (host->ops->init_card) 394 host->ops->init_card(host, card); 395 396 /* 397 * For native busses: set card RCA and quit open drain mode. 398 */ 399 if (!powered_resume && !mmc_host_is_spi(host)) { 400 err = mmc_send_relative_addr(host, &card->rca); 401 if (err) 402 goto remove; 403 404 /* 405 * Update oldcard with the new RCA received from the SDIO 406 * device -- we're doing this so that it's updated in the 407 * "card" struct when oldcard overwrites that later. 408 */ 409 if (oldcard) 410 oldcard->rca = card->rca; 411 } 412 413 /* 414 * Read CSD, before selecting the card 415 */ 416 if (!oldcard && card->type == MMC_TYPE_SD_COMBO) { 417 err = mmc_sd_get_csd(host, card); 418 if (err) 419 return err; 420 421 mmc_decode_cid(card); 422 } 423 424 /* 425 * Select card, as all following commands rely on that. 426 */ 427 if (!powered_resume && !mmc_host_is_spi(host)) { 428 err = mmc_select_card(card); 429 if (err) 430 goto remove; 431 } 432 433 if (card->quirks & MMC_QUIRK_NONSTD_SDIO) { 434 /* 435 * This is non-standard SDIO device, meaning it doesn't 436 * have any CIA (Common I/O area) registers present. 437 * It's host's responsibility to fill cccr and cis 438 * structures in init_card(). 439 */ 440 mmc_set_clock(host, card->cis.max_dtr); 441 442 if (card->cccr.high_speed) { 443 mmc_card_set_highspeed(card); 444 mmc_set_timing(card->host, MMC_TIMING_SD_HS); 445 } 446 447 goto finish; 448 } 449 450 /* 451 * Read the common registers. 452 */ 453 err = sdio_read_cccr(card); 454 if (err) 455 goto remove; 456 457 /* 458 * Read the common CIS tuples. 459 */ 460 err = sdio_read_common_cis(card); 461 if (err) 462 goto remove; 463 464 if (oldcard) { 465 int same = (card->cis.vendor == oldcard->cis.vendor && 466 card->cis.device == oldcard->cis.device); 467 mmc_remove_card(card); 468 if (!same) 469 return -ENOENT; 470 471 card = oldcard; 472 } 473 mmc_fixup_device(card, NULL); 474 475 if (card->type == MMC_TYPE_SD_COMBO) { 476 err = mmc_sd_setup_card(host, card, oldcard != NULL); 477 /* handle as SDIO-only card if memory init failed */ 478 if (err) { 479 mmc_go_idle(host); 480 if (mmc_host_is_spi(host)) 481 /* should not fail, as it worked previously */ 482 mmc_spi_set_crc(host, use_spi_crc); 483 card->type = MMC_TYPE_SDIO; 484 } else 485 card->dev.type = &sd_type; 486 } 487 488 /* 489 * If needed, disconnect card detection pull-up resistor. 490 */ 491 err = sdio_disable_cd(card); 492 if (err) 493 goto remove; 494 495 /* 496 * Switch to high-speed (if supported). 497 */ 498 err = sdio_enable_hs(card); 499 if (err > 0) 500 mmc_sd_go_highspeed(card); 501 else if (err) 502 goto remove; 503 504 /* 505 * Change to the card's maximum speed. 506 */ 507 mmc_set_clock(host, mmc_sdio_get_max_clock(card)); 508 509 /* 510 * Switch to wider bus (if supported). 511 */ 512 err = sdio_enable_4bit_bus(card); 513 if (err > 0) 514 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4); 515 else if (err) 516 goto remove; 517 518 finish: 519 if (!oldcard) 520 host->card = card; 521 return 0; 522 523 remove: 524 if (!oldcard) 525 mmc_remove_card(card); 526 527 err: 528 return err; 529 } 530 531 /* 532 * Host is being removed. Free up the current card. 533 */ 534 static void mmc_sdio_remove(struct mmc_host *host) 535 { 536 int i; 537 538 BUG_ON(!host); 539 BUG_ON(!host->card); 540 541 for (i = 0;i < host->card->sdio_funcs;i++) { 542 if (host->card->sdio_func[i]) { 543 sdio_remove_func(host->card->sdio_func[i]); 544 host->card->sdio_func[i] = NULL; 545 } 546 } 547 548 mmc_remove_card(host->card); 549 host->card = NULL; 550 } 551 552 /* 553 * Card detection callback from host. 554 */ 555 static void mmc_sdio_detect(struct mmc_host *host) 556 { 557 int err; 558 559 BUG_ON(!host); 560 BUG_ON(!host->card); 561 562 /* Make sure card is powered before detecting it */ 563 if (host->caps & MMC_CAP_POWER_OFF_CARD) { 564 err = pm_runtime_get_sync(&host->card->dev); 565 if (err < 0) 566 goto out; 567 } 568 569 mmc_claim_host(host); 570 571 /* 572 * Just check if our card has been removed. 573 */ 574 err = mmc_select_card(host->card); 575 576 mmc_release_host(host); 577 578 /* 579 * Tell PM core it's OK to power off the card now. 580 * 581 * The _sync variant is used in order to ensure that the card 582 * is left powered off in case an error occurred, and the card 583 * is going to be removed. 584 * 585 * Since there is no specific reason to believe a new user 586 * is about to show up at this point, the _sync variant is 587 * desirable anyway. 588 */ 589 if (host->caps & MMC_CAP_POWER_OFF_CARD) 590 pm_runtime_put_sync(&host->card->dev); 591 592 out: 593 if (err) { 594 mmc_sdio_remove(host); 595 596 mmc_claim_host(host); 597 mmc_detach_bus(host); 598 mmc_power_off(host); 599 mmc_release_host(host); 600 } 601 } 602 603 /* 604 * SDIO suspend. We need to suspend all functions separately. 605 * Therefore all registered functions must have drivers with suspend 606 * and resume methods. Failing that we simply remove the whole card. 607 */ 608 static int mmc_sdio_suspend(struct mmc_host *host) 609 { 610 int i, err = 0; 611 612 for (i = 0; i < host->card->sdio_funcs; i++) { 613 struct sdio_func *func = host->card->sdio_func[i]; 614 if (func && sdio_func_present(func) && func->dev.driver) { 615 const struct dev_pm_ops *pmops = func->dev.driver->pm; 616 if (!pmops || !pmops->suspend || !pmops->resume) { 617 /* force removal of entire card in that case */ 618 err = -ENOSYS; 619 } else 620 err = pmops->suspend(&func->dev); 621 if (err) 622 break; 623 } 624 } 625 while (err && --i >= 0) { 626 struct sdio_func *func = host->card->sdio_func[i]; 627 if (func && sdio_func_present(func) && func->dev.driver) { 628 const struct dev_pm_ops *pmops = func->dev.driver->pm; 629 pmops->resume(&func->dev); 630 } 631 } 632 633 if (!err && mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { 634 mmc_claim_host(host); 635 sdio_disable_wide(host->card); 636 mmc_release_host(host); 637 } 638 639 return err; 640 } 641 642 static int mmc_sdio_resume(struct mmc_host *host) 643 { 644 int i, err = 0; 645 646 BUG_ON(!host); 647 BUG_ON(!host->card); 648 649 /* Basic card reinitialization. */ 650 mmc_claim_host(host); 651 652 /* No need to reinitialize powered-resumed nonremovable cards */ 653 if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) 654 err = mmc_sdio_init_card(host, host->ocr, host->card, 655 mmc_card_keep_power(host)); 656 else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { 657 /* We may have switched to 1-bit mode during suspend */ 658 err = sdio_enable_4bit_bus(host->card); 659 if (err > 0) { 660 mmc_set_bus_width(host, MMC_BUS_WIDTH_4); 661 err = 0; 662 } 663 } 664 665 if (!err && host->sdio_irqs) 666 mmc_signal_sdio_irq(host); 667 mmc_release_host(host); 668 669 /* 670 * If the card looked to be the same as before suspending, then 671 * we proceed to resume all card functions. If one of them returns 672 * an error then we simply return that error to the core and the 673 * card will be redetected as new. It is the responsibility of 674 * the function driver to perform further tests with the extra 675 * knowledge it has of the card to confirm the card is indeed the 676 * same as before suspending (same MAC address for network cards, 677 * etc.) and return an error otherwise. 678 */ 679 for (i = 0; !err && i < host->card->sdio_funcs; i++) { 680 struct sdio_func *func = host->card->sdio_func[i]; 681 if (func && sdio_func_present(func) && func->dev.driver) { 682 const struct dev_pm_ops *pmops = func->dev.driver->pm; 683 err = pmops->resume(&func->dev); 684 } 685 } 686 687 return err; 688 } 689 690 static int mmc_sdio_power_restore(struct mmc_host *host) 691 { 692 int ret; 693 u32 ocr; 694 695 BUG_ON(!host); 696 BUG_ON(!host->card); 697 698 mmc_claim_host(host); 699 700 /* 701 * Reset the card by performing the same steps that are taken by 702 * mmc_rescan_try_freq() and mmc_attach_sdio() during a "normal" probe. 703 * 704 * sdio_reset() is technically not needed. Having just powered up the 705 * hardware, it should already be in reset state. However, some 706 * platforms (such as SD8686 on OLPC) do not instantly cut power, 707 * meaning that a reset is required when restoring power soon after 708 * powering off. It is harmless in other cases. 709 * 710 * The CMD5 reset (mmc_send_io_op_cond()), according to the SDIO spec, 711 * is not necessary for non-removable cards. However, it is required 712 * for OLPC SD8686 (which expects a [CMD5,5,3,7] init sequence), and 713 * harmless in other situations. 714 * 715 * With these steps taken, mmc_select_voltage() is also required to 716 * restore the correct voltage setting of the card. 717 */ 718 sdio_reset(host); 719 mmc_go_idle(host); 720 mmc_send_if_cond(host, host->ocr_avail); 721 722 ret = mmc_send_io_op_cond(host, 0, &ocr); 723 if (ret) 724 goto out; 725 726 if (host->ocr_avail_sdio) 727 host->ocr_avail = host->ocr_avail_sdio; 728 729 host->ocr = mmc_select_voltage(host, ocr & ~0x7F); 730 if (!host->ocr) { 731 ret = -EINVAL; 732 goto out; 733 } 734 735 ret = mmc_sdio_init_card(host, host->ocr, host->card, 736 mmc_card_keep_power(host)); 737 if (!ret && host->sdio_irqs) 738 mmc_signal_sdio_irq(host); 739 740 out: 741 mmc_release_host(host); 742 743 return ret; 744 } 745 746 static const struct mmc_bus_ops mmc_sdio_ops = { 747 .remove = mmc_sdio_remove, 748 .detect = mmc_sdio_detect, 749 .suspend = mmc_sdio_suspend, 750 .resume = mmc_sdio_resume, 751 .power_restore = mmc_sdio_power_restore, 752 }; 753 754 755 /* 756 * Starting point for SDIO card init. 757 */ 758 int mmc_attach_sdio(struct mmc_host *host) 759 { 760 int err, i, funcs; 761 u32 ocr; 762 struct mmc_card *card; 763 764 BUG_ON(!host); 765 WARN_ON(!host->claimed); 766 767 err = mmc_send_io_op_cond(host, 0, &ocr); 768 if (err) 769 return err; 770 771 mmc_attach_bus(host, &mmc_sdio_ops); 772 if (host->ocr_avail_sdio) 773 host->ocr_avail = host->ocr_avail_sdio; 774 775 /* 776 * Sanity check the voltages that the card claims to 777 * support. 778 */ 779 if (ocr & 0x7F) { 780 pr_warning("%s: card claims to support voltages " 781 "below the defined range. These will be ignored.\n", 782 mmc_hostname(host)); 783 ocr &= ~0x7F; 784 } 785 786 host->ocr = mmc_select_voltage(host, ocr); 787 788 /* 789 * Can we support the voltage(s) of the card(s)? 790 */ 791 if (!host->ocr) { 792 err = -EINVAL; 793 goto err; 794 } 795 796 /* 797 * Detect and init the card. 798 */ 799 err = mmc_sdio_init_card(host, host->ocr, NULL, 0); 800 if (err) 801 goto err; 802 card = host->card; 803 804 /* 805 * Enable runtime PM only if supported by host+card+board 806 */ 807 if (host->caps & MMC_CAP_POWER_OFF_CARD) { 808 /* 809 * Let runtime PM core know our card is active 810 */ 811 err = pm_runtime_set_active(&card->dev); 812 if (err) 813 goto remove; 814 815 /* 816 * Enable runtime PM for this card 817 */ 818 pm_runtime_enable(&card->dev); 819 } 820 821 /* 822 * The number of functions on the card is encoded inside 823 * the ocr. 824 */ 825 funcs = (ocr & 0x70000000) >> 28; 826 card->sdio_funcs = 0; 827 828 /* 829 * Initialize (but don't add) all present functions. 830 */ 831 for (i = 0; i < funcs; i++, card->sdio_funcs++) { 832 err = sdio_init_func(host->card, i + 1); 833 if (err) 834 goto remove; 835 836 /* 837 * Enable Runtime PM for this func (if supported) 838 */ 839 if (host->caps & MMC_CAP_POWER_OFF_CARD) 840 pm_runtime_enable(&card->sdio_func[i]->dev); 841 } 842 843 /* 844 * First add the card to the driver model... 845 */ 846 mmc_release_host(host); 847 err = mmc_add_card(host->card); 848 if (err) 849 goto remove_added; 850 851 /* 852 * ...then the SDIO functions. 853 */ 854 for (i = 0;i < funcs;i++) { 855 err = sdio_add_func(host->card->sdio_func[i]); 856 if (err) 857 goto remove_added; 858 } 859 860 mmc_claim_host(host); 861 return 0; 862 863 864 remove_added: 865 /* Remove without lock if the device has been added. */ 866 mmc_sdio_remove(host); 867 mmc_claim_host(host); 868 remove: 869 /* And with lock if it hasn't been added. */ 870 mmc_release_host(host); 871 if (host->card) 872 mmc_sdio_remove(host); 873 mmc_claim_host(host); 874 err: 875 mmc_detach_bus(host); 876 877 pr_err("%s: error %d whilst initialising SDIO card\n", 878 mmc_hostname(host), err); 879 880 return err; 881 } 882 883