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