linux/drivers/mmc/core/sd.c
<<
>>
Prefs
   1/*
   2 *  linux/drivers/mmc/core/sd.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-2007 Pierre Ossman, All Rights Reserved.
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 */
  12
  13#include <linux/err.h>
  14#include <linux/slab.h>
  15
  16#include <linux/mmc/host.h>
  17#include <linux/mmc/card.h>
  18#include <linux/mmc/mmc.h>
  19#include <linux/mmc/sd.h>
  20
  21#include "core.h"
  22#include "bus.h"
  23#include "mmc_ops.h"
  24#include "sd_ops.h"
  25
  26static const unsigned int tran_exp[] = {
  27        10000,          100000,         1000000,        10000000,
  28        0,              0,              0,              0
  29};
  30
  31static const unsigned char tran_mant[] = {
  32        0,      10,     12,     13,     15,     20,     25,     30,
  33        35,     40,     45,     50,     55,     60,     70,     80,
  34};
  35
  36static const unsigned int tacc_exp[] = {
  37        1,      10,     100,    1000,   10000,  100000, 1000000, 10000000,
  38};
  39
  40static const unsigned int tacc_mant[] = {
  41        0,      10,     12,     13,     15,     20,     25,     30,
  42        35,     40,     45,     50,     55,     60,     70,     80,
  43};
  44
  45#define UNSTUFF_BITS(resp,start,size)                                   \
  46        ({                                                              \
  47                const int __size = size;                                \
  48                const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
  49                const int __off = 3 - ((start) / 32);                   \
  50                const int __shft = (start) & 31;                        \
  51                u32 __res;                                              \
  52                                                                        \
  53                __res = resp[__off] >> __shft;                          \
  54                if (__size + __shft > 32)                               \
  55                        __res |= resp[__off-1] << ((32 - __shft) % 32); \
  56                __res & __mask;                                         \
  57        })
  58
  59/*
  60 * Given the decoded CSD structure, decode the raw CID to our CID structure.
  61 */
  62void mmc_decode_cid(struct mmc_card *card)
  63{
  64        u32 *resp = card->raw_cid;
  65
  66        memset(&card->cid, 0, sizeof(struct mmc_cid));
  67
  68        /*
  69         * SD doesn't currently have a version field so we will
  70         * have to assume we can parse this.
  71         */
  72        card->cid.manfid                = UNSTUFF_BITS(resp, 120, 8);
  73        card->cid.oemid                 = UNSTUFF_BITS(resp, 104, 16);
  74        card->cid.prod_name[0]          = UNSTUFF_BITS(resp, 96, 8);
  75        card->cid.prod_name[1]          = UNSTUFF_BITS(resp, 88, 8);
  76        card->cid.prod_name[2]          = UNSTUFF_BITS(resp, 80, 8);
  77        card->cid.prod_name[3]          = UNSTUFF_BITS(resp, 72, 8);
  78        card->cid.prod_name[4]          = UNSTUFF_BITS(resp, 64, 8);
  79        card->cid.hwrev                 = UNSTUFF_BITS(resp, 60, 4);
  80        card->cid.fwrev                 = UNSTUFF_BITS(resp, 56, 4);
  81        card->cid.serial                = UNSTUFF_BITS(resp, 24, 32);
  82        card->cid.year                  = UNSTUFF_BITS(resp, 12, 8);
  83        card->cid.month                 = UNSTUFF_BITS(resp, 8, 4);
  84
  85        card->cid.year += 2000; /* SD cards year offset */
  86}
  87
  88/*
  89 * Given a 128-bit response, decode to our card CSD structure.
  90 */
  91static int mmc_decode_csd(struct mmc_card *card)
  92{
  93        struct mmc_csd *csd = &card->csd;
  94        unsigned int e, m, csd_struct;
  95        u32 *resp = card->raw_csd;
  96
  97        csd_struct = UNSTUFF_BITS(resp, 126, 2);
  98
  99        switch (csd_struct) {
 100        case 0:
 101                m = UNSTUFF_BITS(resp, 115, 4);
 102                e = UNSTUFF_BITS(resp, 112, 3);
 103                csd->tacc_ns     = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
 104                csd->tacc_clks   = UNSTUFF_BITS(resp, 104, 8) * 100;
 105
 106                m = UNSTUFF_BITS(resp, 99, 4);
 107                e = UNSTUFF_BITS(resp, 96, 3);
 108                csd->max_dtr      = tran_exp[e] * tran_mant[m];
 109                csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
 110
 111                e = UNSTUFF_BITS(resp, 47, 3);
 112                m = UNSTUFF_BITS(resp, 62, 12);
 113                csd->capacity     = (1 + m) << (e + 2);
 114
 115                csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
 116                csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
 117                csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
 118                csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
 119                csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
 120                csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
 121                csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
 122
 123                if (UNSTUFF_BITS(resp, 46, 1)) {
 124                        csd->erase_size = 1;
 125                } else if (csd->write_blkbits >= 9) {
 126                        csd->erase_size = UNSTUFF_BITS(resp, 39, 7) + 1;
 127                        csd->erase_size <<= csd->write_blkbits - 9;
 128                }
 129                break;
 130        case 1:
 131                /*
 132                 * This is a block-addressed SDHC card. Most
 133                 * interesting fields are unused and have fixed
 134                 * values. To avoid getting tripped by buggy cards,
 135                 * we assume those fixed values ourselves.
 136                 */
 137                mmc_card_set_blockaddr(card);
 138
 139                csd->tacc_ns     = 0; /* Unused */
 140                csd->tacc_clks   = 0; /* Unused */
 141
 142                m = UNSTUFF_BITS(resp, 99, 4);
 143                e = UNSTUFF_BITS(resp, 96, 3);
 144                csd->max_dtr      = tran_exp[e] * tran_mant[m];
 145                csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
 146
 147                m = UNSTUFF_BITS(resp, 48, 22);
 148                csd->capacity     = (1 + m) << 10;
 149
 150                csd->read_blkbits = 9;
 151                csd->read_partial = 0;
 152                csd->write_misalign = 0;
 153                csd->read_misalign = 0;
 154                csd->r2w_factor = 4; /* Unused */
 155                csd->write_blkbits = 9;
 156                csd->write_partial = 0;
 157                csd->erase_size = 1;
 158                break;
 159        default:
 160                printk(KERN_ERR "%s: unrecognised CSD structure version %d\n",
 161                        mmc_hostname(card->host), csd_struct);
 162                return -EINVAL;
 163        }
 164
 165        card->erase_size = csd->erase_size;
 166
 167        return 0;
 168}
 169
 170/*
 171 * Given a 64-bit response, decode to our card SCR structure.
 172 */
 173static int mmc_decode_scr(struct mmc_card *card)
 174{
 175        struct sd_scr *scr = &card->scr;
 176        unsigned int scr_struct;
 177        u32 resp[4];
 178
 179        resp[3] = card->raw_scr[1];
 180        resp[2] = card->raw_scr[0];
 181
 182        scr_struct = UNSTUFF_BITS(resp, 60, 4);
 183        if (scr_struct != 0) {
 184                printk(KERN_ERR "%s: unrecognised SCR structure version %d\n",
 185                        mmc_hostname(card->host), scr_struct);
 186                return -EINVAL;
 187        }
 188
 189        scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
 190        scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
 191
 192        if (UNSTUFF_BITS(resp, 55, 1))
 193                card->erased_byte = 0xFF;
 194        else
 195                card->erased_byte = 0x0;
 196
 197        return 0;
 198}
 199
 200/*
 201 * Fetch and process SD Status register.
 202 */
 203static int mmc_read_ssr(struct mmc_card *card)
 204{
 205        unsigned int au, es, et, eo;
 206        int err, i;
 207        u32 *ssr;
 208
 209        if (!(card->csd.cmdclass & CCC_APP_SPEC)) {
 210                printk(KERN_WARNING "%s: card lacks mandatory SD Status "
 211                        "function.\n", mmc_hostname(card->host));
 212                return 0;
 213        }
 214
 215        ssr = kmalloc(64, GFP_KERNEL);
 216        if (!ssr)
 217                return -ENOMEM;
 218
 219        err = mmc_app_sd_status(card, ssr);
 220        if (err) {
 221                printk(KERN_WARNING "%s: problem reading SD Status "
 222                        "register.\n", mmc_hostname(card->host));
 223                err = 0;
 224                goto out;
 225        }
 226
 227        for (i = 0; i < 16; i++)
 228                ssr[i] = be32_to_cpu(ssr[i]);
 229
 230        /*
 231         * UNSTUFF_BITS only works with four u32s so we have to offset the
 232         * bitfield positions accordingly.
 233         */
 234        au = UNSTUFF_BITS(ssr, 428 - 384, 4);
 235        if (au > 0 || au <= 9) {
 236                card->ssr.au = 1 << (au + 4);
 237                es = UNSTUFF_BITS(ssr, 408 - 384, 16);
 238                et = UNSTUFF_BITS(ssr, 402 - 384, 6);
 239                eo = UNSTUFF_BITS(ssr, 400 - 384, 2);
 240                if (es && et) {
 241                        card->ssr.erase_timeout = (et * 1000) / es;
 242                        card->ssr.erase_offset = eo * 1000;
 243                }
 244        } else {
 245                printk(KERN_WARNING "%s: SD Status: Invalid Allocation Unit "
 246                        "size.\n", mmc_hostname(card->host));
 247        }
 248out:
 249        kfree(ssr);
 250        return err;
 251}
 252
 253/*
 254 * Fetches and decodes switch information
 255 */
 256static int mmc_read_switch(struct mmc_card *card)
 257{
 258        int err;
 259        u8 *status;
 260
 261        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
 262                return 0;
 263
 264        if (!(card->csd.cmdclass & CCC_SWITCH)) {
 265                printk(KERN_WARNING "%s: card lacks mandatory switch "
 266                        "function, performance might suffer.\n",
 267                        mmc_hostname(card->host));
 268                return 0;
 269        }
 270
 271        err = -EIO;
 272
 273        status = kmalloc(64, GFP_KERNEL);
 274        if (!status) {
 275                printk(KERN_ERR "%s: could not allocate a buffer for "
 276                        "switch capabilities.\n", mmc_hostname(card->host));
 277                return -ENOMEM;
 278        }
 279
 280        err = mmc_sd_switch(card, 0, 0, 1, status);
 281        if (err) {
 282                /* If the host or the card can't do the switch,
 283                 * fail more gracefully. */
 284                if ((err != -EINVAL)
 285                 && (err != -ENOSYS)
 286                 && (err != -EFAULT))
 287                        goto out;
 288
 289                printk(KERN_WARNING "%s: problem reading switch "
 290                        "capabilities, performance might suffer.\n",
 291                        mmc_hostname(card->host));
 292                err = 0;
 293
 294                goto out;
 295        }
 296
 297        if (status[13] & 0x02)
 298                card->sw_caps.hs_max_dtr = 50000000;
 299
 300out:
 301        kfree(status);
 302
 303        return err;
 304}
 305
 306/*
 307 * Test if the card supports high-speed mode and, if so, switch to it.
 308 */
 309int mmc_sd_switch_hs(struct mmc_card *card)
 310{
 311        int err;
 312        u8 *status;
 313
 314        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
 315                return 0;
 316
 317        if (!(card->csd.cmdclass & CCC_SWITCH))
 318                return 0;
 319
 320        if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
 321                return 0;
 322
 323        if (card->sw_caps.hs_max_dtr == 0)
 324                return 0;
 325
 326        err = -EIO;
 327
 328        status = kmalloc(64, GFP_KERNEL);
 329        if (!status) {
 330                printk(KERN_ERR "%s: could not allocate a buffer for "
 331                        "switch capabilities.\n", mmc_hostname(card->host));
 332                return -ENOMEM;
 333        }
 334
 335        err = mmc_sd_switch(card, 1, 0, 1, status);
 336        if (err)
 337                goto out;
 338
 339        if ((status[16] & 0xF) != 1) {
 340                printk(KERN_WARNING "%s: Problem switching card "
 341                        "into high-speed mode!\n",
 342                        mmc_hostname(card->host));
 343                err = 0;
 344        } else {
 345                err = 1;
 346        }
 347
 348out:
 349        kfree(status);
 350
 351        return err;
 352}
 353
 354MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
 355        card->raw_cid[2], card->raw_cid[3]);
 356MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
 357        card->raw_csd[2], card->raw_csd[3]);
 358MMC_DEV_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]);
 359MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
 360MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
 361MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
 362MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev);
 363MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
 364MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
 365MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
 366MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
 367MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
 368
 369
 370static struct attribute *sd_std_attrs[] = {
 371        &dev_attr_cid.attr,
 372        &dev_attr_csd.attr,
 373        &dev_attr_scr.attr,
 374        &dev_attr_date.attr,
 375        &dev_attr_erase_size.attr,
 376        &dev_attr_preferred_erase_size.attr,
 377        &dev_attr_fwrev.attr,
 378        &dev_attr_hwrev.attr,
 379        &dev_attr_manfid.attr,
 380        &dev_attr_name.attr,
 381        &dev_attr_oemid.attr,
 382        &dev_attr_serial.attr,
 383        NULL,
 384};
 385
 386static struct attribute_group sd_std_attr_group = {
 387        .attrs = sd_std_attrs,
 388};
 389
 390static const struct attribute_group *sd_attr_groups[] = {
 391        &sd_std_attr_group,
 392        NULL,
 393};
 394
 395struct device_type sd_type = {
 396        .groups = sd_attr_groups,
 397};
 398
 399/*
 400 * Fetch CID from card.
 401 */
 402int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid)
 403{
 404        int err;
 405
 406        /*
 407         * Since we're changing the OCR value, we seem to
 408         * need to tell some cards to go back to the idle
 409         * state.  We wait 1ms to give cards time to
 410         * respond.
 411         */
 412        mmc_go_idle(host);
 413
 414        /*
 415         * If SD_SEND_IF_COND indicates an SD 2.0
 416         * compliant card and we should set bit 30
 417         * of the ocr to indicate that we can handle
 418         * block-addressed SDHC cards.
 419         */
 420        err = mmc_send_if_cond(host, ocr);
 421        if (!err)
 422                ocr |= 1 << 30;
 423
 424        err = mmc_send_app_op_cond(host, ocr, NULL);
 425        if (err)
 426                return err;
 427
 428        if (mmc_host_is_spi(host))
 429                err = mmc_send_cid(host, cid);
 430        else
 431                err = mmc_all_send_cid(host, cid);
 432
 433        return err;
 434}
 435
 436int mmc_sd_get_csd(struct mmc_host *host, struct mmc_card *card)
 437{
 438        int err;
 439
 440        /*
 441         * Fetch CSD from card.
 442         */
 443        err = mmc_send_csd(card, card->raw_csd);
 444        if (err)
 445                return err;
 446
 447        err = mmc_decode_csd(card);
 448        if (err)
 449                return err;
 450
 451        return 0;
 452}
 453
 454int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card,
 455        bool reinit)
 456{
 457        int err;
 458
 459        if (!reinit) {
 460                /*
 461                 * Fetch SCR from card.
 462                 */
 463                err = mmc_app_send_scr(card, card->raw_scr);
 464                if (err)
 465                        return err;
 466
 467                err = mmc_decode_scr(card);
 468                if (err)
 469                        return err;
 470
 471                /*
 472                 * Fetch and process SD Status register.
 473                 */
 474                err = mmc_read_ssr(card);
 475                if (err)
 476                        return err;
 477
 478                /* Erase init depends on CSD and SSR */
 479                mmc_init_erase(card);
 480
 481                /*
 482                 * Fetch switch information from card.
 483                 */
 484                err = mmc_read_switch(card);
 485                if (err)
 486                        return err;
 487        }
 488
 489        /*
 490         * For SPI, enable CRC as appropriate.
 491         * This CRC enable is located AFTER the reading of the
 492         * card registers because some SDHC cards are not able
 493         * to provide valid CRCs for non-512-byte blocks.
 494         */
 495        if (mmc_host_is_spi(host)) {
 496                err = mmc_spi_set_crc(host, use_spi_crc);
 497                if (err)
 498                        return err;
 499        }
 500
 501        /*
 502         * Check if read-only switch is active.
 503         */
 504        if (!reinit) {
 505                int ro = -1;
 506
 507                if (host->ops->get_ro)
 508                        ro = host->ops->get_ro(host);
 509
 510                if (ro < 0) {
 511                        printk(KERN_WARNING "%s: host does not "
 512                                "support reading read-only "
 513                                "switch. assuming write-enable.\n",
 514                                mmc_hostname(host));
 515                } else if (ro > 0) {
 516                        mmc_card_set_readonly(card);
 517                }
 518        }
 519
 520        return 0;
 521}
 522
 523unsigned mmc_sd_get_max_clock(struct mmc_card *card)
 524{
 525        unsigned max_dtr = (unsigned int)-1;
 526
 527        if (mmc_card_highspeed(card)) {
 528                if (max_dtr > card->sw_caps.hs_max_dtr)
 529                        max_dtr = card->sw_caps.hs_max_dtr;
 530        } else if (max_dtr > card->csd.max_dtr) {
 531                max_dtr = card->csd.max_dtr;
 532        }
 533
 534        return max_dtr;
 535}
 536
 537void mmc_sd_go_highspeed(struct mmc_card *card)
 538{
 539        mmc_card_set_highspeed(card);
 540        mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 541}
 542
 543/*
 544 * Handle the detection and initialisation of a card.
 545 *
 546 * In the case of a resume, "oldcard" will contain the card
 547 * we're trying to reinitialise.
 548 */
 549static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
 550        struct mmc_card *oldcard)
 551{
 552        struct mmc_card *card;
 553        int err;
 554        u32 cid[4];
 555
 556        BUG_ON(!host);
 557        WARN_ON(!host->claimed);
 558
 559        err = mmc_sd_get_cid(host, ocr, cid);
 560        if (err)
 561                return err;
 562
 563        if (oldcard) {
 564                if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
 565                        return -ENOENT;
 566
 567                card = oldcard;
 568        } else {
 569                /*
 570                 * Allocate card structure.
 571                 */
 572                card = mmc_alloc_card(host, &sd_type);
 573                if (IS_ERR(card))
 574                        return PTR_ERR(card);
 575
 576                card->type = MMC_TYPE_SD;
 577                memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
 578        }
 579
 580        /*
 581         * For native busses:  get card RCA and quit open drain mode.
 582         */
 583        if (!mmc_host_is_spi(host)) {
 584                err = mmc_send_relative_addr(host, &card->rca);
 585                if (err)
 586                        return err;
 587
 588                mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
 589        }
 590
 591        if (!oldcard) {
 592                err = mmc_sd_get_csd(host, card);
 593                if (err)
 594                        return err;
 595
 596                mmc_decode_cid(card);
 597        }
 598
 599        /*
 600         * Select card, as all following commands rely on that.
 601         */
 602        if (!mmc_host_is_spi(host)) {
 603                err = mmc_select_card(card);
 604                if (err)
 605                        return err;
 606        }
 607
 608        err = mmc_sd_setup_card(host, card, oldcard != NULL);
 609        if (err)
 610                goto free_card;
 611
 612        /*
 613         * Attempt to change to high-speed (if supported)
 614         */
 615        err = mmc_sd_switch_hs(card);
 616        if (err > 0)
 617                mmc_sd_go_highspeed(card);
 618        else if (err)
 619                goto free_card;
 620
 621        /*
 622         * Set bus speed.
 623         */
 624        mmc_set_clock(host, mmc_sd_get_max_clock(card));
 625
 626        /*
 627         * Switch to wider bus (if supported).
 628         */
 629        if ((host->caps & MMC_CAP_4_BIT_DATA) &&
 630                (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
 631                err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
 632                if (err)
 633                        goto free_card;
 634
 635                mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
 636        }
 637
 638        host->card = card;
 639        return 0;
 640
 641free_card:
 642        if (!oldcard)
 643                mmc_remove_card(card);
 644
 645        return err;
 646}
 647
 648/*
 649 * Host is being removed. Free up the current card.
 650 */
 651static void mmc_sd_remove(struct mmc_host *host)
 652{
 653        BUG_ON(!host);
 654        BUG_ON(!host->card);
 655
 656        mmc_remove_card(host->card);
 657        host->card = NULL;
 658}
 659
 660/*
 661 * Card detection callback from host.
 662 */
 663static void mmc_sd_detect(struct mmc_host *host)
 664{
 665        int err;
 666
 667        BUG_ON(!host);
 668        BUG_ON(!host->card);
 669
 670        mmc_claim_host(host);
 671
 672        /*
 673         * Just check if our card has been removed.
 674         */
 675        err = mmc_send_status(host->card, NULL);
 676
 677        mmc_release_host(host);
 678
 679        if (err) {
 680                mmc_sd_remove(host);
 681
 682                mmc_claim_host(host);
 683                mmc_detach_bus(host);
 684                mmc_release_host(host);
 685        }
 686}
 687
 688/*
 689 * Suspend callback from host.
 690 */
 691static int mmc_sd_suspend(struct mmc_host *host)
 692{
 693        BUG_ON(!host);
 694        BUG_ON(!host->card);
 695
 696        mmc_claim_host(host);
 697        if (!mmc_host_is_spi(host))
 698                mmc_deselect_cards(host);
 699        host->card->state &= ~MMC_STATE_HIGHSPEED;
 700        mmc_release_host(host);
 701
 702        return 0;
 703}
 704
 705/*
 706 * Resume callback from host.
 707 *
 708 * This function tries to determine if the same card is still present
 709 * and, if so, restore all state to it.
 710 */
 711static int mmc_sd_resume(struct mmc_host *host)
 712{
 713        int err;
 714
 715        BUG_ON(!host);
 716        BUG_ON(!host->card);
 717
 718        mmc_claim_host(host);
 719        err = mmc_sd_init_card(host, host->ocr, host->card);
 720        mmc_release_host(host);
 721
 722        return err;
 723}
 724
 725static int mmc_sd_power_restore(struct mmc_host *host)
 726{
 727        int ret;
 728
 729        host->card->state &= ~MMC_STATE_HIGHSPEED;
 730        mmc_claim_host(host);
 731        ret = mmc_sd_init_card(host, host->ocr, host->card);
 732        mmc_release_host(host);
 733
 734        return ret;
 735}
 736
 737static const struct mmc_bus_ops mmc_sd_ops = {
 738        .remove = mmc_sd_remove,
 739        .detect = mmc_sd_detect,
 740        .suspend = NULL,
 741        .resume = NULL,
 742        .power_restore = mmc_sd_power_restore,
 743};
 744
 745static const struct mmc_bus_ops mmc_sd_ops_unsafe = {
 746        .remove = mmc_sd_remove,
 747        .detect = mmc_sd_detect,
 748        .suspend = mmc_sd_suspend,
 749        .resume = mmc_sd_resume,
 750        .power_restore = mmc_sd_power_restore,
 751};
 752
 753static void mmc_sd_attach_bus_ops(struct mmc_host *host)
 754{
 755        const struct mmc_bus_ops *bus_ops;
 756
 757        if (!mmc_card_is_removable(host))
 758                bus_ops = &mmc_sd_ops_unsafe;
 759        else
 760                bus_ops = &mmc_sd_ops;
 761        mmc_attach_bus(host, bus_ops);
 762}
 763
 764/*
 765 * Starting point for SD card init.
 766 */
 767int mmc_attach_sd(struct mmc_host *host)
 768{
 769        int err;
 770        u32 ocr;
 771
 772        BUG_ON(!host);
 773        WARN_ON(!host->claimed);
 774
 775        err = mmc_send_app_op_cond(host, 0, &ocr);
 776        if (err)
 777                return err;
 778
 779        mmc_sd_attach_bus_ops(host);
 780        if (host->ocr_avail_sd)
 781                host->ocr_avail = host->ocr_avail_sd;
 782
 783        /*
 784         * We need to get OCR a different way for SPI.
 785         */
 786        if (mmc_host_is_spi(host)) {
 787                mmc_go_idle(host);
 788
 789                err = mmc_spi_read_ocr(host, 0, &ocr);
 790                if (err)
 791                        goto err;
 792        }
 793
 794        /*
 795         * Sanity check the voltages that the card claims to
 796         * support.
 797         */
 798        if (ocr & 0x7F) {
 799                printk(KERN_WARNING "%s: card claims to support voltages "
 800                       "below the defined range. These will be ignored.\n",
 801                       mmc_hostname(host));
 802                ocr &= ~0x7F;
 803        }
 804
 805        if ((ocr & MMC_VDD_165_195) &&
 806            !(host->ocr_avail_sd & MMC_VDD_165_195)) {
 807                printk(KERN_WARNING "%s: SD card claims to support the "
 808                       "incompletely defined 'low voltage range'. This "
 809                       "will be ignored.\n", mmc_hostname(host));
 810                ocr &= ~MMC_VDD_165_195;
 811        }
 812
 813        host->ocr = mmc_select_voltage(host, ocr);
 814
 815        /*
 816         * Can we support the voltage(s) of the card(s)?
 817         */
 818        if (!host->ocr) {
 819                err = -EINVAL;
 820                goto err;
 821        }
 822
 823        /*
 824         * Detect and init the card.
 825         */
 826        err = mmc_sd_init_card(host, host->ocr, NULL);
 827        if (err)
 828                goto err;
 829
 830        mmc_release_host(host);
 831        err = mmc_add_card(host->card);
 832        mmc_claim_host(host);
 833        if (err)
 834                goto remove_card;
 835
 836        return 0;
 837
 838remove_card:
 839        mmc_release_host(host);
 840        mmc_remove_card(host->card);
 841        host->card = NULL;
 842        mmc_claim_host(host);
 843err:
 844        mmc_detach_bus(host);
 845
 846        printk(KERN_ERR "%s: error %d whilst initialising SD card\n",
 847                mmc_hostname(host), err);
 848
 849        return err;
 850}
 851
 852