sd.c 28.7 KB
Newer Older
P
Pierre Ossman 已提交
1
/*
P
Pierre Ossman 已提交
2
 *  linux/drivers/mmc/core/sd.c
P
Pierre Ossman 已提交
3 4 5 6 7 8 9 10 11 12 13
 *
 *  Copyright (C) 2003-2004 Russell King, All Rights Reserved.
 *  SD support Copyright (C) 2004 Ian Molton, All Rights Reserved.
 *  Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#include <linux/err.h>
14
#include <linux/slab.h>
15
#include <linux/stat.h>
16
#include <linux/pm_runtime.h>
P
Pierre Ossman 已提交
17 18 19 20

#include <linux/mmc/host.h>
#include <linux/mmc/card.h>
#include <linux/mmc/mmc.h>
21
#include <linux/mmc/sd.h>
P
Pierre Ossman 已提交
22 23

#include "core.h"
P
Pierre Ossman 已提交
24
#include "bus.h"
P
Pierre Ossman 已提交
25
#include "mmc_ops.h"
26
#include "sd.h"
P
Pierre Ossman 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
#include "sd_ops.h"

static const unsigned int tran_exp[] = {
	10000,		100000,		1000000,	10000000,
	0,		0,		0,		0
};

static const unsigned char tran_mant[] = {
	0,	10,	12,	13,	15,	20,	25,	30,
	35,	40,	45,	50,	55,	60,	70,	80,
};

static const unsigned int tacc_exp[] = {
	1,	10,	100,	1000,	10000,	100000,	1000000, 10000000,
};

static const unsigned int tacc_mant[] = {
	0,	10,	12,	13,	15,	20,	25,	30,
	35,	40,	45,	50,	55,	60,	70,	80,
};

#define UNSTUFF_BITS(resp,start,size)					\
	({								\
		const int __size = size;				\
		const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1;	\
		const int __off = 3 - ((start) / 32);			\
		const int __shft = (start) & 31;			\
		u32 __res;						\
									\
		__res = resp[__off] >> __shft;				\
		if (__size + __shft > 32)				\
			__res |= resp[__off-1] << ((32 - __shft) % 32);	\
		__res & __mask;						\
	})

/*
 * Given the decoded CSD structure, decode the raw CID to our CID structure.
 */
M
Michal Miroslaw 已提交
65
void mmc_decode_cid(struct mmc_card *card)
P
Pierre Ossman 已提交
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
{
	u32 *resp = card->raw_cid;

	memset(&card->cid, 0, sizeof(struct mmc_cid));

	/*
	 * SD doesn't currently have a version field so we will
	 * have to assume we can parse this.
	 */
	card->cid.manfid		= UNSTUFF_BITS(resp, 120, 8);
	card->cid.oemid			= UNSTUFF_BITS(resp, 104, 16);
	card->cid.prod_name[0]		= UNSTUFF_BITS(resp, 96, 8);
	card->cid.prod_name[1]		= UNSTUFF_BITS(resp, 88, 8);
	card->cid.prod_name[2]		= UNSTUFF_BITS(resp, 80, 8);
	card->cid.prod_name[3]		= UNSTUFF_BITS(resp, 72, 8);
	card->cid.prod_name[4]		= UNSTUFF_BITS(resp, 64, 8);
	card->cid.hwrev			= UNSTUFF_BITS(resp, 60, 4);
	card->cid.fwrev			= UNSTUFF_BITS(resp, 56, 4);
	card->cid.serial		= UNSTUFF_BITS(resp, 24, 32);
	card->cid.year			= UNSTUFF_BITS(resp, 12, 8);
	card->cid.month			= UNSTUFF_BITS(resp, 8, 4);

	card->cid.year += 2000; /* SD cards year offset */
}

/*
 * Given a 128-bit response, decode to our card CSD structure.
 */
P
Pierre Ossman 已提交
94
static int mmc_decode_csd(struct mmc_card *card)
P
Pierre Ossman 已提交
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
{
	struct mmc_csd *csd = &card->csd;
	unsigned int e, m, csd_struct;
	u32 *resp = card->raw_csd;

	csd_struct = UNSTUFF_BITS(resp, 126, 2);

	switch (csd_struct) {
	case 0:
		m = UNSTUFF_BITS(resp, 115, 4);
		e = UNSTUFF_BITS(resp, 112, 3);
		csd->tacc_ns	 = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
		csd->tacc_clks	 = UNSTUFF_BITS(resp, 104, 8) * 100;

		m = UNSTUFF_BITS(resp, 99, 4);
		e = UNSTUFF_BITS(resp, 96, 3);
		csd->max_dtr	  = tran_exp[e] * tran_mant[m];
		csd->cmdclass	  = UNSTUFF_BITS(resp, 84, 12);

		e = UNSTUFF_BITS(resp, 47, 3);
		m = UNSTUFF_BITS(resp, 62, 12);
		csd->capacity	  = (1 + m) << (e + 2);

		csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
		csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
		csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
		csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
		csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
		csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
		csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
125 126 127 128 129 130 131

		if (UNSTUFF_BITS(resp, 46, 1)) {
			csd->erase_size = 1;
		} else if (csd->write_blkbits >= 9) {
			csd->erase_size = UNSTUFF_BITS(resp, 39, 7) + 1;
			csd->erase_size <<= csd->write_blkbits - 9;
		}
P
Pierre Ossman 已提交
132 133 134
		break;
	case 1:
		/*
135
		 * This is a block-addressed SDHC or SDXC card. Most
P
Pierre Ossman 已提交
136 137 138 139 140 141 142 143 144 145 146 147 148
		 * interesting fields are unused and have fixed
		 * values. To avoid getting tripped by buggy cards,
		 * we assume those fixed values ourselves.
		 */
		mmc_card_set_blockaddr(card);

		csd->tacc_ns	 = 0; /* Unused */
		csd->tacc_clks	 = 0; /* Unused */

		m = UNSTUFF_BITS(resp, 99, 4);
		e = UNSTUFF_BITS(resp, 96, 3);
		csd->max_dtr	  = tran_exp[e] * tran_mant[m];
		csd->cmdclass	  = UNSTUFF_BITS(resp, 84, 12);
149 150 151 152 153
		csd->c_size	  = UNSTUFF_BITS(resp, 48, 22);

		/* SDXC cards have a minimum C_SIZE of 0x00FFFF */
		if (csd->c_size >= 0xFFFF)
			mmc_card_set_ext_capacity(card);
P
Pierre Ossman 已提交
154 155 156 157 158 159 160 161 162 163 164

		m = UNSTUFF_BITS(resp, 48, 22);
		csd->capacity     = (1 + m) << 10;

		csd->read_blkbits = 9;
		csd->read_partial = 0;
		csd->write_misalign = 0;
		csd->read_misalign = 0;
		csd->r2w_factor = 4; /* Unused */
		csd->write_blkbits = 9;
		csd->write_partial = 0;
165
		csd->erase_size = 1;
P
Pierre Ossman 已提交
166 167
		break;
	default:
168
		pr_err("%s: unrecognised CSD structure version %d\n",
P
Pierre Ossman 已提交
169
			mmc_hostname(card->host), csd_struct);
P
Pierre Ossman 已提交
170
		return -EINVAL;
P
Pierre Ossman 已提交
171
	}
P
Pierre Ossman 已提交
172

173 174
	card->erase_size = csd->erase_size;

P
Pierre Ossman 已提交
175
	return 0;
P
Pierre Ossman 已提交
176 177 178 179 180
}

