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