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) &&
 571            ((card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR50) ||
 572             (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)))
 573                err = mmc_execute_tuning(card);
 574out:
 575        return err;
 576}
 577
 578/*
 579 * Handle the detection and initialisation of a card.
 580 *
 581 * In the case of a resume, "oldcard" will contain the card
 582 * we're trying to reinitialise.
 583 */
 584static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
 585                              struct mmc_card *oldcard, int powered_resume)
 586{
 587        struct mmc_card *card;
 588        int err;
 589        int retries = 10;
 590        u32 rocr = 0;
 591        u32 ocr_card = ocr;
 592
 593        BUG_ON(!host);
 594        WARN_ON(!host->claimed);
 595
 596        /* to query card if 1.8V signalling is supported */
 597        if (mmc_host_uhs(host))
 598                ocr |= R4_18V_PRESENT;
 599
 600try_again:
 601        if (!retries) {
 602                pr_warn("%s: Skipping voltage switch\n", mmc_hostname(host));
 603                ocr &= ~R4_18V_PRESENT;
 604        }
 605
 606        /*
 607         * Inform the card of the voltage
 608         */
 609        if (!powered_resume) {
 610                err = mmc_send_io_op_cond(host, ocr, &rocr);
 611                if (err)
 612                        goto err;
 613        }
 614
 615        /*
 616         * For SPI, enable CRC as appropriate.
 617         */
 618        if (mmc_host_is_spi(host)) {
 619                err = mmc_spi_set_crc(host, use_spi_crc);
 620                if (err)
 621                        goto err;
 622        }
 623
 624        /*
 625         * Allocate card structure.
 626         */
 627        card = mmc_alloc_card(host, NULL);
 628        if (IS_ERR(card)) {
 629                err = PTR_ERR(card);
 630                goto err;
 631        }
 632
 633        if ((rocr & R4_MEMORY_PRESENT) &&
 634            mmc_sd_get_cid(host, ocr & rocr, card->raw_cid, NULL) == 0) {
 635                card->type = MMC_TYPE_SD_COMBO;
 636
 637                if (oldcard && (oldcard->type != MMC_TYPE_SD_COMBO ||
 638                    memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) {
 639                        mmc_remove_card(card);
 640                        return -ENOENT;
 641                }
 642        } else {
 643                card->type = MMC_TYPE_SDIO;
 644
 645                if (oldcard && oldcard->type != MMC_TYPE_SDIO) {
 646                        mmc_remove_card(card);
 647                        return -ENOENT;
 648                }
 649        }
 650
 651        /*
 652         * Call the optional HC's init_card function to handle quirks.
 653         */
 654        if (host->ops->init_card)
 655                host->ops->init_card(host, card);
 656
 657        /*
 658         * If the host and card support UHS-I mode request the card
 659         * to switch to 1.8V signaling level.  No 1.8v signalling if
 660         * UHS mode is not enabled to maintain compatibility and some
 661         * systems that claim 1.8v signalling in fact do not support
 662         * it.
 663         */
 664        if (!powered_resume && (rocr & ocr & R4_18V_PRESENT)) {
 665                err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180,
 666                                        ocr);
 667                if (err == -EAGAIN) {
 668                        sdio_reset(host);
 669                        mmc_go_idle(host);
 670                        mmc_send_if_cond(host, host->ocr_avail);
 671                        mmc_remove_card(card);
 672                        retries--;
 673                        goto try_again;
 674                } else if (err) {
 675                        ocr &= ~R4_18V_PRESENT;
 676                }
 677                err = 0;
 678        } else {
 679                ocr &= ~R4_18V_PRESENT;
 680        }
 681
 682        /*
 683         * For native busses:  set card RCA and quit open drain mode.
 684         */
 685        if (!powered_resume && !mmc_host_is_spi(host)) {
 686                err = mmc_send_relative_addr(host, &card->rca);
 687                if (err)
 688                        goto remove;
 689
 690                /*
 691                 * Update oldcard with the new RCA received from the SDIO
 692                 * device -- we're doing this so that it's updated in the
 693                 * "card" struct when oldcard overwrites that later.
 694                 */
 695                if (oldcard)
 696                        oldcard->rca = card->rca;
 697        }
 698
 699        /*
 700         * Read CSD, before selecting the card
 701         */
 702        if (!oldcard && card->type == MMC_TYPE_SD_COMBO) {
 703                err = mmc_sd_get_csd(host, card);
 704                if (err)
 705                        return err;
 706
 707                mmc_decode_cid(card);
 708        }
 709
 710        /*
 711         * Select card, as all following commands rely on that.
 712         */
 713        if (!powered_resume && !mmc_host_is_spi(host)) {
 714                err = mmc_select_card(card);
 715                if (err)
 716                        goto remove;
 717        }
 718
 719        if (card->quirks & MMC_QUIRK_NONSTD_SDIO) {
 720                /*
 721                 * This is non-standard SDIO device, meaning it doesn't
 722                 * have any CIA (Common I/O area) registers present.
 723                 * It's host's responsibility to fill cccr and cis
 724                 * structures in init_card().
 725                 */
 726                mmc_set_clock(host, card->cis.max_dtr);
 727
 728                if (card->cccr.high_speed) {
 729                        mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 730                }
 731
 732                goto finish;
 733        }
 734
 735        /*
 736         * Read the common registers.
 737         */
 738        err = sdio_read_cccr(card, ocr);
 739        if (err)
 740                goto remove;
 741
 742        /*
 743         * Read the common CIS tuples.
 744         */
 745        err = sdio_read_common_cis(card);
 746        if (err)
 747                goto remove;
 748
 749        if (oldcard) {
 750                int same = (card->cis.vendor == oldcard->cis.vendor &&
 751                            card->cis.device == oldcard->cis.device);
 752                mmc_remove_card(card);
 753                if (!same)
 754                        return -ENOENT;
 755
 756                card = oldcard;
 757        }
 758        card->ocr = ocr_card;
 759        mmc_fixup_device(card, NULL);
 760
 761        if (card->type == MMC_TYPE_SD_COMBO) {
 762                err = mmc_sd_setup_card(host, card, oldcard != NULL);
 763                /* handle as SDIO-only card if memory init failed */
 764                if (err) {
 765                        mmc_go_idle(host);
 766                        if (mmc_host_is_spi(host))
 767                                /* should not fail, as it worked previously */
 768                                mmc_spi_set_crc(host, use_spi_crc);
 769                        card->type = MMC_TYPE_SDIO;
 770                } else
 771                        card->dev.type = &sd_type;
 772        }
 773
 774        /*
 775         * If needed, disconnect card detection pull-up resistor.
 776         */
 777        err = sdio_disable_cd(card);
 778        if (err)
 779                goto remove;
 780
 781        /* Initialization sequence for UHS-I cards */
 782        /* Only if card supports 1.8v and UHS signaling */
 783        if ((ocr & R4_18V_PRESENT) && card->sw_caps.sd3_bus_mode) {
 784                err = mmc_sdio_init_uhs_card(card);
 785                if (err)
 786                        goto remove;
 787        } else {
 788                /*
 789                 * Switch to high-speed (if supported).
 790                 */
 791                err = sdio_enable_hs(card);
 792                if (err > 0)
 793                        mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 794                else if (err)
 795                        goto remove;
 796
 797                /*
 798                 * Change to the card's maximum speed.
 799                 */
 800                mmc_set_clock(host, mmc_sdio_get_max_clock(card));
 801
 802                /*
 803                 * Switch to wider bus (if supported).
 804                 */
 805                err = sdio_enable_4bit_bus(card);
 806                if (err > 0)
 807                        mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
 808                else if (err)
 809                        goto remove;
 810        }
 811finish:
 812        if (!oldcard)
 813                host->card = card;
 814        return 0;
 815
 816remove:
 817        if (!oldcard)
 818                mmc_remove_card(card);
 819
 820err:
 821        return err;
 822}
 823
 824/*
 825 * Host is being removed. Free up the current card.
 826 */
 827static void mmc_sdio_remove(struct mmc_host *host)
 828{
 829        int i;
 830
 831        BUG_ON(!host);
 832        BUG_ON(!host->card);
 833
 834        for (i = 0;i < host->card->sdio_funcs;i++) {
 835                if (host->card->sdio_func[i]) {
 836                        sdio_remove_func(host->card->sdio_func[i]);
 837                        host->card->sdio_func[i] = NULL;
 838                }
 839        }
 840
 841        mmc_remove_card(host->card);
 842        host->card = NULL;
 843}
 844
 845/*
 846 * Card detection - card is alive.
 847 */
 848static int mmc_sdio_alive(struct mmc_host *host)
 849{
 850        return mmc_select_card(host->card);
 851}
 852
 853/*
 854 * Card detection callback from host.
 855 */
 856static void mmc_sdio_detect(struct mmc_host *host)
 857{
 858        int err;
 859
 860        BUG_ON(!host);
 861        BUG_ON(!host->card);
 862
 863        /* Make sure card is powered before detecting it */
 864        if (host->caps & MMC_CAP_POWER_OFF_CARD) {
 865                err = pm_runtime_get_sync(&host->card->dev);
 866                if (err < 0) {
 867                        pm_runtime_put_noidle(&host->card->dev);
 868                        goto out;
 869                }
 870        }
 871
 872        mmc_claim_host(host);
 873
 874        /*
 875         * Just check if our card has been removed.
 876         */
 877        err = _mmc_detect_card_removed(host);
 878
 879        mmc_release_host(host);
 880
 881        /*
 882         * Tell PM core it's OK to power off the card now.
 883         *
 884         * The _sync variant is used in order to ensure that the card
 885         * is left powered off in case an error occurred, and the card
 886         * is going to be removed.
 887         *
 888         * Since there is no specific reason to believe a new user
 889         * is about to show up at this point, the _sync variant is
 890         * desirable anyway.
 891         */
 892        if (host->caps & MMC_CAP_POWER_OFF_CARD)
 893                pm_runtime_put_sync(&host->card->dev);
 894
 895out:
 896        if (err) {
 897                mmc_sdio_remove(host);
 898
 899                mmc_claim_host(host);
 900                mmc_detach_bus(host);
 901                mmc_power_off(host);
 902                mmc_release_host(host);
 903        }
 904}
 905
 906/*
 907 * SDIO pre_suspend.  We need to suspend all functions separately.
 908 * Therefore all registered functions must have drivers with suspend
 909 * and resume methods.  Failing that we simply remove the whole card.
 910 */
 911static int mmc_sdio_pre_suspend(struct mmc_host *host)
 912{
 913        int i, err = 0;
 914
 915        for (i = 0; i < host->card->sdio_funcs; i++) {
 916                struct sdio_func *func = host->card->sdio_func[i];
 917                if (func && sdio_func_present(func) && func->dev.driver) {
 918                        const struct dev_pm_ops *pmops = func->dev.driver->pm;
 919                        if (!pmops || !pmops->suspend || !pmops->resume) {
 920                                /* force removal of entire card in that case */
 921                                err = -ENOSYS;
 922                                break;
 923                        }
 924                }
 925        }
 926
 927        return err;
 928}
 929
 930/*
 931 * SDIO suspend.  Suspend all functions separately.
 932 */
 933static int mmc_sdio_suspend(struct mmc_host *host)
 934{
 935        if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
 936                mmc_claim_host(host);
 937                sdio_disable_wide(host->card);
 938                mmc_release_host(host);
 939        }
 940
 941        if (!mmc_card_keep_power(host))
 942                mmc_power_off(host);
 943
 944        return 0;
 945}
 946
 947static int mmc_sdio_resume(struct mmc_host *host)
 948{
 949        int err = 0;
 950
 951        BUG_ON(!host);
 952        BUG_ON(!host->card);
 953
 954        /* Basic card reinitialization. */
 955        mmc_claim_host(host);
 956
 957        /* Restore power if needed */
 958        if (!mmc_card_keep_power(host)) {
 959                mmc_power_up(host, host->card->ocr);
 960                /*
 961                 * Tell runtime PM core we just powered up the card,
 962                 * since it still believes the card is powered off.
 963                 * Note that currently runtime PM is only enabled
 964                 * for SDIO cards that are MMC_CAP_POWER_OFF_CARD
 965                 */
 966                if (host->caps & MMC_CAP_POWER_OFF_CARD) {
 967                        pm_runtime_disable(&host->card->dev);
 968                        pm_runtime_set_active(&host->card->dev);
 969                        pm_runtime_enable(&host->card->dev);
 970                }
 971        }
 972
 973        /* No need to reinitialize powered-resumed nonremovable cards */
 974        if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) {
 975                sdio_reset(host);
 976                mmc_go_idle(host);
 977                mmc_send_if_cond(host, host->card->ocr);
 978                err = mmc_send_io_op_cond(host, 0, NULL);
 979                if (!err)
 980                        err = mmc_sdio_init_card(host, host->card->ocr,
 981                                                 host->card,
 982                                                 mmc_card_keep_power(host));
 983        } else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
 984                /* We may have switched to 1-bit mode during suspend */
 985                err = sdio_enable_4bit_bus(host->card);
 986                if (err > 0) {
 987                        mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
 988                        err = 0;
 989                }
 990        }
 991
 992        if (!err && host->sdio_irqs) {
 993                if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) {
 994                        wake_up_process(host->sdio_irq_thread);
 995                } else if (host->caps & MMC_CAP_SDIO_IRQ) {
 996                        mmc_host_clk_hold(host);
 997                        host->ops->enable_sdio_irq(host, 1);
 998                        mmc_host_clk_release(host);
 999                }