/*
 * Given a 64-bit response, decode to our card SCR structure.
 */
P
Pierre Ossman 已提交
181
static int mmc_decode_scr(struct mmc_card *card)
P
Pierre Ossman 已提交
182 183 184 185 186 187 188 189 190 191
{
	struct sd_scr *scr = &card->scr;
	unsigned int scr_struct;
	u32 resp[4];

	resp[3] = card->raw_scr[1];
	resp[2] = card->raw_scr[0];

	scr_struct = UNSTUFF_BITS(resp, 60, 4);
	if (scr_struct != 0) {
192
		pr_err("%s: unrecognised SCR structure version %d\n",
P
Pierre Ossman 已提交
193
			mmc_hostname(card->host), scr_struct);
P
Pierre Ossman 已提交
194
		return -EINVAL;
P
Pierre Ossman 已提交
195 196 197 198
	}

	scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
	scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
199 200 201
	if (scr->sda_vsn == SCR_SPEC_VER_2)
		/* Check if Physical Layer Spec v3.0 is supported */
		scr->sda_spec3 = UNSTUFF_BITS(resp, 47, 1);
P
Pierre Ossman 已提交
202

203 204 205 206 207
	if (UNSTUFF_BITS(resp, 55, 1))
		card->erased_byte = 0xFF;
	else
		card->erased_byte = 0x0;

208 209
	if (scr->sda_spec3)
		scr->cmds = UNSTUFF_BITS(resp, 32, 2);
P
Pierre Ossman 已提交
210
	return 0;
P
Pierre Ossman 已提交
211 212
}

213 214 215 216 217 218
/*
 * Fetch and process SD Status register.
 */
static int mmc_read_ssr(struct mmc_card *card)
{
	unsigned int au, es, et, eo;
219
	int err, i, max_au;
220 221 222
	u32 *ssr;

	if (!(card->csd.cmdclass & CCC_APP_SPEC)) {
223
		pr_warning("%s: card lacks mandatory SD Status "
224 225 226 227 228 229 230 231 232 233
			"function.\n", mmc_hostname(card->host));
		return 0;
	}

	ssr = kmalloc(64, GFP_KERNEL);
	if (!ssr)
		return -ENOMEM;

	err = mmc_app_sd_status(card, ssr);
	if (err) {
234
		pr_warning("%s: problem reading SD Status "
235 236 237 238 239 240 241 242
			"register.\n", mmc_hostname(card->host));
		err = 0;
		goto out;
	}

	for (i = 0; i < 16; i++)
		ssr[i] = be32_to_cpu(ssr[i]);

243 244 245
	/* SD3.0 increases max AU size to 64MB (0xF) from 4MB (0x9) */
	max_au = card->scr.sda_spec3 ? 0xF : 0x9;

246 247 248 249 250
	/*
	 * UNSTUFF_BITS only works with four u32s so we have to offset the
	 * bitfield positions accordingly.
	 */
	au = UNSTUFF_BITS(ssr, 428 - 384, 4);
251
	if (au > 0 && au <= max_au) {
252 253 254 255 256 257 258 259 260
		card->ssr.au = 1 << (au + 4);
		es = UNSTUFF_BITS(ssr, 408 - 384, 16);
		et = UNSTUFF_BITS(ssr, 402 - 384, 6);
		eo = UNSTUFF_BITS(ssr, 400 - 384, 2);
		if (es && et) {
			card->ssr.erase_timeout = (et * 1000) / es;
			card->ssr.erase_offset = eo * 1000;
		}
	} else {
261
		pr_warning("%s: SD Status: Invalid Allocation Unit "
262 263 264 265 266 267 268
			"size.\n", mmc_hostname(card->host));
	}
out:
	kfree(ssr);
	return err;
}

P
Pierre Ossman 已提交
269
/*
P
Pierre Ossman 已提交
270
 * Fetches and decodes switch information
P
Pierre Ossman 已提交
271
 */
