1 /* 2 * linux/drivers/mmc/core/core.c 3 * 4 * Copyright (C) 2003-2004 Russell King, All Rights Reserved. 5 * SD support Copyright (C) 2004 Ian Molton, All Rights Reserved. 6 * Copyright (C) 2005-2008 Pierre Ossman, All Rights Reserved. 7 * MMCv4 support Copyright (C) 2006 Philip Langdale, All Rights Reserved. 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 */ 13 #include <linux/module.h> 14 #include <linux/init.h> 15 #include <linux/interrupt.h> 16 #include <linux/completion.h> 17 #include <linux/device.h> 18 #include <linux/delay.h> 19 #include <linux/pagemap.h> 20 #include <linux/err.h> 21 #include <linux/leds.h> 22 #include <linux/scatterlist.h> 23 24 #include <linux/mmc/card.h> 25 #include <linux/mmc/host.h> 26 #include <linux/mmc/mmc.h> 27 #include <linux/mmc/sd.h> 28 29 #include "core.h" 30 #include "bus.h" 31 #include "host.h" 32 #include "sdio_bus.h" 33 34 #include "mmc_ops.h" 35 #include "sd_ops.h" 36 #include "sdio_ops.h" 37 38 static struct workqueue_struct *workqueue; 39 40 /* 41 * Enabling software CRCs on the data blocks can be a significant (30%) 42 * performance cost, and for other reasons may not always be desired. 43 * So we allow it it to be disabled. 44 */ 45 int use_spi_crc = 1; 46 module_param(use_spi_crc, bool, 0); 47 48 /* 49 * Internal function. Schedule delayed work in the MMC work queue. 50 */ 51 static int mmc_schedule_delayed_work(struct delayed_work *work, 52 unsigned long delay) 53 { 54 return queue_delayed_work(workqueue, work, delay); 55 } 56 57 /* 58 * Internal function. Flush all scheduled work from the MMC work queue. 59 */ 60 static void mmc_flush_scheduled_work(void) 61 { 62 flush_workqueue(workqueue); 63 } 64 65 /** 66 * mmc_request_done - finish processing an MMC request 67 * @host: MMC host which completed request 68 * @mrq: MMC request which request 69 * 70 * MMC drivers should call this function when they have completed 71 * their processing of a request. 72 */ 73 void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq) 74 { 75 struct mmc_command *cmd = mrq->cmd; 76 int err = cmd->error; 77 78 if (err && cmd->retries && mmc_host_is_spi(host)) { 79 if (cmd->resp[0] & R1_SPI_ILLEGAL_COMMAND) 80 cmd->retries = 0; 81 } 82 83 if (err && cmd->retries) { 84 pr_debug("%s: req failed (CMD%u): %d, retrying...\n", 85 mmc_hostname(host), cmd->opcode, err); 86 87 cmd->retries--; 88 cmd->error = 0; 89 host->ops->request(host, mrq); 90 } else { 91 led_trigger_event(host->led, LED_OFF); 92 93 pr_debug("%s: req done (CMD%u): %d: %08x %08x %08x %08x\n", 94 mmc_hostname(host), cmd->opcode, err, 95 cmd->resp[0], cmd->resp[1], 96 cmd->resp[2], cmd->resp[3]); 97 98 if (mrq->data) { 99 pr_debug("%s: %d bytes transferred: %d\n", 100 mmc_hostname(host), 101 mrq->data->bytes_xfered, mrq->data->error); 102 } 103 104 if (mrq->stop) { 105 pr_debug("%s: (CMD%u): %d: %08x %08x %08x %08x\n", 106 mmc_hostname(host), mrq->stop->opcode, 107 mrq->stop->error, 108 mrq->stop->resp[0], mrq->stop->resp[1], 109 mrq->stop->resp[2], mrq->stop->resp[3]); 110 } 111 112 if (mrq->done) 113 mrq->done(mrq); 114 } 115 } 116 117 EXPORT_SYMBOL(mmc_request_done); 118 119 static void 120 mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) 121 { 122 #ifdef CONFIG_MMC_DEBUG 123 unsigned int i, sz; 124 #endif 125 126 pr_debug("%s: starting CMD%u arg %08x flags %08x\n", 127 mmc_hostname(host), mrq->cmd->opcode, 128 mrq->cmd->arg, mrq->cmd->flags); 129 130 if (mrq->data) { 131 pr_debug("%s: blksz %d blocks %d flags %08x " 132 "tsac %d ms nsac %d\n", 133 mmc_hostname(host), mrq->data->blksz, 134 mrq->data->blocks, mrq->data->flags, 135 mrq->data->timeout_ns / 1000000, 136 mrq->data->timeout_clks); 137 } 138 139 if (mrq->stop) { 140 pr_debug("%s: CMD%u arg %08x flags %08x\n", 141 mmc_hostname(host), mrq->stop->opcode, 142 mrq->stop->arg, mrq->stop->flags); 143 } 144 145 WARN_ON(!host->claimed); 146 147 led_trigger_event(host->led, LED_FULL); 148 149 mrq->cmd->error = 0; 150 mrq->cmd->mrq = mrq; 151 if (mrq->data) { 152 BUG_ON(mrq->data->blksz > host->max_blk_size); 153 BUG_ON(mrq->data->blocks > host->max_blk_count); 154 BUG_ON(mrq->data->blocks * mrq->data->blksz > 155 host->max_req_size); 156 157 #ifdef CONFIG_MMC_DEBUG 158 sz = 0; 159 for (i = 0;i < mrq->data->sg_len;i++) 160 sz += mrq->data->sg[i].length; 161 BUG_ON(sz != mrq->data->blocks * mrq->data->blksz); 162 #endif 163 164 mrq->cmd->data = mrq->data; 165 mrq->data->error = 0; 166 mrq->data->mrq = mrq; 167 if (mrq->stop) { 168 mrq->data->stop = mrq->stop; 169 mrq->stop->error = 0; 170 mrq->stop->mrq = mrq; 171 } 172 } 173 host->ops->request(host, mrq); 174 } 175 176 static void mmc_wait_done(struct mmc_request *mrq) 177 { 178 complete(mrq->done_data); 179 } 180 181 /** 182 * mmc_wait_for_req - start a request and wait for completion 183 * @host: MMC host to start command 184 * @mrq: MMC request to start 185 * 186 * Start a new MMC custom command request for a host, and wait 187 * for the command to complete. Does not attempt to parse the 188 * response. 189 */ 190 void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq) 191 { 192 DECLARE_COMPLETION_ONSTACK(complete); 193 194 mrq->done_data = &complete; 195 mrq->done = mmc_wait_done; 196 197 mmc_start_request(host, mrq); 198 199 wait_for_completion(&complete); 200 } 201 202 EXPORT_SYMBOL(mmc_wait_for_req); 203 204 /** 205 * mmc_wait_for_cmd - start a command and wait for completion 206 * @host: MMC host to start command 207 * @cmd: MMC command to start 208 * @retries: maximum number of retries 209 * 210 * Start a new MMC command for a host, and wait for the command 211 * to complete. Return any error that occurred while the command 212 * was executing. Do not attempt to parse the response. 213 */ 214 int mmc_wait_for_cmd(struct mmc_host *host, struct mmc_command *cmd, int retries) 215 { 216 struct mmc_request mrq; 217 218 WARN_ON(!host->claimed); 219 220 memset(&mrq, 0, sizeof(struct mmc_request)); 221 222 memset(cmd->resp, 0, sizeof(cmd->resp)); 223 cmd->retries = retries; 224 225 mrq.cmd = cmd; 226 cmd->data = NULL; 227 228 mmc_wait_for_req(host, &mrq); 229 230 return cmd->error; 231 } 232 233 EXPORT_SYMBOL(mmc_wait_for_cmd); 234 235 /** 236 * mmc_set_data_timeout - set the timeout for a data command 237 * @data: data phase for command 238 * @card: the MMC card associated with the data transfer 239 * 240 * Computes the data timeout parameters according to the 241 * correct algorithm given the card type. 242 */ 243 void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card) 244 { 245 unsigned int mult; 246 247 /* 248 * SDIO cards only define an upper 1 s limit on access. 249 */ 250 if (mmc_card_sdio(card)) { 251 data->timeout_ns = 1000000000; 252 data->timeout_clks = 0; 253 return; 254 } 255 256 /* 257 * SD cards use a 100 multiplier rather than 10 258 */ 259 mult = mmc_card_sd(card) ? 100 : 10; 260 261 /* 262 * Scale up the multiplier (and therefore the timeout) by 263 * the r2w factor for writes. 264 */ 265 if (data->flags & MMC_DATA_WRITE) 266 mult <<= card->csd.r2w_factor; 267 268 data->timeout_ns = card->csd.tacc_ns * mult; 269 data->timeout_clks = card->csd.tacc_clks * mult; 270 271 /* 272 * SD cards also have an upper limit on the timeout. 273 */ 274 if (mmc_card_sd(card)) { 275 unsigned int timeout_us, limit_us; 276 277 timeout_us = data->timeout_ns / 1000; 278 timeout_us += data->timeout_clks * 1000 / 279 (card->host->ios.clock / 1000); 280 281 if (data->flags & MMC_DATA_WRITE) 282 limit_us = 250000; 283 else 284 limit_us = 100000; 285 286 /* 287 * SDHC cards always use these fixed values. 288 */ 289 if (timeout_us > limit_us || mmc_card_blockaddr(card)) { 290 data->timeout_ns = limit_us * 1000; 291 data->timeout_clks = 0; 292 } 293 } 294 } 295 EXPORT_SYMBOL(mmc_set_data_timeout); 296 297 /** 298 * mmc_align_data_size - pads a transfer size to a more optimal value 299 * @card: the MMC card associated with the data transfer 300 * @sz: original transfer size 301 * 302 * Pads the original data size with a number of extra bytes in 303 * order to avoid controller bugs and/or performance hits 304 * (e.g. some controllers revert to PIO for certain sizes). 305 * 306 * Returns the improved size, which might be unmodified. 307 * 308 * Note that this function is only relevant when issuing a 309 * single scatter gather entry. 310 */ 311 unsigned int mmc_align_data_size(struct mmc_card *card, unsigned int sz) 312 { 313 /* 314 * FIXME: We don't have a system for the controller to tell 315 * the core about its problems yet, so for now we just 32-bit 316 * align the size. 317 */ 318 sz = ((sz + 3) / 4) * 4; 319 320 return sz; 321 } 322 EXPORT_SYMBOL(mmc_align_data_size); 323 324 /** 325 * __mmc_claim_host - exclusively claim a host 326 * @host: mmc host to claim 327 * @abort: whether or not the operation should be aborted 328 * 329 * Claim a host for a set of operations. If @abort is non null and 330 * dereference a non-zero value then this will return prematurely with 331 * that non-zero value without acquiring the lock. Returns zero 332 * with the lock held otherwise. 333 */ 334 int __mmc_claim_host(struct mmc_host *host, atomic_t *abort) 335 { 336 DECLARE_WAITQUEUE(wait, current); 337 unsigned long flags; 338 int stop; 339 340 might_sleep(); 341 342 add_wait_queue(&host->wq, &wait); 343 spin_lock_irqsave(&host->lock, flags); 344 while (1) { 345 set_current_state(TASK_UNINTERRUPTIBLE); 346 stop = abort ? atomic_read(abort) : 0; 347 if (stop || !host->claimed) 348 break; 349 spin_unlock_irqrestore(&host->lock, flags); 350 schedule(); 351 spin_lock_irqsave(&host->lock, flags); 352 } 353 set_current_state(TASK_RUNNING); 354 if (!stop) 355 host->claimed = 1; 356 else 357 wake_up(&host->wq); 358 spin_unlock_irqrestore(&host->lock, flags); 359 remove_wait_queue(&host->wq, &wait); 360 return stop; 361 } 362 363 EXPORT_SYMBOL(__mmc_claim_host); 364 365 /** 366 * mmc_release_host - release a host 367 * @host: mmc host to release 368 * 369 * Release a MMC host, allowing others to claim the host 370 * for their operations. 371 */ 372 void mmc_release_host(struct mmc_host *host) 373 { 374 unsigned long flags; 375 376 WARN_ON(!host->claimed); 377 378 spin_lock_irqsave(&host->lock, flags); 379 host->claimed = 0; 380 spin_unlock_irqrestore(&host->lock, flags); 381 382 wake_up(&host->wq); 383 } 384 385 EXPORT_SYMBOL(mmc_release_host); 386 387 /* 388 * Internal function that does the actual ios call to the host driver, 389 * optionally printing some debug output. 390 */ 391 static inline void mmc_set_ios(struct mmc_host *host) 392 { 393 struct mmc_ios *ios = &host->ios; 394 395 pr_debug("%s: clock %uHz busmode %u powermode %u cs %u Vdd %u " 396 "width %u timing %u\n", 397 mmc_hostname(host), ios->clock, ios->bus_mode, 398 ios->power_mode, ios->chip_select, ios->vdd, 399 ios->bus_width, ios->timing); 400 401 host->ops->set_ios(host, ios); 402 } 403 404 /* 405 * Control chip select pin on a host. 406 */ 407 void mmc_set_chip_select(struct mmc_host *host, int mode) 408 { 409 host->ios.chip_select = mode; 410 mmc_set_ios(host); 411 } 412 413 /* 414 * Sets the host clock to the highest possible frequency that 415 * is below "hz". 416 */ 417 void mmc_set_clock(struct mmc_host *host, unsigned int hz) 418 { 419 WARN_ON(hz < host->f_min); 420 421 if (hz > host->f_max) 422 hz = host->f_max; 423 424 host->ios.clock = hz; 425 mmc_set_ios(host); 426 } 427 428 /* 429 * Change the bus mode (open drain/push-pull) of a host. 430 */ 431 void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode) 432 { 433 host->ios.bus_mode = mode; 434 mmc_set_ios(host); 435 } 436 437 /* 438 * Change data bus width of a host. 439 */ 440 void mmc_set_bus_width(struct mmc_host *host, unsigned int width) 441 { 442 host->ios.bus_width = width; 443 mmc_set_ios(host); 444 } 445 446 /* 447 * Mask off any voltages we don't support and select 448 * the lowest voltage 449 */ 450 u32 mmc_select_voltage(struct mmc_host *host, u32 ocr) 451 { 452 int bit; 453 454 ocr &= host->ocr_avail; 455 456 bit = ffs(ocr); 457 if (bit) { 458 bit -= 1; 459 460 ocr &= 3 << bit; 461 462 host->ios.vdd = bit; 463 mmc_set_ios(host); 464 } else { 465 ocr = 0; 466 } 467 468 return ocr; 469 } 470 471 /* 472 * Select timing parameters for host. 473 */ 474 void mmc_set_timing(struct mmc_host *host, unsigned int timing) 475 { 476 host->ios.timing = timing; 477 mmc_set_ios(host); 478 } 479 480 /* 481 * Apply power to the MMC stack. This is a two-stage process. 482 * First, we enable power to the card without the clock running. 483 * We then wait a bit for the power to stabilise. Finally, 484 * enable the bus drivers and clock to the card. 485 * 486 * We must _NOT_ enable the clock prior to power stablising. 487 * 488 * If a host does all the power sequencing itself, ignore the 489 * initial MMC_POWER_UP stage. 490 */ 491 static void mmc_power_up(struct mmc_host *host) 492 { 493 int bit = fls(host->ocr_avail) - 1; 494 495 host->ios.vdd = bit; 496 if (mmc_host_is_spi(host)) { 497 host->ios.chip_select = MMC_CS_HIGH; 498 host->ios.bus_mode = MMC_BUSMODE_PUSHPULL; 499 } else { 500 host->ios.chip_select = MMC_CS_DONTCARE; 501 host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN; 502 } 503 host->ios.power_mode = MMC_POWER_UP; 504 host->ios.bus_width = MMC_BUS_WIDTH_1; 505 host->ios.timing = MMC_TIMING_LEGACY; 506 mmc_set_ios(host); 507 508 /* 509 * This delay should be sufficient to allow the power supply 510 * to reach the minimum voltage. 511 */ 512 mmc_delay(2); 513 514 host->ios.clock = host->f_min; 515 host->ios.power_mode = MMC_POWER_ON; 516 mmc_set_ios(host); 517 518 /* 519 * This delay must be at least 74 clock sizes, or 1 ms, or the 520 * time required to reach a stable voltage. 521 */ 522 mmc_delay(2); 523 } 524 525 static void mmc_power_off(struct mmc_host *host) 526 { 527 host->ios.clock = 0; 528 host->ios.vdd = 0; 529 if (!mmc_host_is_spi(host)) { 530 host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN; 531 host->ios.chip_select = MMC_CS_DONTCARE; 532 } 533 host->ios.power_mode = MMC_POWER_OFF; 534 host->ios.bus_width = MMC_BUS_WIDTH_1; 535 host->ios.timing = MMC_TIMING_LEGACY; 536 mmc_set_ios(host); 537 } 538 539 /* 540 * Cleanup when the last reference to the bus operator is dropped. 541 */ 542 static void __mmc_release_bus(struct mmc_host *host) 543 { 544 BUG_ON(!host); 545 BUG_ON(host->bus_refs); 546 BUG_ON(!host->bus_dead); 547 548 host->bus_ops = NULL; 549 } 550 551 /* 552 * Increase reference count of bus operator 553 */ 554 static inline void mmc_bus_get(struct mmc_host *host) 555 { 556 unsigned long flags; 557 558 spin_lock_irqsave(&host->lock, flags); 559 host->bus_refs++; 560 spin_unlock_irqrestore(&host->lock, flags); 561 } 562 563 /* 564 * Decrease reference count of bus operator and free it if 565 * it is the last reference. 566 */ 567 static inline void mmc_bus_put(struct mmc_host *host) 568 { 569 unsigned long flags; 570 571 spin_lock_irqsave(&host->lock, flags); 572 host->bus_refs--; 573 if ((host->bus_refs == 0) && host->bus_ops) 574 __mmc_release_bus(host); 575 spin_unlock_irqrestore(&host->lock, flags); 576 } 577 578 /* 579 * Assign a mmc bus handler to a host. Only one bus handler may control a 580 * host at any given time. 581 */ 582 void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops) 583 { 584 unsigned long flags; 585 586 BUG_ON(!host); 587 BUG_ON(!ops); 588 589 WARN_ON(!host->claimed); 590 591 spin_lock_irqsave(&host->lock, flags); 592 593 BUG_ON(host->bus_ops); 594 BUG_ON(host->bus_refs); 595 596 host->bus_ops = ops; 597 host->bus_refs = 1; 598 host->bus_dead = 0; 599 600 spin_unlock_irqrestore(&host->lock, flags); 601 } 602 603 /* 604 * Remove the current bus handler from a host. Assumes that there are 605 * no interesting cards left, so the bus is powered down. 606 */ 607 void mmc_detach_bus(struct mmc_host *host) 608 { 609 unsigned long flags; 610 611 BUG_ON(!host); 612 613 WARN_ON(!host->claimed); 614 WARN_ON(!host->bus_ops); 615 616 spin_lock_irqsave(&host->lock, flags); 617 618 host->bus_dead = 1; 619 620 spin_unlock_irqrestore(&host->lock, flags); 621 622 mmc_power_off(host); 623 624 mmc_bus_put(host); 625 } 626 627 /** 628 * mmc_detect_change - process change of state on a MMC socket 629 * @host: host which changed state. 630 * @delay: optional delay to wait before detection (jiffies) 631 * 632 * MMC drivers should call this when they detect a card has been 633 * inserted or removed. The MMC layer will confirm that any 634 * present card is still functional, and initialize any newly 635 * inserted. 636 */ 637 void mmc_detect_change(struct mmc_host *host, unsigned long delay) 638 { 639 #ifdef CONFIG_MMC_DEBUG 640 unsigned long flags; 641 spin_lock_irqsave(&host->lock, flags); 642 WARN_ON(host->removed); 643 spin_unlock_irqrestore(&host->lock, flags); 644 #endif 645 646 mmc_schedule_delayed_work(&host->detect, delay); 647 } 648 649 EXPORT_SYMBOL(mmc_detect_change); 650 651 652 void mmc_rescan(struct work_struct *work) 653 { 654 struct mmc_host *host = 655 container_of(work, struct mmc_host, detect.work); 656 u32 ocr; 657 int err; 658 659 mmc_bus_get(host); 660 661 if (host->bus_ops == NULL) { 662 /* 663 * Only we can add a new handler, so it's safe to 664 * release the lock here. 665 */ 666 mmc_bus_put(host); 667 668 if (host->ops->get_cd && host->ops->get_cd(host) == 0) 669 goto out; 670 671 mmc_claim_host(host); 672 673 mmc_power_up(host); 674 mmc_go_idle(host); 675 676 mmc_send_if_cond(host, host->ocr_avail); 677 678 /* 679 * First we search for SDIO... 680 */ 681 err = mmc_send_io_op_cond(host, 0, &ocr); 682 if (!err) { 683 if (mmc_attach_sdio(host, ocr)) 684 mmc_power_off(host); 685 goto out; 686 } 687 688 /* 689 * ...then normal SD... 690 */ 691 err = mmc_send_app_op_cond(host, 0, &ocr); 692 if (!err) { 693 if (mmc_attach_sd(host, ocr)) 694 mmc_power_off(host); 695 goto out; 696 } 697 698 /* 699 * ...and finally MMC. 700 */ 701 err = mmc_send_op_cond(host, 0, &ocr); 702 if (!err) { 703 if (mmc_attach_mmc(host, ocr)) 704 mmc_power_off(host); 705 goto out; 706 } 707 708 mmc_release_host(host); 709 mmc_power_off(host); 710 } else { 711 if (host->bus_ops->detect && !host->bus_dead) 712 host->bus_ops->detect(host); 713 714 mmc_bus_put(host); 715 } 716 out: 717 if (host->caps & MMC_CAP_NEEDS_POLL) 718 mmc_schedule_delayed_work(&host->detect, HZ); 719 } 720 721 void mmc_start_host(struct mmc_host *host) 722 { 723 mmc_power_off(host); 724 mmc_detect_change(host, 0); 725 } 726 727 void mmc_stop_host(struct mmc_host *host) 728 { 729 #ifdef CONFIG_MMC_DEBUG 730 unsigned long flags; 731 spin_lock_irqsave(&host->lock, flags); 732 host->removed = 1; 733 spin_unlock_irqrestore(&host->lock, flags); 734 #endif 735 736 mmc_flush_scheduled_work(); 737 738 mmc_bus_get(host); 739 if (host->bus_ops && !host->bus_dead) { 740 if (host->bus_ops->remove) 741 host->bus_ops->remove(host); 742 743 mmc_claim_host(host); 744 mmc_detach_bus(host); 745 mmc_release_host(host); 746 } 747 mmc_bus_put(host); 748 749 BUG_ON(host->card); 750 751 mmc_power_off(host); 752 } 753 754 #ifdef CONFIG_PM 755 756 /** 757 * mmc_suspend_host - suspend a host 758 * @host: mmc host 759 * @state: suspend mode (PM_SUSPEND_xxx) 760 */ 761 int mmc_suspend_host(struct mmc_host *host, pm_message_t state) 762 { 763 mmc_flush_scheduled_work(); 764 765 mmc_bus_get(host); 766 if (host->bus_ops && !host->bus_dead) { 767 if (host->bus_ops->suspend) 768 host->bus_ops->suspend(host); 769 if (!host->bus_ops->resume) { 770 if (host->bus_ops->remove) 771 host->bus_ops->remove(host); 772 773 mmc_claim_host(host); 774 mmc_detach_bus(host); 775 mmc_release_host(host); 776 } 777 } 778 mmc_bus_put(host); 779 780 mmc_power_off(host); 781 782 return 0; 783 } 784 785 EXPORT_SYMBOL(mmc_suspend_host); 786 787 /** 788 * mmc_resume_host - resume a previously suspended host 789 * @host: mmc host 790 */ 791 int mmc_resume_host(struct mmc_host *host) 792 { 793 mmc_bus_get(host); 794 if (host->bus_ops && !host->bus_dead) { 795 mmc_power_up(host); 796 BUG_ON(!host->bus_ops->resume); 797 host->bus_ops->resume(host); 798 } 799 mmc_bus_put(host); 800 801 /* 802 * We add a slight delay here so that resume can progress 803 * in parallel. 804 */ 805 mmc_detect_change(host, 1); 806 807 return 0; 808 } 809 810 EXPORT_SYMBOL(mmc_resume_host); 811 812 #endif 813 814 static int __init mmc_init(void) 815 { 816 int ret; 817 818 workqueue = create_singlethread_workqueue("kmmcd"); 819 if (!workqueue) 820 return -ENOMEM; 821 822 ret = mmc_register_bus(); 823 if (ret) 824 goto destroy_workqueue; 825 826 ret = mmc_register_host_class(); 827 if (ret) 828 goto unregister_bus; 829 830 ret = sdio_register_bus(); 831 if (ret) 832 goto unregister_host_class; 833 834 return 0; 835 836 unregister_host_class: 837 mmc_unregister_host_class(); 838 unregister_bus: 839 mmc_unregister_bus(); 840 destroy_workqueue: 841 destroy_workqueue(workqueue); 842 843 return ret; 844 } 845 846 static void __exit mmc_exit(void) 847 { 848 sdio_unregister_bus(); 849 mmc_unregister_host_class(); 850 mmc_unregister_bus(); 851 destroy_workqueue(workqueue); 852 } 853 854 subsys_initcall(mmc_init); 855 module_exit(mmc_exit); 856 857 MODULE_LICENSE("GPL"); 858