2ffe1690f9b53267eef6be71e95fc11020726cb1
[firefly-linux-kernel-4.4.55.git] / drivers / mmc / core / sd.c
1 /*
2  *  linux/drivers/mmc/core/sd.c
3  *
4  *  Copyright (C) 2003-2004 Russell King, All Rights Reserved.
5  *  SD support Copyright (C) 2004 Ian Molton, All Rights Reserved.
6  *  Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #include <linux/err.h>
14 #include <linux/slab.h>
15
16 #include <linux/mmc/host.h>
17 #include <linux/mmc/card.h>
18 #include <linux/mmc/mmc.h>
19 #include <linux/mmc/sd.h>
20
21 #include "core.h"
22 #include "bus.h"
23 #include "mmc_ops.h"
24 #include "sd.h"
25 #include "sd_ops.h"
26 #include "host.h"
27
28 static const unsigned int tran_exp[] = {
29         10000,          100000,         1000000,        10000000,
30         0,              0,              0,              0
31 };
32
33 static const unsigned char tran_mant[] = {
34         0,      10,     12,     13,     15,     20,     25,     30,
35         35,     40,     45,     50,     55,     60,     70,     80,
36 };
37
38 static const unsigned int tacc_exp[] = {
39         1,      10,     100,    1000,   10000,  100000, 1000000, 10000000,
40 };
41
42 static const unsigned int tacc_mant[] = {
43         0,      10,     12,     13,     15,     20,     25,     30,
44         35,     40,     45,     50,     55,     60,     70,     80,
45 };
46
47 #define UNSTUFF_BITS(resp,start,size)                                   \
48         ({                                                              \
49                 const int __size = size;                                \
50                 const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
51                 const int __off = 3 - ((start) / 32);                   \
52                 const int __shft = (start) & 31;                        \
53                 u32 __res;                                              \
54                                                                         \
55                 __res = resp[__off] >> __shft;                          \
56                 if (__size + __shft > 32)                               \
57                         __res |= resp[__off-1] << ((32 - __shft) % 32); \
58                 __res & __mask;                                         \
59         })
60
61 /*
62  * Given the decoded CSD structure, decode the raw CID to our CID structure.
63  */
64 void mmc_decode_cid(struct mmc_card *card)
65 {
66         u32 *resp = card->raw_cid;
67
68         memset(&card->cid, 0, sizeof(struct mmc_cid));
69
70         /*
71          * SD doesn't currently have a version field so we will
72          * have to assume we can parse this.
73          */
74         card->cid.manfid                = UNSTUFF_BITS(resp, 120, 8);
75         card->cid.oemid                 = UNSTUFF_BITS(resp, 104, 16);
76         card->cid.prod_name[0]          = UNSTUFF_BITS(resp, 96, 8);
77         card->cid.prod_name[1]          = UNSTUFF_BITS(resp, 88, 8);
78         card->cid.prod_name[2]          = UNSTUFF_BITS(resp, 80, 8);
79         card->cid.prod_name[3]          = UNSTUFF_BITS(resp, 72, 8);
80         card->cid.prod_name[4]          = UNSTUFF_BITS(resp, 64, 8);
81         card->cid.hwrev                 = UNSTUFF_BITS(resp, 60, 4);
82         card->cid.fwrev                 = UNSTUFF_BITS(resp, 56, 4);
83         card->cid.serial                = UNSTUFF_BITS(resp, 24, 32);
84         card->cid.year                  = UNSTUFF_BITS(resp, 12, 8);
85         card->cid.month                 = UNSTUFF_BITS(resp, 8, 4);
86
87         card->cid.year += 2000; /* SD cards year offset */
88 }
89
90 /*
91  * Given a 128-bit response, decode to our card CSD structure.
92  */
93 static int mmc_decode_csd(struct mmc_card *card)
94 {
95         struct mmc_csd *csd = &card->csd;
96         unsigned int e, m, csd_struct;
97         u32 *resp = card->raw_csd;
98
99         csd_struct = UNSTUFF_BITS(resp, 126, 2);
100
101         switch (csd_struct) {
102         case 0:
103                 m = UNSTUFF_BITS(resp, 115, 4);
104                 e = UNSTUFF_BITS(resp, 112, 3);
105                 csd->tacc_ns     = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
106                 csd->tacc_clks   = UNSTUFF_BITS(resp, 104, 8) * 100;
107
108                 m = UNSTUFF_BITS(resp, 99, 4);
109                 e = UNSTUFF_BITS(resp, 96, 3);
110                 csd->max_dtr      = tran_exp[e] * tran_mant[m];
111                 csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
112
113                 e = UNSTUFF_BITS(resp, 47, 3);
114                 m = UNSTUFF_BITS(resp, 62, 12);
115                 csd->capacity     = (1 + m) << (e + 2);
116
117                 csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
118                 csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
119                 csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
120                 csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
121                 csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
122                 csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
123                 csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
124
125                 if (UNSTUFF_BITS(resp, 46, 1)) {
126                         csd->erase_size = 1;
127                 } else if (csd->write_blkbits >= 9) {
128                         csd->erase_size = UNSTUFF_BITS(resp, 39, 7) + 1;
129                         csd->erase_size <<= csd->write_blkbits - 9;
130                 }
131                 break;
132         case 1:
133                 /*
134                  * This is a block-addressed SDHC or SDXC card. Most
135                  * interesting fields are unused and have fixed
136                  * values. To avoid getting tripped by buggy cards,
137                  * we assume those fixed values ourselves.
138                  */
139                 mmc_card_set_blockaddr(card);
140
141                 csd->tacc_ns     = 0; /* Unused */
142                 csd->tacc_clks   = 0; /* Unused */
143
144                 m = UNSTUFF_BITS(resp, 99, 4);
145                 e = UNSTUFF_BITS(resp, 96, 3);
146                 csd->max_dtr      = tran_exp[e] * tran_mant[m];
147                 csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
148                 csd->c_size       = UNSTUFF_BITS(resp, 48, 22);
149
150                 /* SDXC cards have a minimum C_SIZE of 0x00FFFF */
151                 if (csd->c_size >= 0xFFFF)
152                         mmc_card_set_ext_capacity(card);
153
154                 m = UNSTUFF_BITS(resp, 48, 22);
155                 csd->capacity     = (1 + m) << 10;
156
157                 csd->read_blkbits = 9;
158                 csd->read_partial = 0;
159                 csd->write_misalign = 0;
160                 csd->read_misalign = 0;
161                 csd->r2w_factor = 4; /* Unused */
162                 csd->write_blkbits = 9;
163                 csd->write_partial = 0;
164                 csd->erase_size = 1;
165                 break;
166         default:
167                 printk(KERN_ERR "%s: unrecognised CSD structure version %d\n",
168                         mmc_hostname(card->host), csd_struct);
169                 return -EINVAL;
170         }
171
172         card->erase_size = csd->erase_size;
173
174         return 0;
175 }
176
177 /*
178  * Given a 64-bit response, decode to our card SCR structure.
179  */
180 static int mmc_decode_scr(struct mmc_card *card)
181 {
182         struct sd_scr *scr = &card->scr;
183         unsigned int scr_struct;
184         u32 resp[4];
185
186         resp[3] = card->raw_scr[1];
187         resp[2] = card->raw_scr[0];
188
189         scr_struct = UNSTUFF_BITS(resp, 60, 4);
190         if (scr_struct != 0) {
191                 printk(KERN_ERR "%s: unrecognised SCR structure version %d\n",
192                         mmc_hostname(card->host), scr_struct);
193                 return -EINVAL;
194         }
195
196         scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
197         scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
198         if (scr->sda_vsn == SCR_SPEC_VER_2)
199                 /* Check if Physical Layer Spec v3.0 is supported */
200                 scr->sda_spec3 = UNSTUFF_BITS(resp, 47, 1);
201
202         if (UNSTUFF_BITS(resp, 55, 1))
203                 card->erased_byte = 0xFF;
204         else
205                 card->erased_byte = 0x0;
206
207         if (scr->sda_spec3)
208                 scr->cmds = UNSTUFF_BITS(resp, 32, 2);
209         return 0;
210 }
211
212 /*
213  * Fetch and process SD Status register.
214  */
215 static int mmc_read_ssr(struct mmc_card *card)
216 {
217         unsigned int au, es, et, eo;
218         int err, i, max_au;
219         u32 *ssr;
220
221         if (!(card->csd.cmdclass & CCC_APP_SPEC)) {
222                 printk(KERN_WARNING "%s: card lacks mandatory SD Status "
223                         "function.\n", mmc_hostname(card->host));
224                 return 0;
225         }
226
227         ssr = kmalloc(64, GFP_KERNEL);
228         if (!ssr)
229                 return -ENOMEM;
230
231         err = mmc_app_sd_status(card, ssr);
232         if (err) {
233                 printk(KERN_WARNING "%s: problem reading SD Status "
234                         "register.\n", mmc_hostname(card->host));
235                 err = 0;
236                 goto out;
237         }
238
239         for (i = 0; i < 16; i++)
240                 ssr[i] = be32_to_cpu(ssr[i]);
241
242         max_au = card->scr.sda_spec3 ? 0xF : 0x9;
243         /*
244          * UNSTUFF_BITS only works with four u32s so we have to offset the
245          * bitfield positions accordingly.
246          */
247         au = UNSTUFF_BITS(ssr, 428 - 384, 4);
248     //if (au > 0 || au <= 9) {  //Modifyed by xbw at 2013-02-28
249         if (au > 0 && au <= max_au) {
250                 card->ssr.au = 1 << (au + 4);
251                 es = UNSTUFF_BITS(ssr, 408 - 384, 16);
252                 et = UNSTUFF_BITS(ssr, 402 - 384, 6);
253                 eo = UNSTUFF_BITS(ssr, 400 - 384, 2);
254                 if (es && et) {
255                         card->ssr.erase_timeout = (et * 1000) / es;
256                         card->ssr.erase_offset = eo * 1000;
257                 }
258         } else {
259                 printk(KERN_WARNING "%s: SD Status: Invalid Allocation Unit "
260                         "size.\n", mmc_hostname(card->host));
261         }
262 out:
263         kfree(ssr);
264         return err;
265 }
266
267 /*
268  * Fetches and decodes switch information
269  */
270 static int mmc_read_switch(struct mmc_card *card)
271 {
272         int err;
273         u8 *status;
274
275         if (card->scr.sda_vsn < SCR_SPEC_VER_1)
276                 return 0;
277
278         if (!(card->csd.cmdclass & CCC_SWITCH)) {
279                 printk(KERN_WARNING "%s: card lacks mandatory switch "
280                         "function, performance might suffer.\n",
281                         mmc_hostname(card->host));
282                 return 0;
283         }
284
285         err = -EIO;
286
287         status = kmalloc(64, GFP_KERNEL);
288         if (!status) {
289                 printk(KERN_ERR "%s: could not allocate a buffer for "
290                         "switch capabilities.\n",
291                         mmc_hostname(card->host));
292                 return -ENOMEM;
293         }
294
295         /* Find out the supported Bus Speed Modes. */
296     //err = mmc_sd_switch(card, 0, 0, 1, status);
297     err = mmc_sd_switch(card, 0, 0, 0, status);  //Modifyed by xbw at 2013-02-28
298         if (err) {
299                 /*
300                  * If the host or the card can't do the switch,
301                  * fail more gracefully.
302                  */
303                 if (err != -EINVAL && err != -ENOSYS && err != -EFAULT)
304                         goto out;
305
306                 printk(KERN_WARNING "%s: problem reading Bus Speed modes.\n",
307                         mmc_hostname(card->host));
308                 err = 0;
309
310                 goto out;
311         }
312
313         if (status[13] & UHS_SDR50_BUS_SPEED)
314                 card->sw_caps.hs_max_dtr = 50000000;
315
316     //mask the the SD Ver3.0 support,modifyed by xbw at 2012-8-09
317         //if (card->scr.sda_spec3) {
318         if(0) {
319                 card->sw_caps.sd3_bus_mode = status[13];
320
321                 /* Find out Driver Strengths supported by the card */
322                 err = mmc_sd_switch(card, 0, 2, 1, status);
323                 if (err) {
324                         /*
325                          * If the host or the card can't do the switch,
326                          * fail more gracefully.
327                          */
328                         if (err != -EINVAL && err != -ENOSYS && err != -EFAULT)
329                                 goto out;
330
331                         printk(KERN_WARNING "%s: problem reading "
332                                 "Driver Strength.\n",
333                                 mmc_hostname(card->host));
334                         err = 0;
335
336                         goto out;
337                 }
338
339                 card->sw_caps.sd3_drv_type = status[9];
340
341                 /* Find out Current Limits supported by the card */
342                 err = mmc_sd_switch(card, 0, 3, 1, status);
343                 if (err) {
344                         /*
345                          * If the host or the card can't do the switch,
346                          * fail more gracefully.
347                          */
348                         if (err != -EINVAL && err != -ENOSYS && err != -EFAULT)
349                                 goto out;
350
351                         printk(KERN_WARNING "%s: problem reading "
352                                 "Current Limit.\n",
353                                 mmc_hostname(card->host));
354                         err = 0;
355
356                         goto out;
357                 }
358
359                 card->sw_caps.sd3_curr_limit = status[7];
360         }
361
362 out:
363         kfree(status);
364
365         return err;
366 }
367
368 /*
369  * Test if the card supports high-speed mode and, if so, switch to it.
370  */
371 int mmc_sd_switch_hs(struct mmc_card *card)
372 {
373         int err;
374         u8 *status;
375
376         if (card->scr.sda_vsn < SCR_SPEC_VER_1)
377                 return 0;
378
379         if (!(card->csd.cmdclass & CCC_SWITCH))
380                 return 0;
381
382         if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
383                 return 0;
384
385         if (card->sw_caps.hs_max_dtr == 0)
386                 return 0;
387
388         err = -EIO;
389
390         status = kmalloc(64, GFP_KERNEL);
391         if (!status) {
392                 printk(KERN_ERR "%s: could not allocate a buffer for "
393                         "switch capabilities.\n", mmc_hostname(card->host));
394                 return -ENOMEM;
395         }
396
397         err = mmc_sd_switch(card, 1, 0, 1, status);
398         if (err)
399                 goto out;
400
401         if ((status[16] & 0xF) != 1) {
402                 printk(KERN_WARNING "%s: Problem switching card "
403                         "into high-speed mode!\n",
404                         mmc_hostname(card->host));
405                 err = 0;
406         } else {
407                 err = 1;
408         }
409
410 out:
411         kfree(status);
412
413         return err;
414 }
415
416 static int sd_select_driver_type(struct mmc_card *card, u8 *status)
417 {
418         int host_drv_type = 0, card_drv_type = 0;
419         int err;
420
421         /*
422          * If the host doesn't support any of the Driver Types A,C or D,
423          * default Driver Type B is used.
424          */
425         if (!(card->host->caps & (MMC_CAP_DRIVER_TYPE_A | MMC_CAP_DRIVER_TYPE_C
426             | MMC_CAP_DRIVER_TYPE_D)))
427                 return 0;
428
429         if (card->host->caps & MMC_CAP_DRIVER_TYPE_A) {
430                 host_drv_type = MMC_SET_DRIVER_TYPE_A;
431                 if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_A)
432                         card_drv_type = MMC_SET_DRIVER_TYPE_A;
433                 else if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_B)
434                         card_drv_type = MMC_SET_DRIVER_TYPE_B;
435                 else if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_C)
436                         card_drv_type = MMC_SET_DRIVER_TYPE_C;
437         } else if (card->host->caps & MMC_CAP_DRIVER_TYPE_C) {
438                 host_drv_type = MMC_SET_DRIVER_TYPE_C;
439                 if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_C)
440                         card_drv_type = MMC_SET_DRIVER_TYPE_C;
441         } else if (!(card->host->caps & MMC_CAP_DRIVER_TYPE_D)) {
442                 /*
443                  * If we are here, that means only the default driver type
444                  * B is supported by the host.
445                  */
446                 host_drv_type = MMC_SET_DRIVER_TYPE_B;
447                 if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_B)
448                         card_drv_type = MMC_SET_DRIVER_TYPE_B;
449                 else if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_C)
450                         card_drv_type = MMC_SET_DRIVER_TYPE_C;
451         }
452
453         err = mmc_sd_switch(card, 1, 2, card_drv_type, status);
454         if (err)
455                 return err;
456
457         if ((status[15] & 0xF) != card_drv_type) {
458                 printk(KERN_WARNING "%s: Problem setting driver strength!\n",
459                         mmc_hostname(card->host));
460                 return 0;
461         }
462
463         mmc_set_driver_type(card->host, host_drv_type);
464
465         return 0;
466 }
467
468 static int sd_set_bus_speed_mode(struct mmc_card *card, u8 *status)
469 {
470         unsigned int bus_speed = 0, timing = 0;
471         int err;
472
473         /*
474          * If the host doesn't support any of the UHS-I modes, fallback on
475          * default speed.
476          */
477         if (!(card->host->caps & (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
478             MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_DDR50)))
479                 return 0;
480
481         if ((card->host->caps & MMC_CAP_UHS_SDR104) &&
482             (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) {
483                         bus_speed = UHS_SDR104_BUS_SPEED;
484                         timing = MMC_TIMING_UHS_SDR104;
485                         card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
486         } else if ((card->host->caps & MMC_CAP_UHS_DDR50) &&
487                    (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) {
488                         bus_speed = UHS_DDR50_BUS_SPEED;
489                         timing = MMC_TIMING_UHS_DDR50;
490                         card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
491         } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
492                     MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode &
493                     SD_MODE_UHS_SDR50)) {
494                         bus_speed = UHS_SDR50_BUS_SPEED;
495                         timing = MMC_TIMING_UHS_SDR50;
496                         card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
497         } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
498                     MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) &&
499                    (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) {
500                         bus_speed = UHS_SDR25_BUS_SPEED;
501                         timing = MMC_TIMING_UHS_SDR25;
502                         card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
503         } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
504                     MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 |
505                     MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode &
506                     SD_MODE_UHS_SDR12)) {
507                         bus_speed = UHS_SDR12_BUS_SPEED;
508                         timing = MMC_TIMING_UHS_SDR12;
509                         card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
510         }
511
512         card->sd_bus_speed = bus_speed;
513         err = mmc_sd_switch(card, 1, 0, bus_speed, status);
514         if (err)
515                 return err;
516
517         if ((status[16] & 0xF) != bus_speed)
518                 printk(KERN_WARNING "%s: Problem setting bus speed mode!\n",
519                         mmc_hostname(card->host));
520         else {
521                 mmc_set_timing(card->host, timing);
522                 mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr);
523         }
524
525         return 0;
526 }
527
528 static int sd_set_current_limit(struct mmc_card *card, u8 *status)
529 {
530         int current_limit = 0;
531         int err;
532
533         /*
534          * Current limit switch is only defined for SDR50, SDR104, and DDR50
535          * bus speed modes. For other bus speed modes, we set the default
536          * current limit of 200mA.
537          */
538         if ((card->sd_bus_speed == UHS_SDR50_BUS_SPEED) ||
539             (card->sd_bus_speed == UHS_SDR104_BUS_SPEED) ||
540             (card->sd_bus_speed == UHS_DDR50_BUS_SPEED)) {
541                 if (card->host->caps & MMC_CAP_MAX_CURRENT_800) {
542                         if (card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_800)
543                                 current_limit = SD_SET_CURRENT_LIMIT_800;
544                         else if (card->sw_caps.sd3_curr_limit &
545                                         SD_MAX_CURRENT_600)
546                                 current_limit = SD_SET_CURRENT_LIMIT_600;
547                         else if (card->sw_caps.sd3_curr_limit &
548                                         SD_MAX_CURRENT_400)
549                                 current_limit = SD_SET_CURRENT_LIMIT_400;
550                         else if (card->sw_caps.sd3_curr_limit &
551                                         SD_MAX_CURRENT_200)
552                                 current_limit = SD_SET_CURRENT_LIMIT_200;
553                 } else if (card->host->caps & MMC_CAP_MAX_CURRENT_600) {
554                         if (card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_600)
555                                 current_limit = SD_SET_CURRENT_LIMIT_600;
556                         else if (card->sw_caps.sd3_curr_limit &
557                                         SD_MAX_CURRENT_400)
558                                 current_limit = SD_SET_CURRENT_LIMIT_400;
559                         else if (card->sw_caps.sd3_curr_limit &
560                                         SD_MAX_CURRENT_200)
561                                 current_limit = SD_SET_CURRENT_LIMIT_200;
562                 } else if (card->host->caps & MMC_CAP_MAX_CURRENT_400) {
563                         if (card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_400)
564                                 current_limit = SD_SET_CURRENT_LIMIT_400;
565                         else if (card->sw_caps.sd3_curr_limit &
566                                         SD_MAX_CURRENT_200)
567                                 current_limit = SD_SET_CURRENT_LIMIT_200;
568                 } else if (card->host->caps & MMC_CAP_MAX_CURRENT_200) {
569                         if (card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_200)
570                                 current_limit = SD_SET_CURRENT_LIMIT_200;
571                 }
572         } else
573                 current_limit = SD_SET_CURRENT_LIMIT_200;
574
575         err = mmc_sd_switch(card, 1, 3, current_limit, status);
576         if (err)
577                 return err;
578
579         if (((status[15] >> 4) & 0x0F) != current_limit)
580                 printk(KERN_WARNING "%s: Problem setting current limit!\n",
581                         mmc_hostname(card->host));
582
583         return 0;
584 }
585
586 /*
587  * UHS-I specific initialization procedure
588  */
589 static int mmc_sd_init_uhs_card(struct mmc_card *card)
590 {
591         int err;
592         u8 *status;
593
594         if (!card->scr.sda_spec3)
595                 return 0;
596
597         if (!(card->csd.cmdclass & CCC_SWITCH))
598                 return 0;
599
600         status = kmalloc(64, GFP_KERNEL);
601         if (!status) {
602                 printk(KERN_ERR "%s: could not allocate a buffer for "
603                         "switch capabilities.\n", mmc_hostname(card->host));
604                 return -ENOMEM;
605         }
606
607         /* Set 4-bit bus width */
608         if ((card->host->caps & MMC_CAP_4_BIT_DATA) &&
609             (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
610                 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
611                 if (err)
612                         goto out;
613
614                 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
615         }
616
617         /* Set the driver strength for the card */
618         err = sd_select_driver_type(card, status);
619         if (err)
620                 goto out;
621
622         /* Set bus speed mode of the card */
623         err = sd_set_bus_speed_mode(card, status);
624         if (err)
625                 goto out;
626
627         /* Set current limit for the card */
628         err = sd_set_current_limit(card, status);
629         if (err)
630                 goto out;
631
632         /* SPI mode doesn't define CMD19 */
633         if (!mmc_host_is_spi(card->host) && card->host->ops->execute_tuning &&
634             (card->sd_bus_speed == UHS_SDR50_BUS_SPEED ||
635              card->sd_bus_speed == UHS_SDR104_BUS_SPEED))
636
637             mmc_host_clk_hold(card->host);
638                 err = card->host->ops->execute_tuning(card->host,MMC_SEND_TUNING_BLOCK);
639
640 out:
641         kfree(status);
642
643         return err;
644 }
645
646 MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
647         card->raw_cid[2], card->raw_cid[3]);
648 MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
649         card->raw_csd[2], card->raw_csd[3]);
650 MMC_DEV_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]);
651 MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
652 MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
653 MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
654 MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev);
655 MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
656 MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
657 MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
658 MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
659 MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
660
661
662 static struct attribute *sd_std_attrs[] = {
663         &dev_attr_cid.attr,
664         &dev_attr_csd.attr,
665         &dev_attr_scr.attr,
666         &dev_attr_date.attr,
667         &dev_attr_erase_size.attr,
668         &dev_attr_preferred_erase_size.attr,
669         &dev_attr_fwrev.attr,
670         &dev_attr_hwrev.attr,
671         &dev_attr_manfid.attr,
672         &dev_attr_name.attr,
673         &dev_attr_oemid.attr,
674         &dev_attr_serial.attr,
675         NULL,
676 };
677
678 static struct attribute_group sd_std_attr_group = {
679         .attrs = sd_std_attrs,
680 };
681
682 static const struct attribute_group *sd_attr_groups[] = {
683         &sd_std_attr_group,
684         NULL,
685 };
686
687 struct device_type sd_type = {
688         .groups = sd_attr_groups,
689 };
690
691 /*
692  * Fetch CID from card.
693  */
694 int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr)
695 {
696         int err;
697
698         /*
699          * Since we're changing the OCR value, we seem to
700          * need to tell some cards to go back to the idle
701          * state.  We wait 1ms to give cards time to
702          * respond.
703          */
704         mmc_go_idle(host);
705
706         /*
707          * If SD_SEND_IF_COND indicates an SD 2.0
708          * compliant card and we should set bit 30
709          * of the ocr to indicate that we can handle
710          * block-addressed SDHC cards.
711          */
712         err = mmc_send_if_cond(host, ocr);
713         if (!err)
714                 ocr |= SD_OCR_CCS;
715
716         /*
717          * If the host supports one of UHS-I modes, request the card
718          * to switch to 1.8V signaling level.
719          */
720         if (host->caps & (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
721             MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_DDR50))
722                 ocr |= SD_OCR_S18R;
723
724         /* If the host can supply more than 150mA, XPC should be set to 1. */
725         if (host->caps & (MMC_CAP_SET_XPC_330 | MMC_CAP_SET_XPC_300 |
726             MMC_CAP_SET_XPC_180))
727                 ocr |= SD_OCR_XPC;
728
729 try_again:
730         err = mmc_send_app_op_cond(host, ocr, rocr);
731         if (err) {
732 #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
733             printk(KERN_WARNING "%s..%d..  ====*Identify the card as SD , but OCR error, so fail to initialize.[%s]\n", \
734                 __FUNCTION__, __LINE__, mmc_hostname(host));
735 #endif
736                 return err;
737         }
738
739         /*
740          * In case CCS and S18A in the response is set, start Signal Voltage
741          * Switch procedure. SPI mode doesn't support CMD11.
742          */
743         if (!mmc_host_is_spi(host) && rocr &&
744            ((*rocr & 0x41000000) == 0x41000000)) {
745                 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180, true);
746                 if (err) {
747                         ocr &= ~SD_OCR_S18R;
748                         goto try_again;
749                 }
750         }
751
752         if (mmc_host_is_spi(host))
753                 err = mmc_send_cid(host, cid);
754         else
755                 err = mmc_all_send_cid(host, cid);
756
757         return err;
758 }
759
760 int mmc_sd_get_csd(struct mmc_host *host, struct mmc_card *card)
761 {
762         int err;
763
764         /*
765          * Fetch CSD from card.
766          */
767         err = mmc_send_csd(card, card->raw_csd);
768         if (err)
769                 return err;
770
771         err = mmc_decode_csd(card);
772         if (err)
773                 return err;
774
775         return 0;
776 }
777
778 int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card,
779         bool reinit)
780 {
781         int err;
782 #ifdef CONFIG_MMC_PARANOID_SD_INIT
783         int retries;
784 #endif
785
786         if (!reinit) {
787                 /*
788                  * Fetch SCR from card.
789                  */
790                 err = mmc_app_send_scr(card, card->raw_scr);
791                 if (err)
792                         return err;
793
794                 err = mmc_decode_scr(card);
795                 if (err)
796                         return err;
797
798                 /*
799                  * Fetch and process SD Status register.
800                  */
801                 err = mmc_read_ssr(card);
802                 if (err)
803                         return err;
804
805                 /* Erase init depends on CSD and SSR */
806                 mmc_init_erase(card);
807
808                 /*
809                  * Fetch switch information from card.
810                  */
811 #ifdef CONFIG_MMC_PARANOID_SD_INIT
812                 for (retries = 1; retries <= 3; retries++) {
813                         err = mmc_read_switch(card);
814                         if (!err) {
815                                 if (retries > 1) {
816                                         printk(KERN_WARNING
817                                                "%s: recovered\n", 
818                                                mmc_hostname(host));
819                                 }
820                                 break;
821                         } else {
822                                 printk(KERN_WARNING
823                                        "%s: read switch failed (attempt %d)\n",
824                                        mmc_hostname(host), retries);
825
826 #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
827                                 if(0 == host->re_initialized_flags)
828                                 {
829                                          break; //Added by xbw at 2011-06-21
830                                 }
831 #endif
832                         }
833                 }
834 #else
835                 err = mmc_read_switch(card);
836 #endif
837
838                 if (err)
839                         return err;
840         }
841
842         /*
843          * For SPI, enable CRC as appropriate.
844          * This CRC enable is located AFTER the reading of the
845          * card registers because some SDHC cards are not able
846          * to provide valid CRCs for non-512-byte blocks.
847          */
848         if (mmc_host_is_spi(host)) {
849                 err = mmc_spi_set_crc(host, use_spi_crc);
850                 if (err)
851                         return err;
852         }
853
854         /*
855          * Check if read-only switch is active.
856          */
857         if (!reinit) {
858                 int ro = -1;
859
860                 if (host->ops->get_ro)
861                         ro = host->ops->get_ro(host);
862
863                 if (ro < 0) {
864                         printk(KERN_WARNING "%s: host does not "
865                                 "support reading read-only "
866                                 "switch. assuming write-enable.\n",
867                                 mmc_hostname(host));
868                 } else if (ro > 0) {
869                         mmc_card_set_readonly(card);
870                 }
871         }
872
873         return 0;
874 }
875
876 unsigned mmc_sd_get_max_clock(struct mmc_card *card)
877 {
878         unsigned max_dtr = (unsigned int)-1;
879
880         if (mmc_card_highspeed(card)) {
881                 if (max_dtr > card->sw_caps.hs_max_dtr)
882                         max_dtr = card->sw_caps.hs_max_dtr;
883         } else if (max_dtr > card->csd.max_dtr) {
884
885 #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
886         //in order to expand the compatibility of card. Added by xbw@2011-03-21
887             card->csd.max_dtr = (card->csd.max_dtr > SD_FPP_FREQ) ? SD_FPP_FREQ : (card->csd.max_dtr); 
888 #endif
889                 max_dtr = card->csd.max_dtr;
890         }
891
892         return max_dtr;
893 }
894
895 void mmc_sd_go_highspeed(struct mmc_card *card)
896 {
897         mmc_card_set_highspeed(card);
898         mmc_set_timing(card->host, MMC_TIMING_SD_HS);
899 }
900
901 /*
902  * Handle the detection and initialisation of a card.
903  *
904  * In the case of a resume, "oldcard" will contain the card
905  * we're trying to reinitialise.
906  */
907 static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
908         struct mmc_card *oldcard)
909 {
910         struct mmc_card *card;
911         int err;
912         u32 cid[4];
913         u32 rocr = 0;
914
915         BUG_ON(!host);
916         WARN_ON(!host->claimed);
917
918         err = mmc_sd_get_cid(host, ocr, cid, &rocr);
919         if (err)
920                 return err;
921
922         if (oldcard) {
923                 if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
924                         return -ENOENT;
925
926                 card = oldcard;
927         } else {
928                 /*
929                  * Allocate card structure.
930                  */
931                 card = mmc_alloc_card(host, &sd_type);
932                 if (IS_ERR(card))
933                         return PTR_ERR(card);
934
935                 card->type = MMC_TYPE_SD;
936                 memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
937         }
938
939         /*
940          * For native busses:  get card RCA and quit open drain mode.
941          */
942         if (!mmc_host_is_spi(host)) {
943                 err = mmc_send_relative_addr(host, &card->rca);
944                 if (err)
945                         return err;
946
947                 mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
948         }
949
950         if (!oldcard) {
951                 err = mmc_sd_get_csd(host, card);
952                 if (err)
953                         return err;
954
955                 mmc_decode_cid(card);
956         }
957
958         /*
959          * Select card, as all following commands rely on that.
960          */
961         if (!mmc_host_is_spi(host)) {
962                 err = mmc_select_card(card);
963                 if (err)
964                         return err;
965         }
966
967         err = mmc_sd_setup_card(host, card, oldcard != NULL);
968         if (err)
969                 goto free_card;
970
971         /* Initialization sequence for UHS-I cards */
972         if (rocr & SD_ROCR_S18A) {
973                 err = mmc_sd_init_uhs_card(card);
974                 if (err)
975                         goto free_card;
976
977                 /* Card is an ultra-high-speed card */
978                 mmc_sd_card_set_uhs(card);
979
980                 /*
981                  * Since initialization is now complete, enable preset
982                  * value registers for UHS-I cards.
983                  */
984                 if (host->ops->enable_preset_value)
985                         host->ops->enable_preset_value(host, true);
986         } else {
987                 /*
988                  * Attempt to change to high-speed (if supported)
989                  */
990                 err = mmc_sd_switch_hs(card);
991                 if (err > 0)
992                         mmc_sd_go_highspeed(card);
993                 else if (err)
994                         goto free_card;
995
996                 /*
997                  * Set bus speed.
998                  */
999                 mmc_set_clock(host, mmc_sd_get_max_clock(card));
1000
1001                 /*
1002                  * Switch to wider bus (if supported).
1003                  */
1004                 if ((host->caps & MMC_CAP_4_BIT_DATA) &&
1005                         (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
1006                         err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
1007                         if (err)
1008                                 goto free_card;
1009
1010                         mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
1011                 }
1012         }
1013
1014         host->card = card;
1015         return 0;
1016
1017 free_card:
1018         if (!oldcard)
1019                 mmc_remove_card(card);
1020
1021         return err;
1022 }
1023
1024 /*
1025  * Host is being removed. Free up the current card.
1026  */
1027 static void mmc_sd_remove(struct mmc_host *host)
1028 {
1029         BUG_ON(!host);
1030         BUG_ON(!host->card);
1031
1032         mmc_remove_card(host->card);
1033         host->card = NULL;
1034 }
1035
1036 /*
1037  * Card detection callback from host.
1038  */
1039 static void mmc_sd_detect(struct mmc_host *host)
1040 {
1041         int err = 0;
1042 #ifdef CONFIG_MMC_PARANOID_SD_INIT
1043         int retries = 5;
1044 #endif
1045
1046         BUG_ON(!host);
1047         BUG_ON(!host->card);
1048        
1049         mmc_claim_host(host);
1050
1051         /*
1052          * Just check if our card has been removed.
1053          */
1054 #ifdef CONFIG_MMC_PARANOID_SD_INIT
1055         while(retries) {
1056                 err = mmc_send_status(host->card, NULL);
1057                 if (err) {
1058                         retries--;
1059
1060 #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1061                   if(0 == host->re_initialized_flags)
1062                         {
1063                                  retries = 0;
1064                                  break; //Added by xbw at 2011-06-21
1065                         }
1066 #endif
1067
1068                         udelay(5);
1069                         continue;
1070                 }
1071                 break;
1072         }
1073         if (!retries) {
1074                 printk(KERN_ERR "%s(%s): Unable to re-detect card (%d)\n",
1075                        __func__, mmc_hostname(host), err);
1076         }
1077 #else
1078         err = mmc_send_status(host->card, NULL);
1079 #endif
1080         mmc_release_host(host);
1081
1082         if (err) {
1083                 mmc_sd_remove(host);
1084
1085                 mmc_claim_host(host);
1086                 mmc_detach_bus(host);
1087                 mmc_power_off(host);
1088                 mmc_release_host(host);
1089         }
1090 }
1091
1092 /*
1093  * Suspend callback from host.
1094  */
1095 static int mmc_sd_suspend(struct mmc_host *host)
1096 {
1097         BUG_ON(!host);
1098         BUG_ON(!host->card);
1099
1100         mmc_claim_host(host);
1101         if (!mmc_host_is_spi(host))
1102                 mmc_deselect_cards(host);
1103         host->card->state &= ~MMC_STATE_HIGHSPEED;
1104         mmc_release_host(host);
1105
1106         return 0;
1107 }
1108
1109 /*
1110  * Resume callback from host.
1111  *
1112  * This function tries to determine if the same card is still present
1113  * and, if so, restore all state to it.
1114  */
1115 static int mmc_sd_resume(struct mmc_host *host)
1116 {
1117         int err;
1118 #ifdef CONFIG_MMC_PARANOID_SD_INIT
1119         int retries;
1120 #endif
1121
1122         BUG_ON(!host);
1123         BUG_ON(!host->card);
1124
1125         mmc_claim_host(host);
1126 #ifdef CONFIG_MMC_PARANOID_SD_INIT
1127         retries = 5;
1128         while (retries) {
1129                 err = mmc_sd_init_card(host, host->ocr, host->card);
1130
1131                 if (err) {
1132                         printk(KERN_ERR "%s: Re-init card rc = %d (retries = %d)\n",
1133                                mmc_hostname(host), err, retries);
1134                         mdelay(5);
1135                         retries--;
1136
1137 #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1138                         if(0 == host->re_initialized_flags)
1139                         {
1140                                  break; //Added by xbw at 2011-06-21
1141                         }
1142 #endif
1143                         continue;
1144                 }
1145                 break;
1146         }
1147 #else
1148         err = mmc_sd_init_card(host, host->ocr, host->card);
1149 #endif
1150         mmc_release_host(host);
1151
1152         return err;
1153 }
1154
1155 static int mmc_sd_power_restore(struct mmc_host *host)
1156 {
1157         int ret;
1158
1159         host->card->state &= ~MMC_STATE_HIGHSPEED;
1160         mmc_claim_host(host);
1161         ret = mmc_sd_init_card(host, host->ocr, host->card);
1162         mmc_release_host(host);
1163
1164         return ret;
1165 }
1166
1167 static const struct mmc_bus_ops mmc_sd_ops = {
1168         .remove = mmc_sd_remove,
1169         .detect = mmc_sd_detect,
1170         .suspend = NULL,
1171         .resume = NULL,
1172         .power_restore = mmc_sd_power_restore,
1173 };
1174
1175 static const struct mmc_bus_ops mmc_sd_ops_unsafe = {
1176         .remove = mmc_sd_remove,
1177         .detect = mmc_sd_detect,
1178         .suspend = mmc_sd_suspend,
1179         .resume = mmc_sd_resume,
1180         .power_restore = mmc_sd_power_restore,
1181 };
1182
1183 static void mmc_sd_attach_bus_ops(struct mmc_host *host)
1184 {
1185         const struct mmc_bus_ops *bus_ops;
1186
1187         if (!mmc_card_is_removable(host))
1188                 bus_ops = &mmc_sd_ops_unsafe;
1189         else
1190                 bus_ops = &mmc_sd_ops;
1191         mmc_attach_bus(host, bus_ops);
1192 }
1193
1194 /*
1195  * Starting point for SD card init.
1196  */
1197 int mmc_attach_sd(struct mmc_host *host)
1198 {
1199         int err;
1200         u32 ocr;
1201 #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1202         int retry_times = 3;
1203 #endif
1204
1205 #ifdef CONFIG_MMC_PARANOID_SD_INIT
1206         int retries;
1207 #endif
1208
1209         BUG_ON(!host);
1210         WARN_ON(!host->claimed);
1211
1212         /* Make sure we are at 3.3V signalling voltage */
1213         err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, false);
1214         if (err)
1215                 return err;
1216
1217         /* Disable preset value enable if already set since last time */
1218         if (host->ops->enable_preset_value)
1219                 host->ops->enable_preset_value(host, false);
1220
1221         err = mmc_send_app_op_cond(host, 0, &ocr);
1222 #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)       
1223         if (err)
1224                 return 0xFF;//return err; Modifyed by xbw at 2011-11-17
1225                 
1226     printk(KERN_INFO "\n%s..%d..  ===== Begin to identify card as SD-card. [%s]\n",\
1227         __FUNCTION__, __LINE__, mmc_hostname(host));
1228 #else
1229         if (err)
1230                 return err;
1231 #endif
1232         mmc_sd_attach_bus_ops(host);
1233         if (host->ocr_avail_sd)
1234                 host->ocr_avail = host->ocr_avail_sd;
1235
1236         /*
1237          * We need to get OCR a different way for SPI.
1238          */
1239         if (mmc_host_is_spi(host)) {
1240                 mmc_go_idle(host);
1241
1242                 err = mmc_spi_read_ocr(host, 0, &ocr);
1243                 if (err)
1244                         goto err;
1245         }
1246
1247         /*
1248          * Sanity check the voltages that the card claims to
1249          * support.
1250          */
1251         if (ocr & 0x7F) {
1252                 printk(KERN_WARNING "%s: card claims to support voltages "
1253                        "below the defined range. These will be ignored.\n",
1254                        mmc_hostname(host));
1255                 ocr &= ~0x7F;
1256         }
1257
1258         if ((ocr & MMC_VDD_165_195) &&
1259             !(host->ocr_avail_sd & MMC_VDD_165_195)) {
1260                 printk(KERN_WARNING "%s: SD card claims to support the "
1261                        "incompletely defined 'low voltage range'. This "
1262                        "will be ignored.\n", mmc_hostname(host));
1263                 ocr &= ~MMC_VDD_165_195;
1264         }
1265
1266         host->ocr = mmc_select_voltage(host, ocr);
1267
1268         /*
1269          * Can we support the voltage(s) of the card(s)?
1270          */
1271         if (!host->ocr) {
1272                 err = -EINVAL;
1273                 goto err;
1274         }
1275
1276         /*
1277          * Detect and init the card.
1278          */
1279 #ifdef CONFIG_MMC_PARANOID_SD_INIT
1280         retries = 5;
1281         while (retries) {
1282                 err = mmc_sd_init_card(host, host->ocr, NULL);
1283                 if (err) {
1284                         retries--;
1285
1286         #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1287                         if(0 == host->re_initialized_flags)
1288                         {
1289                                  retries = 0;
1290                                  break; //Added by xbw at 2011-06-21
1291                         }
1292         #endif
1293                         continue;
1294                 }
1295                 break;
1296         }
1297
1298         if (!retries) {
1299                 printk(KERN_ERR "%s: mmc_sd_init_card() failure (err = %d)\n",
1300                        mmc_hostname(host), err);
1301                 goto err;
1302         }
1303 #else
1304         err = mmc_sd_init_card(host, host->ocr, NULL);
1305         if (err)
1306                 goto err;
1307 #endif
1308
1309         mmc_release_host(host);
1310
1311 #if defined(CONFIG_SDMMC_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1312 //modifyed by xbw at 2011--04-11
1313 Retry_add:
1314         err = mmc_add_card(host->card);
1315         mmc_claim_host(host);
1316         if (err)
1317         {
1318             //retry add the card; Added by xbw
1319         if((--retry_times >= 0))
1320         {        
1321             printk(KERN_WARNING "\n%s..%s..%d   ****error in add partition, so retry.  [%s]\n",__FUNCTION__,__FILE__,__LINE__, mmc_hostname(host));   
1322             /* sleep some time */
1323             set_current_state(TASK_INTERRUPTIBLE);
1324             schedule_timeout(HZ/2);
1325             
1326             goto Retry_add;
1327         }
1328
1329                 goto remove_card;
1330     
1331         }
1332 #else
1333         err = mmc_add_card(host->card);
1334         mmc_claim_host(host);
1335         if (err)
1336                 goto remove_card;
1337 #endif
1338
1339         return 0;
1340
1341 remove_card:
1342         mmc_release_host(host);
1343         mmc_remove_card(host->card);
1344         host->card = NULL;
1345         mmc_claim_host(host);
1346 err:
1347         mmc_detach_bus(host);
1348
1349         printk(KERN_ERR "%s: error %d whilst initialising SD card\n",
1350                 mmc_hostname(host), err);
1351
1352         return err;
1353 }
1354