P
Pierre Ossman 已提交
272
static int mmc_read_switch(struct mmc_card *card)
P
Pierre Ossman 已提交
273 274 275 276
{
	int err;
	u8 *status;

277
	if (card->scr.sda_vsn < SCR_SPEC_VER_1)
P
Pierre Ossman 已提交
278
		return 0;
279 280

	if (!(card->csd.cmdclass & CCC_SWITCH)) {
281
		pr_warning("%s: card lacks mandatory switch "
282 283
			"function, performance might suffer.\n",
			mmc_hostname(card->host));
P
Pierre Ossman 已提交
284
		return 0;
285 286
	}

P
Pierre Ossman 已提交
287
	err = -EIO;
P
Pierre Ossman 已提交
288 289 290

	status = kmalloc(64, GFP_KERNEL);
	if (!status) {
291
		pr_err("%s: could not allocate a buffer for "
292 293
			"switch capabilities.\n",
			mmc_hostname(card->host));
P
Pierre Ossman 已提交
294
		return -ENOMEM;
P
Pierre Ossman 已提交
295 296
	}

297 298 299 300 301 302
	/*
	 * Find out the card's support bits with a mode 0 operation.
	 * The argument does not matter, as the support bits do not
	 * change with the arguments.
	 */
	err = mmc_sd_switch(card, 0, 0, 0, status);
P
Pierre Ossman 已提交
303
	if (err) {
304 305 306 307 308
		/*
		 * If the host or the card can't do the switch,
		 * fail more gracefully.
		 */
		if (err != -EINVAL && err != -ENOSYS && err != -EFAULT)
P
Pierre Ossman 已提交
309 310
			goto out;

311
		pr_warning("%s: problem reading Bus Speed modes.\n",
312
			mmc_hostname(card->host));
P
Pierre Ossman 已提交
313
		err = 0;
P
Pierre Ossman 已提交
314

P
Pierre Ossman 已提交
315 316 317
		goto out;
	}

318 319
	if (status[13] & SD_MODE_HIGH_SPEED)
		card->sw_caps.hs_max_dtr = HIGH_SPEED_MAX_DTR;
320

321 322
	if (card->scr.sda_spec3) {
		card->sw_caps.sd3_bus_mode = status[13];
323
		/* Driver Strengths supported by the card */
324 325
		card->sw_caps.sd3_drv_type = status[9];
	}
P
Pierre Ossman 已提交
326

P
Pierre Ossman 已提交
327 328 329 330 331 332 333 334 335
out:
	kfree(status);

	return err;
}

/*
 * Test if the card supports high-speed mode and, if so, switch to it.
 */
M
Michal Miroslaw 已提交
336
int mmc_sd_switch_hs(struct mmc_card *card)
P
Pierre Ossman 已提交
337 338 339 340
{
	int err;
	u8 *status;

341
	if (card->scr.sda_vsn < SCR_SPEC_VER_1)
P
Pierre Ossman 已提交
342
		return 0;
343 344

	if (!(card->csd.cmdclass & CCC_SWITCH))
P
Pierre Ossman 已提交
345
		return 0;
346

P
Pierre Ossman 已提交
347
	if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
P
Pierre Ossman 已提交
348
		return 0;
P
Pierre Ossman 已提交
349 350

	if (card->sw_caps.hs_max_dtr == 0)
P
Pierre Ossman 已提交
351
		return 0;
P
Pierre Ossman 已提交
352

P
Pierre Ossman 已提交
353
	err = -EIO;
P
Pierre Ossman 已提交
354 355 356

	status = kmalloc(64, GFP_KERNEL);
	if (!status) {
357
		pr_err("%s: could not allocate a buffer for "
P
Pierre Ossman 已提交
358
			"switch capabilities.\n", mmc_hostname(card->host));
P
Pierre Ossman 已提交
359
		return -ENOMEM;
P
Pierre Ossman 已提交
360 361
	}

P
Pierre Ossman 已提交
362
	err = mmc_sd_switch(card, 1, 0, 1, status);
P
Pierre Ossman 已提交
363
	if (err)
P
Pierre Ossman 已提交
364 365 366
		goto out;

	if ((status[16] & 0xF) != 1) {
367
		pr_warning("%s: Problem switching card "
P
Pierre Ossman 已提交
368 369
			"into high-speed mode!\n",
			mmc_hostname(card->host));
M
Michal Miroslaw 已提交
370
		err = 0;
P
Pierre Ossman 已提交
371
	} else {
M
Michal Miroslaw 已提交
372
		err = 1;
P
Pierre Ossman 已提交
373 374 375 376 377 378 379 380
	}

out:
	kfree(status);

	return err;
}

381 382
static int sd_select_driver_type(struct mmc_card *card, u8 *status)
{
383 384 385
	int host_drv_type = SD_DRIVER_TYPE_B;
	int card_drv_type = SD_DRIVER_TYPE_B;
	int drive_strength;
386 387 388 389
	int err;

	/*
	 * If the host doesn't support any of the Driver Types A,C or D,
390 391
	 * or there is no board specific handler then default Driver
	 * Type B is used.
392 393 394 395 396
	 */
	if (!(card->host->caps & (MMC_CAP_DRIVER_TYPE_A | MMC_CAP_DRIVER_TYPE_C
	    | MMC_CAP_DRIVER_TYPE_D)))
		return 0;

397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423
	if (!card->host->ops->select_drive_strength)
		return 0;

	if (card->host->caps & MMC_CAP_DRIVER_TYPE_A)
		host_drv_type |= SD_DRIVER_TYPE_A;

	if (card->host->caps & MMC_CAP_DRIVER_TYPE_C)
		host_drv_type |= SD_DRIVER_TYPE_C;

	if (card->host->caps & MMC_CAP_DRIVER_TYPE_D)
		host_drv_type |= SD_DRIVER_TYPE_D;

	if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_A)
		card_drv_type |= SD_DRIVER_TYPE_A;

	if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_C)
		card_drv_type |= SD_DRIVER_TYPE_C;

	if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_D)
		card_drv_type |= SD_DRIVER_TYPE_D;

	/*
	 * The drive strength that the hardware can support
	 * depends on the board design.  Pass the appropriate
	 * information and let the hardware specific code
	 * return what is possible given the options
	 */
