Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/mmc/core/sdio.c
15109 views
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/sdio.h>
18
#include <linux/mmc/sdio_func.h>
19
#include <linux/mmc/sdio_ids.h>
20
21
#include "core.h"
22
#include "bus.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
BUG_ON(fn > SDIO_MAX_FUNCS);
66
67
func = sdio_alloc_func(card);
68
if (IS_ERR(func))
69
return PTR_ERR(func);
70
71
func->num = fn;
72
73
if (!(card->quirks & MMC_QUIRK_NONSTD_SDIO)) {
74
ret = sdio_read_fbr(func);
75
if (ret)
76
goto fail;
77
78
ret = sdio_read_func_cis(func);
79
if (ret)
80
goto fail;
81
} else {
82
func->vendor = func->card->cis.vendor;
83
func->device = func->card->cis.device;
84
func->max_blksize = func->card->cis.blksize;
85
}
86
87
card->sdio_func[fn - 1] = func;
88
89
return 0;
90
91
fail:
92
/*
93
* It is okay to remove the function here even though we hold
94
* the host lock as we haven't registered the device yet.
95
*/
96
sdio_remove_func(func);
97
return ret;
98
}
99
100
static int sdio_read_cccr(struct mmc_card *card)
101
{
102
int ret;
103
int cccr_vsn;
104
unsigned char data;
105
106
memset(&card->cccr, 0, sizeof(struct sdio_cccr));
107
108
ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CCCR, 0, &data);
109
if (ret)
110
goto out;
111
112
cccr_vsn = data & 0x0f;
113
114
if (cccr_vsn > SDIO_CCCR_REV_1_20) {
115
printk(KERN_ERR "%s: unrecognised CCCR structure version %d\n",
116
mmc_hostname(card->host), cccr_vsn);
117
return -EINVAL;
118
}
119
120
card->cccr.sdio_vsn = (data & 0xf0) >> 4;
121
122
ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CAPS, 0, &data);
123
if (ret)
124
goto out;
125
126
if (data & SDIO_CCCR_CAP_SMB)
127
card->cccr.multi_block = 1;
128
if (data & SDIO_CCCR_CAP_LSC)
129
card->cccr.low_speed = 1;
130
if (data & SDIO_CCCR_CAP_4BLS)
131
card->cccr.wide_bus = 1;
132
133
if (cccr_vsn >= SDIO_CCCR_REV_1_10) {
134
ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_POWER, 0, &data);
135
if (ret)
136
goto out;
137
138
if (data & SDIO_POWER_SMPC)
139
card->cccr.high_power = 1;
140
}
141
142
if (cccr_vsn >= SDIO_CCCR_REV_1_20) {
143
ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &data);
144
if (ret)
145
goto out;
146
147
if (data & SDIO_SPEED_SHS)
148
card->cccr.high_speed = 1;
149
}
150
151
out:
152
return ret;
153
}
154
155
static int sdio_enable_wide(struct mmc_card *card)
156
{
157
int ret;
158
u8 ctrl;
159
160
if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
161
return 0;
162
163
if (card->cccr.low_speed && !card->cccr.wide_bus)
164
return 0;
165
166
ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
167
if (ret)
168
return ret;
169
170
ctrl |= SDIO_BUS_WIDTH_4BIT;
171
172
ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
173
if (ret)
174
return ret;
175
176
return 1;
177
}
178
179
/*
180
* If desired, disconnect the pull-up resistor on CD/DAT[3] (pin 1)
181
* of the card. This may be required on certain setups of boards,
182
* controllers and embedded sdio device which do not need the card's
183
* pull-up. As a result, card detection is disabled and power is saved.
184
*/
185
static int sdio_disable_cd(struct mmc_card *card)
186
{
187
int ret;
188
u8 ctrl;
189
190
if (!mmc_card_disable_cd(card))
191
return 0;
192
193
ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
194
if (ret)
195
return ret;
196
197
ctrl |= SDIO_BUS_CD_DISABLE;
198
199
return mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
200
}
201
202
/*
203
* Devices that remain active during a system suspend are
204
* put back into 1-bit mode.
205
*/
206
static int sdio_disable_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
if (!(ctrl & SDIO_BUS_WIDTH_4BIT))
222
return 0;
223
224
ctrl &= ~SDIO_BUS_WIDTH_4BIT;
225
ctrl |= SDIO_BUS_ASYNC_INT;
226
227
ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
228
if (ret)
229
return ret;
230
231
mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1);
232
233
return 0;
234
}
235
236
237
static int sdio_enable_4bit_bus(struct mmc_card *card)
238
{
239
int err;
240
241
if (card->type == MMC_TYPE_SDIO)
242
return sdio_enable_wide(card);
243
244
if ((card->host->caps & MMC_CAP_4_BIT_DATA) &&
245
(card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
246
err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
247
if (err)
248
return err;
249
} else
250
return 0;
251
252
err = sdio_enable_wide(card);
253
if (err <= 0)
254
mmc_app_set_bus_width(card, MMC_BUS_WIDTH_1);
255
256
return err;
257
}
258
259
260
/*
261
* Test if the card supports high-speed mode and, if so, switch to it.
262
*/
263
static int mmc_sdio_switch_hs(struct mmc_card *card, int enable)
264
{
265
int ret;
266
u8 speed;
267
268
if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
269
return 0;
270
271
if (!card->cccr.high_speed)
272
return 0;
273
274
ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
275
if (ret)
276
return ret;
277
278
if (enable)
279
speed |= SDIO_SPEED_EHS;
280
else
281
speed &= ~SDIO_SPEED_EHS;
282
283
ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL);
284
if (ret)
285
return ret;
286
287
return 1;
288
}
289
290
/*
291
* Enable SDIO/combo card's high-speed mode. Return 0/1 if [not]supported.
292
*/
293
static int sdio_enable_hs(struct mmc_card *card)
294
{
295
int ret;
296
297
ret = mmc_sdio_switch_hs(card, true);
298
if (ret <= 0 || card->type == MMC_TYPE_SDIO)
299
return ret;
300
301
ret = mmc_sd_switch_hs(card);
302
if (ret <= 0)
303
mmc_sdio_switch_hs(card, false);
304
305
return ret;
306
}
307
308
static unsigned mmc_sdio_get_max_clock(struct mmc_card *card)
309
{
310
unsigned max_dtr;
311
312
if (mmc_card_highspeed(card)) {
313
/*
314
* The SDIO specification doesn't mention how
315
* the CIS transfer speed register relates to
316
* high-speed, but it seems that 50 MHz is
317
* mandatory.
318
*/
319
max_dtr = 50000000;
320
} else {
321
max_dtr = card->cis.max_dtr;
322
}
323
324
if (card->type == MMC_TYPE_SD_COMBO)
325
max_dtr = min(max_dtr, mmc_sd_get_max_clock(card));
326
327
return max_dtr;
328
}
329
330
/*
331
* Handle the detection and initialisation of a card.
332
*
333
* In the case of a resume, "oldcard" will contain the card
334
* we're trying to reinitialise.
335
*/
336
static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
337
struct mmc_card *oldcard, int powered_resume)
338
{
339
struct mmc_card *card;
340
int err;
341
342
BUG_ON(!host);
343
WARN_ON(!host->claimed);
344
345
/*
346
* Inform the card of the voltage
347
*/
348
if (!powered_resume) {
349
err = mmc_send_io_op_cond(host, host->ocr, &ocr);
350
if (err)
351
goto err;
352
}
353
354
/*
355
* For SPI, enable CRC as appropriate.
356
*/
357
if (mmc_host_is_spi(host)) {
358
err = mmc_spi_set_crc(host, use_spi_crc);
359
if (err)
360
goto err;
361
}
362
363
/*
364
* Allocate card structure.
365
*/
366
card = mmc_alloc_card(host, NULL);
367
if (IS_ERR(card)) {
368
err = PTR_ERR(card);
369
goto err;
370
}
371
372
if ((ocr & R4_MEMORY_PRESENT) &&
373
mmc_sd_get_cid(host, host->ocr & ocr, card->raw_cid, NULL) == 0) {
374
card->type = MMC_TYPE_SD_COMBO;
375
376
if (oldcard && (oldcard->type != MMC_TYPE_SD_COMBO ||
377
memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) {
378
mmc_remove_card(card);
379
return -ENOENT;
380
}
381
} else {
382
card->type = MMC_TYPE_SDIO;
383
384
if (oldcard && oldcard->type != MMC_TYPE_SDIO) {
385
mmc_remove_card(card);
386
return -ENOENT;
387
}
388
}
389
390
/*
391
* Call the optional HC's init_card function to handle quirks.
392
*/
393
if (host->ops->init_card)
394
host->ops->init_card(host, card);
395
396
/*
397
* For native busses: set card RCA and quit open drain mode.
398
*/
399
if (!powered_resume && !mmc_host_is_spi(host)) {
400
err = mmc_send_relative_addr(host, &card->rca);
401
if (err)
402
goto remove;
403
404
/*
405
* Update oldcard with the new RCA received from the SDIO
406
* device -- we're doing this so that it's updated in the
407
* "card" struct when oldcard overwrites that later.
408
*/
409
if (oldcard)
410
oldcard->rca = card->rca;
411
412
mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
413
}
414
415
/*
416
* Read CSD, before selecting the card
417
*/
418
if (!oldcard && card->type == MMC_TYPE_SD_COMBO) {
419
err = mmc_sd_get_csd(host, card);
420
if (err)
421
return err;
422
423
mmc_decode_cid(card);
424
}
425
426
/*
427
* Select card, as all following commands rely on that.
428
*/
429
if (!powered_resume && !mmc_host_is_spi(host)) {
430
err = mmc_select_card(card);
431
if (err)
432
goto remove;
433
}
434
435
if (card->quirks & MMC_QUIRK_NONSTD_SDIO) {
436
/*
437
* This is non-standard SDIO device, meaning it doesn't
438
* have any CIA (Common I/O area) registers present.
439
* It's host's responsibility to fill cccr and cis
440
* structures in init_card().
441
*/
442
mmc_set_clock(host, card->cis.max_dtr);
443
444
if (card->cccr.high_speed) {
445
mmc_card_set_highspeed(card);
446
mmc_set_timing(card->host, MMC_TIMING_SD_HS);
447
}
448
449
goto finish;
450
}
451
452
/*
453
* Read the common registers.
454
*/
455
err = sdio_read_cccr(card);
456
if (err)
457
goto remove;
458
459
/*
460
* Read the common CIS tuples.
461
*/
462
err = sdio_read_common_cis(card);
463
if (err)
464
goto remove;
465
466
if (oldcard) {
467
int same = (card->cis.vendor == oldcard->cis.vendor &&
468
card->cis.device == oldcard->cis.device);
469
mmc_remove_card(card);
470
if (!same)
471
return -ENOENT;
472
473
card = oldcard;
474
}
475
mmc_fixup_device(card, NULL);
476
477
if (card->type == MMC_TYPE_SD_COMBO) {
478
err = mmc_sd_setup_card(host, card, oldcard != NULL);
479
/* handle as SDIO-only card if memory init failed */
480
if (err) {
481
mmc_go_idle(host);
482
if (mmc_host_is_spi(host))
483
/* should not fail, as it worked previously */
484
mmc_spi_set_crc(host, use_spi_crc);
485
card->type = MMC_TYPE_SDIO;
486
} else
487
card->dev.type = &sd_type;
488
}
489
490
/*
491
* If needed, disconnect card detection pull-up resistor.
492
*/
493
err = sdio_disable_cd(card);
494
if (err)
495
goto remove;
496
497
/*
498
* Switch to high-speed (if supported).
499
*/
500
err = sdio_enable_hs(card);
501
if (err > 0)
502
mmc_sd_go_highspeed(card);
503
else if (err)
504
goto remove;
505
506
/*
507
* Change to the card's maximum speed.
508
*/
509
mmc_set_clock(host, mmc_sdio_get_max_clock(card));
510
511
/*
512
* Switch to wider bus (if supported).
513
*/
514
err = sdio_enable_4bit_bus(card);
515
if (err > 0)
516
mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
517
else if (err)
518
goto remove;
519
520
finish:
521
if (!oldcard)
522
host->card = card;
523
return 0;
524
525
remove:
526
if (!oldcard)
527
mmc_remove_card(card);
528
529
err:
530
return err;
531
}
532
533
/*
534
* Host is being removed. Free up the current card.
535
*/
536
static void mmc_sdio_remove(struct mmc_host *host)
537
{
538
int i;
539
540
BUG_ON(!host);
541
BUG_ON(!host->card);
542
543
for (i = 0;i < host->card->sdio_funcs;i++) {
544
if (host->card->sdio_func[i]) {
545
sdio_remove_func(host->card->sdio_func[i]);
546
host->card->sdio_func[i] = NULL;
547
}
548
}
549
550
mmc_remove_card(host->card);
551
host->card = NULL;
552
}
553
554
/*
555
* Card detection callback from host.
556
*/
557
static void mmc_sdio_detect(struct mmc_host *host)
558
{
559
int err;
560
561
BUG_ON(!host);
562
BUG_ON(!host->card);
563
564
/* Make sure card is powered before detecting it */
565
if (host->caps & MMC_CAP_POWER_OFF_CARD) {
566
err = pm_runtime_get_sync(&host->card->dev);
567
if (err < 0)
568
goto out;
569
}
570
571
mmc_claim_host(host);
572
573
/*
574
* Just check if our card has been removed.
575
*/
576
err = mmc_select_card(host->card);
577
578
mmc_release_host(host);
579
580
/*
581
* Tell PM core it's OK to power off the card now.
582
*
583
* The _sync variant is used in order to ensure that the card
584
* is left powered off in case an error occurred, and the card
585
* is going to be removed.
586
*
587
* Since there is no specific reason to believe a new user
588
* is about to show up at this point, the _sync variant is
589
* desirable anyway.
590
*/
591
if (host->caps & MMC_CAP_POWER_OFF_CARD)
592
pm_runtime_put_sync(&host->card->dev);
593
594
out:
595
if (err) {
596
mmc_sdio_remove(host);
597
598
mmc_claim_host(host);
599
mmc_detach_bus(host);
600
mmc_release_host(host);
601
}
602
}
603
604
/*
605
* SDIO suspend. We need to suspend all functions separately.
606
* Therefore all registered functions must have drivers with suspend
607
* and resume methods. Failing that we simply remove the whole card.
608
*/
609
static int mmc_sdio_suspend(struct mmc_host *host)
610
{
611
int i, err = 0;
612
613
for (i = 0; i < host->card->sdio_funcs; i++) {
614
struct sdio_func *func = host->card->sdio_func[i];
615
if (func && sdio_func_present(func) && func->dev.driver) {
616
const struct dev_pm_ops *pmops = func->dev.driver->pm;
617
if (!pmops || !pmops->suspend || !pmops->resume) {
618
/* force removal of entire card in that case */
619
err = -ENOSYS;
620
} else
621
err = pmops->suspend(&func->dev);
622
if (err)
623
break;
624
}
625
}
626
while (err && --i >= 0) {
627
struct sdio_func *func = host->card->sdio_func[i];
628
if (func && sdio_func_present(func) && func->dev.driver) {
629
const struct dev_pm_ops *pmops = func->dev.driver->pm;
630
pmops->resume(&func->dev);
631
}
632
}
633
634
if (!err && mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
635
mmc_claim_host(host);
636
sdio_disable_wide(host->card);
637
mmc_release_host(host);
638
}
639
640
return err;
641
}
642
643
static int mmc_sdio_resume(struct mmc_host *host)
644
{
645
int i, err = 0;
646
647
BUG_ON(!host);
648
BUG_ON(!host->card);
649
650
/* Basic card reinitialization. */
651
mmc_claim_host(host);
652
653
/* No need to reinitialize powered-resumed nonremovable cards */
654
if (mmc_card_is_removable(host) || !mmc_card_keep_power(host))
655
err = mmc_sdio_init_card(host, host->ocr, host->card,
656
mmc_card_keep_power(host));
657
else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
658
/* We may have switched to 1-bit mode during suspend */
659
err = sdio_enable_4bit_bus(host->card);
660
if (err > 0) {
661
mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
662
err = 0;
663
}
664
}
665
666
if (!err && host->sdio_irqs)
667
mmc_signal_sdio_irq(host);
668
mmc_release_host(host);
669
670
/*
671
* If the card looked to be the same as before suspending, then
672
* we proceed to resume all card functions. If one of them returns
673
* an error then we simply return that error to the core and the
674
* card will be redetected as new. It is the responsibility of
675
* the function driver to perform further tests with the extra
676
* knowledge it has of the card to confirm the card is indeed the
677
* same as before suspending (same MAC address for network cards,
678
* etc.) and return an error otherwise.
679
*/
680
for (i = 0; !err && i < host->card->sdio_funcs; i++) {
681
struct sdio_func *func = host->card->sdio_func[i];
682
if (func && sdio_func_present(func) && func->dev.driver) {
683
const struct dev_pm_ops *pmops = func->dev.driver->pm;
684
err = pmops->resume(&func->dev);
685
}
686
}
687
688
return err;
689
}
690
691
static int mmc_sdio_power_restore(struct mmc_host *host)
692
{
693
int ret;
694
u32 ocr;
695
696
BUG_ON(!host);
697
BUG_ON(!host->card);
698
699
mmc_claim_host(host);
700
701
/*
702
* Reset the card by performing the same steps that are taken by
703
* mmc_rescan_try_freq() and mmc_attach_sdio() during a "normal" probe.
704
*
705
* sdio_reset() is technically not needed. Having just powered up the
706
* hardware, it should already be in reset state. However, some
707
* platforms (such as SD8686 on OLPC) do not instantly cut power,
708
* meaning that a reset is required when restoring power soon after
709
* powering off. It is harmless in other cases.
710
*
711
* The CMD5 reset (mmc_send_io_op_cond()), according to the SDIO spec,
712
* is not necessary for non-removable cards. However, it is required
713
* for OLPC SD8686 (which expects a [CMD5,5,3,7] init sequence), and
714
* harmless in other situations.
715
*
716
* With these steps taken, mmc_select_voltage() is also required to
717
* restore the correct voltage setting of the card.
718
*/
719
sdio_reset(host);
720
mmc_go_idle(host);
721
mmc_send_if_cond(host, host->ocr_avail);
722
723
ret = mmc_send_io_op_cond(host, 0, &ocr);
724
if (ret)
725
goto out;
726
727
if (host->ocr_avail_sdio)
728
host->ocr_avail = host->ocr_avail_sdio;
729
730
host->ocr = mmc_select_voltage(host, ocr & ~0x7F);
731
if (!host->ocr) {
732
ret = -EINVAL;
733
goto out;
734
}
735
736
ret = mmc_sdio_init_card(host, host->ocr, host->card,
737
mmc_card_keep_power(host));
738
if (!ret && host->sdio_irqs)
739
mmc_signal_sdio_irq(host);
740
741
out:
742
mmc_release_host(host);
743
744
return ret;
745
}
746
747
static const struct mmc_bus_ops mmc_sdio_ops = {
748
.remove = mmc_sdio_remove,
749
.detect = mmc_sdio_detect,
750
.suspend = mmc_sdio_suspend,
751
.resume = mmc_sdio_resume,
752
.power_restore = mmc_sdio_power_restore,
753
};
754
755
756
/*
757
* Starting point for SDIO card init.
758
*/
759
int mmc_attach_sdio(struct mmc_host *host)
760
{
761
int err, i, funcs;
762
u32 ocr;
763
struct mmc_card *card;
764
765
BUG_ON(!host);
766
WARN_ON(!host->claimed);
767
768
err = mmc_send_io_op_cond(host, 0, &ocr);
769
if (err)
770
return err;
771
772
mmc_attach_bus(host, &mmc_sdio_ops);
773
if (host->ocr_avail_sdio)
774
host->ocr_avail = host->ocr_avail_sdio;
775
776
/*
777
* Sanity check the voltages that the card claims to
778
* support.
779
*/
780
if (ocr & 0x7F) {
781
printk(KERN_WARNING "%s: card claims to support voltages "
782
"below the defined range. These will be ignored.\n",
783
mmc_hostname(host));
784
ocr &= ~0x7F;
785
}
786
787
host->ocr = mmc_select_voltage(host, ocr);
788
789
/*
790
* Can we support the voltage(s) of the card(s)?
791
*/
792
if (!host->ocr) {
793
err = -EINVAL;
794
goto err;
795
}
796
797
/*
798
* Detect and init the card.
799
*/
800
err = mmc_sdio_init_card(host, host->ocr, NULL, 0);
801
if (err)
802
goto err;
803
card = host->card;
804
805
/*
806
* Enable runtime PM only if supported by host+card+board
807
*/
808
if (host->caps & MMC_CAP_POWER_OFF_CARD) {
809
/*
810
* Let runtime PM core know our card is active
811
*/
812
err = pm_runtime_set_active(&card->dev);
813
if (err)
814
goto remove;
815
816
/*
817
* Enable runtime PM for this card
818
*/
819
pm_runtime_enable(&card->dev);
820
}
821
822
/*
823
* The number of functions on the card is encoded inside
824
* the ocr.
825
*/
826
funcs = (ocr & 0x70000000) >> 28;
827
card->sdio_funcs = 0;
828
829
/*
830
* Initialize (but don't add) all present functions.
831
*/
832
for (i = 0; i < funcs; i++, card->sdio_funcs++) {
833
err = sdio_init_func(host->card, i + 1);
834
if (err)
835
goto remove;
836
837
/*
838
* Enable Runtime PM for this func (if supported)
839
*/
840
if (host->caps & MMC_CAP_POWER_OFF_CARD)
841
pm_runtime_enable(&card->sdio_func[i]->dev);
842
}
843
844
/*
845
* First add the card to the driver model...
846
*/
847
mmc_release_host(host);
848
err = mmc_add_card(host->card);
849
if (err)
850
goto remove_added;
851
852
/*
853
* ...then the SDIO functions.
854
*/
855
for (i = 0;i < funcs;i++) {
856
err = sdio_add_func(host->card->sdio_func[i]);
857
if (err)
858
goto remove_added;
859
}
860
861
mmc_claim_host(host);
862
return 0;
863
864
865
remove_added:
866
/* Remove without lock if the device has been added. */
867
mmc_sdio_remove(host);
868
mmc_claim_host(host);
869
remove:
870
/* And with lock if it hasn't been added. */
871
mmc_release_host(host);
872
if (host->card)
873
mmc_sdio_remove(host);
874
mmc_claim_host(host);
875
err:
876
mmc_detach_bus(host);
877
878
printk(KERN_ERR "%s: error %d whilst initialising SDIO card\n",
879
mmc_hostname(host), err);
880
881
return err;
882
}
883
884
885