1000        }
1001
1002        mmc_release_host(host);
1003
1004        host->pm_flags &= ~MMC_PM_KEEP_POWER;
1005        return err;
1006}
1007
1008static int mmc_sdio_power_restore(struct mmc_host *host)
1009{
1010        int ret;
1011
1012        BUG_ON(!host);
1013        BUG_ON(!host->card);
1014
1015        mmc_claim_host(host);
1016
1017        /*
1018         * Reset the card by performing the same steps that are taken by
1019         * mmc_rescan_try_freq() and mmc_attach_sdio() during a "normal" probe.
1020         *
1021         * sdio_reset() is technically not needed. Having just powered up the
1022         * hardware, it should already be in reset state. However, some
1023         * platforms (such as SD8686 on OLPC) do not instantly cut power,
1024         * meaning that a reset is required when restoring power soon after
1025         * powering off. It is harmless in other cases.
1026         *
1027         * The CMD5 reset (mmc_send_io_op_cond()), according to the SDIO spec,
1028         * is not necessary for non-removable cards. However, it is required
1029         * for OLPC SD8686 (which expects a [CMD5,5,3,7] init sequence), and
1030         * harmless in other situations.
1031         *
1032         */
1033
1034        sdio_reset(host);
1035        mmc_go_idle(host);
1036        mmc_send_if_cond(host, host->card->ocr);
1037
1038        ret = mmc_send_io_op_cond(host, 0, NULL);
1039        if (ret)
1040                goto out;
1041
1042        ret = mmc_sdio_init_card(host, host->card->ocr, host->card,
1043                                mmc_card_keep_power(host));
1044        if (!ret && host->sdio_irqs)
1045                mmc_signal_sdio_irq(host);
1046
1047out:
1048        mmc_release_host(host);
1049
1050        return ret;
1051}
1052
1053static int mmc_sdio_runtime_suspend(struct mmc_host *host)
1054{
1055        /* No references to the card, cut the power to it. */
1056        mmc_power_off(host);
1057        return 0;
1058}
1059
1060static int mmc_sdio_runtime_resume(struct mmc_host *host)
1061{
1062        /* Restore power and re-initialize. */
1063        mmc_power_up(host, host->card->ocr);
1064        return mmc_sdio_power_restore(host);
1065}
1066
1067static const struct mmc_bus_ops mmc_sdio_ops = {
1068        .remove = mmc_sdio_remove,
1069        .detect = mmc_sdio_detect,
1070        .pre_suspend = mmc_sdio_pre_suspend,
1071        .suspend = mmc_sdio_suspend,
1072        .resume = mmc_sdio_resume,
1073        .runtime_suspend = mmc_sdio_runtime_suspend,
1074        .runtime_resume = mmc_sdio_runtime_resume,
1075        .power_restore = mmc_sdio_power_restore,
1076        .alive = mmc_sdio_alive,
1077};
1078
1079
1080/*
1081 * Starting point for SDIO card init.
1082 */
1083int mmc_attach_sdio(struct mmc_host *host)
1084{
1085        int err, i, funcs;
1086        u32 ocr, rocr;
1087        struct mmc_card *card;
1088
1089        BUG_ON(!host);
1090        WARN_ON(!host->claimed);
1091
1092        err = mmc_send_io_op_cond(host, 0, &ocr);
1093        if (err)
1094                return err;
1095
1096        mmc_attach_bus(host, &mmc_sdio_ops);
1097        if (host->ocr_avail_sdio)
1098                host->ocr_avail = host->ocr_avail_sdio;
1099
1100
1101        rocr = mmc_select_voltage(host, ocr);
1102
1103        /*
1104         * Can we support the voltage(s) of the card(s)?
1105         */
1106        if (!rocr) {
1107                err = -EINVAL;
1108                goto err;
1109        }
1110
1111        /*
1112         * Detect and init the card.
1113         */
1114        err = mmc_sdio_init_card(host, rocr, NULL, 0);
1115        if (err)
1116                goto err;
1117
1118        card = host->card;
1119
1120        /*
1121         * Enable runtime PM only if supported by host+card+board
1122         */
1123        if (host->caps & MMC_CAP_POWER_OFF_CARD) {
1124                /*
1125                 * Let runtime PM core know our card is active
1126                 */
1127                err = pm_runtime_set_active(&card->dev);
1128                if (err)
1129                        goto remove;
1130
1131                /*
1132                 * Enable runtime PM for this card
1133                 */
1134                pm_runtime_enable(&card->dev);
1135        }
1136
1137        /*
1138         * The number of functions on the card is encoded inside
1139         * the ocr.
1140         */
1141        funcs = (ocr & 0x70000000) >> 28;
1142        card->sdio_funcs = 0;
1143
1144        /*
1145         * Initialize (but don't add) all present functions.
1146         */
1147        for (i = 0; i < funcs; i++, card->sdio_funcs++) {
1148                err = sdio_init_func(host->card, i + 1);
1149                if (err)
1150                        goto remove;
1151
1152                /*
1153                 * Enable Runtime PM for this func (if supported)
1154                 */
1155                if (host->caps & MMC_CAP_POWER_OFF_CARD)
1156                        pm_runtime_enable(&card->sdio_func[i]->dev);
1157        }
1158
1159        /*
1160         * First add the card to the driver model...
1161         */
1162        mmc_release_host(host);
1163        err = mmc_add_card(host->card);
1164        if (err)
1165                goto remove_added;
1166
1167        /*
1168         * ...then the SDIO functions.
1169         */
1170        for (i = 0;i < funcs;i++) {
1171                err = sdio_add_func(host->card->sdio_func[i]);
1172                if (err)
1173                        goto remove_added;
1174        }
1175
1176        mmc_claim_host(host);
1177        return 0;
1178
1179
1180remove_added:
1181        /* Remove without lock if the device has been added. */
1182        mmc_sdio_remove(host);
1183        mmc_claim_host(host);
1184remove:
1185        /* And with lock if it hasn't been added. */
1186        mmc_release_host(host);
1187        if (host->card)
1188                mmc_sdio_remove(host);
1189        mmc_claim_host(host);
1190err:
1191        mmc_detach_bus(host);
1192
1193        pr_err("%s: error %d whilst initialising SDIO card\n",
1194                mmc_hostname(host), err);
1195
1196        return err;
1197}
1198
1199