424
	mmc_host_clk_hold(card->host);
425 426 427
	drive_strength = card->host->ops->select_drive_strength(
		card->sw_caps.uhs_max_dtr,
		host_drv_type, card_drv_type);
428
	mmc_host_clk_release(card->host);
429

430
	err = mmc_sd_switch(card, 1, 2, drive_strength, status);
431 432 433
	if (err)
		return err;

434
	if ((status[15] & 0xF) != drive_strength) {
435
		pr_warning("%s: Problem setting drive strength!\n",
436 437 438 439
			mmc_hostname(card->host));
		return 0;
	}

440
	mmc_set_driver_type(card->host, drive_strength);
441 442 443 444

	return 0;
}

445
static void sd_update_bus_speed_mode(struct mmc_card *card)
446 447 448 449 450
{
	/*
	 * If the host doesn't support any of the UHS-I modes, fallback on
	 * default speed.
	 */
451
	if (!mmc_host_uhs(card->host)) {
452 453 454
		card->sd_bus_speed = 0;
		return;
	}
455 456 457

	if ((card->host->caps & MMC_CAP_UHS_SDR104) &&
	    (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) {
458
			card->sd_bus_speed = UHS_SDR104_BUS_SPEED;
459 460
	} else if ((card->host->caps & MMC_CAP_UHS_DDR50) &&
		   (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) {
461
			card->sd_bus_speed = UHS_DDR50_BUS_SPEED;
462 463 464
	} else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
		    MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode &
		    SD_MODE_UHS_SDR50)) {
465
			card->sd_bus_speed = UHS_SDR50_BUS_SPEED;
466 467 468
	} else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
		    MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) &&
		   (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) {
469
			card->sd_bus_speed = UHS_SDR25_BUS_SPEED;
470 471 472 473
	} else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
		    MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 |
		    MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode &
		    SD_MODE_UHS_SDR12)) {
474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505
			card->sd_bus_speed = UHS_SDR12_BUS_SPEED;
	}
}

static int sd_set_bus_speed_mode(struct mmc_card *card, u8 *status)
{
	int err;
	unsigned int timing = 0;

	switch (card->sd_bus_speed) {
	case UHS_SDR104_BUS_SPEED:
		timing = MMC_TIMING_UHS_SDR104;
		card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
		break;
	case UHS_DDR50_BUS_SPEED:
		timing = MMC_TIMING_UHS_DDR50;
		card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
		break;
	case UHS_SDR50_BUS_SPEED:
		timing = MMC_TIMING_UHS_SDR50;
		card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
		break;
	case UHS_SDR25_BUS_SPEED:
		timing = MMC_TIMING_UHS_SDR25;
		card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
		break;
	case UHS_SDR12_BUS_SPEED:
		timing = MMC_TIMING_UHS_SDR12;
		card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
		break;
	default:
		return 0;
506 507
	}

508
	err = mmc_sd_switch(card, 1, 0, card->sd_bus_speed, status);
509 510 511
	if (err)
		return err;

512
	if ((status[16] & 0xF) != card->sd_bus_speed)
513
		pr_warning("%s: Problem setting bus speed mode!\n",
514 515 516 517 518 519 520 521 522
			mmc_hostname(card->host));
	else {
		mmc_set_timing(card->host, timing);
		mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr);
	}

	return 0;
}

A
Aaron Lu 已提交
523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547
/* Get host's max current setting at its current voltage */
static u32 sd_get_host_max_current(struct mmc_host *host)
{
	u32 voltage, max_current;

	voltage = 1 << host->ios.vdd;
	switch (voltage) {
	case MMC_VDD_165_195:
		max_current = host->max_current_180;
		break;
	case MMC_VDD_29_30:
	case MMC_VDD_30_31:
		max_current = host->max_current_300;
		break;
	case MMC_VDD_32_33:
	case MMC_VDD_33_34:
		max_current = host->max_current_330;
		break;
	default:
		max_current = 0;
	}

	return max_current;
}

548 549
static int sd_set_current_limit(struct mmc_card *card, u8 *status)
{
550
	int current_limit = SD_SET_CURRENT_NO_CHANGE;
551
	int err;
A
Aaron Lu 已提交
552
	u32 max_current;
553 554 555

	/*
	 * Current limit switch is only defined for SDR50, SDR104, and DDR50
556 557
	 * bus speed modes. For other bus speed modes, we do not change the
	 * current limit.
A
Aaron Lu 已提交
558 559 560 561 562 563 564 565 566 567 568 569 570
	 */
	if ((card->sd_bus_speed != UHS_SDR50_BUS_SPEED) &&
	    (card->sd_bus_speed != UHS_SDR104_BUS_SPEED) &&
	    (card->sd_bus_speed != UHS_DDR50_BUS_SPEED))
		return 0;

	/*
	 * Host has different current capabilities when operating at
	 * different voltages, so find out its max current first.
	 */
	max_current = sd_get_host_max_current(card->host);

	/*
571 572 573 574 575 576
	 * We only check host's capability here, if we set a limit that is
	 * higher than the card's maximum current, the card will be using its
	 * maximum current, e.g. if the card's maximum current is 300ma, and
	 * when we set current limit to 200ma, the card will draw 200ma, and
	 * when we set current limit to 400/600/800ma, the card will draw its
	 * maximum 300ma from the host.
577
	 */
A
Aaron Lu 已提交
578 579 580 581 582 583 584 585
	if (max_current >= 800)
		current_limit = SD_SET_CURRENT_LIMIT_800;
	else if (max_current >= 600)
		current_limit = SD_SET_CURRENT_LIMIT_600;
	else if (max_current >= 400)
		current_limit = SD_SET_CURRENT_LIMIT_400;
	else if (max_current >= 200)
		current_limit = SD_SET_CURRENT_LIMIT_200;
586

587 588 589 590
	if (current_limit != SD_SET_CURRENT_NO_CHANGE) {
		err = mmc_sd_switch(card, 1, 3, current_limit, status);
		if (err)
			return err;
591

592 593 594
		if (((status[15] >> 4) & 0x0F) != current_limit)
			pr_warning("%s: Problem setting current limit!\n",
				mmc_hostname(card->host));
595

596
	}
597

598 599 600
	return 0;
}

