This source file includes following definitions.
- sdio_read_fbr
 
- sdio_init_func
 
- sdio_read_cccr
 
- sdio_enable_wide
 
- sdio_disable_cd
 
- sdio_disable_wide
 
- sdio_enable_4bit_bus
 
- mmc_sdio_switch_hs
 
- sdio_enable_hs
 
- mmc_sdio_get_max_clock
 
- host_drive_to_sdio_drive
 
- sdio_select_driver_type
 
- sdio_set_bus_speed_mode
 
- mmc_sdio_init_uhs_card
 
- mmc_sdio_resend_if_cond
 
- mmc_sdio_init_card
 
- mmc_sdio_reinit_card
 
- mmc_sdio_remove
 
- mmc_sdio_alive
 
- mmc_sdio_detect
 
- mmc_sdio_pre_suspend
 
- mmc_sdio_suspend
 
- mmc_sdio_resume
 
- mmc_sdio_runtime_suspend
 
- mmc_sdio_runtime_resume
 
- mmc_sdio_hw_reset
 
- mmc_sdio_sw_reset
 
- mmc_attach_sdio
 
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 #include <linux/err.h>
   9 #include <linux/pm_runtime.h>
  10 
  11 #include <linux/mmc/host.h>
  12 #include <linux/mmc/card.h>
  13 #include <linux/mmc/mmc.h>
  14 #include <linux/mmc/sdio.h>
  15 #include <linux/mmc/sdio_func.h>
  16 #include <linux/mmc/sdio_ids.h>
  17 
  18 #include "core.h"
  19 #include "card.h"
  20 #include "host.h"
  21 #include "bus.h"
  22 #include "quirks.h"
  23 #include "sd.h"
  24 #include "sdio_bus.h"
  25 #include "mmc_ops.h"
  26 #include "sd_ops.h"
  27 #include "sdio_ops.h"
  28 #include "sdio_cis.h"
  29 
  30 static int sdio_read_fbr(struct sdio_func *func)
  31 {
  32         int ret;
  33         unsigned char data;
  34 
  35         if (mmc_card_nonstd_func_interface(func->card)) {
  36                 func->class = SDIO_CLASS_NONE;
  37                 return 0;
  38         }
  39 
  40         ret = mmc_io_rw_direct(func->card, 0, 0,
  41                 SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF, 0, &data);
  42         if (ret)
  43                 goto out;
  44 
  45         data &= 0x0f;
  46 
  47         if (data == 0x0f) {
  48                 ret = mmc_io_rw_direct(func->card, 0, 0,
  49                         SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF_EXT, 0, &data);
  50                 if (ret)
  51                         goto out;
  52         }
  53 
  54         func->class = data;
  55 
  56 out:
  57         return ret;
  58 }
  59 
  60 static int sdio_init_func(struct mmc_card *card, unsigned int fn)
  61 {
  62         int ret;
  63         struct sdio_func *func;
  64 
  65         if (WARN_ON(fn > SDIO_MAX_FUNCS))
  66                 return -EINVAL;
  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 
  92 fail:
  93         
  94 
  95 
  96 
  97         sdio_remove_func(func);
  98         return ret;
  99 }
 100 
 101 static 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         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CCCR, 0, &data);
 110         if (ret)
 111                 goto out;
 112 
 113         cccr_vsn = data & 0x0f;
 114 
 115         if (cccr_vsn > SDIO_CCCR_REV_3_00) {
 116                 pr_err("%s: unrecognised CCCR structure version %d\n",
 117                         mmc_hostname(card->host), cccr_vsn);
 118                 return -EINVAL;
 119         }
 120 
 121         card->cccr.sdio_vsn = (data & 0xf0) >> 4;
 122 
 123         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CAPS, 0, &data);
 124         if (ret)
 125                 goto out;
 126 
 127         if (data & SDIO_CCCR_CAP_SMB)
 128                 card->cccr.multi_block = 1;
 129         if (data & SDIO_CCCR_CAP_LSC)
 130                 card->cccr.low_speed = 1;
 131         if (data & SDIO_CCCR_CAP_4BLS)
 132                 card->cccr.wide_bus = 1;
 133 
 134         if (cccr_vsn >= SDIO_CCCR_REV_1_10) {
 135                 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_POWER, 0, &data);
 136                 if (ret)
 137                         goto out;
 138 
 139                 if (data & SDIO_POWER_SMPC)
 140                         card->cccr.high_power = 1;
 141         }
 142 
 143         if (cccr_vsn >= SDIO_CCCR_REV_1_20) {
 144                 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
 145                 if (ret)
 146                         goto out;
 147 
 148                 card->scr.sda_spec3 = 0;
 149                 card->sw_caps.sd3_bus_mode = 0;
 150                 card->sw_caps.sd3_drv_type = 0;
 151                 if (cccr_vsn >= SDIO_CCCR_REV_3_00 && uhs) {
 152                         card->scr.sda_spec3 = 1;
 153                         ret = mmc_io_rw_direct(card, 0, 0,
 154                                 SDIO_CCCR_UHS, 0, &data);
 155                         if (ret)
 156                                 goto out;
 157 
 158                         if (mmc_host_uhs(card->host)) {
 159                                 if (data & SDIO_UHS_DDR50)
 160                                         card->sw_caps.sd3_bus_mode
 161                                                 |= SD_MODE_UHS_DDR50;
 162 
 163                                 if (data & SDIO_UHS_SDR50)
 164                                         card->sw_caps.sd3_bus_mode
 165                                                 |= SD_MODE_UHS_SDR50;
 166 
 167                                 if (data & SDIO_UHS_SDR104)
 168                                         card->sw_caps.sd3_bus_mode
 169                                                 |= SD_MODE_UHS_SDR104;
 170                         }
 171 
 172                         ret = mmc_io_rw_direct(card, 0, 0,
 173                                 SDIO_CCCR_DRIVE_STRENGTH, 0, &data);
 174                         if (ret)
 175                                 goto out;
 176 
 177                         if (data & SDIO_DRIVE_SDTA)
 178                                 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_A;
 179                         if (data & SDIO_DRIVE_SDTC)
 180                                 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_C;
 181                         if (data & SDIO_DRIVE_SDTD)
 182                                 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_D;
 183                 }
 184 
 185                 
 186                 if (!card->sw_caps.sd3_bus_mode) {
 187                         if (speed & SDIO_SPEED_SHS) {
 188                                 card->cccr.high_speed = 1;
 189                                 card->sw_caps.hs_max_dtr = 50000000;
 190                         } else {
 191                                 card->cccr.high_speed = 0;
 192                                 card->sw_caps.hs_max_dtr = 25000000;
 193                         }
 194                 }
 195         }
 196 
 197 out:
 198         return ret;
 199 }
 200 
 201 static int sdio_enable_wide(struct mmc_card *card)
 202 {
 203         int ret;
 204         u8 ctrl;
 205 
 206         if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
 207                 return 0;
 208 
 209         if (card->cccr.low_speed && !card->cccr.wide_bus)
 210                 return 0;
 211 
 212         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
 213         if (ret)
 214                 return ret;
 215 
 216         if ((ctrl & SDIO_BUS_WIDTH_MASK) == SDIO_BUS_WIDTH_RESERVED)
 217                 pr_warn("%s: SDIO_CCCR_IF is invalid: 0x%02x\n",
 218                         mmc_hostname(card->host), ctrl);
 219 
 220         
 221         ctrl &= ~SDIO_BUS_WIDTH_MASK;
 222         ctrl |= SDIO_BUS_WIDTH_4BIT;
 223 
 224         ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
 225         if (ret)
 226                 return ret;
 227 
 228         return 1;
 229 }
 230 
 231 
 232 
 233 
 234 
 235 
 236 
 237 static int sdio_disable_cd(struct mmc_card *card)
 238 {
 239         int ret;
 240         u8 ctrl;
 241 
 242         if (!mmc_card_disable_cd(card))
 243                 return 0;
 244 
 245         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
 246         if (ret)
 247                 return ret;
 248 
 249         ctrl |= SDIO_BUS_CD_DISABLE;
 250 
 251         return mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
 252 }
 253 
 254 
 255 
 256 
 257 
 258 static int sdio_disable_wide(struct mmc_card *card)
 259 {
 260         int ret;
 261         u8 ctrl;
 262 
 263         if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
 264                 return 0;
 265 
 266         if (card->cccr.low_speed && !card->cccr.wide_bus)
 267                 return 0;
 268 
 269         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
 270         if (ret)
 271                 return ret;
 272 
 273         if (!(ctrl & SDIO_BUS_WIDTH_4BIT))
 274                 return 0;
 275 
 276         ctrl &= ~SDIO_BUS_WIDTH_4BIT;
 277         ctrl |= SDIO_BUS_ASYNC_INT;
 278 
 279         ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
 280         if (ret)
 281                 return ret;
 282 
 283         mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1);
 284 
 285         return 0;
 286 }
 287 
 288 
 289 static int sdio_enable_4bit_bus(struct mmc_card *card)
 290 {
 291         int err;
 292 
 293         if (card->type == MMC_TYPE_SDIO)
 294                 err = sdio_enable_wide(card);
 295         else 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                 err = sdio_enable_wide(card);
 301                 if (err <= 0)
 302                         mmc_app_set_bus_width(card, MMC_BUS_WIDTH_1);
 303         } else
 304                 return 0;
 305 
 306         if (err > 0) {
 307                 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
 308                 err = 0;
 309         }
 310 
 311         return err;
 312 }
 313 
 314 
 315 
 316 
 317 
 318 static int mmc_sdio_switch_hs(struct mmc_card *card, int enable)
 319 {
 320         int ret;
 321         u8 speed;
 322 
 323         if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
 324                 return 0;
 325 
 326         if (!card->cccr.high_speed)
 327                 return 0;
 328 
 329         ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
 330         if (ret)
 331                 return ret;
 332 
 333         if (enable)
 334                 speed |= SDIO_SPEED_EHS;
 335         else
 336                 speed &= ~SDIO_SPEED_EHS;
 337 
 338         ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
 339         if (ret)
 340                 return ret;
 341 
 342         return 1;
 343 }
 344 
 345 
 346 
 347 
 348 static int sdio_enable_hs(struct mmc_card *card)
 349 {
 350         int ret;
 351 
 352         ret = mmc_sdio_switch_hs(card, true);
 353         if (ret <= 0 || card->type == MMC_TYPE_SDIO)
 354                 return ret;
 355 
 356         ret = mmc_sd_switch_hs(card);
 357         if (ret <= 0)
 358                 mmc_sdio_switch_hs(card, false);
 359 
 360         return ret;
 361 }
 362 
 363 static unsigned mmc_sdio_get_max_clock(struct mmc_card *card)
 364 {
 365         unsigned max_dtr;
 366 
 367         if (mmc_card_hs(card)) {
 368                 
 369 
 370 
 371 
 372 
 373 
 374                 max_dtr = 50000000;
 375         } else {
 376                 max_dtr = card->cis.max_dtr;
 377         }
 378 
 379         if (card->type == MMC_TYPE_SD_COMBO)
 380                 max_dtr = min(max_dtr, mmc_sd_get_max_clock(card));
 381 
 382         return max_dtr;
 383 }
 384 
 385 static unsigned char host_drive_to_sdio_drive(int host_strength)
 386 {
 387         switch (host_strength) {
 388         case MMC_SET_DRIVER_TYPE_A:
 389                 return SDIO_DTSx_SET_TYPE_A;
 390         case MMC_SET_DRIVER_TYPE_B:
 391                 return SDIO_DTSx_SET_TYPE_B;
 392         case MMC_SET_DRIVER_TYPE_C:
 393                 return SDIO_DTSx_SET_TYPE_C;
 394         case MMC_SET_DRIVER_TYPE_D:
 395                 return SDIO_DTSx_SET_TYPE_D;
 396         default:
 397                 return SDIO_DTSx_SET_TYPE_B;
 398         }
 399 }
 400 
 401 static void sdio_select_driver_type(struct mmc_card *card)
 402 {
 403         int card_drv_type, drive_strength, drv_type;
 404         unsigned char card_strength;
 405         int err;
 406 
 407         card->drive_strength = 0;
 408 
 409         card_drv_type = card->sw_caps.sd3_drv_type | SD_DRIVER_TYPE_B;
 410 
 411         drive_strength = mmc_select_drive_strength(card,
 412                                                    card->sw_caps.uhs_max_dtr,
 413                                                    card_drv_type, &drv_type);
 414 
 415         if (drive_strength) {
 416                 
 417                 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_DRIVE_STRENGTH, 0,
 418                                        &card_strength);
 419                 if (err)
 420                         return;
 421 
 422                 card_strength &= ~(SDIO_DRIVE_DTSx_MASK<<SDIO_DRIVE_DTSx_SHIFT);
 423                 card_strength |= host_drive_to_sdio_drive(drive_strength);
 424 
 425                 
 426                 err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_DRIVE_STRENGTH,
 427                                        card_strength, NULL);
 428                 if (err)
 429                         return;
 430                 card->drive_strength = drive_strength;
 431         }
 432 
 433         if (drv_type)
 434                 mmc_set_driver_type(card->host, drv_type);
 435 }
 436 
 437 
 438 static int sdio_set_bus_speed_mode(struct mmc_card *card)
 439 {
 440         unsigned int bus_speed, timing;
 441         int err;
 442         unsigned char speed;
 443         unsigned int max_rate;
 444 
 445         
 446 
 447 
 448 
 449         if (!mmc_host_uhs(card->host))
 450                 return 0;
 451 
 452         bus_speed = SDIO_SPEED_SDR12;
 453         timing = MMC_TIMING_UHS_SDR12;
 454         if ((card->host->caps & MMC_CAP_UHS_SDR104) &&
 455             (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) {
 456                         bus_speed = SDIO_SPEED_SDR104;
 457                         timing = MMC_TIMING_UHS_SDR104;
 458                         card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
 459                         card->sd_bus_speed = UHS_SDR104_BUS_SPEED;
 460         } else if ((card->host->caps & MMC_CAP_UHS_DDR50) &&
 461                    (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) {
 462                         bus_speed = SDIO_SPEED_DDR50;
 463                         timing = MMC_TIMING_UHS_DDR50;
 464                         card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
 465                         card->sd_bus_speed = UHS_DDR50_BUS_SPEED;
 466         } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 467                     MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode &
 468                     SD_MODE_UHS_SDR50)) {
 469                         bus_speed = SDIO_SPEED_SDR50;
 470                         timing = MMC_TIMING_UHS_SDR50;
 471                         card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
 472                         card->sd_bus_speed = UHS_SDR50_BUS_SPEED;
 473         } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 474                     MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) &&
 475                    (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) {
 476                         bus_speed = SDIO_SPEED_SDR25;
 477                         timing = MMC_TIMING_UHS_SDR25;
 478                         card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
 479                         card->sd_bus_speed = UHS_SDR25_BUS_SPEED;
 480         } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
 481                     MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 |
 482                     MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode &
 483                     SD_MODE_UHS_SDR12)) {
 484                         bus_speed = SDIO_SPEED_SDR12;
 485                         timing = MMC_TIMING_UHS_SDR12;
 486                         card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
 487                         card->sd_bus_speed = UHS_SDR12_BUS_SPEED;
 488         }
 489 
 490         err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
 491         if (err)
 492                 return err;
 493 
 494         speed &= ~SDIO_SPEED_BSS_MASK;
 495         speed |= bus_speed;
 496         err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
 497         if (err)
 498                 return err;
 499 
 500         max_rate = min_not_zero(card->quirk_max_rate,
 501                                 card->sw_caps.uhs_max_dtr);
 502 
 503         if (bus_speed) {
 504                 mmc_set_timing(card->host, timing);
 505                 mmc_set_clock(card->host, max_rate);
 506         }
 507 
 508         return 0;
 509 }
 510 
 511 
 512 
 513 
 514 static int mmc_sdio_init_uhs_card(struct mmc_card *card)
 515 {
 516         int err;
 517 
 518         if (!card->scr.sda_spec3)
 519                 return 0;
 520 
 521         
 522         err = sdio_enable_4bit_bus(card);
 523         if (err)
 524                 goto out;
 525 
 526         
 527         sdio_select_driver_type(card);
 528 
 529         
 530         err = sdio_set_bus_speed_mode(card);
 531         if (err)
 532                 goto out;
 533 
 534         
 535 
 536 
 537 
 538         if (!mmc_host_is_spi(card->host) &&
 539             ((card->host->ios.timing == MMC_TIMING_UHS_SDR50) ||
 540               (card->host->ios.timing == MMC_TIMING_UHS_SDR104)))
 541                 err = mmc_execute_tuning(card);
 542 out:
 543         return err;
 544 }
 545 
 546 static void mmc_sdio_resend_if_cond(struct mmc_host *host,
 547                                     struct mmc_card *card)
 548 {
 549         sdio_reset(host);
 550         mmc_go_idle(host);
 551         mmc_send_if_cond(host, host->ocr_avail);
 552         mmc_remove_card(card);
 553 }
 554 
 555 
 556 
 557 
 558 
 559 
 560 
 561 static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
 562                               struct mmc_card *oldcard)
 563 {
 564         struct mmc_card *card;
 565         int err;
 566         int retries = 10;
 567         u32 rocr = 0;
 568         u32 ocr_card = ocr;
 569 
 570         WARN_ON(!host->claimed);
 571 
 572         
 573         if (mmc_host_uhs(host))
 574                 ocr |= R4_18V_PRESENT;
 575 
 576 try_again:
 577         if (!retries) {
 578                 pr_warn("%s: Skipping voltage switch\n", mmc_hostname(host));
 579                 ocr &= ~R4_18V_PRESENT;
 580         }
 581 
 582         
 583 
 584 
 585         err = mmc_send_io_op_cond(host, ocr, &rocr);
 586         if (err)
 587                 return err;
 588 
 589         
 590 
 591 
 592         if (mmc_host_is_spi(host)) {
 593                 err = mmc_spi_set_crc(host, use_spi_crc);
 594                 if (err)
 595                         return err;
 596         }
 597 
 598         
 599 
 600 
 601         card = mmc_alloc_card(host, NULL);
 602         if (IS_ERR(card))
 603                 return PTR_ERR(card);
 604 
 605         if ((rocr & R4_MEMORY_PRESENT) &&
 606             mmc_sd_get_cid(host, ocr & rocr, card->raw_cid, NULL) == 0) {
 607                 card->type = MMC_TYPE_SD_COMBO;
 608 
 609                 if (oldcard && (oldcard->type != MMC_TYPE_SD_COMBO ||
 610                     memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) {
 611                         err = -ENOENT;
 612                         goto mismatch;
 613                 }
 614         } else {
 615                 card->type = MMC_TYPE_SDIO;
 616 
 617                 if (oldcard && oldcard->type != MMC_TYPE_SDIO) {
 618                         err = -ENOENT;
 619                         goto mismatch;
 620                 }
 621         }
 622 
 623         
 624 
 625 
 626         if (host->ops->init_card)
 627                 host->ops->init_card(host, card);
 628 
 629         
 630 
 631 
 632 
 633 
 634 
 635 
 636 
 637 
 638 
 639 
 640         if (rocr & ocr & R4_18V_PRESENT) {
 641                 err = mmc_set_uhs_voltage(host, ocr_card);
 642                 if (err == -EAGAIN) {
 643                         mmc_sdio_resend_if_cond(host, card);
 644                         retries--;
 645                         goto try_again;
 646                 } else if (err) {
 647                         ocr &= ~R4_18V_PRESENT;
 648                 }
 649         }
 650 
 651         
 652 
 653 
 654         if (!mmc_host_is_spi(host)) {
 655                 err = mmc_send_relative_addr(host, &card->rca);
 656                 if (err)
 657                         goto remove;
 658 
 659                 
 660 
 661 
 662 
 663 
 664                 if (oldcard)
 665                         oldcard->rca = card->rca;
 666         }
 667 
 668         
 669 
 670 
 671         if (!oldcard && card->type == MMC_TYPE_SD_COMBO) {
 672                 err = mmc_sd_get_csd(host, card);
 673                 if (err)
 674                         goto remove;
 675 
 676                 mmc_decode_cid(card);
 677         }
 678 
 679         
 680 
 681 
 682         if (!mmc_host_is_spi(host)) {
 683                 err = mmc_select_card(card);
 684                 if (err)
 685                         goto remove;
 686         }
 687 
 688         if (card->quirks & MMC_QUIRK_NONSTD_SDIO) {
 689                 
 690 
 691 
 692 
 693 
 694 
 695                 mmc_set_clock(host, card->cis.max_dtr);
 696 
 697                 if (card->cccr.high_speed) {
 698                         mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 699                 }
 700 
 701                 if (oldcard)
 702                         mmc_remove_card(card);
 703                 else
 704                         host->card = card;
 705 
 706                 return 0;
 707         }
 708 
 709         
 710 
 711 
 712 
 713         err = sdio_read_cccr(card, ocr);
 714         if (err) {
 715                 mmc_sdio_resend_if_cond(host, card);
 716                 if (ocr & R4_18V_PRESENT) {
 717                         
 718                         retries = 0;
 719                         goto try_again;
 720                 }
 721                 return err;
 722         }
 723 
 724         
 725 
 726 
 727         err = sdio_read_common_cis(card);
 728         if (err)
 729                 goto remove;
 730 
 731         if (oldcard) {
 732                 if (card->cis.vendor == oldcard->cis.vendor &&
 733                     card->cis.device == oldcard->cis.device) {
 734                         mmc_remove_card(card);
 735                         card = oldcard;
 736                 } else {
 737                         err = -ENOENT;
 738                         goto mismatch;
 739                 }
 740         }
 741         card->ocr = ocr_card;
 742         mmc_fixup_device(card, sdio_fixup_methods);
 743 
 744         if (card->type == MMC_TYPE_SD_COMBO) {
 745                 err = mmc_sd_setup_card(host, card, oldcard != NULL);
 746                 
 747                 if (err) {
 748                         mmc_go_idle(host);
 749                         if (mmc_host_is_spi(host))
 750                                 
 751                                 mmc_spi_set_crc(host, use_spi_crc);
 752                         card->type = MMC_TYPE_SDIO;
 753                 } else
 754                         card->dev.type = &sd_type;
 755         }
 756 
 757         
 758 
 759 
 760         err = sdio_disable_cd(card);
 761         if (err)
 762                 goto remove;
 763 
 764         
 765         
 766         if ((ocr & R4_18V_PRESENT) && card->sw_caps.sd3_bus_mode) {
 767                 err = mmc_sdio_init_uhs_card(card);
 768                 if (err)
 769                         goto remove;
 770         } else {
 771                 
 772 
 773 
 774                 err = sdio_enable_hs(card);
 775                 if (err > 0)
 776                         mmc_set_timing(card->host, MMC_TIMING_SD_HS);
 777                 else if (err)
 778                         goto remove;
 779 
 780                 
 781 
 782 
 783                 mmc_set_clock(host, mmc_sdio_get_max_clock(card));
 784 
 785                 
 786 
 787 
 788                 err = sdio_enable_4bit_bus(card);
 789                 if (err)
 790                         goto remove;
 791         }
 792 
 793         if (host->caps2 & MMC_CAP2_AVOID_3_3V &&
 794             host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
 795                 pr_err("%s: Host failed to negotiate down from 3.3V\n",
 796                         mmc_hostname(host));
 797                 err = -EINVAL;
 798                 goto remove;
 799         }
 800 
 801         host->card = card;
 802         return 0;
 803 
 804 mismatch:
 805         pr_debug("%s: Perhaps the card was replaced\n", mmc_hostname(host));
 806 remove:
 807         if (oldcard != card)
 808                 mmc_remove_card(card);
 809         return err;
 810 }
 811 
 812 static int mmc_sdio_reinit_card(struct mmc_host *host)
 813 {
 814         int ret;
 815 
 816         
 817 
 818 
 819 
 820 
 821 
 822 
 823 
 824 
 825 
 826 
 827 
 828 
 829 
 830 
 831 
 832 
 833         sdio_reset(host);
 834         mmc_go_idle(host);
 835         mmc_send_if_cond(host, host->card->ocr);
 836 
 837         ret = mmc_send_io_op_cond(host, 0, NULL);
 838         if (ret)
 839                 return ret;
 840 
 841         return mmc_sdio_init_card(host, host->card->ocr, host->card);
 842 }
 843 
 844 
 845 
 846 
 847 static void mmc_sdio_remove(struct mmc_host *host)
 848 {
 849         int i;
 850 
 851         for (i = 0;i < host->card->sdio_funcs;i++) {
 852                 if (host->card->sdio_func[i]) {
 853                         sdio_remove_func(host->card->sdio_func[i]);
 854                         host->card->sdio_func[i] = NULL;
 855                 }
 856         }
 857 
 858         mmc_remove_card(host->card);
 859         host->card = NULL;
 860 }
 861 
 862 
 863 
 864 
 865 static int mmc_sdio_alive(struct mmc_host *host)
 866 {
 867         return mmc_select_card(host->card);
 868 }
 869 
 870 
 871 
 872 
 873 static void mmc_sdio_detect(struct mmc_host *host)
 874 {
 875         int err;
 876 
 877         
 878         if (host->caps & MMC_CAP_POWER_OFF_CARD) {
 879                 err = pm_runtime_get_sync(&host->card->dev);
 880                 if (err < 0) {
 881                         pm_runtime_put_noidle(&host->card->dev);
 882                         goto out;
 883                 }
 884         }
 885 
 886         mmc_claim_host(host);
 887 
 888         
 889 
 890 
 891         err = _mmc_detect_card_removed(host);
 892 
 893         mmc_release_host(host);
 894 
 895         
 896 
 897 
 898 
 899 
 900 
 901 
 902 
 903 
 904 
 905 
 906         if (host->caps & MMC_CAP_POWER_OFF_CARD)
 907                 pm_runtime_put_sync(&host->card->dev);
 908 
 909 out:
 910         if (err) {
 911                 mmc_sdio_remove(host);
 912 
 913                 mmc_claim_host(host);
 914                 mmc_detach_bus(host);
 915                 mmc_power_off(host);
 916                 mmc_release_host(host);
 917         }
 918 }
 919 
 920 
 921 
 922 
 923 
 924 
 925 static int mmc_sdio_pre_suspend(struct mmc_host *host)
 926 {
 927         int i, err = 0;
 928 
 929         for (i = 0; i < host->card->sdio_funcs; i++) {
 930                 struct sdio_func *func = host->card->sdio_func[i];
 931                 if (func && sdio_func_present(func) && func->dev.driver) {
 932                         const struct dev_pm_ops *pmops = func->dev.driver->pm;
 933                         if (!pmops || !pmops->suspend || !pmops->resume) {
 934                                 
 935                                 err = -ENOSYS;
 936                                 break;
 937                         }
 938                 }
 939         }
 940 
 941         return err;
 942 }
 943 
 944 
 945 
 946 
 947 static int mmc_sdio_suspend(struct mmc_host *host)
 948 {
 949         WARN_ON(host->sdio_irqs && !mmc_card_keep_power(host));
 950 
 951         
 952         mmc_card_set_suspended(host->card);
 953         cancel_delayed_work_sync(&host->sdio_irq_work);
 954 
 955         mmc_claim_host(host);
 956 
 957         if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host))
 958                 sdio_disable_wide(host->card);
 959 
 960         if (!mmc_card_keep_power(host)) {
 961                 mmc_power_off(host);
 962         } else if (host->retune_period) {
 963                 mmc_retune_timer_stop(host);
 964                 mmc_retune_needed(host);
 965         }
 966 
 967         mmc_release_host(host);
 968 
 969         return 0;
 970 }
 971 
 972 static int mmc_sdio_resume(struct mmc_host *host)
 973 {
 974         int err = 0;
 975 
 976         
 977         mmc_claim_host(host);
 978 
 979         
 980 
 981 
 982 
 983 
 984         if (!mmc_card_keep_power(host)) {
 985                 mmc_power_up(host, host->card->ocr);
 986                 
 987 
 988 
 989 
 990 
 991 
 992                 if (host->caps & MMC_CAP_POWER_OFF_CARD) {
 993                         pm_runtime_disable(&host->card->dev);
 994                         pm_runtime_set_active(&host->card->dev);
 995                         pm_runtime_enable(&host->card->dev);
 996                 }
 997                 err = mmc_sdio_reinit_card(host);
 998         } else if (mmc_card_wake_sdio_irq(host)) {
 999                 
1000                 err = sdio_enable_4bit_bus(host->card);
1001         }
1002 
1003         if (err)
1004                 goto out;
1005 
1006         
1007         mmc_card_clr_suspended(host->card);
1008 
1009         if (host->sdio_irqs) {
1010                 if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD))
1011                         wake_up_process(host->sdio_irq_thread);
1012                 else if (host->caps & MMC_CAP_SDIO_IRQ)
1013                         queue_delayed_work(system_wq, &host->sdio_irq_work, 0);
1014         }
1015 
1016 out:
1017         mmc_release_host(host);
1018 
1019         host->pm_flags &= ~MMC_PM_KEEP_POWER;
1020         return err;
1021 }
1022 
1023 static int mmc_sdio_runtime_suspend(struct mmc_host *host)
1024 {
1025         
1026         mmc_claim_host(host);
1027         mmc_power_off(host);
1028         mmc_release_host(host);
1029 
1030         return 0;
1031 }
1032 
1033 static int mmc_sdio_runtime_resume(struct mmc_host *host)
1034 {
1035         int ret;
1036 
1037         
1038         mmc_claim_host(host);
1039         mmc_power_up(host, host->card->ocr);
1040         ret = mmc_sdio_reinit_card(host);
1041         mmc_release_host(host);
1042 
1043         return ret;
1044 }
1045 
1046 
1047 
1048 
1049 
1050 
1051 
1052 static int mmc_sdio_hw_reset(struct mmc_host *host)
1053 {
1054         struct mmc_card *card = host->card;
1055 
1056         
1057 
1058 
1059 
1060 
1061         if (atomic_read(&card->sdio_funcs_probed) > 1) {
1062                 if (mmc_card_removed(card))
1063                         return 1;
1064                 host->rescan_entered = 0;
1065                 mmc_card_set_removed(card);
1066                 _mmc_detect_change(host, 0, false);
1067                 return 1;
1068         }
1069 
1070         
1071 
1072 
1073 
1074         mmc_power_cycle(host, card->ocr);
1075         return mmc_sdio_reinit_card(host);
1076 }
1077 
1078 static int mmc_sdio_sw_reset(struct mmc_host *host)
1079 {
1080         mmc_set_clock(host, host->f_init);
1081         sdio_reset(host);
1082         mmc_go_idle(host);
1083 
1084         mmc_set_initial_state(host);
1085         mmc_set_initial_signal_voltage(host);
1086 
1087         return mmc_sdio_reinit_card(host);
1088 }
1089 
1090 static const struct mmc_bus_ops mmc_sdio_ops = {
1091         .remove = mmc_sdio_remove,
1092         .detect = mmc_sdio_detect,
1093         .pre_suspend = mmc_sdio_pre_suspend,
1094         .suspend = mmc_sdio_suspend,
1095         .resume = mmc_sdio_resume,
1096         .runtime_suspend = mmc_sdio_runtime_suspend,
1097         .runtime_resume = mmc_sdio_runtime_resume,
1098         .alive = mmc_sdio_alive,
1099         .hw_reset = mmc_sdio_hw_reset,
1100         .sw_reset = mmc_sdio_sw_reset,
1101 };
1102 
1103 
1104 
1105 
1106 
1107 int mmc_attach_sdio(struct mmc_host *host)
1108 {
1109         int err, i, funcs;
1110         u32 ocr, rocr;
1111         struct mmc_card *card;
1112 
1113         WARN_ON(!host->claimed);
1114 
1115         err = mmc_send_io_op_cond(host, 0, &ocr);
1116         if (err)
1117                 return err;
1118 
1119         mmc_attach_bus(host, &mmc_sdio_ops);
1120         if (host->ocr_avail_sdio)
1121                 host->ocr_avail = host->ocr_avail_sdio;
1122 
1123 
1124         rocr = mmc_select_voltage(host, ocr);
1125 
1126         
1127 
1128 
1129         if (!rocr) {
1130                 err = -EINVAL;
1131                 goto err;
1132         }
1133 
1134         
1135 
1136 
1137         err = mmc_sdio_init_card(host, rocr, NULL);
1138         if (err)
1139                 goto err;
1140 
1141         card = host->card;
1142 
1143         
1144 
1145 
1146         if (host->caps & MMC_CAP_POWER_OFF_CARD) {
1147                 
1148 
1149 
1150 
1151                 pm_runtime_get_noresume(&card->dev);
1152 
1153                 
1154 
1155 
1156                 err = pm_runtime_set_active(&card->dev);
1157                 if (err)
1158                         goto remove;
1159 
1160                 
1161 
1162 
1163                 pm_runtime_enable(&card->dev);
1164         }
1165 
1166         
1167 
1168 
1169 
1170         funcs = (ocr & 0x70000000) >> 28;
1171         card->sdio_funcs = 0;
1172 
1173         
1174 
1175 
1176         for (i = 0; i < funcs; i++, card->sdio_funcs++) {
1177                 err = sdio_init_func(host->card, i + 1);
1178                 if (err)
1179                         goto remove;
1180 
1181                 
1182 
1183 
1184                 if (host->caps & MMC_CAP_POWER_OFF_CARD)
1185                         pm_runtime_enable(&card->sdio_func[i]->dev);
1186         }
1187 
1188         
1189 
1190 
1191         mmc_release_host(host);
1192         err = mmc_add_card(host->card);
1193         if (err)
1194                 goto remove_added;
1195 
1196         
1197 
1198 
1199         for (i = 0;i < funcs;i++) {
1200                 err = sdio_add_func(host->card->sdio_func[i]);
1201                 if (err)
1202                         goto remove_added;
1203         }
1204 
1205         if (host->caps & MMC_CAP_POWER_OFF_CARD)
1206                 pm_runtime_put(&card->dev);
1207 
1208         mmc_claim_host(host);
1209         return 0;
1210 
1211 
1212 remove:
1213         mmc_release_host(host);
1214 remove_added:
1215         
1216 
1217 
1218 
1219 
1220 
1221         mmc_sdio_remove(host);
1222         mmc_claim_host(host);
1223 err:
1224         mmc_detach_bus(host);
1225 
1226         pr_err("%s: error %d whilst initialising SDIO card\n",
1227                 mmc_hostname(host), err);
1228 
1229         return err;
1230 }
1231