linux/drivers/mmc/core/sdio.c
<<
>>
Prefs
   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/mmc.h>
  18#include <linux/mmc/sdio.h>
  19#include <linux/mmc/sdio_func.h>
  20#include <linux/mmc/sdio_ids.h>
  21
  22#include "core.h"
  23#include "bus.h"
  24#include "sd.h"
  25#include "sdio_bus.h"
  26#include "mmc_ops.h"
  27#include "sd_ops.h"
  28#include "sdio_ops.h"
  29#include "sdio_cis.h"
  30
  31static int sdio_read_fbr(struct sdio_func *func)
  32{
  33        int ret;
  34        unsigned char data;
  35
  36        if (mmc_card_nonstd_func_interface(func->card)) {
  37                func->class = SDIO_CLASS_NONE;
  38                return 0;
  39        }
  40
  41        ret = mmc_io_rw_direct(func->card, 0, 0,
  42                SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF, 0, &data);
  43        if (ret)
  44                goto out;
  45
  46        data &= 0x0f;
  47
  48        if (data == 0x0f) {
  49                ret = mmc_io_rw_direct(func->card, 0, 0,
  50                        SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF_EXT, 0, &data);
  51                if (ret)
  52                        goto out;
  53        }
  54
  55        func->class = data;
  56
  57out:
  58        return ret;
  59}
  60
  61static int sdio_init_func(struct mmc_card *card, unsigned int fn)
  62{
  63        int ret;
  64        struct sdio_func *func;
  65
  66        BUG_ON(fn > SDIO_MAX_FUNCS);
  67
  68        func = sdio_alloc_func(card);
  69        if (IS_ERR(func))
  70                return PTR_ERR(func);
  71
  72        func->num = fn;
  73
  74        if (!(card->quirks & MMC_QUIRK_NONSTD_SDIO)) {
  75                ret = sdio_read_fbr(func);
  76                if (ret)
  77                        goto fail;
  78
  79                ret = sdio_read_func_cis(func);
  80                if (ret)
  81                        goto fail;
  82        } else {
  83                func->vendor = func->card->cis.vendor;
  84                func->device = func->card->cis.device;
  85                func->max_blksize = func->card->cis.blksize;
  86        }
  87
  88        card->sdio_func[fn - 1] = func;
  89
  90        return 0;
  91
  92fail:
  93        /*
  94         * It is okay to remove the function here even though we hold
  95         * the host lock as we haven't registered the device yet.
  96         */
  97        sdio_remove_func(func);
  98        return ret;
  99}
 100
 101static int sdio_read_cccr(struct mmc_card *card, u32 ocr)
 102{
 103        int ret;
 104        int cccr_vsn;
 105        int uhs = ocr & R4_18V_PRESENT;
 106        unsigned char data;
 107        unsigned char speed;
 108
 109        memset(&card->cccr, 0, sizeof(struct sdio_cccr));
 110
 111        ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CCCR, 0, &data);
 112        if (ret)
 113                goto out;
 114
 115        cccr_vsn = data & 0x0f;
 116
 117        if (cccr_vsn > SDIO_CCCR_REV_3_00) {
 118                pr_err("%s: unrecognised CCCR structure version %d\n",
 119                        mmc_hostname(card->host), cccr_vsn);
 120                return -EINVAL;
 121        }
 122
 123        card->cccr.sdio_vsn = (data & 0xf0) >> 4;
 124
 125        ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CAPS, 0, &data);
 126        if (ret)
 127                goto out;
 128
 129        if (data & SDIO_CCCR_CAP_SMB)
 130                card->cccr.multi_block = 1;
 131        if (data & SDIO_CCCR_CAP_LSC)
 132                card->cccr.low_speed = 1;
 133        if (data & SDIO_CCCR_CAP_4BLS)
 134                card->cccr.wide_bus = 1;
 135
 136        if (cccr_vsn >= SDIO_CCCR_REV_1_10) {
 137                ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_POWER, 0, &data);
 138                if (ret)
 139                        goto out;
 140
 141                if (data & SDIO_POWER_SMPC)
 142                        card->cccr.high_power = 1;
 143        }
 144
 145        if (cccr_vsn >= SDIO_CCCR_REV_1_20) {
 146                ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
 147                if (ret)
 148                        goto out;
 149
 150                card->scr.sda_spec3 = 0;
 151                card->sw_caps.sd3_bus_mode = 0;
 152                card->sw_caps.sd3_drv_type = 0;
 153                if (cccr_vsn >= SDIO_CCCR_REV_3_00 && uhs) {
 154                        card->scr.sda_spec3 = 1;
 155                        ret = mmc_io_rw_direct(card, 0, 0,
 156                                SDIO_CCCR_UHS, 0, &data);
 157                        if (ret)
 158                                goto out;
 159
 160                        if (mmc_host_uhs(card->host)) {
 161                                if (data & SDIO_UHS_DDR50)
 162                                        card->sw_caps.sd3_bus_mode
 163                                                |= SD_MODE_UHS_DDR50;
 164
 165                                if (data & SDIO_UHS_SDR50)
 166                                        card->sw_caps.sd3_bus_mode
 167                                                |= SD_MODE_UHS_SDR50;
 168
 169                                if (data & SDIO_UHS_SDR104)
 170                                        card->sw_caps.sd3_bus_mode
 171                                                |= SD_MODE_UHS_SDR104;
 172                        }
 173
 174                        ret = mmc_io_rw_direct(card, 0, 0,
 175                                SDIO_CCCR_DRIVE_STRENGTH, 0, &data);
 176                        if (ret)
 177                                goto out;
 178
 179                        if (data & SDIO_DRIVE_SDTA)
 180                                card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_A;
 181                        if (data & SDIO_DRIVE_SDTC)
 182                                card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_C;
 183                        if (data & SDIO_DRIVE_SDTD)
 184                                card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_D;
 185                }
 186
 187                /* if no uhs mode ensure we check for high speed */
 188                if (!card->sw_caps.sd3_bus_mode) {
 189                        if (speed & SDIO_SPEED_SHS) {
 190                                card->cccr.high_speed = 1;
 191                                card->sw_caps.hs_max_dtr = 50000000;
 192                        } else {
 193                                card->cccr.high_speed = 0;
 194                                card->sw_caps.hs_max_dtr = 25000000;
 195                        }
 196                }
 197        }
 198
 199out:
 200        return ret;
 201}
 202
 203static int sdio_enable_wide(struct mmc_card *card)
 204{
 205        int ret;
 206        u8 ctrl;
 207
 208        if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
 209                return 0;
 210
 211        if (card->cccr.low_speed && !card->cccr.wide_bus)
 212                return 0;
 213
 214        ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
 215        if (ret)
 216                return ret;
 217
 218        if ((ctrl & SDIO_BUS_WIDTH_MASK) == SDIO_BUS_WIDTH_RESERVED)
 219                pr_warn("%s: SDIO_CCCR_IF is invalid: 0x%02x\n",
 220                        mmc_hostname(card->host), ctrl);
 221
 222        /* set as 4-bit bus width */
 223        ctrl &= ~SDIO_BUS_WIDTH_MASK;
 224        ctrl |= SDIO_BUS_WIDTH_4BIT;
 225
 226        ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
 227        if (ret)
 228                return ret;
 229
 230        return 1;
 231}
 232
 233/*
 234 * If desired, disconnect the pull-up resistor on CD/DAT[3] (pin 1)
 235 * of the card. This may be required on certain setups of boards,
 236 * controllers and embedded sdio device which do not need the card's
 237 * pull-up. As a result, card detection is disabled and power is saved.
 238 */
 239static int sdio_disable_cd(struct mmc_card *card)
 240{
 241        int ret;
 242        u8 ctrl;
 243
 244        if (!mmc_card_disable_cd(card))
 245                return 0;
 246
 247        ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
 248        if (ret)
 249                return ret;
 250
 251        ctrl |= SDIO_BUS_CD_DISABLE;
 252
 253        return mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
 254}
 255
 256/*
 257 * Devices that remain active during a system suspend are
 258 * put back into 1-bit mode.
 259 */
 260static int sdio_disable_wide(struct mmc_card *card)
 261{
 262        int ret;
 263        u8 ctrl;
 264
 265        if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
 266                return 0;
 267
 268        if (card->cccr.low_speed && !card->cccr.wide_bus)
 269                return 0;
 270
 271        ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
 272        if (ret)
 273                return ret;
 274
 275        if (!(ctrl & SDIO_BUS_WIDTH_4BIT))
 276                return 0;
 277
 278        ctrl &= ~SDIO_BUS_WIDTH_4BIT;
 279        ctrl |= SDIO_BUS_ASYNC_INT;
 280
 281        ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
 282        if (ret)
 283                return ret;
 284
 285        mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1);
 286
 287        return 0;
 288}
 289
 290
 291static int sdio_enable_4bit_bus(struct mmc_card *card)
 292{
 293        int err;
 294
 295        if (card->type == MMC_TYPE_SDIO)
 296                return sdio_enable_wide(card);
 297
 298        if ((card->host->caps & MMC_CAP_4_BIT_DATA) &&
 299                (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
 300                err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
 301                if (err)
 302                        return err;
 303        } else
 304                return 0;
 305
 306        err = sdio_enable_wide(card);
 307        if (err <= 0)
 308                mmc_app_set_bus_width(card, MMC_BUS_WIDTH_1);
 309
 310        return err;
 311}
 312
 313
 314/*
 315 * Test if the card supports high-speed mode and, if so, switch to it.
 316 */
 317static int mmc_sdio_switch_hs(struct mmc_card *card, int enable)
 318{
 319        int ret;
 320        u8 speed;
 321
 322        if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
 323                return 0;
 324
 325        if (!card->cccr.high_speed)
 326                return 0;
 327
 328        ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
 329        if (ret)
 330                return ret;
 331
 332        if (enable)
 333                speed |= SDIO_SPEED_EHS;
 334        else
 335                speed &= ~SDIO_SPEED_EHS;
 336
 337        ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
 338        if (ret)
 339                return ret;
 340
 341        return 1;
 342}
 343
 344/*
 345 * Enable SDIO/combo card's high-speed mode. Return 0/1 if [not]supported.
 346 */
 347static int sdio_enable_hs(struct mmc_card *card)
 348{
 349        int ret;
 350
 351        ret = mmc_sdio_switch_hs(card, true);
 352        if (ret <= 0 || card->type == MMC_TYPE_SDIO)
 353                return ret;
 354
 355        ret = mmc_sd_switch_hs(card);
 356        if (ret <= 0)
 357                mmc_sdio_switch_hs(card, false);
 358
 359        return ret;
 360}
 361
 362static unsigned mmc_sdio_get_max_clock(struct mmc_card *card)
 363{
 364        unsigned max_dtr;
 365
 366        if (mmc_card_hs(card)) {
 367                /*
 368                 * The SDIO specification doesn't mention how
 369                 * the CIS transfer speed register relates to
 370                 * high-speed, but it seems that 50 MHz is
 371                 * mandatory.
 372                 */
 373                max_dtr = 50000000;
 374        } else {
 375                max_dtr = card->cis.max_dtr;
 376        }
 377
 378        if (card->type == MMC_TYPE_SD_COMBO)
 379                max_dtr = min(max_dtr, mmc_sd_get_max_clock(card));
 380
 381        return max_dtr;
 382}
 383
 384static unsigned char host_drive_to_sdio_drive(int host_strength)
 385{
 386        switch (host_strength) {
 387        case MMC_SET_DRIVER_TYPE_A:
 388                return SDIO_DTSx_SET_TYPE_A;
 389        case MMC_SET_DRIVER_TYPE_B:
 390                return SDIO_DTSx_SET_TYPE_B;
 391        case MMC_SET_DRIVER_TYPE_C:
 392                return SDIO_DTSx_SET_TYPE_C;
 393        case MMC_SET_DRIVER_TYPE_D:
 394                return SDIO_DTSx_SET_TYPE_D;
 395        default:
 396                return SDIO_DTSx_SET_TYPE_B;
 397        }
 398}
 399
 400static void sdio_select_driver_type(struct mmc_card *card)
 401{
 402        int host_drv_type = SD_DRIVER_TYPE_B;
 403        int card_drv_type = SD_DRIVER_TYPE_B;
 404        int drive_strength;
 405        unsigned char card_strength;
 406        int err;
 407
 408        /*
 409         * If the host doesn't support any of the Driver Types A,C or D,
 410         * or there is no board specific handler then default Driver
 411         * Type B is used.
 412         */
 413        if (!(card->host->caps &
 414                (MMC_CAP_DRIVER_TYPE_A |
 415                 MMC_CAP_DRIVER_TYPE_C |
 416                 MMC_CAP_DRIVER_TYPE_D)))
 417                return;
 418
 419        if (!card->host->ops->select_drive_strength)
 420                return;
 421
 422        if (card->host->caps & MMC_CAP_DRIVER_TYPE_A)
 423                host_drv_type |= SD_DRIVER_TYPE_A;
 424
 425        if (card->host->caps & MMC_CAP_DRIVER_TYPE_C)
 426                host_drv_type |= SD_DRIVER_TYPE_C;
 427
 428        if (card->host->caps & MMC_CAP_DRIVER_TYPE_D)
 429                host_drv_type |= SD_DRIVER_TYPE_D;
 430
 431        if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_A)
 432                card_drv_type |= SD_DRIVER_TYPE_A;
 433
 434        if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_C)
 435                card_drv_type |= SD_DRIVER_TYPE_C;
 436
 437        if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_D)
 438                card_drv_type |= SD_DRIVER_TYPE_D;
 439
 440        /*
 441         * The drive strength that the hardware can support
 442         * depends on the board design.  Pass the appropriate
 443         * information and let the hardware specific code
 444         * return what is possible given the options
 445         */
 446        drive_strength = card->host->ops->select_drive_strength(
 447                card->sw_caps.uhs_max_dtr,
 448                host_drv_type, card_drv_type);
 449
 450        /* if error just use default for drive strength B */
 451        err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_DRIVE_STRENGTH, 0,
 452                &card_strength);
 453        if (err)
 454                return;
 455
 456        card_strength &= ~(SDIO_DRIVE_DTSx_MASK<<SDIO_DRIVE_DTSx_SHIFT);
 457        card_strength |= host_drive_to_sdio_drive(drive_strength);
 458
 459        err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_DRIVE_STRENGTH,
 460                card_strength, NULL);
 461
 462        /* if error default to drive strength B */
 463        if (!err)
 464                mmc_set_driver_type(card->host, drive_strength);
 465}
 466
 467
 468static int sdio_set_bus_speed_mode(struct mmc_card *card)
 469{
 470        unsigned int bus_speed, timing;
 471        int err;
 472        unsigned char speed;
 473
 474        /*
 475         * If the host doesn't support any of the UHS-I modes, fallback on
 476         * default speed.
 477         */
 478        if (!mmc_host_uhs(card->host))
 479                return 0;
 480
 481        bus_speed = SDIO_SPEED_SDR12;
 482        timing = MMC_TIMING_UHS_SDR12;
 483        if ((card->host->caps & MMC_CAP_UHS_SDR104) &&
 484            (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) {
 485                        bus_speed = SDIO_SPEED_SDR104;
 486                        timing = MMC_TIMING_UHS_SDR104;
 487                        card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
 488                        card->sd_bus_speed = UHS_SDR104_BUS_SPEED;
 489        } else if ((card->host->caps & MMC_CAP_UHS_DDR50) &&
 490                   (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) {
 491                        bus_speed = SDIO_SPEED_DDR50;
 492                        timing = MMC_TIMING_UHS_DDR50;
 493                        card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
 494                        card->sd_bus_speed = UHS_DDR50_BUS_SPEED;
 495        } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 496                    MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode &
 497                    SD_MODE_UHS_SDR50)) {
 498                        bus_speed = SDIO_SPEED_SDR50;
 499                        timing = MMC_TIMING_UHS_SDR50;
 500                        card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
 501                        card->sd_bus_speed = UHS_SDR50_BUS_SPEED;
 502        } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 503                    MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) &&
 504                   (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) {
 505                        bus_speed = SDIO_SPEED_SDR25;
 506                        timing = MMC_TIMING_UHS_SDR25;
 507                        card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
 508                        card->sd_bus_speed = UHS_SDR25_BUS_SPEED;
 509        } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 510                    MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 |
 511                    MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode &
 512                    SD_MODE_UHS_SDR12)) {
 513                        bus_speed = SDIO_SPEED_SDR12;
 514                        timing = MMC_TIMING_UHS_SDR12;
 515                        card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
 516                        card->sd_bus_speed = UHS_SDR12_BUS_SPEED;
 517        }
 518
 519        err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
 520        if (err)
 521                return err;
 522
 523        speed &= ~SDIO_SPEED_BSS_MASK;
 524        speed |= bus_speed;
 525        err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
 526        if (err)
 527                return err;
 528
 529        if (bus_speed) {
 530                mmc_set_timing(card->host, timing);
 531                mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr);
 532        }
 533
 534        return 0;
 535}
 536
 537/*
 538 * UHS-I specific initialization procedure
 539 */
 540static int mmc_sdio_init_uhs_card(struct mmc_card *card)
 541{
 542        int err;
 543
 544        if (!card->scr.sda_spec3)
 545                return 0;
 546
 547        /*
 548         * Switch to wider bus (if supported).
 549         */
 550        if (card->host->caps & MMC_CAP_4_BIT_DATA) {
 551                err = sdio_enable_4bit_bus(card);
 552                if (err > 0) {
 553                        mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
 554                        err = 0;
 555                }
 556        }
 557
 558        /* Set the driver strength for the card */
 559        sdio_select_driver_type(card);
 560
 561        /* Set bus speed mode of the card */
 562        err = sdio_set_bus_speed_mode(card);
 563        if (err)
 564                goto out;
 565
 566        /*
 567         * SPI mode doesn't define CMD19 and tuning is only valid for SDR50 and
 568         * SDR104 mode SD-cards. Note that tuning is mandatory for SDR104.
 569         */
 570        if (!mmc_host_is_spi(card->host) && card->host->ops->execute_tuning &&
 571                        ((card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR50) ||
 572                         (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104))) {
 573                mmc_host_clk_hold(card->host);
 574                err = card->host->ops->execute_tuning(card->host,
 575                                                      MMC_SEND_TUNING_BLOCK);
 576                mmc_host_clk_release(card->host);
 577        }
 578
 579out:
 580
 581        return err;
 582}
 583
 584/*
 585 * Handle the detection and initialisation of a card.
 586 *
 587 * In the case of a resume, "oldcard" will contain the card
 588 * we're trying to reinitialise.
 589 */
 590static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
 591                              struct mmc_card *oldcard, int powered_resume)
 592{
 593        struct mmc_card *card;
 594        int err;
 595        int retries = 10;
 596        u32 rocr = 0;
 597        u32 ocr_card = ocr;
 598
 599        BUG_ON(!host);
 600        WARN_ON(!host->claimed);
 601
 602        /* to query card if 1.8V signalling is supported */
 603        if (mmc_host_uhs(host))
 604                ocr |= R4_18V_PRESENT;
 605
 606try_again:
 607        if (!retries) {
 608                pr_warn("%s: Skipping voltage switch\n", mmc_hostname(host));
 609                ocr &= ~R4_18V_PRESENT;
 610        }
 611
 612        /*
 613         * Inform the card of the voltage
 614         */
 615        if (!powered_resume) {
 616                err = mmc_send_io_op_cond(host, ocr, &rocr);
 617                if (err)
 618                        goto err;
 619        }
 620
 621        /*
 622         * For SPI, enable CRC as appropriate.
 623         */
 624        if (mmc_host_is_spi(host)) {
 625                err = mmc_spi_set_crc(host, use_spi_crc);
 626                if (err)
 627                        goto err;
 628        }
 629
 630        /*
 631         * Allocate card structure.
 632         */
 633        card = mmc_alloc_card(host, NULL);
 634        if (IS_ERR(card)) {
 635                err = PTR_ERR(card);
 636                goto err;
 637        }
 638
 639        if ((rocr & R4_MEMORY_PRESENT) &&
 640            mmc_sd_get_cid(host, ocr & rocr, card->raw_cid, NULL) == 0) {
 641                card->type = MMC_TYPE_SD_COMBO;
 642
 643                if (oldcard && (oldcard->type != MMC_TYPE_SD_COMBO ||
 644                    memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) {
 645                        mmc_remove_card(card);
 646                        return -ENOENT;
 647                }
 648        } else {
 649                card->type = MMC_TYPE_SDIO;
 650
 651                if (oldcard && oldcard->type != MMC_TYPE_SDIO) {
 652                        mmc_remove_card(card);
 653                        return -ENOENT;
 654                }
 655        }
 656
 657        /*
 658         * Call the optional HC's init_card function to handle quirks.
 659         */
 660        if (host->ops->init_card)
 661                host->ops->init_card(host, card);
 662
 663        /*
 664         * If the host and card support UHS-I mode request the card
 665         * to switch to 1.8V signaling level.  No 1.8v signalling if
 666         * UHS mode is not enabled to maintain compatibility and some
 667         * systems that claim 1.8v signalling in fact do not support
 668         * it.
 669         */
 670        if (!powered_resume && (rocr & ocr & R4_18V_PRESENT)) {
 671                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180,
 672                                        ocr);
 673                if (err == -EAGAIN) {
 674                        sdio_reset(host);
 675                        mmc_go_idle(host);
 676                        mmc_send_if_cond(host, host->ocr_avail);
 677                        mmc_remove_card(card);
 678                        retries--;
 679                        goto try_again;
 680                } else if (err) {
 681                        ocr &= ~R4_18V_PRESENT;
 682                }
 683                err = 0;
 684        } else {
 685                ocr &= ~R4_18V_PRESENT;
 686        }
 687
 688        /*
 689         * For native busses:  set card RCA and quit open drain mode.
 690         */
 691        if (!powered_resume && !mmc_host_is_spi(host)) {
 692                err = mmc_send_relative_addr(host, &card->rca);
 693                if (err)
 694                        goto remove;
 695
 696                /*
 697                 * Update oldcard with the new RCA received from the SDIO
 698                 * device -- we're doing this so that it's updated in the
 699                 * "card" struct when oldcard overwrites that later.
 700                 */
 701                if (oldcard)
 702                        oldcard->rca = card->rca;
 703        }
 704
 705        /*
 706         * Read CSD, before selecting the card
 707         */
 708        if (!oldcard && card->type == MMC_TYPE_SD_COMBO) {
 709                err = mmc_sd_get_csd(host, card);
 710                if (err)
 711                        return err;
 712
 713                mmc_decode_cid(card);
 714        }
 715
 716        /*
 717         * Select card, as all following commands rely on that.
 718         */
 719        if (!powered_resume && !mmc_host_is_spi(host)) {
 720                err = mmc_select_card(card);
 721                if (err)
 722                        goto remove;
 723        }
 724
 725        if (card->quirks & MMC_QUIRK_NONSTD_SDIO) {
 726                /*
 727                 * This is non-standard SDIO device, meaning it doesn't
 728                 * have any CIA (Common I/O area) registers present.
 729                 * It's host's responsibility to fill cccr and cis
 730                 * structures in init_card().
 731                 */
 732                mmc_set_clock(host, card->cis.max_dtr);
 733
 734                if (card->cccr.high_speed) {
 735                        mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 736                }
 737
 738                goto finish;
 739        }
 740
 741        /*
 742         * Read the common registers.
 743         */
 744        err = sdio_read_cccr(card, ocr);
 745        if (err)
 746                goto remove;
 747
 748        /*
 749         * Read the common CIS tuples.
 750         */
 751        err = sdio_read_common_cis(card);
 752        if (err)
 753                goto remove;
 754
 755        if (oldcard) {
 756                int same = (card->cis.vendor == oldcard->cis.vendor &&
 757                            card->cis.device == oldcard->cis.device);
 758                mmc_remove_card(card);
 759                if (!same)
 760                        return -ENOENT;
 761
 762                card = oldcard;
 763        }
 764        card->ocr = ocr_card;
 765        mmc_fixup_device(card, NULL);
 766
 767        if (card->type == MMC_TYPE_SD_COMBO) {
 768                err = mmc_sd_setup_card(host, card, oldcard != NULL);
 769                /* handle as SDIO-only card if memory init failed */
 770                if (err) {
 771                        mmc_go_idle(host);
 772                        if (mmc_host_is_spi(host))
 773                                /* should not fail, as it worked previously */
 774                                mmc_spi_set_crc(host, use_spi_crc);
 775                        card->type = MMC_TYPE_SDIO;
 776                } else
 777                        card->dev.type = &sd_type;
 778        }
 779
 780        /*
 781         * If needed, disconnect card detection pull-up resistor.
 782         */
 783        err = sdio_disable_cd(card);
 784        if (err)
 785                goto remove;
 786
 787        /* Initialization sequence for UHS-I cards */
 788        /* Only if card supports 1.8v and UHS signaling */
 789        if ((ocr & R4_18V_PRESENT) && card->sw_caps.sd3_bus_mode) {
 790                err = mmc_sdio_init_uhs_card(card);
 791                if (err)
 792                        goto remove;
 793        } else {
 794                /*
 795                 * Switch to high-speed (if supported).
 796                 */
 797                err = sdio_enable_hs(card);
 798                if (err > 0)
 799                        mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 800                else if (err)
 801                        goto remove;
 802
 803                /*
 804                 * Change to the card's maximum speed.
 805                 */
 806                mmc_set_clock(host, mmc_sdio_get_max_clock(card));
 807
 808                /*
 809                 * Switch to wider bus (if supported).
 810                 */
 811                err = sdio_enable_4bit_bus(card);
 812                if (err > 0)
 813                        mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
 814                else if (err)
 815                        goto remove;
 816        }
 817finish:
 818        if (!oldcard)
 819                host->card = card;
 820        return 0;
 821
 822remove:
 823        if (!oldcard)
 824                mmc_remove_card(card);
 825
 826err:
 827        return err;
 828}
 829
 830/*
 831 * Host is being removed. Free up the current card.
 832 */
 833static void mmc_sdio_remove(struct mmc_host *host)
 834{
 835        int i;
 836
 837        BUG_ON(!host);
 838        BUG_ON(!host->card);
 839
 840        for (i = 0;i < host->card->sdio_funcs;i++) {
 841                if (host->card->sdio_func[i]) {
 842                        sdio_remove_func(host->card->sdio_func[i]);
 843                        host->card->sdio_func[i] = NULL;
 844                }
 845        }
 846
 847        mmc_remove_card(host->card);
 848        host->card = NULL;
 849}
 850
 851/*
 852 * Card detection - card is alive.
 853 */
 854static int mmc_sdio_alive(struct mmc_host *host)
 855{
 856        return mmc_select_card(host->card);
 857}
 858
 859/*
 860 * Card detection callback from host.
 861 */
 862static void mmc_sdio_detect(struct mmc_host *host)
 863{
 864        int err;
 865
 866        BUG_ON(!host);
 867        BUG_ON(!host->card);
 868
 869        /* Make sure card is powered before detecting it */
 870        if (host->caps & MMC_CAP_POWER_OFF_CARD) {
 871                err = pm_runtime_get_sync(&host->card->dev);
 872                if (err < 0) {
 873                        pm_runtime_put_noidle(&host->card->dev);
 874                        goto out;
 875                }
 876        }
 877
 878        mmc_claim_host(host);
 879
 880        /*
 881         * Just check if our card has been removed.
 882         */
 883        err = _mmc_detect_card_removed(host);
 884
 885        mmc_release_host(host);
 886
 887        /*
 888         * Tell PM core it's OK to power off the card now.
 889         *
 890         * The _sync variant is used in order to ensure that the card
 891         * is left powered off in case an error occurred, and the card
 892         * is going to be removed.
 893         *
 894         * Since there is no specific reason to believe a new user
 895         * is about to show up at this point, the _sync variant is
 896         * desirable anyway.
 897         */
 898        if (host->caps & MMC_CAP_POWER_OFF_CARD)
 899                pm_runtime_put_sync(&host->card->dev);
 900
 901out:
 902        if (err) {
 903                mmc_sdio_remove(host);
 904
 905                mmc_claim_host(host);
 906                mmc_detach_bus(host);
 907                mmc_power_off(host);
 908                mmc_release_host(host);
 909        }
 910}
 911
 912/*
 913 * SDIO pre_suspend.  We need to suspend all functions separately.
 914 * Therefore all registered functions must have drivers with suspend
 915 * and resume methods.  Failing that we simply remove the whole card.
 916 */
 917static int mmc_sdio_pre_suspend(struct mmc_host *host)
 918{
 919        int i, err = 0;
 920
 921        for (i = 0; i < host->card->sdio_funcs; i++) {
 922                struct sdio_func *func = host->card->sdio_func[i];
 923                if (func && sdio_func_present(func) && func->dev.driver) {
 924                        const struct dev_pm_ops *pmops = func->dev.driver->pm;
 925                        if (!pmops || !pmops->suspend || !pmops->resume) {
 926                                /* force removal of entire card in that case */
 927                                err = -ENOSYS;
 928                                break;
 929                        }
 930                }
 931        }
 932
 933        return err;
 934}
 935
 936/*
 937 * SDIO suspend.  Suspend all functions separately.
 938 */
 939static int mmc_sdio_suspend(struct mmc_host *host)
 940{
 941        if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
 942                mmc_claim_host(host);
 943                sdio_disable_wide(host->card);
 944                mmc_release_host(host);
 945        }
 946
 947        if (!mmc_card_keep_power(host))
 948                mmc_power_off(host);
 949
 950        return 0;
 951}
 952
 953static int mmc_sdio_resume(struct mmc_host *host)
 954{
 955        int err = 0;
 956
 957        BUG_ON(!host);
 958        BUG_ON(!host->card);
 959
 960        /* Basic card reinitialization. */
 961        mmc_claim_host(host);
 962
 963        /* Restore power if needed */
 964        if (!mmc_card_keep_power(host)) {
 965                mmc_power_up(host, host->card->ocr);
 966                /*
 967                 * Tell runtime PM core we just powered up the card,
 968                 * since it still believes the card is powered off.
 969                 * Note that currently runtime PM is only enabled
 970                 * for SDIO cards that are MMC_CAP_POWER_OFF_CARD
 971                 */
 972                if (host->caps & MMC_CAP_POWER_OFF_CARD) {
 973                        pm_runtime_disable(&host->card->dev);
 974                        pm_runtime_set_active(&host->card->dev);
 975                        pm_runtime_enable(&host->card->dev);
 976                }
 977        }
 978
 979        /* No need to reinitialize powered-resumed nonremovable cards */
 980        if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) {
 981                sdio_reset(host);
 982                mmc_go_idle(host);
 983                mmc_send_if_cond(host, host->card->ocr);
 984                err = mmc_send_io_op_cond(host, 0, NULL);
 985                if (!err)
 986                        err = mmc_sdio_init_card(host, host->card->ocr,
 987                                                 host->card,
 988                                                 mmc_card_keep_power(host));
 989        } else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
 990                /* We may have switched to 1-bit mode during suspend */
 991                err = sdio_enable_4bit_bus(host->card);
 992                if (err > 0) {
 993                        mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
 994                        err = 0;
 995                }
 996        }
 997
 998        if (!err && host->sdio_irqs) {
 999                if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
1000                        wake_up_process(host->sdio_irq_thread);
1001                } else if (host->caps & MMC_CAP_SDIO_IRQ) {
1002                        mmc_host_clk_hold(host);
1003                        host->ops->enable_sdio_irq(host, 1);
1004                        mmc_host_clk_release(host);
1005                }
1006        }
1007
1008        mmc_release_host(host);
1009
1010        host->pm_flags &= ~MMC_PM_KEEP_POWER;
1011        return err;
1012}
1013
1014static int mmc_sdio_power_restore(struct mmc_host *host)
1015{
1016        int ret;
1017
1018        BUG_ON(!host);
1019        BUG_ON(!host->card);
1020
1021        mmc_claim_host(host);
1022
1023        /*
1024         * Reset the card by performing the same steps that are taken by
1025         * mmc_rescan_try_freq() and mmc_attach_sdio() during a "normal" probe.
1026         *
1027         * sdio_reset() is technically not needed. Having just powered up the
1028         * hardware, it should already be in reset state. However, some
1029         * platforms (such as SD8686 on OLPC) do not instantly cut power,
1030         * meaning that a reset is required when restoring power soon after
1031         * powering off. It is harmless in other cases.
1032         *
1033         * The CMD5 reset (mmc_send_io_op_cond()), according to the SDIO spec,
1034         * is not necessary for non-removable cards. However, it is required
1035         * for OLPC SD8686 (which expects a [CMD5,5,3,7] init sequence), and
1036         * harmless in other situations.
1037         *
1038         */
1039
1040        sdio_reset(host);
1041        mmc_go_idle(host);
1042        mmc_send_if_cond(host, host->card->ocr);
1043
1044        ret = mmc_send_io_op_cond(host, 0, NULL);
1045        if (ret)
1046                goto out;
1047
1048        ret = mmc_sdio_init_card(host, host->card->ocr, host->card,
1049                                mmc_card_keep_power(host));
1050        if (!ret && host->sdio_irqs)
1051                mmc_signal_sdio_irq(host);
1052
1053out:
1054        mmc_release_host(host);
1055
1056        return ret;
1057}
1058
1059static int mmc_sdio_runtime_suspend(struct mmc_host *host)
1060{
1061        /* No references to the card, cut the power to it. */
1062        mmc_power_off(host);
1063        return 0;
1064}
1065
1066static int mmc_sdio_runtime_resume(struct mmc_host *host)
1067{
1068        /* Restore power and re-initialize. */
1069        mmc_power_up(host, host->card->ocr);
1070        return mmc_sdio_power_restore(host);
1071}
1072
1073static const struct mmc_bus_ops mmc_sdio_ops = {
1074        .remove = mmc_sdio_remove,
1075        .detect = mmc_sdio_detect,
1076        .pre_suspend = mmc_sdio_pre_suspend,
1077        .suspend = mmc_sdio_suspend,
1078        .resume = mmc_sdio_resume,
1079        .runtime_suspend = mmc_sdio_runtime_suspend,
1080        .runtime_resume = mmc_sdio_runtime_resume,
1081        .power_restore = mmc_sdio_power_restore,
1082        .alive = mmc_sdio_alive,
1083};
1084
1085
1086/*
1087 * Starting point for SDIO card init.
1088 */
1089int mmc_attach_sdio(struct mmc_host *host)
1090{
1091        int err, i, funcs;
1092        u32 ocr, rocr;
1093        struct mmc_card *card;
1094
1095        BUG_ON(!host);
1096        WARN_ON(!host->claimed);
1097
1098        err = mmc_send_io_op_cond(host, 0, &ocr);
1099        if (err)
1100                return err;
1101
1102        mmc_attach_bus(host, &mmc_sdio_ops);
1103        if (host->ocr_avail_sdio)
1104                host->ocr_avail = host->ocr_avail_sdio;
1105
1106
1107        rocr = mmc_select_voltage(host, ocr);
1108
1109        /*
1110         * Can we support the voltage(s) of the card(s)?
1111         */
1112        if (!rocr) {
1113                err = -EINVAL;
1114                goto err;
1115        }
1116
1117        /*
1118         * Detect and init the card.
1119         */
1120        err = mmc_sdio_init_card(host, rocr, NULL, 0);
1121        if (err)
1122                goto err;
1123
1124        card = host->card;
1125
1126        /*
1127         * Enable runtime PM only if supported by host+card+board
1128         */
1129        if (host->caps & MMC_CAP_POWER_OFF_CARD) {
1130                /*
1131                 * Let runtime PM core know our card is active
1132                 */
1133                err = pm_runtime_set_active(&card->dev);
1134                if (err)
1135                        goto remove;
1136
1137                /*
1138                 * Enable runtime PM for this card
1139                 */
1140                pm_runtime_enable(&card->dev);
1141        }
1142
1143        /*
1144         * The number of functions on the card is encoded inside
1145         * the ocr.
1146         */
1147        funcs = (ocr & 0x70000000) >> 28;
1148        card->sdio_funcs = 0;
1149
1150        /*
1151         * Initialize (but don't add) all present functions.
1152         */
1153        for (i = 0; i < funcs; i++, card->sdio_funcs++) {
1154                err = sdio_init_func(host->card, i + 1);
1155                if (err)
1156                        goto remove;
1157
1158                /*
1159                 * Enable Runtime PM for this func (if supported)
1160                 */
1161                if (host->caps & MMC_CAP_POWER_OFF_CARD)
1162                        pm_runtime_enable(&card->sdio_func[i]->dev);
1163        }
1164
1165        /*
1166         * First add the card to the driver model...
1167         */
1168        mmc_release_host(host);
1169        err = mmc_add_card(host->card);
1170        if (err)
1171                goto remove_added;
1172
1173        /*
1174         * ...then the SDIO functions.
1175         */
1176        for (i = 0;i < funcs;i++) {
1177                err = sdio_add_func(host->card->sdio_func[i]);
1178                if (err)
1179                        goto remove_added;
1180        }
1181
1182        mmc_claim_host(host);
1183        return 0;
1184
1185
1186remove_added:
1187        /* Remove without lock if the device has been added. */
1188        mmc_sdio_remove(host);
1189        mmc_claim_host(host);
1190remove:
1191        /* And with lock if it hasn't been added. */
1192        mmc_release_host(host);
1193        if (host->card)
1194                mmc_sdio_remove(host);
1195        mmc_claim_host(host);
1196err:
1197        mmc_detach_bus(host);
1198
1199        pr_err("%s: error %d whilst initialising SDIO card\n",
1200                mmc_hostname(host), err);
1201
1202        return err;
1203}
1204
1205