601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616
/*
 * UHS-I specific initialization procedure
 */
static int mmc_sd_init_uhs_card(struct mmc_card *card)
{
	int err;
	u8 *status;

	if (!card->scr.sda_spec3)
		return 0;

	if (!(card->csd.cmdclass & CCC_SWITCH))
		return 0;

	status = kmalloc(64, GFP_KERNEL);
	if (!status) {
617
		pr_err("%s: could not allocate a buffer for "
618 619 620 621 622 623 624 625 626 627 628 629 630 631
			"switch capabilities.\n", mmc_hostname(card->host));
		return -ENOMEM;
	}

	/* Set 4-bit bus width */
	if ((card->host->caps & MMC_CAP_4_BIT_DATA) &&
	    (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
		err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
		if (err)
			goto out;

		mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
	}

632 633 634 635 636 637
	/*
	 * Select the bus speed mode depending on host
	 * and card capability.
	 */
	sd_update_bus_speed_mode(card);

638 639
	/* Set the driver strength for the card */
	err = sd_select_driver_type(card, status);
640 641 642
	if (err)
		goto out;

643 644
	/* Set current limit for the card */
	err = sd_set_current_limit(card, status);
645 646 647
	if (err)
		goto out;

648 649
	/* Set bus speed mode of the card */
	err = sd_set_bus_speed_mode(card, status);
650 651 652
	if (err)
		goto out;

653 654 655 656 657 658 659
	/*
	 * SPI mode doesn't define CMD19 and tuning is only valid for SDR50 and
	 * SDR104 mode SD-cards. Note that tuning is mandatory for SDR104.
	 */
	if (!mmc_host_is_spi(card->host) && card->host->ops->execute_tuning &&
			(card->sd_bus_speed == UHS_SDR50_BUS_SPEED ||
			 card->sd_bus_speed == UHS_SDR104_BUS_SPEED)) {
660
		mmc_host_clk_hold(card->host);
661 662
		err = card->host->ops->execute_tuning(card->host,
						      MMC_SEND_TUNING_BLOCK);
663 664
		mmc_host_clk_release(card->host);
	}
665 666 667 668 669 670 671

out:
	kfree(status);

	return err;
}

672 673 674 675 676 677
MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
	card->raw_cid[2], card->raw_cid[3]);
MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
	card->raw_csd[2], card->raw_csd[3]);
MMC_DEV_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]);
MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
678 679
MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
680 681 682 683 684 685 686 687 688 689 690 691 692
MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev);
MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);


static struct attribute *sd_std_attrs[] = {
	&dev_attr_cid.attr,
	&dev_attr_csd.attr,
	&dev_attr_scr.attr,
	&dev_attr_date.attr,
693 694
	&dev_attr_erase_size.attr,
	&dev_attr_preferred_erase_size.attr,
695 696 697 698 699 700 701 702 703 704 705 706 707
	&dev_attr_fwrev.attr,
	&dev_attr_hwrev.attr,
	&dev_attr_manfid.attr,
	&dev_attr_name.attr,
	&dev_attr_oemid.attr,
	&dev_attr_serial.attr,
	NULL,
};

static struct attribute_group sd_std_attr_group = {
	.attrs = sd_std_attrs,
};

708
static const struct attribute_group *sd_attr_groups[] = {
709 710 711 712
	&sd_std_attr_group,
	NULL,
};

M
Michal Miroslaw 已提交
713
struct device_type sd_type = {
714 715 716
	.groups = sd_attr_groups,
};

P
Pierre Ossman 已提交
717
/*
M
Michal Miroslaw 已提交
718
 * Fetch CID from card.
P
Pierre Ossman 已提交
719
 */
720
int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr)
P
Pierre Ossman 已提交
721 722
{
	int err;
A
Aaron Lu 已提交
723
	u32 max_current;
724
	int retries = 10;
725
	u32 pocr = ocr;
726 727 728 729 730 731 732

try_again:
	if (!retries) {
		ocr &= ~SD_OCR_S18R;
		pr_warning("%s: Skipping voltage switch\n",
			mmc_hostname(host));
	}
P
Pierre Ossman 已提交
733 734 735 736 737 738 739 740 741 742 743 744 745 746 747

	/*
	 * Since we're changing the OCR value, we seem to
	 * need to tell some cards to go back to the idle
	 * state.  We wait 1ms to give cards time to
	 * respond.
	 */
	mmc_go_idle(host);

	/*
	 * If SD_SEND_IF_COND indicates an SD 2.0
	 * compliant card and we should set bit 30
	 * of the ocr to indicate that we can handle
	 * block-addressed SDHC cards.
	 */
748
	err = mmc_send_if_cond(host, ocr);
P
Pierre Ossman 已提交
749
	if (!err)
750
		ocr |= SD_OCR_CCS;
P
Pierre Ossman 已提交
751

752 753
	/*
	 * If the host supports one of UHS-I modes, request the card
754 755
	 * to switch to 1.8V signaling level. If the card has failed
	 * repeatedly to switch however, skip this.
756
	 */
757
	if (retries && mmc_host_uhs(host))
758 759
		ocr |= SD_OCR_S18R;

A
Aaron Lu 已提交
760 761 762 763 764 765
	/*
	 * If the host can supply more than 150mA at current voltage,
	 * XPC should be set to 1.
	 */
	max_current = sd_get_host_max_current(host);
	if (max_current > 150)
766 767
		ocr |= SD_OCR_XPC;

768
	err = mmc_send_app_op_cond(host, ocr, rocr);
P
Pierre Ossman 已提交
769
	if (err)
M
Michal Miroslaw 已提交
770
		return err;
P
Pierre Ossman 已提交
771

772 773 774 775
	/*
	 * In case CCS and S18A in the response is set, start Signal Voltage
	 * Switch procedure. SPI mode doesn't support CMD11.
	 */
776 777
	if (!mmc_host_is_spi(host) && rocr &&
	   ((*rocr & 0x41000000) == 0x41000000)) {
778
		err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180,
779
					pocr);
780 781 782 783 784
		if (err == -EAGAIN) {
			retries--;
			goto try_again;
		} else if (err) {
			retries = 0;
785 786 787 788
			goto try_again;
		}
	}

