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_1_20) { 115 printk(KERN_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 mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL); 413 } 414 415 /* 416 * Read CSD, before selecting the card 417 */ 418 if (!oldcard && card->type == MMC_TYPE_SD_COMBO) { 419 err = mmc_sd_get_csd(host, card); 420 if (err) 421 return err; 422 423 mmc_decode_cid(card); 424 } 425 426 /* 427 * Select card, as all following commands rely on that. 428 */ 429 if (!powered_resume && !mmc_host_is_spi(host)) { 430 err = mmc_select_card(card); 431 if (err) 432 goto remove; 433 } 434 435 if (card->quirks & MMC_QUIRK_NONSTD_SDIO) { 436 /* 437 * This is non-standard SDIO device, meaning it doesn't 438 * have any CIA (Common I/O area) registers present. 439 * It's host's responsibility to fill cccr and cis 440 * structures in init_card(). 441 */ 442 mmc_set_clock(host, card->cis.max_dtr); 443 444 if (card->cccr.high_speed) { 445 mmc_card_set_highspeed(card); 446 mmc_set_timing(card->host, MMC_TIMING_SD_HS); 447 } 448 449 goto finish; 450 } 451 452 /* 453 * Read the common registers. 454 */ 455 err = sdio_read_cccr(card); 456 if (err) 457 goto remove; 458 459 /* 460 * Read the common CIS tuples. 461 */ 462 err = sdio_read_common_cis(card); 463 if (err) 464 goto remove; 465 466 if (oldcard) { 467 int same = (card->cis.vendor == oldcard->cis.vendor && 468 card->cis.device == oldcard->cis.device); 469 mmc_remove_card(card); 470 if (!same) 471 return -ENOENT; 472 473 card = oldcard; 474 } 475 mmc_fixup_device(card, NULL); 476 477 if (card->type == MMC_TYPE_SD_COMBO) { 478 err = mmc_sd_setup_card(host, card, oldcard != NULL); 479 /* handle as SDIO-only card if memory init failed */ 480 if (err) { 481 mmc_go_idle(host); 482 if (mmc_host_is_spi(host)) 483 /* should not fail, as it worked previously */ 484 mmc_spi_set_crc(host, use_spi_crc); 485 card->type = MMC_TYPE_SDIO; 486 } else 487 card->dev.type = &sd_type; 488 } 489 490 /* 491 * If needed, disconnect card detection pull-up resistor. 492 */ 493 err = sdio_disable_cd(card); 494 if (err) 495 goto remove; 496 497 /* 498 * Switch to high-speed (if supported). 499 */ 500 err = sdio_enable_hs(card); 501 if (err > 0) 502 mmc_sd_go_highspeed(card); 503 else if (err) 504 goto remove; 505 506 /* 507 * Change to the card's maximum speed. 508 */ 509 mmc_set_clock(host, mmc_sdio_get_max_clock(card)); 510 511 /* 512 * Switch to wider bus (if supported). 513 */ 514 err = sdio_enable_4bit_bus(card); 515 if (err > 0) 516 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4); 517 else if (err) 518 goto remove; 519 520 finish: 521 if (!oldcard) 522 host->card = card; 523 return 0; 524 525 remove: 526 if (!oldcard) 527 mmc_remove_card(card); 528 529 err: 530 return err; 531 } 532 533 /* 534 * Host is being removed. Free up the current card. 535 */ 536 static void mmc_sdio_remove(struct mmc_host *host) 537 { 538 int i; 539 540 BUG_ON(!host); 541 BUG_ON(!host->card); 542 543 for (i = 0;i < host->card->sdio_funcs;i++) { 544 if (host->card->sdio_func[i]) { 545 sdio_remove_func(host->card->sdio_func[i]); 546 host->card->sdio_func[i] = NULL; 547 } 548 } 549 550 mmc_remove_card(host->card); 551 host->card = NULL; 552 } 553 554 /* 555 * Card detection callback from host. 556 */ 557 static void mmc_sdio_detect(struct mmc_host *host) 558 { 559 int err; 560 561 BUG_ON(!host); 562 BUG_ON(!host->card); 563 564 /* Make sure card is powered before detecting it */ 565 if (host->caps & MMC_CAP_POWER_OFF_CARD) { 566 err = pm_runtime_get_sync(&host->card->dev); 567 if (err < 0) 568 goto out; 569 } 570 571 mmc_claim_host(host); 572 573 /* 574 * Just check if our card has been removed. 575 */ 576 err = mmc_select_card(host->card); 577 578 mmc_release_host(host); 579 580 /* 581 * Tell PM core it's OK to power off the card now. 582 * 583 * The _sync variant is used in order to ensure that the card 584 * is left powered off in case an error occurred, and the card 585 * is going to be removed. 586 * 587 * Since there is no specific reason to believe a new user 588 * is about to show up at this point, the _sync variant is 589 * desirable anyway. 590 */ 591 if (host->caps & MMC_CAP_POWER_OFF_CARD) 592 pm_runtime_put_sync(&host->card->dev); 593 594 out: 595 if (err) { 596 mmc_sdio_remove(host); 597 598 mmc_claim_host(host); 599 mmc_detach_bus(host); 600 mmc_release_host(host); 601 } 602 } 603 604 /* 605 * SDIO suspend. We need to suspend all functions separately. 606 * Therefore all registered functions must have drivers with suspend 607 * and resume methods. Failing that we simply remove the whole card. 608 */ 609 static int mmc_sdio_suspend(struct mmc_host *host) 610 { 611 int i, err = 0; 612 613 for (i = 0; i < host->card->sdio_funcs; i++) { 614 struct sdio_func *func = host->card->sdio_func[i]; 615 if (func && sdio_func_present(func) && func->dev.driver) { 616 const struct dev_pm_ops *pmops = func->dev.driver->pm; 617 if (!pmops || !pmops->suspend || !pmops->resume) { 618 /* force removal of entire card in that case */ 619 err = -ENOSYS; 620 } else 621 err = pmops->suspend(&func->dev); 622 if (err) 623 break; 624 } 625 } 626 while (err && --i >= 0) { 627 struct sdio_func *func = host->card->sdio_func[i]; 628 if (func && sdio_func_present(func) && func->dev.driver) { 629 const struct dev_pm_ops *pmops = func->dev.driver->pm; 630 pmops->resume(&func->dev); 631 } 632 } 633 634 if (!err && mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { 635 mmc_claim_host(host); 636 sdio_disable_wide(host->card); 637 mmc_release_host(host); 638 } 639 640 return err; 641 } 642 643 static int mmc_sdio_resume(struct mmc_host *host) 644 { 645 int i, err = 0; 646 647 BUG_ON(!host); 648 BUG_ON(!host->card); 649 650 /* Basic card reinitialization. */ 651 mmc_claim_host(host); 652 653 /* No need to reinitialize powered-resumed nonremovable cards */ 654 if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) 655 err = mmc_sdio_init_card(host, host->ocr, host->card, 656 mmc_card_keep_power(host)); 657 else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { 658 /* We may have switched to 1-bit mode during suspend */ 659 err = sdio_enable_4bit_bus(host->card); 660 if (err > 0) { 661 mmc_set_bus_width(host, MMC_BUS_WIDTH_4); 662 err = 0; 663 } 664 } 665 666 if (!err && host->sdio_irqs) 667 mmc_signal_sdio_irq(host); 668 mmc_release_host(host); 669 670 /* 671 * If the card looked to be the same as before suspending, then 672 * we proceed to resume all card functions. If one of them returns 673 * an error then we simply return that error to the core and the 674 * card will be redetected as new. It is the responsibility of 675 * the function driver to perform further tests with the extra 676 * knowledge it has of the card to confirm the card is indeed the 677 * same as before suspending (same MAC address for network cards, 678 * etc.) and return an error otherwise. 679 */ 680 for (i = 0; !err && i < host->card->sdio_funcs; i++) { 681 struct sdio_func *func = host->card->sdio_func[i]; 682 if (func && sdio_func_present(func) && func->dev.driver) { 683 const struct dev_pm_ops *pmops = func->dev.driver->pm; 684 err = pmops->resume(&func->dev); 685 } 686 } 687 688 return err; 689 } 690 691 static int mmc_sdio_power_restore(struct mmc_host *host) 692 { 693 int ret; 694 695 BUG_ON(!host); 696 BUG_ON(!host->card); 697 698 mmc_claim_host(host); 699 ret = mmc_sdio_init_card(host, host->ocr, host->card, 700 mmc_card_keep_power(host)); 701 if (!ret && host->sdio_irqs) 702 mmc_signal_sdio_irq(host); 703 mmc_release_host(host); 704 705 return ret; 706 } 707 708 static const struct mmc_bus_ops mmc_sdio_ops = { 709 .remove = mmc_sdio_remove, 710 .detect = mmc_sdio_detect, 711 .suspend = mmc_sdio_suspend, 712 .resume = mmc_sdio_resume, 713 .power_restore = mmc_sdio_power_restore, 714 }; 715 716 717 /* 718 * Starting point for SDIO card init. 719 */ 720 int mmc_attach_sdio(struct mmc_host *host) 721 { 722 int err, i, funcs; 723 u32 ocr; 724 struct mmc_card *card; 725 726 BUG_ON(!host); 727 WARN_ON(!host->claimed); 728 729 err = mmc_send_io_op_cond(host, 0, &ocr); 730 if (err) 731 return err; 732 733 mmc_attach_bus(host, &mmc_sdio_ops); 734 if (host->ocr_avail_sdio) 735 host->ocr_avail = host->ocr_avail_sdio; 736 737 /* 738 * Sanity check the voltages that the card claims to 739 * support. 740 */ 741 if (ocr & 0x7F) { 742 printk(KERN_WARNING "%s: card claims to support voltages " 743 "below the defined range. These will be ignored.\n", 744 mmc_hostname(host)); 745 ocr &= ~0x7F; 746 } 747 748 host->ocr = mmc_select_voltage(host, ocr); 749 750 /* 751 * Can we support the voltage(s) of the card(s)? 752 */ 753 if (!host->ocr) { 754 err = -EINVAL; 755 goto err; 756 } 757 758 /* 759 * Detect and init the card. 760 */ 761 err = mmc_sdio_init_card(host, host->ocr, NULL, 0); 762 if (err) 763 goto err; 764 card = host->card; 765 766 /* 767 * Enable runtime PM only if supported by host+card+board 768 */ 769 if (host->caps & MMC_CAP_POWER_OFF_CARD) { 770 /* 771 * Let runtime PM core know our card is active 772 */ 773 err = pm_runtime_set_active(&card->dev); 774 if (err) 775 goto remove; 776 777 /* 778 * Enable runtime PM for this card 779 */ 780 pm_runtime_enable(&card->dev); 781 } 782 783 /* 784 * The number of functions on the card is encoded inside 785 * the ocr. 786 */ 787 funcs = (ocr & 0x70000000) >> 28; 788 card->sdio_funcs = 0; 789 790 /* 791 * Initialize (but don't add) all present functions. 792 */ 793 for (i = 0; i < funcs; i++, card->sdio_funcs++) { 794 err = sdio_init_func(host->card, i + 1); 795 if (err) 796 goto remove; 797 798 /* 799 * Enable Runtime PM for this func (if supported) 800 */ 801 if (host->caps & MMC_CAP_POWER_OFF_CARD) 802 pm_runtime_enable(&card->sdio_func[i]->dev); 803 } 804 805 /* 806 * First add the card to the driver model... 807 */ 808 mmc_release_host(host); 809 err = mmc_add_card(host->card); 810 if (err) 811 goto remove_added; 812 813 /* 814 * ...then the SDIO functions. 815 */ 816 for (i = 0;i < funcs;i++) { 817 err = sdio_add_func(host->card->sdio_func[i]); 818 if (err) 819 goto remove_added; 820 } 821 822 mmc_claim_host(host); 823 return 0; 824 825 826 remove_added: 827 /* Remove without lock if the device has been added. */ 828 mmc_sdio_remove(host); 829 mmc_claim_host(host); 830 remove: 831 /* And with lock if it hasn't been added. */ 832 mmc_release_host(host); 833 if (host->card) 834 mmc_sdio_remove(host); 835 mmc_claim_host(host); 836 err: 837 mmc_detach_bus(host); 838 839 printk(KERN_ERR "%s: error %d whilst initialising SDIO card\n", 840 mmc_hostname(host), err); 841 842 return err; 843 } 844 845