D
David Brownell 已提交
789 790 791 792
	if (mmc_host_is_spi(host))
		err = mmc_send_cid(host, cid);
	else
		err = mmc_all_send_cid(host, cid);
M
Michal Miroslaw 已提交
793 794 795 796 797 798 799 800 801 802 803 804

	return err;
}

int mmc_sd_get_csd(struct mmc_host *host, struct mmc_card *card)
{
	int err;

	/*
	 * Fetch CSD from card.
	 */
	err = mmc_send_csd(card, card->raw_csd);
P
Pierre Ossman 已提交
805
	if (err)
M
Michal Miroslaw 已提交
806
		return err;
P
Pierre Ossman 已提交
807

M
Michal Miroslaw 已提交
808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831
	err = mmc_decode_csd(card);
	if (err)
		return err;

	return 0;
}

int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card,
	bool reinit)
{
	int err;

	if (!reinit) {
		/*
		 * Fetch SCR from card.
		 */
		err = mmc_app_send_scr(card, card->raw_scr);
		if (err)
			return err;

		err = mmc_decode_scr(card);
		if (err)
			return err;

832 833 834 835 836 837 838 839 840 841
		/*
		 * Fetch and process SD Status register.
		 */
		err = mmc_read_ssr(card);
		if (err)
			return err;

		/* Erase init depends on CSD and SSR */
		mmc_init_erase(card);

M
Michal Miroslaw 已提交
842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867
		/*
		 * Fetch switch information from card.
		 */
		err = mmc_read_switch(card);
		if (err)
			return err;
	}

	/*
	 * For SPI, enable CRC as appropriate.
	 * This CRC enable is located AFTER the reading of the
	 * card registers because some SDHC cards are not able
	 * to provide valid CRCs for non-512-byte blocks.
	 */
	if (mmc_host_is_spi(host)) {
		err = mmc_spi_set_crc(host, use_spi_crc);
		if (err)
			return err;
	}

	/*
	 * Check if read-only switch is active.
	 */
	if (!reinit) {
		int ro = -1;

868 869
		if (host->ops->get_ro) {
			mmc_host_clk_hold(card->host);
M
Michal Miroslaw 已提交
870
			ro = host->ops->get_ro(host);
871 872
			mmc_host_clk_release(card->host);
		}
M
Michal Miroslaw 已提交
873 874

		if (ro < 0) {
875
			pr_warning("%s: host does not "
M
Michal Miroslaw 已提交
876 877 878 879 880
				"support reading read-only "
				"switch. assuming write-enable.\n",
				mmc_hostname(host));
		} else if (ro > 0) {
			mmc_card_set_readonly(card);
P
Pierre Ossman 已提交
881
		}
M
Michal Miroslaw 已提交
882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918
	}

	return 0;
}

unsigned mmc_sd_get_max_clock(struct mmc_card *card)
{
	unsigned max_dtr = (unsigned int)-1;

	if (mmc_card_highspeed(card)) {
		if (max_dtr > card->sw_caps.hs_max_dtr)
			max_dtr = card->sw_caps.hs_max_dtr;
	} else if (max_dtr > card->csd.max_dtr) {
		max_dtr = card->csd.max_dtr;
	}

	return max_dtr;
}

void mmc_sd_go_highspeed(struct mmc_card *card)
{
	mmc_card_set_highspeed(card);
	mmc_set_timing(card->host, MMC_TIMING_SD_HS);
}

/*
 * Handle the detection and initialisation of a card.
 *
 * In the case of a resume, "oldcard" will contain the card
 * we're trying to reinitialise.
 */
static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
	struct mmc_card *oldcard)
{
	struct mmc_card *card;
	int err;
	u32 cid[4];
919
	u32 rocr = 0;
M
Michal Miroslaw 已提交
920 921 922 923

	BUG_ON(!host);
	WARN_ON(!host->claimed);

924
	err = mmc_sd_get_cid(host, ocr, cid, &rocr);
M
Michal Miroslaw 已提交
925 926 927 928 929 930
	if (err)
		return err;

	if (oldcard) {
		if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
			return -ENOENT;
P
Pierre Ossman 已提交
931

932 933 934 935 936
		card = oldcard;
	} else {
		/*
		 * Allocate card structure.
		 */
937
		card = mmc_alloc_card(host, &sd_type);
M
Michal Miroslaw 已提交
938 939
		if (IS_ERR(card))
			return PTR_ERR(card);
940

941
		card->ocr = ocr;
942 943 944
		card->type = MMC_TYPE_SD;
		memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
	}
P
Pierre Ossman 已提交
945 946

	/*
D
David Brownell 已提交
947
	 * For native busses:  get card RCA and quit open drain mode.
P
Pierre Ossman 已提交
948
	 */
D
David Brownell 已提交
949 950 951
	if (!mmc_host_is_spi(host)) {
		err = mmc_send_relative_addr(host, &card->rca);
		if (err)
952
			goto free_card;
D
David Brownell 已提交
953
	}
P
Pierre Ossman 已提交
954

955
	if (!oldcard) {
M
Michal Miroslaw 已提交
956
		err = mmc_sd_get_csd(host, card);
P
Pierre Ossman 已提交
957
		if (err)
958
			goto free_card;
P
Pierre Ossman 已提交
959

960 961
		mmc_decode_cid(card);
	}
P
Pierre Ossman 已提交
962 963

	/*
964
	 * Select card, as all following commands rely on that.
P
Pierre Ossman 已提交
965
	 */
D
David Brownell 已提交
966 967 968
	if (!mmc_host_is_spi(host)) {
		err = mmc_select_card(card);
		if (err)
969
			goto free_card;
970
	}
P
Pierre Ossman 已提交
971

M
Michal Miroslaw 已提交
972 973 974
	err = mmc_sd_setup_card(host, card, oldcard != NULL);
	if (err)
		goto free_card;
975

976 977 978
	/* Initialization sequence for UHS-I cards */
	if (rocr & SD_ROCR_S18A) {
		err = mmc_sd_init_uhs_card(card);
P
Pierre Ossman 已提交
979
		if (err)
P
Pierre Ossman 已提交
980
			goto free_card;
981 982

		/* Card is an ultra-high-speed card */
983
		mmc_card_set_uhs(card);
984 985 986 987 988 989 990 991 992 993 994 995 996 997
	} else {
		/*
		 * Attempt to change to high-speed (if supported)
		 */
		err = mmc_sd_switch_hs(card);
		if (err > 0)
			mmc_sd_go_highspeed(card);
		else if (err)
			goto free_card;

		/*
		 * Set bus speed.
		 */
		mmc_set_clock(host, mmc_sd_get_max_clock(card));
P
Pierre Ossman 已提交
998

999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
		/*
		 * Switch to wider bus (if supported).
		 */
		if ((host->caps & MMC_CAP_4_BIT_DATA) &&
			(card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
			err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
			if (err)
				goto free_card;

			mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
		}
P
Pierre Ossman 已提交
1010 1011
	}

M
Michal Miroslaw 已提交
1012
	host->card = card;
P
Pierre Ossman 已提交
1013
	return 0;
1014 1015 1016 1017 1018

free_card:
	if (!oldcard)
		mmc_remove_card(card);

P
Pierre Ossman 已提交
1019
	return err;
1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033
}

/*
 * Host is being removed. Free up the current card.
 */
static void mmc_sd_remove(struct mmc_host *host)
{
	BUG_ON(!host);
	BUG_ON(!host->card);

	mmc_remove_card(host->card);
	host->card = NULL;
}

1034 1035 1036 1037 1038 1039 1040 1041
/*
 * Card detection - card is alive.
 */
static int mmc_sd_alive(struct mmc_host *host)
{
	return mmc_send_status(host->card, NULL);
}

1042 1043 1044 1045 1046 1047 1048 1049 1050 1051
/*
 * Card detection callback from host.
 */
static void mmc_sd_detect(struct mmc_host *host)
{
	int err;

	BUG_ON(!host);
	BUG_ON(!host->card);

1052
	mmc_get_card(host->card);
1053 1054 1055 1056

	/*
	 * Just check if our card has been removed.
	 */
1057
	err = _mmc_detect_card_removed(host);
P
Pierre Ossman 已提交
1058

1059
	mmc_put_card(host->card);
P
Pierre Ossman 已提交
1060

P
Pierre Ossman 已提交
1061
	if (err) {
P
Pierre Ossman 已提交
1062
		mmc_sd_remove(host);
1063 1064 1065

		mmc_claim_host(host);
		mmc_detach_bus(host);
1066
		mmc_power_off(host);
1067 1068 1069 1070
		mmc_release_host(host);
	}
}

1071
static int _mmc_sd_suspend(struct mmc_host *host)
1072
{
1073 1074
	int err = 0;

1075 1076 1077 1078
	BUG_ON(!host);
	BUG_ON(!host->card);

	mmc_claim_host(host);
1079 1080 1081 1082

	if (mmc_card_suspended(host->card))
		goto out;

D
David Brownell 已提交
1083
	if (!mmc_host_is_spi(host))
1084
		err = mmc_deselect_cards(host);
1085
	host->card->state &= ~MMC_STATE_HIGHSPEED;
1086
	if (!err) {
1087
		mmc_power_off(host);
1088 1089
		mmc_card_set_suspended(host->card);
	}
1090

1091 1092
out:
	mmc_release_host(host);
1093
	return err;
1094 1095 1096
}

/*
1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112
 * Callback for suspend
 */
static int mmc_sd_suspend(struct mmc_host *host)
{
	int err;

	err = _mmc_sd_suspend(host);
	if (!err) {
		pm_runtime_disable(&host->card->dev);
		pm_runtime_set_suspended(&host->card->dev);
	}

	return err;
}

/*
1113 1114 1115
 * This function tries to determine if the same card is still present
 * and, if so, restore all state to it.
 */
1116
static int _mmc_sd_resume(struct mmc_host *host)
1117
{
1118
	int err = 0;
1119 1120 1121 1122 1123

	BUG_ON(!host);
	BUG_ON(!host->card);

	mmc_claim_host(host);
1124 1125 1126 1127

	if (!mmc_card_suspended(host->card))
		goto out;

1128 1129
	mmc_power_up(host, host->card->ocr);
	err = mmc_sd_init_card(host, host->card->ocr, host->card);
1130
	mmc_card_clr_suspended(host->card);
1131

1132 1133
out:
	mmc_release_host(host);
1134
	return err;
1135 1136
}

1137 1138 1139 1140 1141
/*
 * Callback for resume
 */
static int mmc_sd_resume(struct mmc_host *host)
{
1142
	int err = 0;
1143

1144 1145 1146 1147 1148
	if (!(host->caps & MMC_CAP_RUNTIME_RESUME)) {
		err = _mmc_sd_resume(host);
		pm_runtime_set_active(&host->card->dev);
		pm_runtime_mark_last_busy(&host->card->dev);
	}
1149 1150 1151 1152 1153
	pm_runtime_enable(&host->card->dev);

	return err;
}

1154 1155 1156 1157 1158 1159 1160 1161 1162 1163
/*
 * Callback for runtime_suspend.
 */
static int mmc_sd_runtime_suspend(struct mmc_host *host)
{
	int err;

	if (!(host->caps & MMC_CAP_AGGRESSIVE_PM))
		return 0;

1164
	err = _mmc_sd_suspend(host);
1165
	if (err)
1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178
		pr_err("%s: error %d doing aggessive suspend\n",
			mmc_hostname(host), err);

	return err;
}

/*
 * Callback for runtime_resume.
 */
static int mmc_sd_runtime_resume(struct mmc_host *host)
{
	int err;

1179
	if (!(host->caps & (MMC_CAP_AGGRESSIVE_PM | MMC_CAP_RUNTIME_RESUME)))
1180 1181
		return 0;

1182
	err = _mmc_sd_resume(host);
1183 1184 1185 1186 1187 1188 1189
	if (err)
		pr_err("%s: error %d doing aggessive resume\n",
			mmc_hostname(host), err);

	return 0;
}

1190
static int mmc_sd_power_restore(struct mmc_host *host)
1191
{
1192 1193
	int ret;

1194 1195
	host->card->state &= ~MMC_STATE_HIGHSPEED;
	mmc_claim_host(host);
1196
	ret = mmc_sd_init_card(host, host->card->ocr, host->card);
1197
	mmc_release_host(host);
1198 1199

	return ret;
1200 1201
}

1202
static const struct mmc_bus_ops mmc_sd_ops = {
1203 1204 1205 1206
	.remove = mmc_sd_remove,
	.detect = mmc_sd_detect,
	.suspend = NULL,
	.resume = NULL,
1207
	.power_restore = mmc_sd_power_restore,
1208
	.alive = mmc_sd_alive,
1209
	.shutdown = mmc_sd_suspend,
1210 1211 1212
};

static const struct mmc_bus_ops mmc_sd_ops_unsafe = {
1213 1214
	.remove = mmc_sd_remove,
	.detect = mmc_sd_detect,
1215 1216
	.runtime_suspend = mmc_sd_runtime_suspend,
	.runtime_resume = mmc_sd_runtime_resume,
1217 1218
	.suspend = mmc_sd_suspend,
	.resume = mmc_sd_resume,
1219
	.power_restore = mmc_sd_power_restore,
1220
	.alive = mmc_sd_alive,
1221
	.shutdown = mmc_sd_suspend,
1222 1223
};

1224 1225 1226 1227
static void mmc_sd_attach_bus_ops(struct mmc_host *host)
{
	const struct mmc_bus_ops *bus_ops;

1228
	if (!mmc_card_is_removable(host))
1229 1230 1231 1232 1233 1234
		bus_ops = &mmc_sd_ops_unsafe;
	else
		bus_ops = &mmc_sd_ops;
	mmc_attach_bus(host, bus_ops);
}

1235 1236 1237
/*
 * Starting point for SD card init.
 */
1238
int mmc_attach_sd(struct mmc_host *host)
1239 1240
{
	int err;
1241
	u32 ocr, rocr;
1242 1243

	BUG_ON(!host);
P
Pierre Ossman 已提交
1244
	WARN_ON(!host->claimed);
1245

1246 1247 1248 1249
	err = mmc_send_app_op_cond(host, 0, &ocr);
	if (err)
		return err;

1250
	mmc_sd_attach_bus_ops(host);
1251 1252
	if (host->ocr_avail_sd)
		host->ocr_avail = host->ocr_avail_sd;
1253

D
David Brownell 已提交
1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264
	/*
	 * We need to get OCR a different way for SPI.
	 */
	if (mmc_host_is_spi(host)) {
		mmc_go_idle(host);

		err = mmc_spi_read_ocr(host, 0, &ocr);
		if (err)
			goto err;
	}

1265
	rocr = mmc_select_voltage(host, ocr);
1266 1267 1268 1269

	/*
	 * Can we support the voltage(s) of the card(s)?
	 */
1270
	if (!rocr) {
1271
		err = -EINVAL;
1272
		goto err;
1273
	}
1274 1275 1276 1277

	/*
	 * Detect and init the card.
	 */
1278
	err = mmc_sd_init_card(host, rocr, NULL);
P
Pierre Ossman 已提交
1279
	if (err)
1280 1281 1282
		goto err;

	mmc_release_host(host);
P
Pierre Ossman 已提交
1283
	err = mmc_add_card(host->card);
1284
	mmc_claim_host(host);
P
Pierre Ossman 已提交
1285
	if (err)
1286
		goto remove_card;
P
Pierre Ossman 已提交
1287 1288 1289

	return 0;

1290
remove_card:
1291
	mmc_release_host(host);
1292
	mmc_remove_card(host->card);
P
Pierre Ossman 已提交
1293
	host->card = NULL;
1294
	mmc_claim_host(host);
P
Pierre Ossman 已提交
1295 1296 1297
err:
	mmc_detach_bus(host);

1298
	pr_err("%s: error %d whilst initialising SD card\n",
1299 1300
		mmc_hostname(host), err);

P
Pierre Ossman 已提交
1301
	return err;
P
Pierre Ossman 已提交
1302 1303
}