[kernel] fix yaffs build failure on 2.6.28.2 (thanks to Alexandros C. Couloumbis...
[openwrt.git] / target / linux / generic-2.6 / patches-2.6.23 / 300-add-mmc-spi-driver.patch
1 This is a port of the MMC-SPI driver from 2.6.24.3
2 --mb
3
4
5 --- a/drivers/mmc/host/Kconfig
6 +++ b/drivers/mmc/host/Kconfig
7 @@ -100,3 +100,16 @@
8            To compile this driver as a module, choose M here: the
9           module will be called tifm_sd.
10  
11 +config MMC_SPI
12 +       tristate "MMC/SD over SPI (EXPERIMENTAL)"
13 +       depends on MMC && SPI_MASTER && !HIGHMEM && EXPERIMENTAL
14 +       select CRC7
15 +       select CRC_ITU_T
16 +       help
17 +         Some systems accss MMC/SD cards using a SPI controller instead of
18 +         using a "native" MMC/SD controller.  This has a disadvantage of
19 +         being relatively high overhead, but a compensating advantage of
20 +         working on many systems without dedicated MMC/SD controllers.
21 +
22 +         If unsure, or if your system has no SPI master driver, say N.
23 +
24 --- a/drivers/mmc/host/Makefile
25 +++ b/drivers/mmc/host/Makefile
26 @@ -15,4 +15,5 @@
27  obj-$(CONFIG_MMC_OMAP)         += omap.o
28  obj-$(CONFIG_MMC_AT91)         += at91_mci.o
29  obj-$(CONFIG_MMC_TIFM_SD)      += tifm_sd.o
30 +obj-$(CONFIG_MMC_SPI)          += mmc_spi.o
31  
32 --- /dev/null
33 +++ b/drivers/mmc/host/mmc_spi.c
34 @@ -0,0 +1,1419 @@
35 +/*
36 + * mmc_spi.c - Access SD/MMC cards through SPI master controllers
37 + *
38 + * (C) Copyright 2005, Intec Automation,
39 + *             Mike Lavender (mike@steroidmicros)
40 + * (C) Copyright 2006-2007, David Brownell
41 + * (C) Copyright 2007, Axis Communications,
42 + *             Hans-Peter Nilsson (hp@axis.com)
43 + * (C) Copyright 2007, ATRON electronic GmbH,
44 + *             Jan Nikitenko <jan.nikitenko@gmail.com>
45 + *
46 + *
47 + * This program is free software; you can redistribute it and/or modify
48 + * it under the terms of the GNU General Public License as published by
49 + * the Free Software Foundation; either version 2 of the License, or
50 + * (at your option) any later version.
51 + *
52 + * This program is distributed in the hope that it will be useful,
53 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
54 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
55 + * GNU General Public License for more details.
56 + *
57 + * You should have received a copy of the GNU General Public License
58 + * along with this program; if not, write to the Free Software
59 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
60 + */
61 +#include <linux/hrtimer.h>
62 +#include <linux/delay.h>
63 +#include <linux/bio.h>
64 +#include <linux/dma-mapping.h>
65 +#include <linux/crc7.h>
66 +#include <linux/crc-itu-t.h>
67 +#include <linux/scatterlist.h>
68 +
69 +#include <linux/mmc/host.h>
70 +#include <linux/mmc/mmc.h>             /* for R1_SPI_* bit values */
71 +
72 +#include <linux/spi/spi.h>
73 +#include <linux/spi/mmc_spi.h>
74 +
75 +#include <asm/unaligned.h>
76 +
77 +
78 +#define sg_page(sg)    (sg)->page
79 +
80 +
81 +/* NOTES:
82 + *
83 + * - For now, we won't try to interoperate with a real mmc/sd/sdio
84 + *   controller, although some of them do have hardware support for
85 + *   SPI protocol.  The main reason for such configs would be mmc-ish
86 + *   cards like DataFlash, which don't support that "native" protocol.
87 + *
88 + *   We don't have a "DataFlash/MMC/SD/SDIO card slot" abstraction to
89 + *   switch between driver stacks, and in any case if "native" mode
90 + *   is available, it will be faster and hence preferable.
91 + *
92 + * - MMC depends on a different chipselect management policy than the
93 + *   SPI interface currently supports for shared bus segments:  it needs
94 + *   to issue multiple spi_message requests with the chipselect active,
95 + *   using the results of one message to decide the next one to issue.
96 + *
97 + *   Pending updates to the programming interface, this driver expects
98 + *   that it not share the bus with other drivers (precluding conflicts).
99 + *
100 + * - We tell the controller to keep the chipselect active from the
101 + *   beginning of an mmc_host_ops.request until the end.  So beware
102 + *   of SPI controller drivers that mis-handle the cs_change flag!
103 + *
104 + *   However, many cards seem OK with chipselect flapping up/down
105 + *   during that time ... at least on unshared bus segments.
106 + */
107 +
108 +
109 +/*
110 + * Local protocol constants, internal to data block protocols.
111 + */
112 +
113 +/* Response tokens used to ack each block written: */
114 +#define SPI_MMC_RESPONSE_CODE(x)       ((x) & 0x1f)
115 +#define SPI_RESPONSE_ACCEPTED          ((2 << 1)|1)
116 +#define SPI_RESPONSE_CRC_ERR           ((5 << 1)|1)
117 +#define SPI_RESPONSE_WRITE_ERR         ((6 << 1)|1)
118 +
119 +/* Read and write blocks start with these tokens and end with crc;
120 + * on error, read tokens act like a subset of R2_SPI_* values.
121 + */
122 +#define SPI_TOKEN_SINGLE       0xfe    /* single block r/w, multiblock read */
123 +#define SPI_TOKEN_MULTI_WRITE  0xfc    /* multiblock write */
124 +#define SPI_TOKEN_STOP_TRAN    0xfd    /* terminate multiblock write */
125 +
126 +#define MMC_SPI_BLOCKSIZE      512
127 +
128 +
129 +/* These fixed timeouts come from the latest SD specs, which say to ignore
130 + * the CSD values.  The R1B value is for card erase (e.g. the "I forgot the
131 + * card's password" scenario); it's mostly applied to STOP_TRANSMISSION after
132 + * reads which takes nowhere near that long.  Older cards may be able to use
133 + * shorter timeouts ... but why bother?
134 + */
135 +#define readblock_timeout      ktime_set(0, 100 * 1000 * 1000)
136 +#define writeblock_timeout     ktime_set(0, 250 * 1000 * 1000)
137 +#define r1b_timeout            ktime_set(3, 0)
138 +
139 +
140 +/****************************************************************************/
141 +
142 +/*
143 + * Local Data Structures
144 + */
145 +
146 +/* "scratch" is per-{command,block} data exchanged with the card */
147 +struct scratch {
148 +       u8                      status[29];
149 +       u8                      data_token;
150 +       __be16                  crc_val;
151 +};
152 +
153 +struct mmc_spi_host {
154 +       struct mmc_host         *mmc;
155 +       struct spi_device       *spi;
156 +
157 +       unsigned char           power_mode;
158 +       u16                     powerup_msecs;
159 +
160 +       struct mmc_spi_platform_data    *pdata;
161 +
162 +       /* for bulk data transfers */
163 +       struct spi_transfer     token, t, crc, early_status;
164 +       struct spi_message      m;
165 +
166 +       /* for status readback */
167 +       struct spi_transfer     status;
168 +       struct spi_message      readback;
169 +
170 +       /* underlying DMA-aware controller, or null */
171 +       struct device           *dma_dev;
172 +
173 +       /* buffer used for commands and for message "overhead" */
174 +       struct scratch          *data;
175 +       dma_addr_t              data_dma;
176 +
177 +       /* Specs say to write ones most of the time, even when the card
178 +        * has no need to read its input data; and many cards won't care.
179 +        * This is our source of those ones.
180 +        */
181 +       void                    *ones;
182 +       dma_addr_t              ones_dma;
183 +};
184 +
185 +
186 +/****************************************************************************/
187 +
188 +/*
189 + * MMC-over-SPI protocol glue, used by the MMC stack interface
190 + */
191 +
192 +static inline int mmc_cs_off(struct mmc_spi_host *host)
193 +{
194 +       /* chipselect will always be inactive after setup() */
195 +       return spi_setup(host->spi);
196 +}
197 +
198 +static int
199 +mmc_spi_readbytes(struct mmc_spi_host *host, unsigned len)
200 +{
201 +       int status;
202 +
203 +       if (len > sizeof(*host->data)) {
204 +               WARN_ON(1);
205 +               return -EIO;
206 +       }
207 +
208 +       host->status.len = len;
209 +
210 +       if (host->dma_dev)
211 +               dma_sync_single_for_device(host->dma_dev,
212 +                               host->data_dma, sizeof(*host->data),
213 +                               DMA_FROM_DEVICE);
214 +
215 +       status = spi_sync(host->spi, &host->readback);
216 +
217 +       if (host->dma_dev)
218 +               dma_sync_single_for_cpu(host->dma_dev,
219 +                               host->data_dma, sizeof(*host->data),
220 +                               DMA_FROM_DEVICE);
221 +
222 +       return status;
223 +}
224 +
225 +static int
226 +mmc_spi_skip(struct mmc_spi_host *host, ktime_t timeout, unsigned n, u8 byte)
227 +{
228 +       u8              *cp = host->data->status;
229 +
230 +       timeout = ktime_add(timeout, ktime_get());
231 +
232 +       while (1) {
233 +               int             status;
234 +               unsigned        i;
235 +
236 +               status = mmc_spi_readbytes(host, n);
237 +               if (status < 0)
238 +                       return status;
239 +
240 +               for (i = 0; i < n; i++) {
241 +                       if (cp[i] != byte)
242 +                               return cp[i];
243 +               }
244 +
245 +               /* REVISIT investigate msleep() to avoid busy-wait I/O
246 +                * in at least some cases.
247 +                */
248 +               if (ktime_to_ns(ktime_sub(ktime_get(), timeout)) > 0)
249 +                       break;
250 +       }
251 +       return -ETIMEDOUT;
252 +}
253 +
254 +static inline int
255 +mmc_spi_wait_unbusy(struct mmc_spi_host *host, ktime_t timeout)
256 +{
257 +       return mmc_spi_skip(host, timeout, sizeof(host->data->status), 0);
258 +}
259 +
260 +static int mmc_spi_readtoken(struct mmc_spi_host *host)
261 +{
262 +       return mmc_spi_skip(host, readblock_timeout, 1, 0xff);
263 +}
264 +
265 +
266 +/*
267 + * Note that for SPI, cmd->resp[0] is not the same data as "native" protocol
268 + * hosts return!  The low byte holds R1_SPI bits.  The next byte may hold
269 + * R2_SPI bits ... for SEND_STATUS, or after data read errors.
270 + *
271 + * cmd->resp[1] holds any four-byte response, for R3 (READ_OCR) and on
272 + * newer cards R7 (IF_COND).
273 + */
274 +
275 +static char *maptype(struct mmc_command *cmd)
276 +{
277 +       switch (mmc_spi_resp_type(cmd)) {
278 +       case MMC_RSP_SPI_R1:    return "R1";
279 +       case MMC_RSP_SPI_R1B:   return "R1B";
280 +       case MMC_RSP_SPI_R2:    return "R2/R5";
281 +       case MMC_RSP_SPI_R3:    return "R3/R4/R7";
282 +       default:                return "?";
283 +       }
284 +}
285 +
286 +/* return zero, else negative errno after setting cmd->error */
287 +static int mmc_spi_response_get(struct mmc_spi_host *host,
288 +               struct mmc_command *cmd, int cs_on)
289 +{
290 +       u8      *cp = host->data->status;
291 +       u8      *end = cp + host->t.len;
292 +       int     value = 0;
293 +       char    tag[32];
294 +
295 +       snprintf(tag, sizeof(tag), "  ... CMD%d response SPI_%s",
296 +               cmd->opcode, maptype(cmd));
297 +
298 +       /* Except for data block reads, the whole response will already
299 +        * be stored in the scratch buffer.  It's somewhere after the
300 +        * command and the first byte we read after it.  We ignore that
301 +        * first byte.  After STOP_TRANSMISSION command it may include
302 +        * two data bits, but otherwise it's all ones.
303 +        */
304 +       cp += 8;
305 +       while (cp < end && *cp == 0xff)
306 +               cp++;
307 +
308 +       /* Data block reads (R1 response types) may need more data... */
309 +       if (cp == end) {
310 +               unsigned        i;
311 +
312 +               cp = host->data->status;
313 +
314 +               /* Card sends N(CR) (== 1..8) bytes of all-ones then one
315 +                * status byte ... and we already scanned 2 bytes.
316 +                *
317 +                * REVISIT block read paths use nasty byte-at-a-time I/O
318 +                * so it can always DMA directly into the target buffer.
319 +                * It'd probably be better to memcpy() the first chunk and
320 +                * avoid extra i/o calls...
321 +                */
322 +               for (i = 2; i < 9; i++) {
323 +                       value = mmc_spi_readbytes(host, 1);
324 +                       if (value < 0)
325 +                               goto done;
326 +                       if (*cp != 0xff)
327 +                               goto checkstatus;
328 +               }
329 +               value = -ETIMEDOUT;
330 +               goto done;
331 +       }
332 +
333 +checkstatus:
334 +       if (*cp & 0x80) {
335 +               dev_dbg(&host->spi->dev, "%s: INVALID RESPONSE, %02x\n",
336 +                                       tag, *cp);
337 +               value = -EBADR;
338 +               goto done;
339 +       }
340 +
341 +       cmd->resp[0] = *cp++;
342 +       cmd->error = 0;
343 +
344 +       /* Status byte: the entire seven-bit R1 response.  */
345 +       if (cmd->resp[0] != 0) {
346 +               if ((R1_SPI_PARAMETER | R1_SPI_ADDRESS
347 +                                       | R1_SPI_ILLEGAL_COMMAND)
348 +                               & cmd->resp[0])
349 +                       value = -EINVAL;
350 +               else if (R1_SPI_COM_CRC & cmd->resp[0])
351 +                       value = -EILSEQ;
352 +               else if ((R1_SPI_ERASE_SEQ | R1_SPI_ERASE_RESET)
353 +                               & cmd->resp[0])
354 +                       value = -EIO;
355 +               /* else R1_SPI_IDLE, "it's resetting" */
356 +       }
357 +
358 +       switch (mmc_spi_resp_type(cmd)) {
359 +
360 +       /* SPI R1B == R1 + busy; STOP_TRANSMISSION (for multiblock reads)
361 +        * and less-common stuff like various erase operations.
362 +        */
363 +       case MMC_RSP_SPI_R1B:
364 +               /* maybe we read all the busy tokens already */
365 +               while (cp < end && *cp == 0)
366 +                       cp++;
367 +               if (cp == end)
368 +                       mmc_spi_wait_unbusy(host, r1b_timeout);
369 +               break;
370 +
371 +       /* SPI R2 == R1 + second status byte; SEND_STATUS
372 +        * SPI R5 == R1 + data byte; IO_RW_DIRECT
373 +        */
374 +       case MMC_RSP_SPI_R2:
375 +               cmd->resp[0] |= *cp << 8;
376 +               break;
377 +
378 +       /* SPI R3, R4, or R7 == R1 + 4 bytes */
379 +       case MMC_RSP_SPI_R3:
380 +               cmd->resp[1] = be32_to_cpu(get_unaligned((u32 *)cp));
381 +               break;
382 +
383 +       /* SPI R1 == just one status byte */
384 +       case MMC_RSP_SPI_R1:
385 +               break;
386 +
387 +       default:
388 +               dev_dbg(&host->spi->dev, "bad response type %04x\n",
389 +                               mmc_spi_resp_type(cmd));
390 +               if (value >= 0)
391 +                       value = -EINVAL;
392 +               goto done;
393 +       }
394 +
395 +       if (value < 0)
396 +               dev_dbg(&host->spi->dev, "%s: resp %04x %08x\n",
397 +                       tag, cmd->resp[0], cmd->resp[1]);
398 +
399 +       /* disable chipselect on errors and some success cases */
400 +       if (value >= 0 && cs_on)
401 +               return value;
402 +done:
403 +       if (value < 0)
404 +               cmd->error = value;
405 +       mmc_cs_off(host);
406 +       return value;
407 +}
408 +
409 +/* Issue command and read its response.
410 + * Returns zero on success, negative for error.
411 + *
412 + * On error, caller must cope with mmc core retry mechanism.  That
413 + * means immediate low-level resubmit, which affects the bus lock...
414 + */
415 +static int
416 +mmc_spi_command_send(struct mmc_spi_host *host,
417 +               struct mmc_request *mrq,
418 +               struct mmc_command *cmd, int cs_on)
419 +{
420 +       struct scratch          *data = host->data;
421 +       u8                      *cp = data->status;
422 +       u32                     arg = cmd->arg;
423 +       int                     status;
424 +       struct spi_transfer     *t;
425 +
426 +       /* We can handle most commands (except block reads) in one full
427 +        * duplex I/O operation before either starting the next transfer
428 +        * (data block or command) or else deselecting the card.
429 +        *
430 +        * First, write 7 bytes:
431 +        *  - an all-ones byte to ensure the card is ready
432 +        *  - opcode byte (plus start and transmission bits)
433 +        *  - four bytes of big-endian argument
434 +        *  - crc7 (plus end bit) ... always computed, it's cheap
435 +        *
436 +        * We init the whole buffer to all-ones, which is what we need
437 +        * to write while we're reading (later) response data.
438 +        */
439 +       memset(cp++, 0xff, sizeof(data->status));
440 +
441 +       *cp++ = 0x40 | cmd->opcode;
442 +       *cp++ = (u8)(arg >> 24);
443 +       *cp++ = (u8)(arg >> 16);
444 +       *cp++ = (u8)(arg >> 8);
445 +       *cp++ = (u8)arg;
446 +       *cp++ = (crc7(0, &data->status[1], 5) << 1) | 0x01;
447 +
448 +       /* Then, read up to 13 bytes (while writing all-ones):
449 +        *  - N(CR) (== 1..8) bytes of all-ones
450 +        *  - status byte (for all response types)
451 +        *  - the rest of the response, either:
452 +        *      + nothing, for R1 or R1B responses
453 +        *      + second status byte, for R2 responses
454 +        *      + four data bytes, for R3 and R7 responses
455 +        *
456 +        * Finally, read some more bytes ... in the nice cases we know in
457 +        * advance how many, and reading 1 more is always OK:
458 +        *  - N(EC) (== 0..N) bytes of all-ones, before deselect/finish
459 +        *  - N(RC) (== 1..N) bytes of all-ones, before next command
460 +        *  - N(WR) (== 1..N) bytes of all-ones, before data write
461 +        *
462 +        * So in those cases one full duplex I/O of at most 21 bytes will
463 +        * handle the whole command, leaving the card ready to receive a
464 +        * data block or new command.  We do that whenever we can, shaving
465 +        * CPU and IRQ costs (especially when using DMA or FIFOs).
466 +        *
467 +        * There are two other cases, where it's not generally practical
468 +        * to rely on a single I/O:
469 +        *
470 +        *  - R1B responses need at least N(EC) bytes of all-zeroes.
471 +        *
472 +        *    In this case we can *try* to fit it into one I/O, then
473 +        *    maybe read more data later.
474 +        *
475 +        *  - Data block reads are more troublesome, since a variable
476 +        *    number of padding bytes precede the token and data.
477 +        *      + N(CX) (== 0..8) bytes of all-ones, before CSD or CID
478 +        *      + N(AC) (== 1..many) bytes of all-ones
479 +        *
480 +        *    In this case we currently only have minimal speedups here:
481 +        *    when N(CR) == 1 we can avoid I/O in response_get().
482 +        */
483 +       if (cs_on && (mrq->data->flags & MMC_DATA_READ)) {
484 +               cp += 2;        /* min(N(CR)) + status */
485 +               /* R1 */
486 +       } else {
487 +               cp += 10;       /* max(N(CR)) + status + min(N(RC),N(WR)) */
488 +               if (cmd->flags & MMC_RSP_SPI_S2)        /* R2/R5 */
489 +                       cp++;
490 +               else if (cmd->flags & MMC_RSP_SPI_B4)   /* R3/R4/R7 */
491 +                       cp += 4;
492 +               else if (cmd->flags & MMC_RSP_BUSY)     /* R1B */
493 +                       cp = data->status + sizeof(data->status);
494 +               /* else:  R1 (most commands) */
495 +       }
496 +
497 +       dev_dbg(&host->spi->dev, "  mmc_spi: CMD%d, resp %s\n",
498 +               cmd->opcode, maptype(cmd));
499 +
500 +       /* send command, leaving chipselect active */
501 +       spi_message_init(&host->m);
502 +
503 +       t = &host->t;
504 +       memset(t, 0, sizeof(*t));
505 +       t->tx_buf = t->rx_buf = data->status;
506 +       t->tx_dma = t->rx_dma = host->data_dma;
507 +       t->len = cp - data->status;
508 +       t->cs_change = 1;
509 +       spi_message_add_tail(t, &host->m);
510 +
511 +       if (host->dma_dev) {
512 +               host->m.is_dma_mapped = 1;
513 +               dma_sync_single_for_device(host->dma_dev,
514 +                               host->data_dma, sizeof(*host->data),
515 +                               DMA_BIDIRECTIONAL);
516 +       }
517 +       status = spi_sync(host->spi, &host->m);
518 +
519 +       if (host->dma_dev)
520 +               dma_sync_single_for_cpu(host->dma_dev,
521 +                               host->data_dma, sizeof(*host->data),
522 +                               DMA_BIDIRECTIONAL);
523 +       if (status < 0) {
524 +               dev_dbg(&host->spi->dev, "  ... write returned %d\n", status);
525 +               cmd->error = status;
526 +               return status;
527 +       }
528 +
529 +       /* after no-data commands and STOP_TRANSMISSION, chipselect off */
530 +       return mmc_spi_response_get(host, cmd, cs_on);
531 +}
532 +
533 +/* Build data message with up to four separate transfers.  For TX, we
534 + * start by writing the data token.  And in most cases, we finish with
535 + * a status transfer.
536 + *
537 + * We always provide TX data for data and CRC.  The MMC/SD protocol
538 + * requires us to write ones; but Linux defaults to writing zeroes;
539 + * so we explicitly initialize it to all ones on RX paths.
540 + *
541 + * We also handle DMA mapping, so the underlying SPI controller does
542 + * not need to (re)do it for each message.
543 + */
544 +static void
545 +mmc_spi_setup_data_message(
546 +       struct mmc_spi_host     *host,
547 +       int                     multiple,
548 +       enum dma_data_direction direction)
549 +{
550 +       struct spi_transfer     *t;
551 +       struct scratch          *scratch = host->data;
552 +       dma_addr_t              dma = host->data_dma;
553 +
554 +       spi_message_init(&host->m);
555 +       if (dma)
556 +               host->m.is_dma_mapped = 1;
557 +
558 +       /* for reads, readblock() skips 0xff bytes before finding
559 +        * the token; for writes, this transfer issues that token.
560 +        */
561 +       if (direction == DMA_TO_DEVICE) {
562 +               t = &host->token;
563 +               memset(t, 0, sizeof(*t));
564 +               t->len = 1;
565 +               if (multiple)
566 +                       scratch->data_token = SPI_TOKEN_MULTI_WRITE;
567 +               else
568 +                       scratch->data_token = SPI_TOKEN_SINGLE;
569 +               t->tx_buf = &scratch->data_token;
570 +               if (dma)
571 +                       t->tx_dma = dma + offsetof(struct scratch, data_token);
572 +               spi_message_add_tail(t, &host->m);
573 +       }
574 +
575 +       /* Body of transfer is buffer, then CRC ...
576 +        * either TX-only, or RX with TX-ones.
577 +        */
578 +       t = &host->t;
579 +       memset(t, 0, sizeof(*t));
580 +       t->tx_buf = host->ones;
581 +       t->tx_dma = host->ones_dma;
582 +       /* length and actual buffer info are written later */
583 +       spi_message_add_tail(t, &host->m);
584 +
585 +       t = &host->crc;
586 +       memset(t, 0, sizeof(*t));
587 +       t->len = 2;
588 +       if (direction == DMA_TO_DEVICE) {
589 +               /* the actual CRC may get written later */
590 +               t->tx_buf = &scratch->crc_val;
591 +               if (dma)
592 +                       t->tx_dma = dma + offsetof(struct scratch, crc_val);
593 +       } else {
594 +               t->tx_buf = host->ones;
595 +               t->tx_dma = host->ones_dma;
596 +               t->rx_buf = &scratch->crc_val;
597 +               if (dma)
598 +                       t->rx_dma = dma + offsetof(struct scratch, crc_val);
599 +       }
600 +       spi_message_add_tail(t, &host->m);
601 +
602 +       /*
603 +        * A single block read is followed by N(EC) [0+] all-ones bytes
604 +        * before deselect ... don't bother.
605 +        *
606 +        * Multiblock reads are followed by N(AC) [1+] all-ones bytes before
607 +        * the next block is read, or a STOP_TRANSMISSION is issued.  We'll
608 +        * collect that single byte, so readblock() doesn't need to.
609 +        *
610 +        * For a write, the one-byte data response follows immediately, then
611 +        * come zero or more busy bytes, then N(WR) [1+] all-ones bytes.
612 +        * Then single block reads may deselect, and multiblock ones issue
613 +        * the next token (next data block, or STOP_TRAN).  We can try to
614 +        * minimize I/O ops by using a single read to collect end-of-busy.
615 +        */
616 +       if (multiple || direction == DMA_TO_DEVICE) {
617 +               t = &host->early_status;
618 +               memset(t, 0, sizeof(*t));
619 +               t->len = (direction == DMA_TO_DEVICE)
620 +                               ? sizeof(scratch->status)
621 +                               : 1;
622 +               t->tx_buf = host->ones;
623 +               t->tx_dma = host->ones_dma;
624 +               t->rx_buf = scratch->status;
625 +               if (dma)
626 +                       t->rx_dma = dma + offsetof(struct scratch, status);
627 +               t->cs_change = 1;
628 +               spi_message_add_tail(t, &host->m);
629 +       }
630 +}
631 +
632 +/*
633 + * Write one block:
634 + *  - caller handled preceding N(WR) [1+] all-ones bytes
635 + *  - data block
636 + *     + token
637 + *     + data bytes
638 + *     + crc16
639 + *  - an all-ones byte ... card writes a data-response byte
640 + *  - followed by N(EC) [0+] all-ones bytes, card writes zero/'busy'
641 + *
642 + * Return negative errno, else success.
643 + */
644 +static int
645 +mmc_spi_writeblock(struct mmc_spi_host *host, struct spi_transfer *t)
646 +{
647 +       struct spi_device       *spi = host->spi;
648 +       int                     status, i;
649 +       struct scratch          *scratch = host->data;
650 +
651 +       if (host->mmc->use_spi_crc)
652 +               scratch->crc_val = cpu_to_be16(
653 +                               crc_itu_t(0, t->tx_buf, t->len));
654 +       if (host->dma_dev)
655 +               dma_sync_single_for_device(host->dma_dev,
656 +                               host->data_dma, sizeof(*scratch),
657 +                               DMA_BIDIRECTIONAL);
658 +
659 +       status = spi_sync(spi, &host->m);
660 +
661 +       if (status != 0) {
662 +               dev_dbg(&spi->dev, "write error (%d)\n", status);
663 +               return status;
664 +       }
665 +
666 +       if (host->dma_dev)
667 +               dma_sync_single_for_cpu(host->dma_dev,
668 +                               host->data_dma, sizeof(*scratch),
669 +                               DMA_BIDIRECTIONAL);
670 +
671 +       /*
672 +        * Get the transmission data-response reply.  It must follow
673 +        * immediately after the data block we transferred.  This reply
674 +        * doesn't necessarily tell whether the write operation succeeded;
675 +        * it just says if the transmission was ok and whether *earlier*
676 +        * writes succeeded; see the standard.
677 +        */
678 +       switch (SPI_MMC_RESPONSE_CODE(scratch->status[0])) {
679 +       case SPI_RESPONSE_ACCEPTED:
680 +               status = 0;
681 +               break;
682 +       case SPI_RESPONSE_CRC_ERR:
683 +               /* host shall then issue MMC_STOP_TRANSMISSION */
684 +               status = -EILSEQ;
685 +               break;
686 +       case SPI_RESPONSE_WRITE_ERR:
687 +               /* host shall then issue MMC_STOP_TRANSMISSION,
688 +                * and should MMC_SEND_STATUS to sort it out
689 +                */
690 +               status = -EIO;
691 +               break;
692 +       default:
693 +               status = -EPROTO;
694 +               break;
695 +       }
696 +       if (status != 0) {
697 +               dev_dbg(&spi->dev, "write error %02x (%d)\n",
698 +                       scratch->status[0], status);
699 +               return status;
700 +       }
701 +
702 +       t->tx_buf += t->len;
703 +       if (host->dma_dev)
704 +               t->tx_dma += t->len;
705 +
706 +       /* Return when not busy.  If we didn't collect that status yet,
707 +        * we'll need some more I/O.
708 +        */
709 +       for (i = 1; i < sizeof(scratch->status); i++) {
710 +               if (scratch->status[i] != 0)
711 +                       return 0;
712 +       }
713 +       return mmc_spi_wait_unbusy(host, writeblock_timeout);
714 +}
715 +
716 +/*
717 + * Read one block:
718 + *  - skip leading all-ones bytes ... either
719 + *      + N(AC) [1..f(clock,CSD)] usually, else
720 + *      + N(CX) [0..8] when reading CSD or CID
721 + *  - data block
722 + *     + token ... if error token, no data or crc
723 + *     + data bytes
724 + *     + crc16
725 + *
726 + * After single block reads, we're done; N(EC) [0+] all-ones bytes follow
727 + * before dropping chipselect.
728 + *
729 + * For multiblock reads, caller either reads the next block or issues a
730 + * STOP_TRANSMISSION command.
731 + */
732 +static int
733 +mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t)
734 +{
735 +       struct spi_device       *spi = host->spi;
736 +       int                     status;
737 +       struct scratch          *scratch = host->data;
738 +
739 +       /* At least one SD card sends an all-zeroes byte when N(CX)
740 +        * applies, before the all-ones bytes ... just cope with that.
741 +        */
742 +       status = mmc_spi_readbytes(host, 1);
743 +       if (status < 0)
744 +               return status;
745 +       status = scratch->status[0];
746 +       if (status == 0xff || status == 0)
747 +               status = mmc_spi_readtoken(host);
748 +
749 +       if (status == SPI_TOKEN_SINGLE) {
750 +               if (host->dma_dev) {
751 +                       dma_sync_single_for_device(host->dma_dev,
752 +                                       host->data_dma, sizeof(*scratch),
753 +                                       DMA_BIDIRECTIONAL);
754 +                       dma_sync_single_for_device(host->dma_dev,
755 +                                       t->rx_dma, t->len,
756 +                                       DMA_FROM_DEVICE);
757 +               }
758 +
759 +               status = spi_sync(spi, &host->m);
760 +
761 +               if (host->dma_dev) {
762 +                       dma_sync_single_for_cpu(host->dma_dev,
763 +                                       host->data_dma, sizeof(*scratch),
764 +                                       DMA_BIDIRECTIONAL);
765 +                       dma_sync_single_for_cpu(host->dma_dev,
766 +                                       t->rx_dma, t->len,
767 +                                       DMA_FROM_DEVICE);
768 +               }
769 +
770 +       } else {
771 +               dev_dbg(&spi->dev, "read error %02x (%d)\n", status, status);
772 +
773 +               /* we've read extra garbage, timed out, etc */
774 +               if (status < 0)
775 +                       return status;
776 +
777 +               /* low four bits are an R2 subset, fifth seems to be
778 +                * vendor specific ... map them all to generic error..
779 +                */
780 +               return -EIO;
781 +       }
782 +
783 +       if (host->mmc->use_spi_crc) {
784 +               u16 crc = crc_itu_t(0, t->rx_buf, t->len);
785 +
786 +               be16_to_cpus(&scratch->crc_val);
787 +               if (scratch->crc_val != crc) {
788 +                       dev_dbg(&spi->dev, "read - crc error: crc_val=0x%04x, "
789 +                                       "computed=0x%04x len=%d\n",
790 +                                       scratch->crc_val, crc, t->len);
791 +                       return -EILSEQ;
792 +               }
793 +       }
794 +
795 +       t->rx_buf += t->len;
796 +       if (host->dma_dev)
797 +               t->rx_dma += t->len;
798 +
799 +       return 0;
800 +}
801 +
802 +/*
803 + * An MMC/SD data stage includes one or more blocks, optional CRCs,
804 + * and inline handshaking.  That handhaking makes it unlike most
805 + * other SPI protocol stacks.
806 + */
807 +static void
808 +mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd,
809 +               struct mmc_data *data, u32 blk_size)
810 +{
811 +       struct spi_device       *spi = host->spi;
812 +       struct device           *dma_dev = host->dma_dev;
813 +       struct spi_transfer     *t;
814 +       enum dma_data_direction direction;
815 +       struct scatterlist      *sg;
816 +       unsigned                n_sg;
817 +       int                     multiple = (data->blocks > 1);
818 +
819 +       if (data->flags & MMC_DATA_READ)
820 +               direction = DMA_FROM_DEVICE;
821 +       else
822 +               direction = DMA_TO_DEVICE;
823 +       mmc_spi_setup_data_message(host, multiple, direction);
824 +       t = &host->t;
825 +
826 +       /* Handle scatterlist segments one at a time, with synch for
827 +        * each 512-byte block
828 +        */
829 +       for (sg = data->sg, n_sg = data->sg_len; n_sg; n_sg--, sg++) {
830 +               int                     status = 0;
831 +               dma_addr_t              dma_addr = 0;
832 +               void                    *kmap_addr;
833 +               unsigned                length = sg->length;
834 +               enum dma_data_direction dir = direction;
835 +
836 +               /* set up dma mapping for controller drivers that might
837 +                * use DMA ... though they may fall back to PIO
838 +                */
839 +               if (dma_dev) {
840 +                       /* never invalidate whole *shared* pages ... */
841 +                       if ((sg->offset != 0 || length != PAGE_SIZE)
842 +                                       && dir == DMA_FROM_DEVICE)
843 +                               dir = DMA_BIDIRECTIONAL;
844 +
845 +                       dma_addr = dma_map_page(dma_dev, sg_page(sg), 0,
846 +                                               PAGE_SIZE, dir);
847 +                       if (direction == DMA_TO_DEVICE)
848 +                               t->tx_dma = dma_addr + sg->offset;
849 +                       else
850 +                               t->rx_dma = dma_addr + sg->offset;
851 +               }
852 +
853 +               /* allow pio too; we don't allow highmem */
854 +               kmap_addr = kmap(sg_page(sg));
855 +               if (direction == DMA_TO_DEVICE)
856 +                       t->tx_buf = kmap_addr + sg->offset;
857 +               else
858 +                       t->rx_buf = kmap_addr + sg->offset;
859 +
860 +               /* transfer each block, and update request status */
861 +               while (length) {
862 +                       t->len = min(length, blk_size);
863 +
864 +                       dev_dbg(&host->spi->dev,
865 +                               "    mmc_spi: %s block, %d bytes\n",
866 +                               (direction == DMA_TO_DEVICE)
867 +                               ? "write"
868 +                               : "read",
869 +                               t->len);
870 +
871 +                       if (direction == DMA_TO_DEVICE)
872 +                               status = mmc_spi_writeblock(host, t);
873 +                       else
874 +                               status = mmc_spi_readblock(host, t);
875 +                       if (status < 0)
876 +                               break;
877 +
878 +                       data->bytes_xfered += t->len;
879 +                       length -= t->len;
880 +
881 +                       if (!multiple)
882 +                               break;
883 +               }
884 +
885 +               /* discard mappings */
886 +               if (direction == DMA_FROM_DEVICE)
887 +                       flush_kernel_dcache_page(sg_page(sg));
888 +               kunmap(sg_page(sg));
889 +               if (dma_dev)
890 +                       dma_unmap_page(dma_dev, dma_addr, PAGE_SIZE, dir);
891 +
892 +               if (status < 0) {
893 +                       data->error = status;
894 +                       dev_dbg(&spi->dev, "%s status %d\n",
895 +                               (direction == DMA_TO_DEVICE)
896 +                                       ? "write" : "read",
897 +                               status);
898 +                       break;
899 +               }
900 +       }
901 +
902 +       /* NOTE some docs describe an MMC-only SET_BLOCK_COUNT (CMD23) that
903 +        * can be issued before multiblock writes.  Unlike its more widely
904 +        * documented analogue for SD cards (SET_WR_BLK_ERASE_COUNT, ACMD23),
905 +        * that can affect the STOP_TRAN logic.   Complete (and current)
906 +        * MMC specs should sort that out before Linux starts using CMD23.
907 +        */
908 +       if (direction == DMA_TO_DEVICE && multiple) {
909 +               struct scratch  *scratch = host->data;
910 +               int             tmp;
911 +               const unsigned  statlen = sizeof(scratch->status);
912 +
913 +               dev_dbg(&spi->dev, "    mmc_spi: STOP_TRAN\n");
914 +
915 +               /* Tweak the per-block message we set up earlier by morphing
916 +                * it to hold single buffer with the token followed by some
917 +                * all-ones bytes ... skip N(BR) (0..1), scan the rest for
918 +                * "not busy any longer" status, and leave chip selected.
919 +                */
920 +               INIT_LIST_HEAD(&host->m.transfers);
921 +               list_add(&host->early_status.transfer_list,
922 +                               &host->m.transfers);
923 +
924 +               memset(scratch->status, 0xff, statlen);
925 +               scratch->status[0] = SPI_TOKEN_STOP_TRAN;
926 +
927 +               host->early_status.tx_buf = host->early_status.rx_buf;
928 +               host->early_status.tx_dma = host->early_status.rx_dma;
929 +               host->early_status.len = statlen;
930 +
931 +               if (host->dma_dev)
932 +                       dma_sync_single_for_device(host->dma_dev,
933 +                                       host->data_dma, sizeof(*scratch),
934 +                                       DMA_BIDIRECTIONAL);
935 +
936 +               tmp = spi_sync(spi, &host->m);
937 +
938 +               if (host->dma_dev)
939 +                       dma_sync_single_for_cpu(host->dma_dev,
940 +                                       host->data_dma, sizeof(*scratch),
941 +                                       DMA_BIDIRECTIONAL);
942 +
943 +               if (tmp < 0) {
944 +                       if (!data->error)
945 +                               data->error = tmp;
946 +                       return;
947 +               }
948 +
949 +               /* Ideally we collected "not busy" status with one I/O,
950 +                * avoiding wasteful byte-at-a-time scanning... but more
951 +                * I/O is often needed.
952 +                */
953 +               for (tmp = 2; tmp < statlen; tmp++) {
954 +                       if (scratch->status[tmp] != 0)
955 +                               return;
956 +               }
957 +               tmp = mmc_spi_wait_unbusy(host, writeblock_timeout);
958 +               if (tmp < 0 && !data->error)
959 +                       data->error = tmp;
960 +       }
961 +}
962 +
963 +/****************************************************************************/
964 +
965 +/*
966 + * MMC driver implementation -- the interface to the MMC stack
967 + */
968 +
969 +static void mmc_spi_request(struct mmc_host *mmc, struct mmc_request *mrq)
970 +{
971 +       struct mmc_spi_host     *host = mmc_priv(mmc);
972 +       int                     status = -EINVAL;
973 +
974 +#ifdef DEBUG
975 +       /* MMC core and layered drivers *MUST* issue SPI-aware commands */
976 +       {
977 +               struct mmc_command      *cmd;
978 +               int                     invalid = 0;
979 +
980 +               cmd = mrq->cmd;
981 +               if (!mmc_spi_resp_type(cmd)) {
982 +                       dev_dbg(&host->spi->dev, "bogus command\n");
983 +                       cmd->error = -EINVAL;
984 +                       invalid = 1;
985 +               }
986 +
987 +               cmd = mrq->stop;
988 +               if (cmd && !mmc_spi_resp_type(cmd)) {
989 +                       dev_dbg(&host->spi->dev, "bogus STOP command\n");
990 +                       cmd->error = -EINVAL;
991 +                       invalid = 1;
992 +               }
993 +
994 +               if (invalid) {
995 +                       dump_stack();
996 +                       mmc_request_done(host->mmc, mrq);
997 +                       return;
998 +               }
999 +       }
1000 +#endif
1001 +
1002 +       /* issue command; then optionally data and stop */
1003 +       status = mmc_spi_command_send(host, mrq, mrq->cmd, mrq->data != NULL);
1004 +       if (status == 0 && mrq->data) {
1005 +               mmc_spi_data_do(host, mrq->cmd, mrq->data, mrq->data->blksz);
1006 +               if (mrq->stop)
1007 +                       status = mmc_spi_command_send(host, mrq, mrq->stop, 0);
1008 +               else
1009 +                       mmc_cs_off(host);
1010 +       }
1011 +
1012 +       mmc_request_done(host->mmc, mrq);
1013 +}
1014 +
1015 +/* See Section 6.4.1, in SD "Simplified Physical Layer Specification 2.0"
1016 + *
1017 + * NOTE that here we can't know that the card has just been powered up;
1018 + * not all MMC/SD sockets support power switching.
1019 + *
1020 + * FIXME when the card is still in SPI mode, e.g. from a previous kernel,
1021 + * this doesn't seem to do the right thing at all...
1022 + */
1023 +static void mmc_spi_initsequence(struct mmc_spi_host *host)
1024 +{
1025 +       /* Try to be very sure any previous command has completed;
1026 +        * wait till not-busy, skip debris from any old commands.
1027 +        */
1028 +       mmc_spi_wait_unbusy(host, r1b_timeout);
1029 +       mmc_spi_readbytes(host, 10);
1030 +
1031 +       /*
1032 +        * Do a burst with chipselect active-high.  We need to do this to
1033 +        * meet the requirement of 74 clock cycles with both chipselect
1034 +        * and CMD (MOSI) high before CMD0 ... after the card has been
1035 +        * powered up to Vdd(min), and so is ready to take commands.
1036 +        *
1037 +        * Some cards are particularly needy of this (e.g. Viking "SD256")
1038 +        * while most others don't seem to care.
1039 +        *
1040 +        * Note that this is one of the places MMC/SD plays games with the
1041 +        * SPI protocol.  Another is that when chipselect is released while
1042 +        * the card returns BUSY status, the clock must issue several cycles
1043 +        * with chipselect high before the card will stop driving its output.
1044 +        */
1045 +       host->spi->mode |= SPI_CS_HIGH;
1046 +       if (spi_setup(host->spi) != 0) {
1047 +               /* Just warn; most cards work without it. */
1048 +               dev_warn(&host->spi->dev,
1049 +                               "can't change chip-select polarity\n");
1050 +               host->spi->mode &= ~SPI_CS_HIGH;
1051 +       } else {
1052 +               mmc_spi_readbytes(host, 18);
1053 +
1054 +               host->spi->mode &= ~SPI_CS_HIGH;
1055 +               if (spi_setup(host->spi) != 0) {
1056 +                       /* Wot, we can't get the same setup we had before? */
1057 +                       dev_err(&host->spi->dev,
1058 +                                       "can't restore chip-select polarity\n");
1059 +               }
1060 +       }
1061 +}
1062 +
1063 +static char *mmc_powerstring(u8 power_mode)
1064 +{
1065 +       switch (power_mode) {
1066 +       case MMC_POWER_OFF: return "off";
1067 +       case MMC_POWER_UP:  return "up";
1068 +       case MMC_POWER_ON:  return "on";
1069 +       }
1070 +       return "?";
1071 +}
1072 +
1073 +static void mmc_spi_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
1074 +{
1075 +       struct mmc_spi_host *host = mmc_priv(mmc);
1076 +
1077 +       if (host->power_mode != ios->power_mode) {
1078 +               int             canpower;
1079 +
1080 +               canpower = host->pdata && host->pdata->setpower;
1081 +
1082 +               dev_dbg(&host->spi->dev, "mmc_spi: power %s (%d)%s\n",
1083 +                               mmc_powerstring(ios->power_mode),
1084 +                               ios->vdd,
1085 +                               canpower ? ", can switch" : "");
1086 +
1087 +               /* switch power on/off if possible, accounting for
1088 +                * max 250msec powerup time if needed.
1089 +                */
1090 +               if (canpower) {
1091 +                       switch (ios->power_mode) {
1092 +                       case MMC_POWER_OFF:
1093 +                       case MMC_POWER_UP:
1094 +                               host->pdata->setpower(&host->spi->dev,
1095 +                                               ios->vdd);
1096 +                               if (ios->power_mode == MMC_POWER_UP)
1097 +                                       msleep(host->powerup_msecs);
1098 +                       }
1099 +               }
1100 +
1101 +               /* See 6.4.1 in the simplified SD card physical spec 2.0 */
1102 +               if (ios->power_mode == MMC_POWER_ON)
1103 +                       mmc_spi_initsequence(host);
1104 +
1105 +               /* If powering down, ground all card inputs to avoid power
1106 +                * delivery from data lines!  On a shared SPI bus, this
1107 +                * will probably be temporary; 6.4.2 of the simplified SD
1108 +                * spec says this must last at least 1msec.
1109 +                *
1110 +                *   - Clock low means CPOL 0, e.g. mode 0
1111 +                *   - MOSI low comes from writing zero
1112 +                *   - Chipselect is usually active low...
1113 +                */
1114 +               if (canpower && ios->power_mode == MMC_POWER_OFF) {
1115 +                       int mres;
1116 +
1117 +                       host->spi->mode &= ~(SPI_CPOL|SPI_CPHA);
1118 +                       mres = spi_setup(host->spi);
1119 +                       if (mres < 0)
1120 +                               dev_dbg(&host->spi->dev,
1121 +                                       "switch to SPI mode 0 failed\n");
1122 +
1123 +                       if (spi_w8r8(host->spi, 0x00) < 0)
1124 +                               dev_dbg(&host->spi->dev,
1125 +                                       "put spi signals to low failed\n");
1126 +
1127 +                       /*
1128 +                        * Now clock should be low due to spi mode 0;
1129 +                        * MOSI should be low because of written 0x00;
1130 +                        * chipselect should be low (it is active low)
1131 +                        * power supply is off, so now MMC is off too!
1132 +                        *
1133 +                        * FIXME no, chipselect can be high since the
1134 +                        * device is inactive and SPI_CS_HIGH is clear...
1135 +                        */
1136 +                       msleep(10);
1137 +                       if (mres == 0) {
1138 +                               host->spi->mode |= (SPI_CPOL|SPI_CPHA);
1139 +                               mres = spi_setup(host->spi);
1140 +                               if (mres < 0)
1141 +                                       dev_dbg(&host->spi->dev,
1142 +                                               "switch back to SPI mode 3"
1143 +                                               " failed\n");
1144 +                       }
1145 +               }
1146 +
1147 +               host->power_mode = ios->power_mode;
1148 +       }
1149 +
1150 +       if (host->spi->max_speed_hz != ios->clock && ios->clock != 0) {
1151 +               int             status;
1152 +
1153 +               host->spi->max_speed_hz = ios->clock;
1154 +               status = spi_setup(host->spi);
1155 +               dev_dbg(&host->spi->dev,
1156 +                       "mmc_spi:  clock to %d Hz, %d\n",
1157 +                       host->spi->max_speed_hz, status);
1158 +       }
1159 +}
1160 +
1161 +static int mmc_spi_get_ro(struct mmc_host *mmc)
1162 +{
1163 +       struct mmc_spi_host *host = mmc_priv(mmc);
1164 +
1165 +       if (host->pdata && host->pdata->get_ro)
1166 +               return host->pdata->get_ro(mmc->parent);
1167 +       /* board doesn't support read only detection; assume writeable */
1168 +       return 0;
1169 +}
1170 +
1171 +
1172 +static const struct mmc_host_ops mmc_spi_ops = {
1173 +       .request        = mmc_spi_request,
1174 +       .set_ios        = mmc_spi_set_ios,
1175 +       .get_ro         = mmc_spi_get_ro,
1176 +};
1177 +
1178 +
1179 +/****************************************************************************/
1180 +
1181 +/*
1182 + * SPI driver implementation
1183 + */
1184 +
1185 +static irqreturn_t
1186 +mmc_spi_detect_irq(int irq, void *mmc)
1187 +{
1188 +       struct mmc_spi_host *host = mmc_priv(mmc);
1189 +       u16 delay_msec = max(host->pdata->detect_delay, (u16)100);
1190 +
1191 +       mmc_detect_change(mmc, msecs_to_jiffies(delay_msec));
1192 +       return IRQ_HANDLED;
1193 +}
1194 +
1195 +struct count_children {
1196 +       unsigned        n;
1197 +       struct bus_type *bus;
1198 +};
1199 +
1200 +static int maybe_count_child(struct device *dev, void *c)
1201 +{
1202 +       struct count_children *ccp = c;
1203 +
1204 +       if (dev->bus == ccp->bus) {
1205 +               if (ccp->n)
1206 +                       return -EBUSY;
1207 +               ccp->n++;
1208 +       }
1209 +       return 0;
1210 +}
1211 +
1212 +static int mmc_spi_probe(struct spi_device *spi)
1213 +{
1214 +       void                    *ones;
1215 +       struct mmc_host         *mmc;
1216 +       struct mmc_spi_host     *host;
1217 +       int                     status;
1218 +
1219 +       /* MMC and SD specs only seem to care that sampling is on the
1220 +        * rising edge ... meaning SPI modes 0 or 3.  So either SPI mode
1221 +        * should be legit.  We'll use mode 0 since it seems to be a
1222 +        * bit less troublesome on some hardware ... unclear why.
1223 +        */
1224 +       spi->mode = SPI_MODE_0;
1225 +       spi->bits_per_word = 8;
1226 +
1227 +       status = spi_setup(spi);
1228 +       if (status < 0) {
1229 +               dev_dbg(&spi->dev, "needs SPI mode %02x, %d KHz; %d\n",
1230 +                               spi->mode, spi->max_speed_hz / 1000,
1231 +                               status);
1232 +               return status;
1233 +       }
1234 +
1235 +       /* We can use the bus safely iff nobody else will interfere with us.
1236 +        * Most commands consist of one SPI message to issue a command, then
1237 +        * several more to collect its response, then possibly more for data
1238 +        * transfer.  Clocking access to other devices during that period will
1239 +        * corrupt the command execution.
1240 +        *
1241 +        * Until we have software primitives which guarantee non-interference,
1242 +        * we'll aim for a hardware-level guarantee.
1243 +        *
1244 +        * REVISIT we can't guarantee another device won't be added later...
1245 +        */
1246 +       if (spi->master->num_chipselect > 1) {
1247 +               struct count_children cc;
1248 +
1249 +               cc.n = 0;
1250 +               cc.bus = spi->dev.bus;
1251 +               status = device_for_each_child(spi->dev.parent, &cc,
1252 +                               maybe_count_child);
1253 +               if (status < 0) {
1254 +                       dev_err(&spi->dev, "can't share SPI bus\n");
1255 +                       return status;
1256 +               }
1257 +
1258 +               dev_warn(&spi->dev, "ASSUMING SPI bus stays unshared!\n");
1259 +       }
1260 +
1261 +       /* We need a supply of ones to transmit.  This is the only time
1262 +        * the CPU touches these, so cache coherency isn't a concern.
1263 +        *
1264 +        * NOTE if many systems use more than one MMC-over-SPI connector
1265 +        * it'd save some memory to share this.  That's evidently rare.
1266 +        */
1267 +       status = -ENOMEM;
1268 +       ones = kmalloc(MMC_SPI_BLOCKSIZE, GFP_KERNEL);
1269 +       if (!ones)
1270 +               goto nomem;
1271 +       memset(ones, 0xff, MMC_SPI_BLOCKSIZE);
1272 +
1273 +       mmc = mmc_alloc_host(sizeof(*host), &spi->dev);
1274 +       if (!mmc)
1275 +               goto nomem;
1276 +
1277 +       mmc->ops = &mmc_spi_ops;
1278 +       mmc->max_blk_size = MMC_SPI_BLOCKSIZE;
1279 +
1280 +       /* As long as we keep track of the number of successfully
1281 +        * transmitted blocks, we're good for multiwrite.
1282 +        */
1283 +       mmc->caps = MMC_CAP_SPI | MMC_CAP_MULTIWRITE;
1284 +
1285 +       /* SPI doesn't need the lowspeed device identification thing for
1286 +        * MMC or SD cards, since it never comes up in open drain mode.
1287 +        * That's good; some SPI masters can't handle very low speeds!
1288 +        *
1289 +        * However, low speed SDIO cards need not handle over 400 KHz;
1290 +        * that's the only reason not to use a few MHz for f_min (until
1291 +        * the upper layer reads the target frequency from the CSD).
1292 +        */
1293 +       mmc->f_min = 400000;
1294 +       mmc->f_max = spi->max_speed_hz;
1295 +
1296 +       host = mmc_priv(mmc);
1297 +       host->mmc = mmc;
1298 +       host->spi = spi;
1299 +
1300 +       host->ones = ones;
1301 +
1302 +       /* Platform data is used to hook up things like card sensing
1303 +        * and power switching gpios.
1304 +        */
1305 +       host->pdata = spi->dev.platform_data;
1306 +       if (host->pdata)
1307 +               mmc->ocr_avail = host->pdata->ocr_mask;
1308 +       if (!mmc->ocr_avail) {
1309 +               dev_warn(&spi->dev, "ASSUMING 3.2-3.4 V slot power\n");
1310 +               mmc->ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34;
1311 +       }
1312 +       if (host->pdata && host->pdata->setpower) {
1313 +               host->powerup_msecs = host->pdata->powerup_msecs;
1314 +               if (!host->powerup_msecs || host->powerup_msecs > 250)
1315 +                       host->powerup_msecs = 250;
1316 +       }
1317 +
1318 +       dev_set_drvdata(&spi->dev, mmc);
1319 +
1320 +       /* preallocate dma buffers */
1321 +       host->data = kmalloc(sizeof(*host->data), GFP_KERNEL);
1322 +       if (!host->data)
1323 +               goto fail_nobuf1;
1324 +
1325 +//FIXME
1326 +#if 0
1327 +       if (spi->master->dev.parent->dma_mask) {
1328 +               struct device   *dev = spi->master->dev.parent;
1329 +
1330 +               host->dma_dev = dev;
1331 +               host->ones_dma = dma_map_single(dev, ones,
1332 +                               MMC_SPI_BLOCKSIZE, DMA_TO_DEVICE);
1333 +               host->data_dma = dma_map_single(dev, host->data,
1334 +                               sizeof(*host->data), DMA_BIDIRECTIONAL);
1335 +
1336 +               /* REVISIT in theory those map operations can fail... */
1337 +
1338 +               dma_sync_single_for_cpu(host->dma_dev,
1339 +                               host->data_dma, sizeof(*host->data),
1340 +                               DMA_BIDIRECTIONAL);
1341 +       }
1342 +#endif
1343 +
1344 +       /* setup message for status/busy readback */
1345 +       spi_message_init(&host->readback);
1346 +       host->readback.is_dma_mapped = (host->dma_dev != NULL);
1347 +
1348 +       spi_message_add_tail(&host->status, &host->readback);
1349 +       host->status.tx_buf = host->ones;
1350 +       host->status.tx_dma = host->ones_dma;
1351 +       host->status.rx_buf = &host->data->status;
1352 +       host->status.rx_dma = host->data_dma + offsetof(struct scratch, status);
1353 +       host->status.cs_change = 1;
1354 +
1355 +       /* register card detect irq */
1356 +       if (host->pdata && host->pdata->init) {
1357 +               status = host->pdata->init(&spi->dev, mmc_spi_detect_irq, mmc);
1358 +               if (status != 0)
1359 +                       goto fail_glue_init;
1360 +       }
1361 +
1362 +       status = mmc_add_host(mmc);
1363 +       if (status != 0)
1364 +               goto fail_add_host;
1365 +
1366 +       dev_info(&spi->dev, "SD/MMC host %s%s%s%s\n",
1367 +                       mmc->class_dev.bus_id,
1368 +                       host->dma_dev ? "" : ", no DMA",
1369 +                       (host->pdata && host->pdata->get_ro)
1370 +                               ? "" : ", no WP",
1371 +                       (host->pdata && host->pdata->setpower)
1372 +                               ? "" : ", no poweroff");
1373 +       return 0;
1374 +
1375 +fail_add_host:
1376 +       mmc_remove_host (mmc);
1377 +fail_glue_init:
1378 +       if (host->dma_dev)
1379 +               dma_unmap_single(host->dma_dev, host->data_dma,
1380 +                               sizeof(*host->data), DMA_BIDIRECTIONAL);
1381 +       kfree(host->data);
1382 +
1383 +fail_nobuf1:
1384 +       mmc_free_host(mmc);
1385 +       dev_set_drvdata(&spi->dev, NULL);
1386 +
1387 +nomem:
1388 +       kfree(ones);
1389 +       return status;
1390 +}
1391 +
1392 +
1393 +static int __devexit mmc_spi_remove(struct spi_device *spi)
1394 +{
1395 +       struct mmc_host         *mmc = dev_get_drvdata(&spi->dev);
1396 +       struct mmc_spi_host     *host;
1397 +
1398 +       if (mmc) {
1399 +               host = mmc_priv(mmc);
1400 +
1401 +               /* prevent new mmc_detect_change() calls */
1402 +               if (host->pdata && host->pdata->exit)
1403 +                       host->pdata->exit(&spi->dev, mmc);
1404 +
1405 +               mmc_remove_host(mmc);
1406 +
1407 +               if (host->dma_dev) {
1408 +                       dma_unmap_single(host->dma_dev, host->ones_dma,
1409 +                               MMC_SPI_BLOCKSIZE, DMA_TO_DEVICE);
1410 +                       dma_unmap_single(host->dma_dev, host->data_dma,
1411 +                               sizeof(*host->data), DMA_BIDIRECTIONAL);
1412 +               }
1413 +
1414 +               kfree(host->data);
1415 +               kfree(host->ones);
1416 +
1417 +               spi->max_speed_hz = mmc->f_max;
1418 +               mmc_free_host(mmc);
1419 +               dev_set_drvdata(&spi->dev, NULL);
1420 +       }
1421 +       return 0;
1422 +}
1423 +
1424 +
1425 +static struct spi_driver mmc_spi_driver = {
1426 +       .driver = {
1427 +               .name =         "mmc_spi",
1428 +               .bus =          &spi_bus_type,
1429 +               .owner =        THIS_MODULE,
1430 +       },
1431 +       .probe =        mmc_spi_probe,
1432 +       .remove =       __devexit_p(mmc_spi_remove),
1433 +};
1434 +
1435 +
1436 +static int __init mmc_spi_init(void)
1437 +{
1438 +       return spi_register_driver(&mmc_spi_driver);
1439 +}
1440 +module_init(mmc_spi_init);
1441 +
1442 +
1443 +static void __exit mmc_spi_exit(void)
1444 +{
1445 +       spi_unregister_driver(&mmc_spi_driver);
1446 +}
1447 +module_exit(mmc_spi_exit);
1448 +
1449 +
1450 +MODULE_AUTHOR("Mike Lavender, David Brownell, "
1451 +               "Hans-Peter Nilsson, Jan Nikitenko");
1452 +MODULE_DESCRIPTION("SPI SD/MMC host driver");
1453 +MODULE_LICENSE("GPL");
1454 --- /dev/null
1455 +++ b/include/linux/spi/mmc_spi.h
1456 @@ -0,0 +1,33 @@
1457 +#ifndef __LINUX_SPI_MMC_SPI_H
1458 +#define __LINUX_SPI_MMC_SPI_H
1459 +
1460 +struct device;
1461 +struct mmc_host;
1462 +
1463 +/* Put this in platform_data of a device being used to manage an MMC/SD
1464 + * card slot.  (Modeled after PXA mmc glue; see that for usage examples.)
1465 + *
1466 + * REVISIT This is not a spi-specific notion.  Any card slot should be
1467 + * able to handle it.  If the MMC core doesn't adopt this kind of notion,
1468 + * switch the "struct device *" parameters over to "struct spi_device *".
1469 + */
1470 +struct mmc_spi_platform_data {
1471 +       /* driver activation and (optional) card detect irq hookup */
1472 +       int (*init)(struct device *,
1473 +               irqreturn_t (*)(int, void *),
1474 +               void *);
1475 +       void (*exit)(struct device *, void *);
1476 +
1477 +       /* sense switch on sd cards */
1478 +       int (*get_ro)(struct device *);
1479 +
1480 +       /* how long to debounce card detect, in msecs */
1481 +       u16 detect_delay;
1482 +
1483 +       /* power management */
1484 +       u16 powerup_msecs;              /* delay of up to 250 msec */
1485 +       u32 ocr_mask;                   /* available voltages */
1486 +       void (*setpower)(struct device *, unsigned int maskval);
1487 +};
1488 +
1489 +#endif /* __LINUX_SPI_MMC_SPI_H */
1490 --- a/drivers/mmc/core/bus.c
1491 +++ b/drivers/mmc/core/bus.c
1492 @@ -19,6 +19,7 @@
1493  
1494  #include "sysfs.h"
1495  #include "core.h"
1496 +#include "sdio_cis.h"
1497  #include "bus.h"
1498  
1499  #define dev_to_mmc_card(d)     container_of(d, struct mmc_card, dev)
1500 @@ -34,6 +35,8 @@
1501                 return sprintf(buf, "MMC\n");
1502         case MMC_TYPE_SD:
1503                 return sprintf(buf, "SD\n");
1504 +       case MMC_TYPE_SDIO:
1505 +               return sprintf(buf, "SDIO\n");
1506         default:
1507                 return -EFAULT;
1508         }
1509 @@ -55,36 +58,37 @@
1510  }
1511  
1512  static int
1513 -mmc_bus_uevent(struct device *dev, char **envp, int num_envp, char *buf,
1514 -               int buf_size)
1515 +mmc_bus_uevent(struct device *dev, char **envp,
1516 +               int num_envp, char *buffer, int buffer_size)
1517  {
1518         struct mmc_card *card = dev_to_mmc_card(dev);
1519 -       int retval = 0, i = 0, length = 0;
1520 -
1521 -#define add_env(fmt,val) do {                                  \
1522 -       retval = add_uevent_var(envp, num_envp, &i,             \
1523 -                               buf, buf_size, &length,         \
1524 -                               fmt, val);                      \
1525 -       if (retval)                                             \
1526 -               return retval;                                  \
1527 -} while (0);
1528 +       const char *type;
1529 +       int retval = 0;
1530 +       int i = 0, len = 0;
1531  
1532         switch (card->type) {
1533         case MMC_TYPE_MMC:
1534 -               add_env("MMC_TYPE=%s", "MMC");
1535 +               type = "MMC";
1536                 break;
1537         case MMC_TYPE_SD:
1538 -               add_env("MMC_TYPE=%s", "SD");
1539 +               type = "SD";
1540                 break;
1541 +       case MMC_TYPE_SDIO:
1542 +               type = "SDIO";
1543 +               break;
1544 +       default:
1545 +               type = NULL;
1546         }
1547  
1548 -       add_env("MMC_NAME=%s", mmc_card_name(card));
1549 -
1550 -#undef add_env
1551 +       if (type) {
1552 +               retval = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len, "MMC_TYPE=%s", type);
1553 +               if (retval)
1554 +                       return retval;
1555 +       }
1556  
1557 -       envp[i] = NULL;
1558 +       retval = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len, "MMC_NAME=%s", mmc_card_name(card));
1559  
1560 -       return 0;
1561 +       return retval;
1562  }
1563  
1564  static int mmc_bus_probe(struct device *dev)
1565 @@ -176,6 +180,11 @@
1566  {
1567         struct mmc_card *card = dev_to_mmc_card(dev);
1568  
1569 +       sdio_free_common_cis(card);
1570 +
1571 +       if (card->info)
1572 +               kfree(card->info);
1573 +
1574         kfree(card);
1575  }
1576  
1577 @@ -221,15 +230,25 @@
1578                 if (mmc_card_blockaddr(card))
1579                         type = "SDHC";
1580                 break;
1581 +       case MMC_TYPE_SDIO:
1582 +               type = "SDIO";
1583 +               break;
1584         default:
1585                 type = "?";
1586                 break;
1587         }
1588  
1589 -       printk(KERN_INFO "%s: new %s%s card at address %04x\n",
1590 -               mmc_hostname(card->host),
1591 -               mmc_card_highspeed(card) ? "high speed " : "",
1592 -               type, card->rca);
1593 +       if (mmc_host_is_spi(card->host)) {
1594 +               printk(KERN_INFO "%s: new %s%s card on SPI\n",
1595 +                       mmc_hostname(card->host),
1596 +                       mmc_card_highspeed(card) ? "high speed " : "",
1597 +                       type);
1598 +       } else {
1599 +               printk(KERN_INFO "%s: new %s%s card at address %04x\n",
1600 +                       mmc_hostname(card->host),
1601 +                       mmc_card_highspeed(card) ? "high speed " : "",
1602 +                       type, card->rca);
1603 +       }
1604  
1605         card->dev.uevent_suppress = 1;
1606  
1607 @@ -261,8 +280,13 @@
1608  void mmc_remove_card(struct mmc_card *card)
1609  {
1610         if (mmc_card_present(card)) {
1611 -               printk(KERN_INFO "%s: card %04x removed\n",
1612 -                       mmc_hostname(card->host), card->rca);
1613 +               if (mmc_host_is_spi(card->host)) {
1614 +                       printk(KERN_INFO "%s: SPI card removed\n",
1615 +                               mmc_hostname(card->host));
1616 +               } else {
1617 +                       printk(KERN_INFO "%s: card %04x removed\n",
1618 +                               mmc_hostname(card->host), card->rca);
1619 +               }
1620  
1621                 if (card->host->bus_ops->sysfs_remove)
1622                         card->host->bus_ops->sysfs_remove(card->host, card);
1623 --- a/drivers/mmc/core/core.c
1624 +++ b/drivers/mmc/core/core.c
1625 @@ -18,7 +18,7 @@
1626  #include <linux/delay.h>
1627  #include <linux/pagemap.h>
1628  #include <linux/err.h>
1629 -#include <asm/scatterlist.h>
1630 +#include <linux/leds.h>
1631  #include <linux/scatterlist.h>
1632  
1633  #include <linux/mmc/card.h>
1634 @@ -29,16 +29,27 @@
1635  #include "core.h"
1636  #include "bus.h"
1637  #include "host.h"
1638 +#include "sdio_bus.h"
1639  
1640  #include "mmc_ops.h"
1641  #include "sd_ops.h"
1642 +#include "sdio_ops.h"
1643  
1644  extern int mmc_attach_mmc(struct mmc_host *host, u32 ocr);
1645  extern int mmc_attach_sd(struct mmc_host *host, u32 ocr);
1646 +extern int mmc_attach_sdio(struct mmc_host *host, u32 ocr);
1647  
1648  static struct workqueue_struct *workqueue;
1649  
1650  /*
1651 + * Enabling software CRCs on the data blocks can be a significant (30%)
1652 + * performance cost, and for other reasons may not always be desired.
1653 + * So we allow it it to be disabled.
1654 + */
1655 +int use_spi_crc = 1;
1656 +module_param(use_spi_crc, bool, 0);
1657 +
1658 +/*
1659   * Internal function. Schedule delayed work in the MMC work queue.
1660   */
1661  static int mmc_schedule_delayed_work(struct delayed_work *work,
1662 @@ -68,6 +79,11 @@
1663         struct mmc_command *cmd = mrq->cmd;
1664         int err = cmd->error;
1665  
1666 +       if (err && cmd->retries && mmc_host_is_spi(host)) {
1667 +               if (cmd->resp[0] & R1_SPI_ILLEGAL_COMMAND)
1668 +                       cmd->retries = 0;
1669 +       }
1670 +
1671         if (err && cmd->retries) {
1672                 pr_debug("%s: req failed (CMD%u): %d, retrying...\n",
1673                         mmc_hostname(host), cmd->opcode, err);
1674 @@ -76,6 +92,8 @@
1675                 cmd->error = 0;
1676                 host->ops->request(host, mrq);
1677         } else {
1678 +               led_trigger_event(host->led, LED_OFF);
1679 +
1680                 pr_debug("%s: req done (CMD%u): %d: %08x %08x %08x %08x\n",
1681                         mmc_hostname(host), cmd->opcode, err,
1682                         cmd->resp[0], cmd->resp[1],
1683 @@ -118,7 +136,7 @@
1684                         "tsac %d ms nsac %d\n",
1685                         mmc_hostname(host), mrq->data->blksz,
1686                         mrq->data->blocks, mrq->data->flags,
1687 -                       mrq->data->timeout_ns / 10000000,
1688 +                       mrq->data->timeout_ns / 1000000,
1689                         mrq->data->timeout_clks);
1690         }
1691  
1692 @@ -130,6 +148,8 @@
1693  
1694         WARN_ON(!host->claimed);
1695  
1696 +       led_trigger_event(host->led, LED_FULL);
1697 +
1698         mrq->cmd->error = 0;
1699         mrq->cmd->mrq = mrq;
1700         if (mrq->data) {
1701 @@ -199,7 +219,7 @@
1702  {
1703         struct mmc_request mrq;
1704  
1705 -       BUG_ON(!host->claimed);
1706 +       WARN_ON(!host->claimed);
1707  
1708         memset(&mrq, 0, sizeof(struct mmc_request));
1709  
1710 @@ -220,17 +240,24 @@
1711   *     mmc_set_data_timeout - set the timeout for a data command
1712   *     @data: data phase for command
1713   *     @card: the MMC card associated with the data transfer
1714 - *     @write: flag to differentiate reads from writes
1715   *
1716   *     Computes the data timeout parameters according to the
1717   *     correct algorithm given the card type.
1718   */
1719 -void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card,
1720 -                         int write)
1721 +void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card)
1722  {
1723         unsigned int mult;
1724  
1725         /*
1726 +        * SDIO cards only define an upper 1 s limit on access.
1727 +        */
1728 +       if (mmc_card_sdio(card)) {
1729 +               data->timeout_ns = 1000000000;
1730 +               data->timeout_clks = 0;
1731 +               return;
1732 +       }
1733 +
1734 +       /*
1735          * SD cards use a 100 multiplier rather than 10
1736          */
1737         mult = mmc_card_sd(card) ? 100 : 10;
1738 @@ -239,7 +266,7 @@
1739          * Scale up the multiplier (and therefore the timeout) by
1740          * the r2w factor for writes.
1741          */
1742 -       if (write)
1743 +       if (data->flags & MMC_DATA_WRITE)
1744                 mult <<= card->csd.r2w_factor;
1745  
1746         data->timeout_ns = card->csd.tacc_ns * mult;
1747 @@ -255,7 +282,7 @@
1748                 timeout_us += data->timeout_clks * 1000 /
1749                         (card->host->ios.clock / 1000);
1750  
1751 -               if (write)
1752 +               if (data->flags & MMC_DATA_WRITE)
1753                         limit_us = 250000;
1754                 else
1755                         limit_us = 100000;
1756 @@ -272,15 +299,20 @@
1757  EXPORT_SYMBOL(mmc_set_data_timeout);
1758  
1759  /**
1760 - *     mmc_claim_host - exclusively claim a host
1761 + *     __mmc_claim_host - exclusively claim a host
1762   *     @host: mmc host to claim
1763 + *     @abort: whether or not the operation should be aborted
1764   *
1765 - *     Claim a host for a set of operations.
1766 + *     Claim a host for a set of operations.  If @abort is non null and
1767 + *     dereference a non-zero value then this will return prematurely with
1768 + *     that non-zero value without acquiring the lock.  Returns zero
1769 + *     with the lock held otherwise.
1770   */
1771 -void mmc_claim_host(struct mmc_host *host)
1772 +int __mmc_claim_host(struct mmc_host *host, atomic_t *abort)
1773  {
1774         DECLARE_WAITQUEUE(wait, current);
1775         unsigned long flags;
1776 +       int stop;
1777  
1778         might_sleep();
1779  
1780 @@ -288,19 +320,24 @@
1781         spin_lock_irqsave(&host->lock, flags);
1782         while (1) {
1783                 set_current_state(TASK_UNINTERRUPTIBLE);
1784 -               if (!host->claimed)
1785 +               stop = abort ? atomic_read(abort) : 0;
1786 +               if (stop || !host->claimed)
1787                         break;
1788                 spin_unlock_irqrestore(&host->lock, flags);
1789                 schedule();
1790                 spin_lock_irqsave(&host->lock, flags);
1791         }
1792         set_current_state(TASK_RUNNING);
1793 -       host->claimed = 1;
1794 +       if (!stop)
1795 +               host->claimed = 1;
1796 +       else
1797 +               wake_up(&host->wq);
1798         spin_unlock_irqrestore(&host->lock, flags);
1799         remove_wait_queue(&host->wq, &wait);
1800 +       return stop;
1801  }
1802  
1803 -EXPORT_SYMBOL(mmc_claim_host);
1804 +EXPORT_SYMBOL(__mmc_claim_host);
1805  
1806  /**
1807   *     mmc_release_host - release a host
1808 @@ -313,7 +350,7 @@
1809  {
1810         unsigned long flags;
1811  
1812 -       BUG_ON(!host->claimed);
1813 +       WARN_ON(!host->claimed);
1814  
1815         spin_lock_irqsave(&host->lock, flags);
1816         host->claimed = 0;
1817 @@ -433,19 +470,32 @@
1818         int bit = fls(host->ocr_avail) - 1;
1819  
1820         host->ios.vdd = bit;
1821 -       host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
1822 -       host->ios.chip_select = MMC_CS_DONTCARE;
1823 +       if (mmc_host_is_spi(host)) {
1824 +               host->ios.chip_select = MMC_CS_HIGH;
1825 +               host->ios.bus_mode = MMC_BUSMODE_PUSHPULL;
1826 +       } else {
1827 +               host->ios.chip_select = MMC_CS_DONTCARE;
1828 +               host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
1829 +       }
1830         host->ios.power_mode = MMC_POWER_UP;
1831         host->ios.bus_width = MMC_BUS_WIDTH_1;
1832         host->ios.timing = MMC_TIMING_LEGACY;
1833         mmc_set_ios(host);
1834  
1835 -       mmc_delay(1);
1836 +       /*
1837 +        * This delay should be sufficient to allow the power supply
1838 +        * to reach the minimum voltage.
1839 +        */
1840 +       mmc_delay(2);
1841  
1842         host->ios.clock = host->f_min;
1843         host->ios.power_mode = MMC_POWER_ON;
1844         mmc_set_ios(host);
1845  
1846 +       /*
1847 +        * This delay must be at least 74 clock sizes, or 1 ms, or the
1848 +        * time required to reach a stable voltage.
1849 +        */
1850         mmc_delay(2);
1851  }
1852  
1853 @@ -453,8 +503,10 @@
1854  {
1855         host->ios.clock = 0;
1856         host->ios.vdd = 0;
1857 -       host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
1858 -       host->ios.chip_select = MMC_CS_DONTCARE;
1859 +       if (!mmc_host_is_spi(host)) {
1860 +               host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
1861 +               host->ios.chip_select = MMC_CS_DONTCARE;
1862 +       }
1863         host->ios.power_mode = MMC_POWER_OFF;
1864         host->ios.bus_width = MMC_BUS_WIDTH_1;
1865         host->ios.timing = MMC_TIMING_LEGACY;
1866 @@ -511,7 +563,7 @@
1867         BUG_ON(!host);
1868         BUG_ON(!ops);
1869  
1870 -       BUG_ON(!host->claimed);
1871 +       WARN_ON(!host->claimed);
1872  
1873         spin_lock_irqsave(&host->lock, flags);
1874  
1875 @@ -535,8 +587,8 @@
1876  
1877         BUG_ON(!host);
1878  
1879 -       BUG_ON(!host->claimed);
1880 -       BUG_ON(!host->bus_ops);
1881 +       WARN_ON(!host->claimed);
1882 +       WARN_ON(!host->bus_ops);
1883  
1884         spin_lock_irqsave(&host->lock, flags);
1885  
1886 @@ -564,7 +616,7 @@
1887  #ifdef CONFIG_MMC_DEBUG
1888         unsigned long flags;
1889         spin_lock_irqsave(&host->lock, flags);
1890 -       BUG_ON(host->removed);
1891 +       WARN_ON(host->removed);
1892         spin_unlock_irqrestore(&host->lock, flags);
1893  #endif
1894  
1895 @@ -597,24 +649,38 @@
1896  
1897                 mmc_send_if_cond(host, host->ocr_avail);
1898  
1899 +               /*
1900 +                * First we search for SDIO...
1901 +                */
1902 +               err = mmc_send_io_op_cond(host, 0, &ocr);
1903 +               if (!err) {
1904 +                       if (mmc_attach_sdio(host, ocr))
1905 +                               mmc_power_off(host);
1906 +                       return;
1907 +               }
1908 +
1909 +               /*
1910 +                * ...then normal SD...
1911 +                */
1912                 err = mmc_send_app_op_cond(host, 0, &ocr);
1913 -               if (err == MMC_ERR_NONE) {
1914 +               if (!err) {
1915                         if (mmc_attach_sd(host, ocr))
1916                                 mmc_power_off(host);
1917 -               } else {
1918 -                       /*
1919 -                        * If we fail to detect any SD cards then try
1920 -                        * searching for MMC cards.
1921 -                        */
1922 -                       err = mmc_send_op_cond(host, 0, &ocr);
1923 -                       if (err == MMC_ERR_NONE) {
1924 -                               if (mmc_attach_mmc(host, ocr))
1925 -                                       mmc_power_off(host);
1926 -                       } else {
1927 +                       return;
1928 +               }
1929 +
1930 +               /*
1931 +                * ...and finally MMC.
1932 +                */
1933 +               err = mmc_send_op_cond(host, 0, &ocr);
1934 +               if (!err) {
1935 +                       if (mmc_attach_mmc(host, ocr))
1936                                 mmc_power_off(host);
1937 -                               mmc_release_host(host);
1938 -                       }
1939 +                       return;
1940                 }
1941 +
1942 +               mmc_release_host(host);
1943 +               mmc_power_off(host);
1944         } else {
1945                 if (host->bus_ops->detect && !host->bus_dead)
1946                         host->bus_ops->detect(host);
1947 @@ -725,22 +791,38 @@
1948                 return -ENOMEM;
1949  
1950         ret = mmc_register_bus();
1951 -       if (ret == 0) {
1952 -               ret = mmc_register_host_class();
1953 -               if (ret)
1954 -                       mmc_unregister_bus();
1955 -       }
1956 +       if (ret)
1957 +               goto destroy_workqueue;
1958 +
1959 +       ret = mmc_register_host_class();
1960 +       if (ret)
1961 +               goto unregister_bus;
1962 +
1963 +       ret = sdio_register_bus();
1964 +       if (ret)
1965 +               goto unregister_host_class;
1966 +
1967 +       return 0;
1968 +
1969 +unregister_host_class:
1970 +       mmc_unregister_host_class();
1971 +unregister_bus:
1972 +       mmc_unregister_bus();
1973 +destroy_workqueue:
1974 +       destroy_workqueue(workqueue);
1975 +
1976         return ret;
1977  }
1978  
1979  static void __exit mmc_exit(void)
1980  {
1981 +       sdio_unregister_bus();
1982         mmc_unregister_host_class();
1983         mmc_unregister_bus();
1984         destroy_workqueue(workqueue);
1985  }
1986  
1987 -module_init(mmc_init);
1988 +subsys_initcall(mmc_init);
1989  module_exit(mmc_exit);
1990  
1991  MODULE_LICENSE("GPL");
1992 --- a/drivers/mmc/core/core.h
1993 +++ b/drivers/mmc/core/core.h
1994 @@ -48,5 +48,7 @@
1995  void mmc_start_host(struct mmc_host *host);
1996  void mmc_stop_host(struct mmc_host *host);
1997  
1998 +extern int use_spi_crc;
1999 +
2000  #endif
2001  
2002 --- a/drivers/mmc/core/host.c
2003 +++ b/drivers/mmc/core/host.c
2004 @@ -15,6 +15,7 @@
2005  #include <linux/err.h>
2006  #include <linux/idr.h>
2007  #include <linux/pagemap.h>
2008 +#include <linux/leds.h>
2009  
2010  #include <linux/mmc/host.h>
2011  
2012 @@ -100,6 +101,9 @@
2013  {
2014         int err;
2015  
2016 +       WARN_ON((host->caps & MMC_CAP_SDIO_IRQ) &&
2017 +               !host->ops->enable_sdio_irq);
2018 +
2019         if (!idr_pre_get(&mmc_host_idr, GFP_KERNEL))
2020                 return -ENOMEM;
2021  
2022 @@ -112,6 +116,8 @@
2023         snprintf(host->class_dev.bus_id, BUS_ID_SIZE,
2024                  "mmc%d", host->index);
2025  
2026 +       led_trigger_register_simple(host->class_dev.bus_id, &host->led);
2027 +
2028         err = device_add(&host->class_dev);
2029         if (err)
2030                 return err;
2031 @@ -137,6 +143,8 @@
2032  
2033         device_del(&host->class_dev);
2034  
2035 +       led_trigger_unregister_simple(host->led);
2036 +
2037         spin_lock(&mmc_host_lock);
2038         idr_remove(&mmc_host_idr, host->index);
2039         spin_unlock(&mmc_host_lock);
2040 --- a/drivers/mmc/core/mmc.c
2041 +++ b/drivers/mmc/core/mmc.c
2042 @@ -161,13 +161,12 @@
2043  {
2044         int err;
2045         u8 *ext_csd;
2046 +       unsigned int ext_csd_struct;
2047  
2048         BUG_ON(!card);
2049  
2050 -       err = MMC_ERR_FAILED;
2051 -
2052         if (card->csd.mmca_vsn < CSD_SPEC_VER_4)
2053 -               return MMC_ERR_NONE;
2054 +               return 0;
2055  
2056         /*
2057          * As the ext_csd is so large and mostly unused, we don't store the
2058 @@ -176,13 +175,19 @@
2059         ext_csd = kmalloc(512, GFP_KERNEL);
2060         if (!ext_csd) {
2061                 printk(KERN_ERR "%s: could not allocate a buffer to "
2062 -                       "receive the ext_csd. mmc v4 cards will be "
2063 -                       "treated as v3.\n", mmc_hostname(card->host));
2064 -               return MMC_ERR_FAILED;
2065 +                       "receive the ext_csd.\n", mmc_hostname(card->host));
2066 +               return -ENOMEM;
2067         }
2068  
2069         err = mmc_send_ext_csd(card, ext_csd);
2070 -       if (err != MMC_ERR_NONE) {
2071 +       if (err) {
2072 +               /*
2073 +                * We all hosts that cannot perform the command
2074 +                * to fail more gracefully
2075 +                */
2076 +               if (err != -EINVAL)
2077 +                       goto out;
2078 +
2079                 /*
2080                  * High capacity cards should have this "magic" size
2081                  * stored in their CSD.
2082 @@ -197,18 +202,30 @@
2083                                 "EXT_CSD, performance might "
2084                                 "suffer.\n",
2085                                 mmc_hostname(card->host));
2086 -                       err = MMC_ERR_NONE;
2087 +                       err = 0;
2088                 }
2089 +
2090                 goto out;
2091         }
2092  
2093 -       card->ext_csd.sectors =
2094 -               ext_csd[EXT_CSD_SEC_CNT + 0] << 0 |
2095 -               ext_csd[EXT_CSD_SEC_CNT + 1] << 8 |
2096 -               ext_csd[EXT_CSD_SEC_CNT + 2] << 16 |
2097 -               ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
2098 -       if (card->ext_csd.sectors)
2099 -               mmc_card_set_blockaddr(card);
2100 +       ext_csd_struct = ext_csd[EXT_CSD_REV];
2101 +       if (ext_csd_struct > 2) {
2102 +               printk(KERN_ERR "%s: unrecognised EXT_CSD structure "
2103 +                       "version %d\n", mmc_hostname(card->host),
2104 +                       ext_csd_struct);
2105 +               err = -EINVAL;
2106 +               goto out;
2107 +       }
2108 +
2109 +       if (ext_csd_struct >= 2) {
2110 +               card->ext_csd.sectors =
2111 +                       ext_csd[EXT_CSD_SEC_CNT + 0] << 0 |
2112 +                       ext_csd[EXT_CSD_SEC_CNT + 1] << 8 |
2113 +                       ext_csd[EXT_CSD_SEC_CNT + 2] << 16 |
2114 +                       ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
2115 +               if (card->ext_csd.sectors)
2116 +                       mmc_card_set_blockaddr(card);
2117 +       }
2118  
2119         switch (ext_csd[EXT_CSD_CARD_TYPE]) {
2120         case EXT_CSD_CARD_TYPE_52 | EXT_CSD_CARD_TYPE_26:
2121 @@ -246,7 +263,7 @@
2122         unsigned int max_dtr;
2123  
2124         BUG_ON(!host);
2125 -       BUG_ON(!host->claimed);
2126 +       WARN_ON(!host->claimed);
2127  
2128         /*
2129          * Since we're changing the OCR value, we seem to
2130 @@ -258,19 +275,33 @@
2131  
2132         /* The extra bit indicates that we support high capacity */
2133         err = mmc_send_op_cond(host, ocr | (1 << 30), NULL);
2134 -       if (err != MMC_ERR_NONE)
2135 +       if (err)
2136                 goto err;
2137  
2138         /*
2139 +        * For SPI, enable CRC as appropriate.
2140 +        */
2141 +       if (mmc_host_is_spi(host)) {
2142 +               err = mmc_spi_set_crc(host, use_spi_crc);
2143 +               if (err)
2144 +                       goto err;
2145 +       }
2146 +
2147 +       /*
2148          * Fetch CID from card.
2149          */
2150 -       err = mmc_all_send_cid(host, cid);
2151 -       if (err != MMC_ERR_NONE)
2152 +       if (mmc_host_is_spi(host))
2153 +               err = mmc_send_cid(host, cid);
2154 +       else
2155 +               err = mmc_all_send_cid(host, cid);
2156 +       if (err)
2157                 goto err;
2158  
2159         if (oldcard) {
2160 -               if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
2161 +               if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
2162 +                       err = -ENOENT;
2163                         goto err;
2164 +               }
2165  
2166                 card = oldcard;
2167         } else {
2168 @@ -278,8 +309,10 @@
2169                  * Allocate card structure.
2170                  */
2171                 card = mmc_alloc_card(host);
2172 -               if (IS_ERR(card))
2173 +               if (IS_ERR(card)) {
2174 +                       err = PTR_ERR(card);
2175                         goto err;
2176 +               }
2177  
2178                 card->type = MMC_TYPE_MMC;
2179                 card->rca = 1;
2180 @@ -287,43 +320,47 @@
2181         }
2182  
2183         /*
2184 -        * Set card RCA.
2185 +        * For native busses:  set card RCA and quit open drain mode.
2186          */
2187 -       err = mmc_set_relative_addr(card);
2188 -       if (err != MMC_ERR_NONE)
2189 -               goto free_card;
2190 +       if (!mmc_host_is_spi(host)) {
2191 +               err = mmc_set_relative_addr(card);
2192 +               if (err)
2193 +                       goto free_card;
2194  
2195 -       mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
2196 +               mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
2197 +       }
2198  
2199         if (!oldcard) {
2200                 /*
2201                  * Fetch CSD from card.
2202                  */
2203                 err = mmc_send_csd(card, card->raw_csd);
2204 -               if (err != MMC_ERR_NONE)
2205 +               if (err)
2206                         goto free_card;
2207  
2208                 err = mmc_decode_csd(card);
2209 -               if (err < 0)
2210 +               if (err)
2211                         goto free_card;
2212                 err = mmc_decode_cid(card);
2213 -               if (err < 0)
2214 +               if (err)
2215                         goto free_card;
2216         }
2217  
2218         /*
2219          * Select card, as all following commands rely on that.
2220          */
2221 -       err = mmc_select_card(card);
2222 -       if (err != MMC_ERR_NONE)
2223 -               goto free_card;
2224 +       if (!mmc_host_is_spi(host)) {
2225 +               err = mmc_select_card(card);
2226 +               if (err)
2227 +                       goto free_card;
2228 +       }
2229  
2230         if (!oldcard) {
2231                 /*
2232 -                * Fetch and process extened CSD.
2233 +                * Fetch and process extended CSD.
2234                  */
2235                 err = mmc_read_ext_csd(card);
2236 -               if (err != MMC_ERR_NONE)
2237 +               if (err)
2238                         goto free_card;
2239         }
2240  
2241 @@ -334,7 +371,7 @@
2242                 (host->caps & MMC_CAP_MMC_HIGHSPEED)) {
2243                 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
2244                         EXT_CSD_HS_TIMING, 1);
2245 -               if (err != MMC_ERR_NONE)
2246 +               if (err)
2247                         goto free_card;
2248  
2249                 mmc_card_set_highspeed(card);
2250 @@ -363,7 +400,7 @@
2251                 (host->caps & MMC_CAP_4_BIT_DATA)) {
2252                 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
2253                         EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_4);
2254 -               if (err != MMC_ERR_NONE)
2255 +               if (err)
2256                         goto free_card;
2257  
2258                 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
2259 @@ -372,14 +409,14 @@
2260         if (!oldcard)
2261                 host->card = card;
2262  
2263 -       return MMC_ERR_NONE;
2264 +       return 0;
2265  
2266  free_card:
2267         if (!oldcard)
2268                 mmc_remove_card(card);
2269  err:
2270  
2271 -       return MMC_ERR_FAILED;
2272 +       return err;
2273  }
2274  
2275  /*
2276 @@ -413,7 +450,7 @@
2277  
2278         mmc_release_host(host);
2279  
2280 -       if (err != MMC_ERR_NONE) {
2281 +       if (err) {
2282                 mmc_remove(host);
2283  
2284                 mmc_claim_host(host);
2285 @@ -480,7 +517,8 @@
2286         BUG_ON(!host->card);
2287  
2288         mmc_claim_host(host);
2289 -       mmc_deselect_cards(host);
2290 +       if (!mmc_host_is_spi(host))
2291 +               mmc_deselect_cards(host);
2292         host->card->state &= ~MMC_STATE_HIGHSPEED;
2293         mmc_release_host(host);
2294  }
2295 @@ -502,7 +540,7 @@
2296         err = mmc_init_card(host, host->ocr, host->card);
2297         mmc_release_host(host);
2298  
2299 -       if (err != MMC_ERR_NONE) {
2300 +       if (err) {
2301                 mmc_remove(host);
2302  
2303                 mmc_claim_host(host);
2304 @@ -536,11 +574,20 @@
2305         int err;
2306  
2307         BUG_ON(!host);
2308 -       BUG_ON(!host->claimed);
2309 +       WARN_ON(!host->claimed);
2310  
2311         mmc_attach_bus(host, &mmc_ops);
2312  
2313         /*
2314 +        * We need to get OCR a different way for SPI.
2315 +        */
2316 +       if (mmc_host_is_spi(host)) {
2317 +               err = mmc_spi_read_ocr(host, 1, &ocr);
2318 +               if (err)
2319 +                       goto err;
2320 +       }
2321 +
2322 +       /*
2323          * Sanity check the voltages that the card claims to
2324          * support.
2325          */
2326 @@ -565,7 +612,7 @@
2327          * Detect and init the card.
2328          */
2329         err = mmc_init_card(host, host->ocr, NULL);
2330 -       if (err != MMC_ERR_NONE)
2331 +       if (err)
2332                 goto err;
2333  
2334         mmc_release_host(host);
2335 @@ -587,6 +634,6 @@
2336         printk(KERN_ERR "%s: error %d whilst initialising MMC card\n",
2337                 mmc_hostname(host), err);
2338  
2339 -       return 0;
2340 +       return err;
2341  }
2342  
2343 --- a/drivers/mmc/core/mmc_ops.c
2344 +++ b/drivers/mmc/core/mmc_ops.c
2345 @@ -10,7 +10,6 @@
2346   */
2347  
2348  #include <linux/types.h>
2349 -#include <asm/scatterlist.h>
2350  #include <linux/scatterlist.h>
2351  
2352  #include <linux/mmc/host.h>
2353 @@ -40,10 +39,10 @@
2354         }
2355  
2356         err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
2357 -       if (err != MMC_ERR_NONE)
2358 +       if (err)
2359                 return err;
2360  
2361 -       return MMC_ERR_NONE;
2362 +       return 0;
2363  }
2364  
2365  int mmc_select_card(struct mmc_card *card)
2366 @@ -63,23 +62,36 @@
2367         int err;
2368         struct mmc_command cmd;
2369  
2370 -       mmc_set_chip_select(host, MMC_CS_HIGH);
2371 -
2372 -       mmc_delay(1);
2373 +       /*
2374 +        * Non-SPI hosts need to prevent chipselect going active during
2375 +        * GO_IDLE; that would put chips into SPI mode.  Remind them of
2376 +        * that in case of hardware that won't pull up DAT3/nCS otherwise.
2377 +        *
2378 +        * SPI hosts ignore ios.chip_select; it's managed according to
2379 +        * rules that must accomodate non-MMC slaves which this layer
2380 +        * won't even know about.
2381 +        */
2382 +       if (!mmc_host_is_spi(host)) {
2383 +               mmc_set_chip_select(host, MMC_CS_HIGH);
2384 +               mmc_delay(1);
2385 +       }
2386  
2387         memset(&cmd, 0, sizeof(struct mmc_command));
2388  
2389         cmd.opcode = MMC_GO_IDLE_STATE;
2390         cmd.arg = 0;
2391 -       cmd.flags = MMC_RSP_NONE | MMC_CMD_BC;
2392 +       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_NONE | MMC_CMD_BC;
2393  
2394         err = mmc_wait_for_cmd(host, &cmd, 0);
2395  
2396         mmc_delay(1);
2397  
2398 -       mmc_set_chip_select(host, MMC_CS_DONTCARE);
2399 +       if (!mmc_host_is_spi(host)) {
2400 +               mmc_set_chip_select(host, MMC_CS_DONTCARE);
2401 +               mmc_delay(1);
2402 +       }
2403  
2404 -       mmc_delay(1);
2405 +       host->use_spi_crc = 0;
2406  
2407         return err;
2408  }
2409 @@ -94,23 +106,33 @@
2410         memset(&cmd, 0, sizeof(struct mmc_command));
2411  
2412         cmd.opcode = MMC_SEND_OP_COND;
2413 -       cmd.arg = ocr;
2414 -       cmd.flags = MMC_RSP_R3 | MMC_CMD_BCR;
2415 +       cmd.arg = mmc_host_is_spi(host) ? 0 : ocr;
2416 +       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R3 | MMC_CMD_BCR;
2417  
2418         for (i = 100; i; i--) {
2419                 err = mmc_wait_for_cmd(host, &cmd, 0);
2420 -               if (err != MMC_ERR_NONE)
2421 +               if (err)
2422                         break;
2423  
2424 -               if (cmd.resp[0] & MMC_CARD_BUSY || ocr == 0)
2425 +               /* if we're just probing, do a single pass */
2426 +               if (ocr == 0)
2427                         break;
2428  
2429 -               err = MMC_ERR_TIMEOUT;
2430 +               /* otherwise wait until reset completes */
2431 +               if (mmc_host_is_spi(host)) {
2432 +                       if (!(cmd.resp[0] & R1_SPI_IDLE))
2433 +                               break;
2434 +               } else {
2435 +                       if (cmd.resp[0] & MMC_CARD_BUSY)
2436 +                               break;
2437 +               }
2438 +
2439 +               err = -ETIMEDOUT;
2440  
2441                 mmc_delay(10);
2442         }
2443  
2444 -       if (rocr)
2445 +       if (rocr && !mmc_host_is_spi(host))
2446                 *rocr = cmd.resp[0];
2447  
2448         return err;
2449 @@ -131,12 +153,12 @@
2450         cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
2451  
2452         err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
2453 -       if (err != MMC_ERR_NONE)
2454 +       if (err)
2455                 return err;
2456  
2457         memcpy(cid, cmd.resp, sizeof(u32) * 4);
2458  
2459 -       return MMC_ERR_NONE;
2460 +       return 0;
2461  }
2462  
2463  int mmc_set_relative_addr(struct mmc_card *card)
2464 @@ -154,46 +176,52 @@
2465         cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
2466  
2467         err = mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
2468 -       if (err != MMC_ERR_NONE)
2469 +       if (err)
2470                 return err;
2471  
2472 -       return MMC_ERR_NONE;
2473 +       return 0;
2474  }
2475  
2476 -int mmc_send_csd(struct mmc_card *card, u32 *csd)
2477 +static int
2478 +mmc_send_cxd_native(struct mmc_host *host, u32 arg, u32 *cxd, int opcode)
2479  {
2480         int err;
2481         struct mmc_command cmd;
2482  
2483 -       BUG_ON(!card);
2484 -       BUG_ON(!card->host);
2485 -       BUG_ON(!csd);
2486 +       BUG_ON(!host);
2487 +       BUG_ON(!cxd);
2488  
2489         memset(&cmd, 0, sizeof(struct mmc_command));
2490  
2491 -       cmd.opcode = MMC_SEND_CSD;
2492 -       cmd.arg = card->rca << 16;
2493 +       cmd.opcode = opcode;
2494 +       cmd.arg = arg;
2495         cmd.flags = MMC_RSP_R2 | MMC_CMD_AC;
2496  
2497 -       err = mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
2498 -       if (err != MMC_ERR_NONE)
2499 +       err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
2500 +       if (err)
2501                 return err;
2502  
2503 -       memcpy(csd, cmd.resp, sizeof(u32) * 4);
2504 +       memcpy(cxd, cmd.resp, sizeof(u32) * 4);
2505  
2506 -       return MMC_ERR_NONE;
2507 +       return 0;
2508  }
2509  
2510 -int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd)
2511 +static int
2512 +mmc_send_cxd_data(struct mmc_card *card, struct mmc_host *host,
2513 +               u32 opcode, void *buf, unsigned len)
2514  {
2515         struct mmc_request mrq;
2516         struct mmc_command cmd;
2517         struct mmc_data data;
2518         struct scatterlist sg;
2519 +       void *data_buf;
2520  
2521 -       BUG_ON(!card);
2522 -       BUG_ON(!card->host);
2523 -       BUG_ON(!ext_csd);
2524 +       /* dma onto stack is unsafe/nonportable, but callers to this
2525 +        * routine normally provide temporary on-stack buffers ...
2526 +        */
2527 +       data_buf = kmalloc(len, GFP_KERNEL);
2528 +       if (data_buf == NULL)
2529 +               return -ENOMEM;
2530  
2531         memset(&mrq, 0, sizeof(struct mmc_request));
2532         memset(&cmd, 0, sizeof(struct mmc_command));
2533 @@ -202,28 +230,117 @@
2534         mrq.cmd = &cmd;
2535         mrq.data = &data;
2536  
2537 -       cmd.opcode = MMC_SEND_EXT_CSD;
2538 +       cmd.opcode = opcode;
2539         cmd.arg = 0;
2540 -       cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
2541  
2542 -       data.blksz = 512;
2543 +       /* NOTE HACK:  the MMC_RSP_SPI_R1 is always correct here, but we
2544 +        * rely on callers to never use this with "native" calls for reading
2545 +        * CSD or CID.  Native versions of those commands use the R2 type,
2546 +        * not R1 plus a data block.
2547 +        */
2548 +       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
2549 +
2550 +       data.blksz = len;
2551         data.blocks = 1;
2552         data.flags = MMC_DATA_READ;
2553         data.sg = &sg;
2554         data.sg_len = 1;
2555  
2556 -       sg_init_one(&sg, ext_csd, 512);
2557 +       sg_init_one(&sg, data_buf, len);
2558 +
2559 +       if (card)
2560 +               mmc_set_data_timeout(&data, card);
2561  
2562 -       mmc_set_data_timeout(&data, card, 0);
2563 +       mmc_wait_for_req(host, &mrq);
2564  
2565 -       mmc_wait_for_req(card->host, &mrq);
2566 +       memcpy(buf, data_buf, len);
2567 +       kfree(data_buf);
2568  
2569 -       if (cmd.error != MMC_ERR_NONE)
2570 +       if (cmd.error)
2571                 return cmd.error;
2572 -       if (data.error != MMC_ERR_NONE)
2573 +       if (data.error)
2574                 return data.error;
2575  
2576 -       return MMC_ERR_NONE;
2577 +       return 0;
2578 +}
2579 +
2580 +int mmc_send_csd(struct mmc_card *card, u32 *csd)
2581 +{
2582 +       int ret, i;
2583 +
2584 +       if (!mmc_host_is_spi(card->host))
2585 +               return mmc_send_cxd_native(card->host, card->rca << 16,
2586 +                               csd, MMC_SEND_CSD);
2587 +
2588 +       ret = mmc_send_cxd_data(card, card->host, MMC_SEND_CSD, csd, 16);
2589 +       if (ret)
2590 +               return ret;
2591 +
2592 +       for (i = 0;i < 4;i++)
2593 +               csd[i] = be32_to_cpu(csd[i]);
2594 +
2595 +       return 0;
2596 +}
2597 +
2598 +int mmc_send_cid(struct mmc_host *host, u32 *cid)
2599 +{
2600 +       int ret, i;
2601 +
2602 +       if (!mmc_host_is_spi(host)) {
2603 +               if (!host->card)
2604 +                       return -EINVAL;
2605 +               return mmc_send_cxd_native(host, host->card->rca << 16,
2606 +                               cid, MMC_SEND_CID);
2607 +       }
2608 +
2609 +       ret = mmc_send_cxd_data(NULL, host, MMC_SEND_CID, cid, 16);
2610 +       if (ret)
2611 +               return ret;
2612 +
2613 +       for (i = 0;i < 4;i++)
2614 +               cid[i] = be32_to_cpu(cid[i]);
2615 +
2616 +       return 0;
2617 +}
2618 +
2619 +int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd)
2620 +{
2621 +       return mmc_send_cxd_data(card, card->host, MMC_SEND_EXT_CSD,
2622 +                       ext_csd, 512);
2623 +}
2624 +
2625 +int mmc_spi_read_ocr(struct mmc_host *host, int highcap, u32 *ocrp)
2626 +{
2627 +       struct mmc_command cmd;
2628 +       int err;
2629 +
2630 +       memset(&cmd, 0, sizeof(struct mmc_command));
2631 +
2632 +       cmd.opcode = MMC_SPI_READ_OCR;
2633 +       cmd.arg = highcap ? (1 << 30) : 0;
2634 +       cmd.flags = MMC_RSP_SPI_R3;
2635 +
2636 +       err = mmc_wait_for_cmd(host, &cmd, 0);
2637 +
2638 +       *ocrp = cmd.resp[1];
2639 +       return err;
2640 +}
2641 +
2642 +int mmc_spi_set_crc(struct mmc_host *host, int use_crc)
2643 +{
2644 +       struct mmc_command cmd;
2645 +       int err;
2646 +
2647 +       memset(&cmd, 0, sizeof(struct mmc_command));
2648 +
2649 +       cmd.opcode = MMC_SPI_CRC_ON_OFF;
2650 +       cmd.flags = MMC_RSP_SPI_R1;
2651 +       cmd.arg = use_crc;
2652 +
2653 +       err = mmc_wait_for_cmd(host, &cmd, 0);
2654 +       if (!err)
2655 +               host->use_spi_crc = use_crc;
2656 +       return err;
2657  }
2658  
2659  int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value)
2660 @@ -241,13 +358,13 @@
2661                   (index << 16) |
2662                   (value << 8) |
2663                   set;
2664 -       cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
2665 +       cmd.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
2666  
2667         err = mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
2668 -       if (err != MMC_ERR_NONE)
2669 +       if (err)
2670                 return err;
2671  
2672 -       return MMC_ERR_NONE;
2673 +       return 0;
2674  }
2675  
2676  int mmc_send_status(struct mmc_card *card, u32 *status)
2677 @@ -261,16 +378,20 @@
2678         memset(&cmd, 0, sizeof(struct mmc_command));
2679  
2680         cmd.opcode = MMC_SEND_STATUS;
2681 -       cmd.arg = card->rca << 16;
2682 -       cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
2683 +       if (!mmc_host_is_spi(card->host))
2684 +               cmd.arg = card->rca << 16;
2685 +       cmd.flags = MMC_RSP_SPI_R2 | MMC_RSP_R1 | MMC_CMD_AC;
2686  
2687         err = mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
2688 -       if (err != MMC_ERR_NONE)
2689 +       if (err)
2690                 return err;
2691  
2692 +       /* NOTE: callers are required to understand the difference
2693 +        * between "native" and SPI format status words!
2694 +        */
2695         if (status)
2696                 *status = cmd.resp[0];
2697  
2698 -       return MMC_ERR_NONE;
2699 +       return 0;
2700  }
2701  
2702 --- a/drivers/mmc/core/mmc_ops.h
2703 +++ b/drivers/mmc/core/mmc_ops.h
2704 @@ -22,6 +22,9 @@
2705  int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd);
2706  int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value);
2707  int mmc_send_status(struct mmc_card *card, u32 *status);
2708 +int mmc_send_cid(struct mmc_host *host, u32 *cid);
2709 +int mmc_spi_read_ocr(struct mmc_host *host, int highcap, u32 *ocrp);
2710 +int mmc_spi_set_crc(struct mmc_host *host, int use_crc);
2711  
2712  #endif
2713  
2714 --- a/drivers/mmc/core/sd.c
2715 +++ b/drivers/mmc/core/sd.c
2716 @@ -166,8 +166,6 @@
2717         unsigned int scr_struct;
2718         u32 resp[4];
2719  
2720 -       BUG_ON(!mmc_card_sd(card));
2721 -
2722         resp[3] = card->raw_scr[1];
2723         resp[2] = card->raw_scr[0];
2724  
2725 @@ -193,30 +191,38 @@
2726         u8 *status;
2727  
2728         if (card->scr.sda_vsn < SCR_SPEC_VER_1)
2729 -               return MMC_ERR_NONE;
2730 +               return 0;
2731  
2732         if (!(card->csd.cmdclass & CCC_SWITCH)) {
2733                 printk(KERN_WARNING "%s: card lacks mandatory switch "
2734                         "function, performance might suffer.\n",
2735                         mmc_hostname(card->host));
2736 -               return MMC_ERR_NONE;
2737 +               return 0;
2738         }
2739  
2740 -       err = MMC_ERR_FAILED;
2741 +       err = -EIO;
2742  
2743         status = kmalloc(64, GFP_KERNEL);
2744         if (!status) {
2745                 printk(KERN_ERR "%s: could not allocate a buffer for "
2746                         "switch capabilities.\n", mmc_hostname(card->host));
2747 -               return err;
2748 +               return -ENOMEM;
2749         }
2750  
2751         err = mmc_sd_switch(card, 0, 0, 1, status);
2752 -       if (err != MMC_ERR_NONE) {
2753 +       if (err) {
2754 +               /*
2755 +                * We all hosts that cannot perform the command
2756 +                * to fail more gracefully
2757 +                */
2758 +               if (err != -EINVAL)
2759 +                       goto out;
2760 +
2761                 printk(KERN_WARNING "%s: problem reading switch "
2762                         "capabilities, performance might suffer.\n",
2763                         mmc_hostname(card->host));
2764 -               err = MMC_ERR_NONE;
2765 +               err = 0;
2766 +
2767                 goto out;
2768         }
2769  
2770 @@ -238,28 +244,28 @@
2771         u8 *status;
2772  
2773         if (card->scr.sda_vsn < SCR_SPEC_VER_1)
2774 -               return MMC_ERR_NONE;
2775 +               return 0;
2776  
2777         if (!(card->csd.cmdclass & CCC_SWITCH))
2778 -               return MMC_ERR_NONE;
2779 +               return 0;
2780  
2781         if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
2782 -               return MMC_ERR_NONE;
2783 +               return 0;
2784  
2785         if (card->sw_caps.hs_max_dtr == 0)
2786 -               return MMC_ERR_NONE;
2787 +               return 0;
2788  
2789 -       err = MMC_ERR_FAILED;
2790 +       err = -EIO;
2791  
2792         status = kmalloc(64, GFP_KERNEL);
2793         if (!status) {
2794                 printk(KERN_ERR "%s: could not allocate a buffer for "
2795                         "switch capabilities.\n", mmc_hostname(card->host));
2796 -               return err;
2797 +               return -ENOMEM;
2798         }
2799  
2800         err = mmc_sd_switch(card, 1, 0, 1, status);
2801 -       if (err != MMC_ERR_NONE)
2802 +       if (err)
2803                 goto out;
2804  
2805         if ((status[16] & 0xF) != 1) {
2806 @@ -292,7 +298,7 @@
2807         unsigned int max_dtr;
2808  
2809         BUG_ON(!host);
2810 -       BUG_ON(!host->claimed);
2811 +       WARN_ON(!host->claimed);
2812  
2813         /*
2814          * Since we're changing the OCR value, we seem to
2815 @@ -309,23 +315,37 @@
2816          * block-addressed SDHC cards.
2817          */
2818         err = mmc_send_if_cond(host, ocr);
2819 -       if (err == MMC_ERR_NONE)
2820 +       if (!err)
2821                 ocr |= 1 << 30;
2822  
2823         err = mmc_send_app_op_cond(host, ocr, NULL);
2824 -       if (err != MMC_ERR_NONE)
2825 +       if (err)
2826                 goto err;
2827  
2828         /*
2829 +        * For SPI, enable CRC as appropriate.
2830 +        */
2831 +       if (mmc_host_is_spi(host)) {
2832 +               err = mmc_spi_set_crc(host, use_spi_crc);
2833 +               if (err)
2834 +                       goto err;
2835 +       }
2836 +
2837 +       /*
2838          * Fetch CID from card.
2839          */
2840 -       err = mmc_all_send_cid(host, cid);
2841 -       if (err != MMC_ERR_NONE)
2842 +       if (mmc_host_is_spi(host))
2843 +               err = mmc_send_cid(host, cid);
2844 +       else
2845 +               err = mmc_all_send_cid(host, cid);
2846 +       if (err)
2847                 goto err;
2848  
2849         if (oldcard) {
2850 -               if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
2851 +               if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
2852 +                       err = -ENOENT;
2853                         goto err;
2854 +               }
2855  
2856                 card = oldcard;
2857         } else {
2858 @@ -333,32 +353,36 @@
2859                  * Allocate card structure.
2860                  */
2861                 card = mmc_alloc_card(host);
2862 -               if (IS_ERR(card))
2863 +               if (IS_ERR(card)) {
2864 +                       err = PTR_ERR(card);
2865                         goto err;
2866 +               }
2867  
2868                 card->type = MMC_TYPE_SD;
2869                 memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
2870         }
2871  
2872         /*
2873 -        * Set card RCA.
2874 +        * For native busses:  get card RCA and quit open drain mode.
2875          */
2876 -       err = mmc_send_relative_addr(host, &card->rca);
2877 -       if (err != MMC_ERR_NONE)
2878 -               goto free_card;
2879 +       if (!mmc_host_is_spi(host)) {
2880 +               err = mmc_send_relative_addr(host, &card->rca);
2881 +               if (err)
2882 +                       goto free_card;
2883  
2884 -       mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
2885 +               mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
2886 +       }
2887  
2888         if (!oldcard) {
2889                 /*
2890                  * Fetch CSD from card.
2891                  */
2892                 err = mmc_send_csd(card, card->raw_csd);
2893 -               if (err != MMC_ERR_NONE)
2894 +               if (err)
2895                         goto free_card;
2896  
2897                 err = mmc_decode_csd(card);
2898 -               if (err < 0)
2899 +               if (err)
2900                         goto free_card;
2901  
2902                 mmc_decode_cid(card);
2903 @@ -367,16 +391,18 @@
2904         /*
2905          * Select card, as all following commands rely on that.
2906          */
2907 -       err = mmc_select_card(card);
2908 -       if (err != MMC_ERR_NONE)
2909 -               goto free_card;
2910 +       if (!mmc_host_is_spi(host)) {
2911 +               err = mmc_select_card(card);
2912 +               if (err)
2913 +                       goto free_card;
2914 +       }
2915  
2916         if (!oldcard) {
2917                 /*
2918                  * Fetch SCR from card.
2919                  */
2920                 err = mmc_app_send_scr(card, card->raw_scr);
2921 -               if (err != MMC_ERR_NONE)
2922 +               if (err)
2923                         goto free_card;
2924  
2925                 err = mmc_decode_scr(card);
2926 @@ -387,7 +413,7 @@
2927                  * Fetch switch information from card.
2928                  */
2929                 err = mmc_read_switch(card);
2930 -               if (err != MMC_ERR_NONE)
2931 +               if (err)
2932                         goto free_card;
2933         }
2934  
2935 @@ -395,7 +421,7 @@
2936          * Attempt to change to high-speed (if supported)
2937          */
2938         err = mmc_switch_hs(card);
2939 -       if (err != MMC_ERR_NONE)
2940 +       if (err)
2941                 goto free_card;
2942  
2943         /*
2944 @@ -418,7 +444,7 @@
2945         if ((host->caps & MMC_CAP_4_BIT_DATA) &&
2946                 (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
2947                 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
2948 -               if (err != MMC_ERR_NONE)
2949 +               if (err)
2950                         goto free_card;
2951  
2952                 mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
2953 @@ -442,14 +468,14 @@
2954         if (!oldcard)
2955                 host->card = card;
2956  
2957 -       return MMC_ERR_NONE;
2958 +       return 0;
2959  
2960  free_card:
2961         if (!oldcard)
2962                 mmc_remove_card(card);
2963  err:
2964  
2965 -       return MMC_ERR_FAILED;
2966 +       return err;
2967  }
2968  
2969  /*
2970 @@ -483,7 +509,7 @@
2971  
2972         mmc_release_host(host);
2973  
2974 -       if (err != MMC_ERR_NONE) {
2975 +       if (err) {
2976                 mmc_sd_remove(host);
2977  
2978                 mmc_claim_host(host);
2979 @@ -552,7 +578,8 @@
2980         BUG_ON(!host->card);
2981  
2982         mmc_claim_host(host);
2983 -       mmc_deselect_cards(host);
2984 +       if (!mmc_host_is_spi(host))
2985 +               mmc_deselect_cards(host);
2986         host->card->state &= ~MMC_STATE_HIGHSPEED;
2987         mmc_release_host(host);
2988  }
2989 @@ -574,7 +601,7 @@
2990         err = mmc_sd_init_card(host, host->ocr, host->card);
2991         mmc_release_host(host);
2992  
2993 -       if (err != MMC_ERR_NONE) {
2994 +       if (err) {
2995                 mmc_sd_remove(host);
2996  
2997                 mmc_claim_host(host);
2998 @@ -608,11 +635,22 @@
2999         int err;
3000  
3001         BUG_ON(!host);
3002 -       BUG_ON(!host->claimed);
3003 +       WARN_ON(!host->claimed);
3004  
3005         mmc_attach_bus(host, &mmc_sd_ops);
3006  
3007         /*
3008 +        * We need to get OCR a different way for SPI.
3009 +        */
3010 +       if (mmc_host_is_spi(host)) {
3011 +               mmc_go_idle(host);
3012 +
3013 +               err = mmc_spi_read_ocr(host, 0, &ocr);
3014 +               if (err)
3015 +                       goto err;
3016 +       }
3017 +
3018 +       /*
3019          * Sanity check the voltages that the card claims to
3020          * support.
3021          */
3022 @@ -644,7 +682,7 @@
3023          * Detect and init the card.
3024          */
3025         err = mmc_sd_init_card(host, host->ocr, NULL);
3026 -       if (err != MMC_ERR_NONE)
3027 +       if (err)
3028                 goto err;
3029  
3030         mmc_release_host(host);
3031 @@ -666,6 +704,6 @@
3032         printk(KERN_ERR "%s: error %d whilst initialising SD card\n",
3033                 mmc_hostname(host), err);
3034  
3035 -       return 0;
3036 +       return err;
3037  }
3038  
3039 --- a/drivers/mmc/core/sd_ops.c
3040 +++ b/drivers/mmc/core/sd_ops.c
3041 @@ -10,7 +10,6 @@
3042   */
3043  
3044  #include <linux/types.h>
3045 -#include <asm/scatterlist.h>
3046  #include <linux/scatterlist.h>
3047  
3048  #include <linux/mmc/host.h>
3049 @@ -33,21 +32,21 @@
3050  
3051         if (card) {
3052                 cmd.arg = card->rca << 16;
3053 -               cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
3054 +               cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
3055         } else {
3056                 cmd.arg = 0;
3057 -               cmd.flags = MMC_RSP_R1 | MMC_CMD_BCR;
3058 +               cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_BCR;
3059         }
3060  
3061         err = mmc_wait_for_cmd(host, &cmd, 0);
3062 -       if (err != MMC_ERR_NONE)
3063 +       if (err)
3064                 return err;
3065  
3066         /* Check that card supported application commands */
3067 -       if (!(cmd.resp[0] & R1_APP_CMD))
3068 -               return MMC_ERR_FAILED;
3069 +       if (!mmc_host_is_spi(host) && !(cmd.resp[0] & R1_APP_CMD))
3070 +               return -EOPNOTSUPP;
3071  
3072 -       return MMC_ERR_NONE;
3073 +       return 0;
3074  }
3075  
3076  /**
3077 @@ -73,7 +72,7 @@
3078         BUG_ON(!cmd);
3079         BUG_ON(retries < 0);
3080  
3081 -       err = MMC_ERR_INVALID;
3082 +       err = -EIO;
3083  
3084         /*
3085          * We have to resend MMC_APP_CMD for each attempt so
3086 @@ -83,8 +82,14 @@
3087                 memset(&mrq, 0, sizeof(struct mmc_request));
3088  
3089                 err = mmc_app_cmd(host, card);
3090 -               if (err != MMC_ERR_NONE)
3091 +               if (err) {
3092 +                       /* no point in retrying; no APP commands allowed */
3093 +                       if (mmc_host_is_spi(host)) {
3094 +                               if (cmd->resp[0] & R1_SPI_ILLEGAL_COMMAND)
3095 +                                       break;
3096 +                       }
3097                         continue;
3098 +               }
3099  
3100                 memset(&mrq, 0, sizeof(struct mmc_request));
3101  
3102 @@ -97,8 +102,14 @@
3103                 mmc_wait_for_req(host, &mrq);
3104  
3105                 err = cmd->error;
3106 -               if (cmd->error == MMC_ERR_NONE)
3107 +               if (!cmd->error)
3108                         break;
3109 +
3110 +               /* no point in retrying illegal APP commands */
3111 +               if (mmc_host_is_spi(host)) {
3112 +                       if (cmd->resp[0] & R1_SPI_ILLEGAL_COMMAND)
3113 +                               break;
3114 +               }
3115         }
3116  
3117         return err;
3118 @@ -127,14 +138,14 @@
3119                 cmd.arg = SD_BUS_WIDTH_4;
3120                 break;
3121         default:
3122 -               return MMC_ERR_INVALID;
3123 +               return -EINVAL;
3124         }
3125  
3126         err = mmc_wait_for_app_cmd(card->host, card, &cmd, MMC_CMD_RETRIES);
3127 -       if (err != MMC_ERR_NONE)
3128 +       if (err)
3129                 return err;
3130  
3131 -       return MMC_ERR_NONE;
3132 +       return 0;
3133  }
3134  
3135  int mmc_send_app_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
3136 @@ -147,23 +158,36 @@
3137         memset(&cmd, 0, sizeof(struct mmc_command));
3138  
3139         cmd.opcode = SD_APP_OP_COND;
3140 -       cmd.arg = ocr;
3141 -       cmd.flags = MMC_RSP_R3 | MMC_CMD_BCR;
3142 +       if (mmc_host_is_spi(host))
3143 +               cmd.arg = ocr & (1 << 30); /* SPI only defines one bit */
3144 +       else
3145 +               cmd.arg = ocr;
3146 +       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R3 | MMC_CMD_BCR;
3147  
3148         for (i = 100; i; i--) {
3149                 err = mmc_wait_for_app_cmd(host, NULL, &cmd, MMC_CMD_RETRIES);
3150 -               if (err != MMC_ERR_NONE)
3151 +               if (err)
3152                         break;
3153  
3154 -               if (cmd.resp[0] & MMC_CARD_BUSY || ocr == 0)
3155 +               /* if we're just probing, do a single pass */
3156 +               if (ocr == 0)
3157                         break;
3158  
3159 -               err = MMC_ERR_TIMEOUT;
3160 +               /* otherwise wait until reset completes */
3161 +               if (mmc_host_is_spi(host)) {
3162 +                       if (!(cmd.resp[0] & R1_SPI_IDLE))
3163 +                               break;
3164 +               } else {
3165 +                       if (cmd.resp[0] & MMC_CARD_BUSY)
3166 +                               break;
3167 +               }
3168 +
3169 +               err = -ETIMEDOUT;
3170  
3171                 mmc_delay(10);
3172         }
3173  
3174 -       if (rocr)
3175 +       if (rocr && !mmc_host_is_spi(host))
3176                 *rocr = cmd.resp[0];
3177  
3178         return err;
3179 @@ -174,6 +198,7 @@
3180         struct mmc_command cmd;
3181         int err;
3182         static const u8 test_pattern = 0xAA;
3183 +       u8 result_pattern;
3184  
3185         /*
3186          * To support SD 2.0 cards, we must always invoke SD_SEND_IF_COND
3187 @@ -182,16 +207,21 @@
3188          */
3189         cmd.opcode = SD_SEND_IF_COND;
3190         cmd.arg = ((ocr & 0xFF8000) != 0) << 8 | test_pattern;
3191 -       cmd.flags = MMC_RSP_R7 | MMC_CMD_BCR;
3192 +       cmd.flags = MMC_RSP_SPI_R7 | MMC_RSP_R7 | MMC_CMD_BCR;
3193  
3194         err = mmc_wait_for_cmd(host, &cmd, 0);
3195 -       if (err != MMC_ERR_NONE)
3196 +       if (err)
3197                 return err;
3198  
3199 -       if ((cmd.resp[0] & 0xFF) != test_pattern)
3200 -               return MMC_ERR_FAILED;
3201 +       if (mmc_host_is_spi(host))
3202 +               result_pattern = cmd.resp[1] & 0xFF;
3203 +       else
3204 +               result_pattern = cmd.resp[0] & 0xFF;
3205 +
3206 +       if (result_pattern != test_pattern)
3207 +               return -EIO;
3208  
3209 -       return MMC_ERR_NONE;
3210 +       return 0;
3211  }
3212  
3213  int mmc_send_relative_addr(struct mmc_host *host, unsigned int *rca)
3214 @@ -209,12 +239,12 @@
3215         cmd.flags = MMC_RSP_R6 | MMC_CMD_BCR;
3216  
3217         err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
3218 -       if (err != MMC_ERR_NONE)
3219 +       if (err)
3220                 return err;
3221  
3222         *rca = cmd.resp[0] >> 16;
3223  
3224 -       return MMC_ERR_NONE;
3225 +       return 0;
3226  }
3227  
3228  int mmc_app_send_scr(struct mmc_card *card, u32 *scr)
3229 @@ -229,8 +259,10 @@
3230         BUG_ON(!card->host);
3231         BUG_ON(!scr);
3232  
3233 +       /* NOTE: caller guarantees scr is heap-allocated */
3234 +
3235         err = mmc_app_cmd(card->host, card);
3236 -       if (err != MMC_ERR_NONE)
3237 +       if (err)
3238                 return err;
3239  
3240         memset(&mrq, 0, sizeof(struct mmc_request));
3241 @@ -242,7 +274,7 @@
3242  
3243         cmd.opcode = SD_APP_SEND_SCR;
3244         cmd.arg = 0;
3245 -       cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
3246 +       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
3247  
3248         data.blksz = 8;
3249         data.blocks = 1;
3250 @@ -252,19 +284,19 @@
3251  
3252         sg_init_one(&sg, scr, 8);
3253  
3254 -       mmc_set_data_timeout(&data, card, 0);
3255 +       mmc_set_data_timeout(&data, card);
3256  
3257         mmc_wait_for_req(card->host, &mrq);
3258  
3259 -       if (cmd.error != MMC_ERR_NONE)
3260 +       if (cmd.error)
3261                 return cmd.error;
3262 -       if (data.error != MMC_ERR_NONE)
3263 +       if (data.error)
3264                 return data.error;
3265  
3266 -       scr[0] = ntohl(scr[0]);
3267 -       scr[1] = ntohl(scr[1]);
3268 +       scr[0] = be32_to_cpu(scr[0]);
3269 +       scr[1] = be32_to_cpu(scr[1]);
3270  
3271 -       return MMC_ERR_NONE;
3272 +       return 0;
3273  }
3274  
3275  int mmc_sd_switch(struct mmc_card *card, int mode, int group,
3276 @@ -278,6 +310,8 @@
3277         BUG_ON(!card);
3278         BUG_ON(!card->host);
3279  
3280 +       /* NOTE: caller guarantees resp is heap-allocated */
3281 +
3282         mode = !!mode;
3283         value &= 0xF;
3284  
3285 @@ -292,7 +326,7 @@
3286         cmd.arg = mode << 31 | 0x00FFFFFF;
3287         cmd.arg &= ~(0xF << (group * 4));
3288         cmd.arg |= value << (group * 4);
3289 -       cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
3290 +       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
3291  
3292         data.blksz = 64;
3293         data.blocks = 1;
3294 @@ -302,15 +336,15 @@
3295  
3296         sg_init_one(&sg, resp, 64);
3297  
3298 -       mmc_set_data_timeout(&data, card, 0);
3299 +       mmc_set_data_timeout(&data, card);
3300  
3301         mmc_wait_for_req(card->host, &mrq);
3302  
3303 -       if (cmd.error != MMC_ERR_NONE)
3304 +       if (cmd.error)
3305                 return cmd.error;
3306 -       if (data.error != MMC_ERR_NONE)
3307 +       if (data.error)
3308                 return data.error;
3309  
3310 -       return MMC_ERR_NONE;
3311 +       return 0;
3312  }
3313  
3314 --- /dev/null
3315 +++ b/drivers/mmc/core/sdio.c
3316 @@ -0,0 +1,395 @@
3317 +/*
3318 + *  linux/drivers/mmc/sdio.c
3319 + *
3320 + *  Copyright 2006-2007 Pierre Ossman
3321 + *
3322 + * This program is free software; you can redistribute it and/or modify
3323 + * it under the terms of the GNU General Public License as published by
3324 + * the Free Software Foundation; either version 2 of the License, or (at
3325 + * your option) any later version.
3326 + */
3327 +
3328 +#include <linux/err.h>
3329 +
3330 +#include <linux/mmc/host.h>
3331 +#include <linux/mmc/card.h>
3332 +#include <linux/mmc/sdio.h>
3333 +#include <linux/mmc/sdio_func.h>
3334 +
3335 +#include "core.h"
3336 +#include "bus.h"
3337 +#include "sdio_bus.h"
3338 +#include "mmc_ops.h"
3339 +#include "sd_ops.h"
3340 +#include "sdio_ops.h"
3341 +#include "sdio_cis.h"
3342 +
3343 +static int sdio_read_fbr(struct sdio_func *func)
3344 +{
3345 +       int ret;
3346 +       unsigned char data;
3347 +
3348 +       ret = mmc_io_rw_direct(func->card, 0, 0,
3349 +               SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF, 0, &data);
3350 +       if (ret)
3351 +               goto out;
3352 +
3353 +       data &= 0x0f;
3354 +
3355 +       if (data == 0x0f) {
3356 +               ret = mmc_io_rw_direct(func->card, 0, 0,
3357 +                       SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF_EXT, 0, &data);
3358 +               if (ret)
3359 +                       goto out;
3360 +       }
3361 +
3362 +       func->class = data;
3363 +
3364 +out:
3365 +       return ret;
3366 +}
3367 +
3368 +static int sdio_init_func(struct mmc_card *card, unsigned int fn)
3369 +{
3370 +       int ret;
3371 +       struct sdio_func *func;
3372 +
3373 +       BUG_ON(fn > SDIO_MAX_FUNCS);
3374 +
3375 +       func = sdio_alloc_func(card);
3376 +       if (IS_ERR(func))
3377 +               return PTR_ERR(func);
3378 +
3379 +       func->num = fn;
3380 +
3381 +       ret = sdio_read_fbr(func);
3382 +       if (ret)
3383 +               goto fail;
3384 +
3385 +       ret = sdio_read_func_cis(func);
3386 +       if (ret)
3387 +               goto fail;
3388 +
3389 +       card->sdio_func[fn - 1] = func;
3390 +
3391 +       return 0;
3392 +
3393 +fail:
3394 +       /*
3395 +        * It is okay to remove the function here even though we hold
3396 +        * the host lock as we haven't registered the device yet.
3397 +        */
3398 +       sdio_remove_func(func);
3399 +       return ret;
3400 +}
3401 +
3402 +static int sdio_read_cccr(struct mmc_card *card)
3403 +{
3404 +       int ret;
3405 +       int cccr_vsn;
3406 +       unsigned char data;
3407 +
3408 +       memset(&card->cccr, 0, sizeof(struct sdio_cccr));
3409 +
3410 +       ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CCCR, 0, &data);
3411 +       if (ret)
3412 +               goto out;
3413 +
3414 +       cccr_vsn = data & 0x0f;
3415 +
3416 +       if (cccr_vsn > SDIO_CCCR_REV_1_20) {
3417 +               printk(KERN_ERR "%s: unrecognised CCCR structure version %d\n",
3418 +                       mmc_hostname(card->host), cccr_vsn);
3419 +               return -EINVAL;
3420 +       }
3421 +
3422 +       card->cccr.sdio_vsn = (data & 0xf0) >> 4;
3423 +
3424 +       ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CAPS, 0, &data);
3425 +       if (ret)
3426 +               goto out;
3427 +
3428 +       if (data & SDIO_CCCR_CAP_SMB)
3429 +               card->cccr.multi_block = 1;
3430 +       if (data & SDIO_CCCR_CAP_LSC)
3431 +               card->cccr.low_speed = 1;
3432 +       if (data & SDIO_CCCR_CAP_4BLS)
3433 +               card->cccr.wide_bus = 1;
3434 +
3435 +       if (cccr_vsn >= SDIO_CCCR_REV_1_10) {
3436 +               ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_POWER, 0, &data);
3437 +               if (ret)
3438 +                       goto out;
3439 +
3440 +               if (data & SDIO_POWER_SMPC)
3441 +                       card->cccr.high_power = 1;
3442 +       }
3443 +
3444 +       if (cccr_vsn >= SDIO_CCCR_REV_1_20) {
3445 +               ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &data);
3446 +               if (ret)
3447 +                       goto out;
3448 +
3449 +               if (data & SDIO_SPEED_SHS)
3450 +                       card->cccr.high_speed = 1;
3451 +       }
3452 +
3453 +out:
3454 +       return ret;
3455 +}
3456 +
3457 +static int sdio_enable_wide(struct mmc_card *card)
3458 +{
3459 +       int ret;
3460 +       u8 ctrl;
3461 +
3462 +       if (!(card->host->caps & MMC_CAP_4_BIT_DATA))
3463 +               return 0;
3464 +
3465 +       if (card->cccr.low_speed && !card->cccr.wide_bus)
3466 +               return 0;
3467 +
3468 +       ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl);
3469 +       if (ret)
3470 +               return ret;
3471 +
3472 +       ctrl |= SDIO_BUS_WIDTH_4BIT;
3473 +
3474 +       ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL);
3475 +       if (ret)
3476 +               return ret;
3477 +
3478 +       mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
3479 +
3480 +       return 0;
3481 +}
3482 +
3483 +/*
3484 + * Host is being removed. Free up the current card.
3485 + */
3486 +static void mmc_sdio_remove(struct mmc_host *host)
3487 +{
3488 +       int i;
3489 +
3490 +       BUG_ON(!host);
3491 +       BUG_ON(!host->card);
3492 +
3493 +       for (i = 0;i < host->card->sdio_funcs;i++) {
3494 +               if (host->card->sdio_func[i]) {
3495 +                       sdio_remove_func(host->card->sdio_func[i]);
3496 +                       host->card->sdio_func[i] = NULL;
3497 +               }
3498 +       }
3499 +
3500 +       mmc_remove_card(host->card);
3501 +       host->card = NULL;
3502 +}
3503 +
3504 +/*
3505 + * Card detection callback from host.
3506 + */
3507 +static void mmc_sdio_detect(struct mmc_host *host)
3508 +{
3509 +       int err;
3510 +
3511 +       BUG_ON(!host);
3512 +       BUG_ON(!host->card);
3513 +
3514 +       mmc_claim_host(host);
3515 +
3516 +       /*
3517 +        * Just check if our card has been removed.
3518 +        */
3519 +       err = mmc_select_card(host->card);
3520 +
3521 +       mmc_release_host(host);
3522 +
3523 +       if (err) {
3524 +               mmc_sdio_remove(host);
3525 +
3526 +               mmc_claim_host(host);
3527 +               mmc_detach_bus(host);
3528 +               mmc_release_host(host);
3529 +       }
3530 +}
3531 +
3532 +
3533 +static const struct mmc_bus_ops mmc_sdio_ops = {
3534 +       .remove = mmc_sdio_remove,
3535 +       .detect = mmc_sdio_detect,
3536 +};
3537 +
3538 +
3539 +/*
3540 + * Starting point for SDIO card init.
3541 + */
3542 +int mmc_attach_sdio(struct mmc_host *host, u32 ocr)
3543 +{
3544 +       int err;
3545 +       int i, funcs;
3546 +       struct mmc_card *card;
3547 +
3548 +       BUG_ON(!host);
3549 +       WARN_ON(!host->claimed);
3550 +
3551 +       mmc_attach_bus(host, &mmc_sdio_ops);
3552 +
3553 +       /*
3554 +        * Sanity check the voltages that the card claims to
3555 +        * support.
3556 +        */
3557 +       if (ocr & 0x7F) {
3558 +               printk(KERN_WARNING "%s: card claims to support voltages "
3559 +                      "below the defined range. These will be ignored.\n",
3560 +                      mmc_hostname(host));
3561 +               ocr &= ~0x7F;
3562 +       }
3563 +
3564 +       if (ocr & MMC_VDD_165_195) {
3565 +               printk(KERN_WARNING "%s: SDIO card claims to support the "
3566 +                      "incompletely defined 'low voltage range'. This "
3567 +                      "will be ignored.\n", mmc_hostname(host));
3568 +               ocr &= ~MMC_VDD_165_195;
3569 +       }
3570 +
3571 +       host->ocr = mmc_select_voltage(host, ocr);
3572 +
3573 +       /*
3574 +        * Can we support the voltage(s) of the card(s)?
3575 +        */
3576 +       if (!host->ocr) {
3577 +               err = -EINVAL;
3578 +               goto err;
3579 +       }
3580 +
3581 +       /*
3582 +        * Inform the card of the voltage
3583 +        */
3584 +       err = mmc_send_io_op_cond(host, host->ocr, &ocr);
3585 +       if (err)
3586 +               goto err;
3587 +
3588 +       /*
3589 +        * For SPI, enable CRC as appropriate.
3590 +        */
3591 +       if (mmc_host_is_spi(host)) {
3592 +               err = mmc_spi_set_crc(host, use_spi_crc);
3593 +               if (err)
3594 +                       goto err;
3595 +       }
3596 +
3597 +       /*
3598 +        * The number of functions on the card is encoded inside
3599 +        * the ocr.
3600 +        */
3601 +       funcs = (ocr & 0x70000000) >> 28;
3602 +
3603 +       /*
3604 +        * Allocate card structure.
3605 +        */
3606 +       card = mmc_alloc_card(host);
3607 +       if (IS_ERR(card)) {
3608 +               err = PTR_ERR(card);
3609 +               goto err;
3610 +       }
3611 +
3612 +       card->type = MMC_TYPE_SDIO;
3613 +       card->sdio_funcs = funcs;
3614 +
3615 +       host->card = card;
3616 +
3617 +       /*
3618 +        * For native busses:  set card RCA and quit open drain mode.
3619 +        */
3620 +       if (!mmc_host_is_spi(host)) {
3621 +               err = mmc_send_relative_addr(host, &card->rca);
3622 +               if (err)
3623 +                       goto remove;
3624 +
3625 +               mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
3626 +       }
3627 +
3628 +       /*
3629 +        * Select card, as all following commands rely on that.
3630 +        */
3631 +       if (!mmc_host_is_spi(host)) {
3632 +               err = mmc_select_card(card);
3633 +               if (err)
3634 +                       goto remove;
3635 +       }
3636 +
3637 +       /*
3638 +        * Read the common registers.
3639 +        */
3640 +       err = sdio_read_cccr(card);
3641 +       if (err)
3642 +               goto remove;
3643 +
3644 +       /*
3645 +        * Read the common CIS tuples.
3646 +        */
3647 +       err = sdio_read_common_cis(card);
3648 +       if (err)
3649 +               goto remove;
3650 +
3651 +       /*
3652 +        * No support for high-speed yet, so just set
3653 +        * the card's maximum speed.
3654 +        */
3655 +       mmc_set_clock(host, card->cis.max_dtr);
3656 +
3657 +       /*
3658 +        * Switch to wider bus (if supported).
3659 +        */
3660 +       err = sdio_enable_wide(card);
3661 +       if (err)
3662 +               goto remove;
3663 +
3664 +       /*
3665 +        * Initialize (but don't add) all present functions.
3666 +        */
3667 +       for (i = 0;i < funcs;i++) {
3668 +               err = sdio_init_func(host->card, i + 1);
3669 +               if (err)
3670 +                       goto remove;
3671 +       }
3672 +
3673 +       mmc_release_host(host);
3674 +
3675 +       /*
3676 +        * First add the card to the driver model...
3677 +        */
3678 +       err = mmc_add_card(host->card);
3679 +       if (err)
3680 +               goto remove_added;
3681 +
3682 +       /*
3683 +        * ...then the SDIO functions.
3684 +        */
3685 +       for (i = 0;i < funcs;i++) {
3686 +               err = sdio_add_func(host->card->sdio_func[i]);
3687 +               if (err)
3688 +                       goto remove_added;
3689 +       }
3690 +
3691 +       return 0;
3692 +
3693 +
3694 +remove_added:
3695 +       /* Remove without lock if the device has been added. */
3696 +       mmc_sdio_remove(host);
3697 +       mmc_claim_host(host);
3698 +remove:
3699 +       /* And with lock if it hasn't been added. */
3700 +       if (host->card)
3701 +               mmc_sdio_remove(host);
3702 +err:
3703 +       mmc_detach_bus(host);
3704 +       mmc_release_host(host);
3705 +
3706 +       printk(KERN_ERR "%s: error %d whilst initialising SDIO card\n",
3707 +               mmc_hostname(host), err);
3708 +
3709 +       return err;
3710 +}
3711 +
3712 --- /dev/null
3713 +++ b/drivers/mmc/core/sdio_bus.c
3714 @@ -0,0 +1,265 @@
3715 +/*
3716 + *  linux/drivers/mmc/core/sdio_bus.c
3717 + *
3718 + *  Copyright 2007 Pierre Ossman
3719 + *
3720 + * This program is free software; you can redistribute it and/or modify
3721 + * it under the terms of the GNU General Public License as published by
3722 + * the Free Software Foundation; either version 2 of the License, or (at
3723 + * your option) any later version.
3724 + *
3725 + * SDIO function driver model
3726 + */
3727 +
3728 +#include <linux/device.h>
3729 +#include <linux/err.h>
3730 +
3731 +#include <linux/mmc/card.h>
3732 +#include <linux/mmc/sdio_func.h>
3733 +
3734 +#include "sdio_cis.h"
3735 +#include "sdio_bus.h"
3736 +
3737 +#define dev_to_sdio_func(d)    container_of(d, struct sdio_func, dev)
3738 +#define to_sdio_driver(d)      container_of(d, struct sdio_driver, drv)
3739 +
3740 +/* show configuration fields */
3741 +#define sdio_config_attr(field, format_string)                         \
3742 +static ssize_t                                                         \
3743 +field##_show(struct device *dev, struct device_attribute *attr, char *buf)                             \
3744 +{                                                                      \
3745 +       struct sdio_func *func;                                         \
3746 +                                                                       \
3747 +       func = dev_to_sdio_func (dev);                                  \
3748 +       return sprintf (buf, format_string, func->field);               \
3749 +}
3750 +
3751 +sdio_config_attr(class, "0x%02x\n");
3752 +sdio_config_attr(vendor, "0x%04x\n");
3753 +sdio_config_attr(device, "0x%04x\n");
3754 +
3755 +static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
3756 +{
3757 +       struct sdio_func *func = dev_to_sdio_func (dev);
3758 +
3759 +       return sprintf(buf, "sdio:c%02Xv%04Xd%04X\n",
3760 +                       func->class, func->vendor, func->device);
3761 +}
3762 +
3763 +static struct device_attribute sdio_dev_attrs[] = {
3764 +       __ATTR_RO(class),
3765 +       __ATTR_RO(vendor),
3766 +       __ATTR_RO(device),
3767 +       __ATTR_RO(modalias),
3768 +       __ATTR_NULL,
3769 +};
3770 +
3771 +static const struct sdio_device_id *sdio_match_one(struct sdio_func *func,
3772 +       const struct sdio_device_id *id)
3773 +{
3774 +       if (id->class != (__u8)SDIO_ANY_ID && id->class != func->class)
3775 +               return NULL;
3776 +       if (id->vendor != (__u16)SDIO_ANY_ID && id->vendor != func->vendor)
3777 +               return NULL;
3778 +       if (id->device != (__u16)SDIO_ANY_ID && id->device != func->device)
3779 +               return NULL;
3780 +       return id;
3781 +}
3782 +
3783 +static const struct sdio_device_id *sdio_match_device(struct sdio_func *func,
3784 +       struct sdio_driver *sdrv)
3785 +{
3786 +       const struct sdio_device_id *ids;
3787 +
3788 +       ids = sdrv->id_table;
3789 +
3790 +       if (ids) {
3791 +               while (ids->class || ids->vendor || ids->device) {
3792 +                       if (sdio_match_one(func, ids))
3793 +                               return ids;
3794 +                       ids++;
3795 +               }
3796 +       }
3797 +
3798 +       return NULL;
3799 +}
3800 +
3801 +static int sdio_bus_match(struct device *dev, struct device_driver *drv)
3802 +{
3803 +       struct sdio_func *func = dev_to_sdio_func(dev);
3804 +       struct sdio_driver *sdrv = to_sdio_driver(drv);
3805 +
3806 +       if (sdio_match_device(func, sdrv))
3807 +               return 1;
3808 +
3809 +       return 0;
3810 +}
3811 +
3812 +static int
3813 +sdio_bus_uevent(struct device *dev, char **envp,
3814 +               int num_envp, char *buffer, int buffer_size)
3815 +{
3816 +       struct sdio_func *func = dev_to_sdio_func(dev);
3817 +       int i = 0, len = 0;
3818 +
3819 +       if (add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len,
3820 +                       "SDIO_CLASS=%02X", func->class))
3821 +               return -ENOMEM;
3822 +
3823 +       if (add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len,
3824 +                       "SDIO_ID=%04X:%04X", func->vendor, func->device))
3825 +               return -ENOMEM;
3826 +
3827 +       if (add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len,
3828 +                       "MODALIAS=sdio:c%02Xv%04Xd%04X",
3829 +                       func->class, func->vendor, func->device))
3830 +               return -ENOMEM;
3831 +
3832 +       return 0;
3833 +}
3834 +
3835 +static int sdio_bus_probe(struct device *dev)
3836 +{
3837 +       struct sdio_driver *drv = to_sdio_driver(dev->driver);
3838 +       struct sdio_func *func = dev_to_sdio_func(dev);
3839 +       const struct sdio_device_id *id;
3840 +       int ret;
3841 +
3842 +       id = sdio_match_device(func, drv);
3843 +       if (!id)
3844 +               return -ENODEV;
3845 +
3846 +       /* Set the default block size so the driver is sure it's something
3847 +        * sensible. */
3848 +       sdio_claim_host(func);
3849 +       ret = sdio_set_block_size(func, 0);
3850 +       sdio_release_host(func);
3851 +       if (ret)
3852 +               return ret;
3853 +
3854 +       return drv->probe(func, id);
3855 +}
3856 +
3857 +static int sdio_bus_remove(struct device *dev)
3858 +{
3859 +       struct sdio_driver *drv = to_sdio_driver(dev->driver);
3860 +       struct sdio_func *func = dev_to_sdio_func(dev);
3861 +
3862 +       drv->remove(func);
3863 +
3864 +       if (func->irq_handler) {
3865 +               printk(KERN_WARNING "WARNING: driver %s did not remove "
3866 +                       "its interrupt handler!\n", drv->name);
3867 +               sdio_claim_host(func);
3868 +               sdio_release_irq(func);
3869 +               sdio_release_host(func);
3870 +       }
3871 +
3872 +       return 0;
3873 +}
3874 +
3875 +static struct bus_type sdio_bus_type = {
3876 +       .name           = "sdio",
3877 +       .dev_attrs      = sdio_dev_attrs,
3878 +       .match          = sdio_bus_match,
3879 +       .uevent         = sdio_bus_uevent,
3880 +       .probe          = sdio_bus_probe,
3881 +       .remove         = sdio_bus_remove,
3882 +};
3883 +
3884 +int sdio_register_bus(void)
3885 +{
3886 +       return bus_register(&sdio_bus_type);
3887 +}
3888 +
3889 +void sdio_unregister_bus(void)
3890 +{
3891 +       bus_unregister(&sdio_bus_type);
3892 +}
3893 +
3894 +/**
3895 + *     sdio_register_driver - register a function driver
3896 + *     @drv: SDIO function driver
3897 + */
3898 +int sdio_register_driver(struct sdio_driver *drv)
3899 +{
3900 +       drv->drv.name = drv->name;
3901 +       drv->drv.bus = &sdio_bus_type;
3902 +       return driver_register(&drv->drv);
3903 +}
3904 +EXPORT_SYMBOL_GPL(sdio_register_driver);
3905 +
3906 +/**
3907 + *     sdio_unregister_driver - unregister a function driver
3908 + *     @drv: SDIO function driver
3909 + */
3910 +void sdio_unregister_driver(struct sdio_driver *drv)
3911 +{
3912 +       drv->drv.bus = &sdio_bus_type;
3913 +       driver_unregister(&drv->drv);
3914 +}
3915 +EXPORT_SYMBOL_GPL(sdio_unregister_driver);
3916 +
3917 +static void sdio_release_func(struct device *dev)
3918 +{
3919 +       struct sdio_func *func = dev_to_sdio_func(dev);
3920 +
3921 +       sdio_free_func_cis(func);
3922 +
3923 +       if (func->info)
3924 +               kfree(func->info);
3925 +
3926 +       kfree(func);
3927 +}
3928 +
3929 +/*
3930 + * Allocate and initialise a new SDIO function structure.
3931 + */
3932 +struct sdio_func *sdio_alloc_func(struct mmc_card *card)
3933 +{
3934 +       struct sdio_func *func;
3935 +
3936 +       func = kzalloc(sizeof(struct sdio_func), GFP_KERNEL);
3937 +       if (!func)
3938 +               return ERR_PTR(-ENOMEM);
3939 +
3940 +       func->card = card;
3941 +
3942 +       device_initialize(&func->dev);
3943 +
3944 +       func->dev.parent = &card->dev;
3945 +       func->dev.bus = &sdio_bus_type;
3946 +       func->dev.release = sdio_release_func;
3947 +
3948 +       return func;
3949 +}
3950 +
3951 +/*
3952 + * Register a new SDIO function with the driver model.
3953 + */
3954 +int sdio_add_func(struct sdio_func *func)
3955 +{
3956 +       int ret;
3957 +
3958 +       snprintf(func->dev.bus_id, sizeof(func->dev.bus_id),
3959 +                "%s:%d", mmc_card_id(func->card), func->num);
3960 +
3961 +       ret = device_add(&func->dev);
3962 +       if (ret == 0)
3963 +               sdio_func_set_present(func);
3964 +
3965 +       return ret;
3966 +}
3967 +
3968 +/*
3969 + * Unregister a SDIO function with the driver model, and
3970 + * (eventually) free it.
3971 + */
3972 +void sdio_remove_func(struct sdio_func *func)
3973 +{
3974 +       if (sdio_func_present(func))
3975 +               device_del(&func->dev);
3976 +
3977 +       put_device(&func->dev);
3978 +}
3979 +
3980 --- /dev/null
3981 +++ b/drivers/mmc/core/sdio_bus.h
3982 @@ -0,0 +1,22 @@
3983 +/*
3984 + *  linux/drivers/mmc/core/sdio_bus.h
3985 + *
3986 + *  Copyright 2007 Pierre Ossman
3987 + *
3988 + * This program is free software; you can redistribute it and/or modify
3989 + * it under the terms of the GNU General Public License as published by
3990 + * the Free Software Foundation; either version 2 of the License, or (at
3991 + * your option) any later version.
3992 + */
3993 +#ifndef _MMC_CORE_SDIO_BUS_H
3994 +#define _MMC_CORE_SDIO_BUS_H
3995 +
3996 +struct sdio_func *sdio_alloc_func(struct mmc_card *card);
3997 +int sdio_add_func(struct sdio_func *func);
3998 +void sdio_remove_func(struct sdio_func *func);
3999 +
4000 +int sdio_register_bus(void);
4001 +void sdio_unregister_bus(void);
4002 +
4003 +#endif
4004 +
4005 --- /dev/null
4006 +++ b/drivers/mmc/core/sdio_cis.c
4007 @@ -0,0 +1,346 @@
4008 +/*
4009 + * linux/drivers/mmc/core/sdio_cis.c
4010 + *
4011 + * Author:     Nicolas Pitre
4012 + * Created:    June 11, 2007
4013 + * Copyright:  MontaVista Software Inc.
4014 + *
4015 + * Copyright 2007 Pierre Ossman
4016 + *
4017 + * This program is free software; you can redistribute it and/or modify
4018 + * it under the terms of the GNU General Public License as published by
4019 + * the Free Software Foundation; either version 2 of the License, or (at
4020 + * your option) any later version.
4021 + */
4022 +
4023 +#include <linux/kernel.h>
4024 +
4025 +#include <linux/mmc/host.h>
4026 +#include <linux/mmc/card.h>
4027 +#include <linux/mmc/sdio.h>
4028 +#include <linux/mmc/sdio_func.h>
4029 +
4030 +#include "sdio_cis.h"
4031 +#include "sdio_ops.h"
4032 +
4033 +static int cistpl_vers_1(struct mmc_card *card, struct sdio_func *func,
4034 +                        const unsigned char *buf, unsigned size)
4035 +{
4036 +       unsigned i, nr_strings;
4037 +       char **buffer, *string;
4038 +
4039 +       buf += 2;
4040 +       size -= 2;
4041 +
4042 +       nr_strings = 0;
4043 +       for (i = 0; i < size; i++) {
4044 +               if (buf[i] == 0xff)
4045 +                       break;
4046 +               if (buf[i] == 0)
4047 +                       nr_strings++;
4048 +       }
4049 +
4050 +       if (buf[i-1] != '\0') {
4051 +               printk(KERN_WARNING "SDIO: ignoring broken CISTPL_VERS_1\n");
4052 +               return 0;
4053 +       }
4054 +
4055 +       size = i;
4056 +
4057 +       buffer = kzalloc(sizeof(char*) * nr_strings + size, GFP_KERNEL);
4058 +       if (!buffer)
4059 +               return -ENOMEM;
4060 +
4061 +       string = (char*)(buffer + nr_strings);
4062 +
4063 +       for (i = 0; i < nr_strings; i++) {
4064 +               buffer[i] = string;
4065 +               strcpy(string, buf);
4066 +               string += strlen(string) + 1;
4067 +               buf += strlen(buf) + 1;
4068 +       }
4069 +
4070 +       if (func) {
4071 +               func->num_info = nr_strings;
4072 +               func->info = (const char**)buffer;
4073 +       } else {
4074 +               card->num_info = nr_strings;
4075 +               card->info = (const char**)buffer;
4076 +       }
4077 +
4078 +       return 0;
4079 +}
4080 +
4081 +static int cistpl_manfid(struct mmc_card *card, struct sdio_func *func,
4082 +                        const unsigned char *buf, unsigned size)
4083 +{
4084 +       unsigned int vendor, device;
4085 +
4086 +       /* TPLMID_MANF */
4087 +       vendor = buf[0] | (buf[1] << 8);
4088 +
4089 +       /* TPLMID_CARD */
4090 +       device = buf[2] | (buf[3] << 8);
4091 +
4092 +       if (func) {
4093 +               func->vendor = vendor;
4094 +               func->device = device;
4095 +       } else {
4096 +               card->cis.vendor = vendor;
4097 +               card->cis.device = device;
4098 +       }
4099 +
4100 +       return 0;
4101 +}
4102 +
4103 +static const unsigned char speed_val[16] =
4104 +       { 0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80 };
4105 +static const unsigned int speed_unit[8] =
4106 +       { 10000, 100000, 1000000, 10000000, 0, 0, 0, 0 };
4107 +
4108 +static int cistpl_funce_common(struct mmc_card *card,
4109 +                              const unsigned char *buf, unsigned size)
4110 +{
4111 +       if (size < 0x04 || buf[0] != 0)
4112 +               return -EINVAL;
4113 +
4114 +       /* TPLFE_FN0_BLK_SIZE */
4115 +       card->cis.blksize = buf[1] | (buf[2] << 8);
4116 +
4117 +       /* TPLFE_MAX_TRAN_SPEED */
4118 +       card->cis.max_dtr = speed_val[(buf[3] >> 3) & 15] *
4119 +                           speed_unit[buf[3] & 7];
4120 +
4121 +       return 0;
4122 +}
4123 +
4124 +static int cistpl_funce_func(struct sdio_func *func,
4125 +                            const unsigned char *buf, unsigned size)
4126 +{
4127 +       unsigned vsn;
4128 +       unsigned min_size;
4129 +
4130 +       vsn = func->card->cccr.sdio_vsn;
4131 +       min_size = (vsn == SDIO_SDIO_REV_1_00) ? 28 : 42;
4132 +
4133 +       if (size < min_size || buf[0] != 1)
4134 +               return -EINVAL;
4135 +
4136 +       /* TPLFE_MAX_BLK_SIZE */
4137 +       func->max_blksize = buf[12] | (buf[13] << 8);
4138 +
4139 +       return 0;
4140 +}
4141 +
4142 +static int cistpl_funce(struct mmc_card *card, struct sdio_func *func,
4143 +                       const unsigned char *buf, unsigned size)
4144 +{
4145 +       int ret;
4146 +
4147 +       /*
4148 +        * There should be two versions of the CISTPL_FUNCE tuple,
4149 +        * one for the common CIS (function 0) and a version used by
4150 +        * the individual function's CIS (1-7). Yet, the later has a
4151 +        * different length depending on the SDIO spec version.
4152 +        */
4153 +       if (func)
4154 +               ret = cistpl_funce_func(func, buf, size);
4155 +       else
4156 +               ret = cistpl_funce_common(card, buf, size);
4157 +
4158 +       if (ret) {
4159 +               printk(KERN_ERR "%s: bad CISTPL_FUNCE size %u "
4160 +                      "type %u\n", mmc_hostname(card->host), size, buf[0]);
4161 +               return ret;
4162 +       }
4163 +
4164 +       return 0;
4165 +}
4166 +
4167 +typedef int (tpl_parse_t)(struct mmc_card *, struct sdio_func *,
4168 +                          const unsigned char *, unsigned);
4169 +
4170 +struct cis_tpl {
4171 +       unsigned char code;
4172 +       unsigned char min_size;
4173 +       tpl_parse_t *parse;
4174 +};
4175 +
4176 +static const struct cis_tpl cis_tpl_list[] = {
4177 +       {       0x15,   3,      cistpl_vers_1           },
4178 +       {       0x20,   4,      cistpl_manfid           },
4179 +       {       0x21,   2,      /* cistpl_funcid */     },
4180 +       {       0x22,   0,      cistpl_funce            },
4181 +};
4182 +
4183 +static int sdio_read_cis(struct mmc_card *card, struct sdio_func *func)
4184 +{
4185 +       int ret;
4186 +       struct sdio_func_tuple *this, **prev;
4187 +       unsigned i, ptr = 0;
4188 +
4189 +       /*
4190 +        * Note that this works for the common CIS (function number 0) as
4191 +        * well as a function's CIS * since SDIO_CCCR_CIS and SDIO_FBR_CIS
4192 +        * have the same offset.
4193 +        */
4194 +       for (i = 0; i < 3; i++) {
4195 +               unsigned char x, fn;
4196 +
4197 +               if (func)
4198 +                       fn = func->num;
4199 +               else
4200 +                       fn = 0;
4201 +
4202 +               ret = mmc_io_rw_direct(card, 0, 0,
4203 +                       SDIO_FBR_BASE(fn) + SDIO_FBR_CIS + i, 0, &x);
4204 +               if (ret)
4205 +                       return ret;
4206 +               ptr |= x << (i * 8);
4207 +       }
4208 +
4209 +       if (func)
4210 +               prev = &func->tuples;
4211 +       else
4212 +               prev = &card->tuples;
4213 +
4214 +       BUG_ON(*prev);
4215 +
4216 +       do {
4217 +               unsigned char tpl_code, tpl_link;
4218 +
4219 +               ret = mmc_io_rw_direct(card, 0, 0, ptr++, 0, &tpl_code);
4220 +               if (ret)
4221 +                       break;
4222 +
4223 +               /* 0xff means we're done */
4224 +               if (tpl_code == 0xff)
4225 +                       break;
4226 +
4227 +               ret = mmc_io_rw_direct(card, 0, 0, ptr++, 0, &tpl_link);
4228 +               if (ret)
4229 +                       break;
4230 +
4231 +               this = kmalloc(sizeof(*this) + tpl_link, GFP_KERNEL);
4232 +               if (!this)
4233 +                       return -ENOMEM;
4234 +
4235 +               for (i = 0; i < tpl_link; i++) {
4236 +                       ret = mmc_io_rw_direct(card, 0, 0,
4237 +                                              ptr + i, 0, &this->data[i]);
4238 +                       if (ret)
4239 +                               break;
4240 +               }
4241 +               if (ret) {
4242 +                       kfree(this);
4243 +                       break;
4244 +               }
4245 +
4246 +               for (i = 0; i < ARRAY_SIZE(cis_tpl_list); i++)
4247 +                       if (cis_tpl_list[i].code == tpl_code)
4248 +                               break;
4249 +               if (i >= ARRAY_SIZE(cis_tpl_list)) {
4250 +                       /* this tuple is unknown to the core */
4251 +                       this->next = NULL;
4252 +                       this->code = tpl_code;
4253 +                       this->size = tpl_link;
4254 +                       *prev = this;
4255 +                       prev = &this->next;
4256 +                       printk(KERN_DEBUG
4257 +                              "%s: queuing CIS tuple 0x%02x length %u\n",
4258 +                              mmc_hostname(card->host), tpl_code, tpl_link);
4259 +               } else {
4260 +                       const struct cis_tpl *tpl = cis_tpl_list + i;
4261 +                       if (tpl_link < tpl->min_size) {
4262 +                               printk(KERN_ERR
4263 +                                      "%s: bad CIS tuple 0x%02x (length = %u, expected >= %u)\n",
4264 +                                      mmc_hostname(card->host),
4265 +                                      tpl_code, tpl_link, tpl->min_size);
4266 +                               ret = -EINVAL;
4267 +                       } else if (tpl->parse) {
4268 +                               ret = tpl->parse(card, func,
4269 +                                                this->data, tpl_link);
4270 +                       }
4271 +                       kfree(this);
4272 +               }
4273 +
4274 +               ptr += tpl_link;
4275 +       } while (!ret);
4276 +
4277 +       /*
4278 +        * Link in all unknown tuples found in the common CIS so that
4279 +        * drivers don't have to go digging in two places.
4280 +        */
4281 +       if (func)
4282 +               *prev = card->tuples;
4283 +
4284 +       return ret;
4285 +}
4286 +
4287 +int sdio_read_common_cis(struct mmc_card *card)
4288 +{
4289 +       return sdio_read_cis(card, NULL);
4290 +}
4291 +
4292 +void sdio_free_common_cis(struct mmc_card *card)
4293 +{
4294 +       struct sdio_func_tuple *tuple, *victim;
4295 +
4296 +       tuple = card->tuples;
4297 +
4298 +       while (tuple) {
4299 +               victim = tuple;
4300 +               tuple = tuple->next;
4301 +               kfree(victim);
4302 +       }
4303 +
4304 +       card->tuples = NULL;
4305 +}
4306 +
4307 +int sdio_read_func_cis(struct sdio_func *func)
4308 +{
4309 +       int ret;
4310 +
4311 +       ret = sdio_read_cis(func->card, func);
4312 +       if (ret)
4313 +               return ret;
4314 +
4315 +       /*
4316 +        * Since we've linked to tuples in the card structure,
4317 +        * we must make sure we have a reference to it.
4318 +        */
4319 +       get_device(&func->card->dev);
4320 +
4321 +       /*
4322 +        * Vendor/device id is optional for function CIS, so
4323 +        * copy it from the card structure as needed.
4324 +        */
4325 +       if (func->vendor == 0) {
4326 +               func->vendor = func->card->cis.vendor;
4327 +               func->device = func->card->cis.device;
4328 +       }
4329 +
4330 +       return 0;
4331 +}
4332 +
4333 +void sdio_free_func_cis(struct sdio_func *func)
4334 +{
4335 +       struct sdio_func_tuple *tuple, *victim;
4336 +
4337 +       tuple = func->tuples;
4338 +
4339 +       while (tuple && tuple != func->card->tuples) {
4340 +               victim = tuple;
4341 +               tuple = tuple->next;
4342 +               kfree(victim);
4343 +       }
4344 +
4345 +       func->tuples = NULL;
4346 +
4347 +       /*
4348 +        * We have now removed the link to the tuples in the
4349 +        * card structure, so remove the reference.
4350 +        */
4351 +       put_device(&func->card->dev);
4352 +}
4353 +
4354 --- /dev/null
4355 +++ b/drivers/mmc/core/sdio_cis.h
4356 @@ -0,0 +1,23 @@
4357 +/*
4358 + * linux/drivers/mmc/core/sdio_cis.h
4359 + *
4360 + * Author:     Nicolas Pitre
4361 + * Created:    June 11, 2007
4362 + * Copyright:  MontaVista Software Inc.
4363 + *
4364 + * This program is free software; you can redistribute it and/or modify
4365 + * it under the terms of the GNU General Public License as published by
4366 + * the Free Software Foundation; either version 2 of the License, or (at
4367 + * your option) any later version.
4368 + */
4369 +
4370 +#ifndef _MMC_SDIO_CIS_H
4371 +#define _MMC_SDIO_CIS_H
4372 +
4373 +int sdio_read_common_cis(struct mmc_card *card);
4374 +void sdio_free_common_cis(struct mmc_card *card);
4375 +
4376 +int sdio_read_func_cis(struct sdio_func *func);
4377 +void sdio_free_func_cis(struct sdio_func *func);
4378 +
4379 +#endif
4380 --- /dev/null
4381 +++ b/drivers/mmc/core/sdio_io.c
4382 @@ -0,0 +1,548 @@
4383 +/*
4384 + *  linux/drivers/mmc/core/sdio_io.c
4385 + *
4386 + *  Copyright 2007 Pierre Ossman
4387 + *
4388 + * This program is free software; you can redistribute it and/or modify
4389 + * it under the terms of the GNU General Public License as published by
4390 + * the Free Software Foundation; either version 2 of the License, or (at
4391 + * your option) any later version.
4392 + */
4393 +
4394 +#include <linux/mmc/host.h>
4395 +#include <linux/mmc/card.h>
4396 +#include <linux/mmc/sdio.h>
4397 +#include <linux/mmc/sdio_func.h>
4398 +
4399 +#include "sdio_ops.h"
4400 +
4401 +/**
4402 + *     sdio_claim_host - exclusively claim a bus for a certain SDIO function
4403 + *     @func: SDIO function that will be accessed
4404 + *
4405 + *     Claim a bus for a set of operations. The SDIO function given
4406 + *     is used to figure out which bus is relevant.
4407 + */
4408 +void sdio_claim_host(struct sdio_func *func)
4409 +{
4410 +       BUG_ON(!func);
4411 +       BUG_ON(!func->card);
4412 +
4413 +       mmc_claim_host(func->card->host);
4414 +}
4415 +EXPORT_SYMBOL_GPL(sdio_claim_host);
4416 +
4417 +/**
4418 + *     sdio_release_host - release a bus for a certain SDIO function
4419 + *     @func: SDIO function that was accessed
4420 + *
4421 + *     Release a bus, allowing others to claim the bus for their
4422 + *     operations.
4423 + */
4424 +void sdio_release_host(struct sdio_func *func)
4425 +{
4426 +       BUG_ON(!func);
4427 +       BUG_ON(!func->card);
4428 +
4429 +       mmc_release_host(func->card->host);
4430 +}
4431 +EXPORT_SYMBOL_GPL(sdio_release_host);
4432 +
4433 +/**
4434 + *     sdio_enable_func - enables a SDIO function for usage
4435 + *     @func: SDIO function to enable
4436 + *
4437 + *     Powers up and activates a SDIO function so that register
4438 + *     access is possible.
4439 + */
4440 +int sdio_enable_func(struct sdio_func *func)
4441 +{
4442 +       int ret;
4443 +       unsigned char reg;
4444 +       unsigned long timeout;
4445 +
4446 +       BUG_ON(!func);
4447 +       BUG_ON(!func->card);
4448 +
4449 +       pr_debug("SDIO: Enabling device %s...\n", sdio_func_id(func));
4450 +
4451 +       ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IOEx, 0, &reg);
4452 +       if (ret)
4453 +               goto err;
4454 +
4455 +       reg |= 1 << func->num;
4456 +
4457 +       ret = mmc_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IOEx, reg, NULL);
4458 +       if (ret)
4459 +               goto err;
4460 +
4461 +       /*
4462 +        * FIXME: This should timeout based on information in the CIS,
4463 +        * but we don't have card to parse that yet.
4464 +        */
4465 +       timeout = jiffies + HZ;
4466 +
4467 +       while (1) {
4468 +               ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IORx, 0, &reg);
4469 +               if (ret)
4470 +                       goto err;
4471 +               if (reg & (1 << func->num))
4472 +                       break;
4473 +               ret = -ETIME;
4474 +               if (time_after(jiffies, timeout))
4475 +                       goto err;
4476 +       }
4477 +
4478 +       pr_debug("SDIO: Enabled device %s\n", sdio_func_id(func));
4479 +
4480 +       return 0;
4481 +
4482 +err:
4483 +       pr_debug("SDIO: Failed to enable device %s\n", sdio_func_id(func));
4484 +       return ret;
4485 +}
4486 +EXPORT_SYMBOL_GPL(sdio_enable_func);
4487 +
4488 +/**
4489 + *     sdio_disable_func - disable a SDIO function
4490 + *     @func: SDIO function to disable
4491 + *
4492 + *     Powers down and deactivates a SDIO function. Register access
4493 + *     to this function will fail until the function is reenabled.
4494 + */
4495 +int sdio_disable_func(struct sdio_func *func)
4496 +{
4497 +       int ret;
4498 +       unsigned char reg;
4499 +
4500 +       BUG_ON(!func);
4501 +       BUG_ON(!func->card);
4502 +
4503 +       pr_debug("SDIO: Disabling device %s...\n", sdio_func_id(func));
4504 +
4505 +       ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IOEx, 0, &reg);
4506 +       if (ret)
4507 +               goto err;
4508 +
4509 +       reg &= ~(1 << func->num);
4510 +
4511 +       ret = mmc_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IOEx, reg, NULL);
4512 +       if (ret)
4513 +               goto err;
4514 +
4515 +       pr_debug("SDIO: Disabled device %s\n", sdio_func_id(func));
4516 +
4517 +       return 0;
4518 +
4519 +err:
4520 +       pr_debug("SDIO: Failed to disable device %s\n", sdio_func_id(func));
4521 +       return -EIO;
4522 +}
4523 +EXPORT_SYMBOL_GPL(sdio_disable_func);
4524 +
4525 +/**
4526 + *     sdio_set_block_size - set the block size of an SDIO function
4527 + *     @func: SDIO function to change
4528 + *     @blksz: new block size or 0 to use the default.
4529 + *
4530 + *     The default block size is the largest supported by both the function
4531 + *     and the host, with a maximum of 512 to ensure that arbitrarily sized
4532 + *     data transfer use the optimal (least) number of commands.
4533 + *
4534 + *     A driver may call this to override the default block size set by the
4535 + *     core. This can be used to set a block size greater than the maximum
4536 + *     that reported by the card; it is the driver's responsibility to ensure
4537 + *     it uses a value that the card supports.
4538 + *
4539 + *     Returns 0 on success, -EINVAL if the host does not support the
4540 + *     requested block size, or -EIO (etc.) if one of the resultant FBR block
4541 + *     size register writes failed.
4542 + *
4543 + */
4544 +int sdio_set_block_size(struct sdio_func *func, unsigned blksz)
4545 +{
4546 +       int ret;
4547 +
4548 +       if (blksz > func->card->host->max_blk_size)
4549 +               return -EINVAL;
4550 +
4551 +       if (blksz == 0) {
4552 +               blksz = min(min(
4553 +                       func->max_blksize,
4554 +                       func->card->host->max_blk_size),
4555 +                       512u);
4556 +       }
4557 +
4558 +       ret = mmc_io_rw_direct(func->card, 1, 0,
4559 +               SDIO_FBR_BASE(func->num) + SDIO_FBR_BLKSIZE,
4560 +               blksz & 0xff, NULL);
4561 +       if (ret)
4562 +               return ret;
4563 +       ret = mmc_io_rw_direct(func->card, 1, 0,
4564 +               SDIO_FBR_BASE(func->num) + SDIO_FBR_BLKSIZE + 1,
4565 +               (blksz >> 8) & 0xff, NULL);
4566 +       if (ret)
4567 +               return ret;
4568 +       func->cur_blksize = blksz;
4569 +       return 0;
4570 +}
4571 +
4572 +EXPORT_SYMBOL_GPL(sdio_set_block_size);
4573 +
4574 +/* Split an arbitrarily sized data transfer into several
4575 + * IO_RW_EXTENDED commands. */
4576 +static int sdio_io_rw_ext_helper(struct sdio_func *func, int write,
4577 +       unsigned addr, int incr_addr, u8 *buf, unsigned size)
4578 +{
4579 +       unsigned remainder = size;
4580 +       unsigned max_blocks;
4581 +       int ret;
4582 +
4583 +       /* Do the bulk of the transfer using block mode (if supported). */
4584 +       if (func->card->cccr.multi_block) {
4585 +               /* Blocks per command is limited by host count, host transfer
4586 +                * size (we only use a single sg entry) and the maximum for
4587 +                * IO_RW_EXTENDED of 511 blocks. */
4588 +               max_blocks = min(min(
4589 +                       func->card->host->max_blk_count,
4590 +                       func->card->host->max_seg_size / func->cur_blksize),
4591 +                       511u);
4592 +
4593 +               while (remainder > func->cur_blksize) {
4594 +                       unsigned blocks;
4595 +
4596 +                       blocks = remainder / func->cur_blksize;
4597 +                       if (blocks > max_blocks)
4598 +                               blocks = max_blocks;
4599 +                       size = blocks * func->cur_blksize;
4600 +
4601 +                       ret = mmc_io_rw_extended(func->card, write,
4602 +                               func->num, addr, incr_addr, buf,
4603 +                               blocks, func->cur_blksize);
4604 +                       if (ret)
4605 +                               return ret;
4606 +
4607 +                       remainder -= size;
4608 +                       buf += size;
4609 +                       if (incr_addr)
4610 +                               addr += size;
4611 +               }
4612 +       }
4613 +
4614 +       /* Write the remainder using byte mode. */
4615 +       while (remainder > 0) {
4616 +               size = remainder;
4617 +               if (size > func->cur_blksize)
4618 +                       size = func->cur_blksize;
4619 +               if (size > 512)
4620 +                       size = 512; /* maximum size for byte mode */
4621 +
4622 +               ret = mmc_io_rw_extended(func->card, write, func->num, addr,
4623 +                        incr_addr, buf, 1, size);
4624 +               if (ret)
4625 +                       return ret;
4626 +
4627 +               remainder -= size;
4628 +               buf += size;
4629 +               if (incr_addr)
4630 +                       addr += size;
4631 +       }
4632 +       return 0;
4633 +}
4634 +
4635 +/**
4636 + *     sdio_readb - read a single byte from a SDIO function
4637 + *     @func: SDIO function to access
4638 + *     @addr: address to read
4639 + *     @err_ret: optional status value from transfer
4640 + *
4641 + *     Reads a single byte from the address space of a given SDIO
4642 + *     function. If there is a problem reading the address, 0xff
4643 + *     is returned and @err_ret will contain the error code.
4644 + */
4645 +unsigned char sdio_readb(struct sdio_func *func, unsigned int addr,
4646 +       int *err_ret)
4647 +{
4648 +       int ret;
4649 +       unsigned char val;
4650 +
4651 +       BUG_ON(!func);
4652 +
4653 +       if (err_ret)
4654 +               *err_ret = 0;
4655 +
4656 +       ret = mmc_io_rw_direct(func->card, 0, func->num, addr, 0, &val);
4657 +       if (ret) {
4658 +               if (err_ret)
4659 +                       *err_ret = ret;
4660 +               return 0xFF;
4661 +       }
4662 +
4663 +       return val;
4664 +}
4665 +EXPORT_SYMBOL_GPL(sdio_readb);
4666 +
4667 +/**
4668 + *     sdio_writeb - write a single byte to a SDIO function
4669 + *     @func: SDIO function to access
4670 + *     @b: byte to write
4671 + *     @addr: address to write to
4672 + *     @err_ret: optional status value from transfer
4673 + *
4674 + *     Writes a single byte to the address space of a given SDIO
4675 + *     function. @err_ret will contain the status of the actual
4676 + *     transfer.
4677 + */
4678 +void sdio_writeb(struct sdio_func *func, unsigned char b, unsigned int addr,
4679 +       int *err_ret)
4680 +{
4681 +       int ret;
4682 +
4683 +       BUG_ON(!func);
4684 +
4685 +       ret = mmc_io_rw_direct(func->card, 1, func->num, addr, b, NULL);
4686 +       if (err_ret)
4687 +               *err_ret = ret;
4688 +}
4689 +EXPORT_SYMBOL_GPL(sdio_writeb);
4690 +
4691 +/**
4692 + *     sdio_memcpy_fromio - read a chunk of memory from a SDIO function
4693 + *     @func: SDIO function to access
4694 + *     @dst: buffer to store the data
4695 + *     @addr: address to begin reading from
4696 + *     @count: number of bytes to read
4697 + *
4698 + *     Reads from the address space of a given SDIO function. Return
4699 + *     value indicates if the transfer succeeded or not.
4700 + */
4701 +int sdio_memcpy_fromio(struct sdio_func *func, void *dst,
4702 +       unsigned int addr, int count)
4703 +{
4704 +       return sdio_io_rw_ext_helper(func, 0, addr, 1, dst, count);
4705 +}
4706 +EXPORT_SYMBOL_GPL(sdio_memcpy_fromio);
4707 +
4708 +/**
4709 + *     sdio_memcpy_toio - write a chunk of memory to a SDIO function
4710 + *     @func: SDIO function to access
4711 + *     @addr: address to start writing to
4712 + *     @src: buffer that contains the data to write
4713 + *     @count: number of bytes to write
4714 + *
4715 + *     Writes to the address space of a given SDIO function. Return
4716 + *     value indicates if the transfer succeeded or not.
4717 + */
4718 +int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr,
4719 +       void *src, int count)
4720 +{
4721 +       return sdio_io_rw_ext_helper(func, 1, addr, 1, src, count);
4722 +}
4723 +EXPORT_SYMBOL_GPL(sdio_memcpy_toio);
4724 +
4725 +/**
4726 + *     sdio_readsb - read from a FIFO on a SDIO function
4727 + *     @func: SDIO function to access
4728 + *     @dst: buffer to store the data
4729 + *     @addr: address of (single byte) FIFO
4730 + *     @count: number of bytes to read
4731 + *
4732 + *     Reads from the specified FIFO of a given SDIO function. Return
4733 + *     value indicates if the transfer succeeded or not.
4734 + */
4735 +int sdio_readsb(struct sdio_func *func, void *dst, unsigned int addr,
4736 +       int count)
4737 +{
4738 +       return sdio_io_rw_ext_helper(func, 0, addr, 0, dst, count);
4739 +}
4740 +
4741 +EXPORT_SYMBOL_GPL(sdio_readsb);
4742 +
4743 +/**
4744 + *     sdio_writesb - write to a FIFO of a SDIO function
4745 + *     @func: SDIO function to access
4746 + *     @addr: address of (single byte) FIFO
4747 + *     @src: buffer that contains the data to write
4748 + *     @count: number of bytes to write
4749 + *
4750 + *     Writes to the specified FIFO of a given SDIO function. Return
4751 + *     value indicates if the transfer succeeded or not.
4752 + */
4753 +int sdio_writesb(struct sdio_func *func, unsigned int addr, void *src,
4754 +       int count)
4755 +{
4756 +       return sdio_io_rw_ext_helper(func, 1, addr, 0, src, count);
4757 +}
4758 +EXPORT_SYMBOL_GPL(sdio_writesb);
4759 +
4760 +/**
4761 + *     sdio_readw - read a 16 bit integer from a SDIO function
4762 + *     @func: SDIO function to access
4763 + *     @addr: address to read
4764 + *     @err_ret: optional status value from transfer
4765 + *
4766 + *     Reads a 16 bit integer from the address space of a given SDIO
4767 + *     function. If there is a problem reading the address, 0xffff
4768 + *     is returned and @err_ret will contain the error code.
4769 + */
4770 +unsigned short sdio_readw(struct sdio_func *func, unsigned int addr,
4771 +       int *err_ret)
4772 +{
4773 +       int ret;
4774 +
4775 +       if (err_ret)
4776 +               *err_ret = 0;
4777 +
4778 +       ret = sdio_memcpy_fromio(func, func->tmpbuf, addr, 2);
4779 +       if (ret) {
4780 +               if (err_ret)
4781 +                       *err_ret = ret;
4782 +               return 0xFFFF;
4783 +       }
4784 +
4785 +       return le16_to_cpu(*(u16*)func->tmpbuf);
4786 +}
4787 +EXPORT_SYMBOL_GPL(sdio_readw);
4788 +
4789 +/**
4790 + *     sdio_writew - write a 16 bit integer to a SDIO function
4791 + *     @func: SDIO function to access
4792 + *     @b: integer to write
4793 + *     @addr: address to write to
4794 + *     @err_ret: optional status value from transfer
4795 + *
4796 + *     Writes a 16 bit integer to the address space of a given SDIO
4797 + *     function. @err_ret will contain the status of the actual
4798 + *     transfer.
4799 + */
4800 +void sdio_writew(struct sdio_func *func, unsigned short b, unsigned int addr,
4801 +       int *err_ret)
4802 +{
4803 +       int ret;
4804 +
4805 +       *(u16*)func->tmpbuf = cpu_to_le16(b);
4806 +
4807 +       ret = sdio_memcpy_toio(func, addr, func->tmpbuf, 2);
4808 +       if (err_ret)
4809 +               *err_ret = ret;
4810 +}
4811 +EXPORT_SYMBOL_GPL(sdio_writew);
4812 +
4813 +/**
4814 + *     sdio_readl - read a 32 bit integer from a SDIO function
4815 + *     @func: SDIO function to access
4816 + *     @addr: address to read
4817 + *     @err_ret: optional status value from transfer
4818 + *
4819 + *     Reads a 32 bit integer from the address space of a given SDIO
4820 + *     function. If there is a problem reading the address,
4821 + *     0xffffffff is returned and @err_ret will contain the error
4822 + *     code.
4823 + */
4824 +unsigned long sdio_readl(struct sdio_func *func, unsigned int addr,
4825 +       int *err_ret)
4826 +{
4827 +       int ret;
4828 +
4829 +       if (err_ret)
4830 +               *err_ret = 0;
4831 +
4832 +       ret = sdio_memcpy_fromio(func, func->tmpbuf, addr, 4);
4833 +       if (ret) {
4834 +               if (err_ret)
4835 +                       *err_ret = ret;
4836 +               return 0xFFFFFFFF;
4837 +       }
4838 +
4839 +       return le32_to_cpu(*(u32*)func->tmpbuf);
4840 +}
4841 +EXPORT_SYMBOL_GPL(sdio_readl);
4842 +
4843 +/**
4844 + *     sdio_writel - write a 32 bit integer to a SDIO function
4845 + *     @func: SDIO function to access
4846 + *     @b: integer to write
4847 + *     @addr: address to write to
4848 + *     @err_ret: optional status value from transfer
4849 + *
4850 + *     Writes a 32 bit integer to the address space of a given SDIO
4851 + *     function. @err_ret will contain the status of the actual
4852 + *     transfer.
4853 + */
4854 +void sdio_writel(struct sdio_func *func, unsigned long b, unsigned int addr,
4855 +       int *err_ret)
4856 +{
4857 +       int ret;
4858 +
4859 +       *(u32*)func->tmpbuf = cpu_to_le32(b);
4860 +
4861 +       ret = sdio_memcpy_toio(func, addr, func->tmpbuf, 4);
4862 +       if (err_ret)
4863 +               *err_ret = ret;
4864 +}
4865 +EXPORT_SYMBOL_GPL(sdio_writel);
4866 +
4867 +/**
4868 + *     sdio_f0_readb - read a single byte from SDIO function 0
4869 + *     @func: an SDIO function of the card
4870 + *     @addr: address to read
4871 + *     @err_ret: optional status value from transfer
4872 + *
4873 + *     Reads a single byte from the address space of SDIO function 0.
4874 + *     If there is a problem reading the address, 0xff is returned
4875 + *     and @err_ret will contain the error code.
4876 + */
4877 +unsigned char sdio_f0_readb(struct sdio_func *func, unsigned int addr,
4878 +       int *err_ret)
4879 +{
4880 +       int ret;
4881 +       unsigned char val;
4882 +
4883 +       BUG_ON(!func);
4884 +
4885 +       if (err_ret)
4886 +               *err_ret = 0;
4887 +
4888 +       ret = mmc_io_rw_direct(func->card, 0, 0, addr, 0, &val);
4889 +       if (ret) {
4890 +               if (err_ret)
4891 +                       *err_ret = ret;
4892 +               return 0xFF;
4893 +       }
4894 +
4895 +       return val;
4896 +}
4897 +EXPORT_SYMBOL_GPL(sdio_f0_readb);
4898 +
4899 +/**
4900 + *     sdio_f0_writeb - write a single byte to SDIO function 0
4901 + *     @func: an SDIO function of the card
4902 + *     @b: byte to write
4903 + *     @addr: address to write to
4904 + *     @err_ret: optional status value from transfer
4905 + *
4906 + *     Writes a single byte to the address space of SDIO function 0.
4907 + *     @err_ret will contain the status of the actual transfer.
4908 + *
4909 + *     Only writes to the vendor specific CCCR registers (0xF0 -
4910 + *     0xFF) are permiited; @err_ret will be set to -EINVAL for *
4911 + *     writes outside this range.
4912 + */
4913 +void sdio_f0_writeb(struct sdio_func *func, unsigned char b, unsigned int addr,
4914 +       int *err_ret)
4915 +{
4916 +       int ret;
4917 +
4918 +       BUG_ON(!func);
4919 +
4920 +       if (addr < 0xF0 || addr > 0xFF) {
4921 +               if (err_ret)
4922 +                       *err_ret = -EINVAL;
4923 +               return;
4924 +       }
4925 +
4926 +       ret = mmc_io_rw_direct(func->card, 1, 0, addr, b, NULL);
4927 +       if (err_ret)
4928 +               *err_ret = ret;
4929 +}
4930 +EXPORT_SYMBOL_GPL(sdio_f0_writeb);
4931 --- /dev/null
4932 +++ b/drivers/mmc/core/sdio_irq.c
4933 @@ -0,0 +1,267 @@
4934 +/*
4935 + * linux/drivers/mmc/core/sdio_irq.c
4936 + *
4937 + * Author:      Nicolas Pitre
4938 + * Created:     June 18, 2007
4939 + * Copyright:   MontaVista Software Inc.
4940 + *
4941 + * This program is free software; you can redistribute it and/or modify
4942 + * it under the terms of the GNU General Public License as published by
4943 + * the Free Software Foundation; either version 2 of the License, or (at
4944 + * your option) any later version.
4945 + */
4946 +
4947 +#include <linux/kernel.h>
4948 +#include <linux/sched.h>
4949 +#include <linux/kthread.h>
4950 +#include <linux/wait.h>
4951 +#include <linux/delay.h>
4952 +
4953 +#include <linux/mmc/core.h>
4954 +#include <linux/mmc/host.h>
4955 +#include <linux/mmc/card.h>
4956 +#include <linux/mmc/sdio.h>
4957 +#include <linux/mmc/sdio_func.h>
4958 +
4959 +#include "sdio_ops.h"
4960 +
4961 +static int process_sdio_pending_irqs(struct mmc_card *card)
4962 +{
4963 +       int i, ret, count;
4964 +       unsigned char pending;
4965 +
4966 +       ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_INTx, 0, &pending);
4967 +       if (ret) {
4968 +               printk(KERN_DEBUG "%s: error %d reading SDIO_CCCR_INTx\n",
4969 +                      mmc_card_id(card), ret);
4970 +               return ret;
4971 +       }
4972 +
4973 +       count = 0;
4974 +       for (i = 1; i <= 7; i++) {
4975 +               if (pending & (1 << i)) {
4976 +                       struct sdio_func *func = card->sdio_func[i - 1];
4977 +                       if (!func) {
4978 +                               printk(KERN_WARNING "%s: pending IRQ for "
4979 +                                       "non-existant function\n",
4980 +                                       mmc_card_id(card));
4981 +                               ret = -EINVAL;
4982 +                       } else if (func->irq_handler) {
4983 +                               func->irq_handler(func);
4984 +                               count++;
4985 +                       } else {
4986 +                               printk(KERN_WARNING "%s: pending IRQ with no handler\n",
4987 +                                      sdio_func_id(func));
4988 +                               ret = -EINVAL;
4989 +                       }
4990 +               }
4991 +       }
4992 +
4993 +       if (count)
4994 +               return count;
4995 +
4996 +       return ret;
4997 +}
4998 +
4999 +static int sdio_irq_thread(void *_host)
5000 +{
5001 +       struct mmc_host *host = _host;
5002 +       struct sched_param param = { .sched_priority = 1 };
5003 +       unsigned long period, idle_period;
5004 +       int ret;
5005 +
5006 +       sched_setscheduler(current, SCHED_FIFO, &param);
5007 +
5008 +       /*
5009 +        * We want to allow for SDIO cards to work even on non SDIO
5010 +        * aware hosts.  One thing that non SDIO host cannot do is
5011 +        * asynchronous notification of pending SDIO card interrupts
5012 +        * hence we poll for them in that case.
5013 +        */
5014 +       idle_period = msecs_to_jiffies(10);
5015 +       period = (host->caps & MMC_CAP_SDIO_IRQ) ?
5016 +               MAX_SCHEDULE_TIMEOUT : idle_period;
5017 +
5018 +       pr_debug("%s: IRQ thread started (poll period = %lu jiffies)\n",
5019 +                mmc_hostname(host), period);
5020 +
5021 +       do {
5022 +               /*
5023 +                * We claim the host here on drivers behalf for a couple
5024 +                * reasons:
5025 +                *
5026 +                * 1) it is already needed to retrieve the CCCR_INTx;
5027 +                * 2) we want the driver(s) to clear the IRQ condition ASAP;
5028 +                * 3) we need to control the abort condition locally.
5029 +                *
5030 +                * Just like traditional hard IRQ handlers, we expect SDIO
5031 +                * IRQ handlers to be quick and to the point, so that the
5032 +                * holding of the host lock does not cover too much work
5033 +                * that doesn't require that lock to be held.
5034 +                */
5035 +               ret = __mmc_claim_host(host, &host->sdio_irq_thread_abort);
5036 +               if (ret)
5037 +                       break;
5038 +               ret = process_sdio_pending_irqs(host->card);
5039 +               mmc_release_host(host);
5040 +
5041 +               /*
5042 +                * Give other threads a chance to run in the presence of
5043 +                * errors.  FIXME: determine if due to card removal and
5044 +                * possibly exit this thread if so.
5045 +                */
5046 +               if (ret < 0)
5047 +                       ssleep(1);
5048 +
5049 +               /*
5050 +                * Adaptive polling frequency based on the assumption
5051 +                * that an interrupt will be closely followed by more.
5052 +                * This has a substantial benefit for network devices.
5053 +                */
5054 +               if (!(host->caps & MMC_CAP_SDIO_IRQ)) {
5055 +                       if (ret > 0)
5056 +                               period /= 2;
5057 +                       else {
5058 +                               period++;
5059 +                               if (period > idle_period)
5060 +                                       period = idle_period;
5061 +                       }
5062 +               }
5063 +
5064 +               set_task_state(current, TASK_INTERRUPTIBLE);
5065 +               if (host->caps & MMC_CAP_SDIO_IRQ)
5066 +                       host->ops->enable_sdio_irq(host, 1);
5067 +               if (!kthread_should_stop())
5068 +                       schedule_timeout(period);
5069 +               set_task_state(current, TASK_RUNNING);
5070 +       } while (!kthread_should_stop());
5071 +
5072 +       if (host->caps & MMC_CAP_SDIO_IRQ)
5073 +               host->ops->enable_sdio_irq(host, 0);
5074 +
5075 +       pr_debug("%s: IRQ thread exiting with code %d\n",
5076 +                mmc_hostname(host), ret);
5077 +
5078 +       return ret;
5079 +}
5080 +
5081 +static int sdio_card_irq_get(struct mmc_card *card)
5082 +{
5083 +       struct mmc_host *host = card->host;
5084 +
5085 +       WARN_ON(!host->claimed);
5086 +
5087 +       if (!host->sdio_irqs++) {
5088 +               atomic_set(&host->sdio_irq_thread_abort, 0);
5089 +               host->sdio_irq_thread =
5090 +                       kthread_run(sdio_irq_thread, host, "ksdiorqd");
5091 +               if (IS_ERR(host->sdio_irq_thread)) {
5092 +                       int err = PTR_ERR(host->sdio_irq_thread);
5093 +                       host->sdio_irqs--;
5094 +                       return err;
5095 +               }
5096 +       }
5097 +
5098 +       return 0;
5099 +}
5100 +
5101 +static int sdio_card_irq_put(struct mmc_card *card)
5102 +{
5103 +       struct mmc_host *host = card->host;
5104 +
5105 +       WARN_ON(!host->claimed);
5106 +       BUG_ON(host->sdio_irqs < 1);
5107 +
5108 +       if (!--host->sdio_irqs) {
5109 +               atomic_set(&host->sdio_irq_thread_abort, 1);
5110 +               kthread_stop(host->sdio_irq_thread);
5111 +       }
5112 +
5113 +       return 0;
5114 +}
5115 +
5116 +/**
5117 + *     sdio_claim_irq - claim the IRQ for a SDIO function
5118 + *     @func: SDIO function
5119 + *     @handler: IRQ handler callback
5120 + *
5121 + *     Claim and activate the IRQ for the given SDIO function. The provided
5122 + *     handler will be called when that IRQ is asserted.  The host is always
5123 + *     claimed already when the handler is called so the handler must not
5124 + *     call sdio_claim_host() nor sdio_release_host().
5125 + */
5126 +int sdio_claim_irq(struct sdio_func *func, sdio_irq_handler_t *handler)
5127 +{
5128 +       int ret;
5129 +       unsigned char reg;
5130 +
5131 +       BUG_ON(!func);
5132 +       BUG_ON(!func->card);
5133 +
5134 +       pr_debug("SDIO: Enabling IRQ for %s...\n", sdio_func_id(func));
5135 +
5136 +       if (func->irq_handler) {
5137 +               pr_debug("SDIO: IRQ for %s already in use.\n", sdio_func_id(func));
5138 +               return -EBUSY;
5139 +       }
5140 +
5141 +       ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IENx, 0, &reg);
5142 +       if (ret)
5143 +               return ret;
5144 +
5145 +       reg |= 1 << func->num;
5146 +
5147 +       reg |= 1; /* Master interrupt enable */
5148 +
5149 +       ret = mmc_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IENx, reg, NULL);
5150 +       if (ret)
5151 +               return ret;
5152 +
5153 +       func->irq_handler = handler;
5154 +       ret = sdio_card_irq_get(func->card);
5155 +       if (ret)
5156 +               func->irq_handler = NULL;
5157 +
5158 +       return ret;
5159 +}
5160 +EXPORT_SYMBOL_GPL(sdio_claim_irq);
5161 +
5162 +/**
5163 + *     sdio_release_irq - release the IRQ for a SDIO function
5164 + *     @func: SDIO function
5165 + *
5166 + *     Disable and release the IRQ for the given SDIO function.
5167 + */
5168 +int sdio_release_irq(struct sdio_func *func)
5169 +{
5170 +       int ret;
5171 +       unsigned char reg;
5172 +
5173 +       BUG_ON(!func);
5174 +       BUG_ON(!func->card);
5175 +
5176 +       pr_debug("SDIO: Disabling IRQ for %s...\n", sdio_func_id(func));
5177 +
5178 +       if (func->irq_handler) {
5179 +               func->irq_handler = NULL;
5180 +               sdio_card_irq_put(func->card);
5181 +       }
5182 +
5183 +       ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IENx, 0, &reg);
5184 +       if (ret)
5185 +               return ret;
5186 +
5187 +       reg &= ~(1 << func->num);
5188 +
5189 +       /* Disable master interrupt with the last function interrupt */
5190 +       if (!(reg & 0xFE))
5191 +               reg = 0;
5192 +
5193 +       ret = mmc_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IENx, reg, NULL);
5194 +       if (ret)
5195 +               return ret;
5196 +
5197 +       return 0;
5198 +}
5199 +EXPORT_SYMBOL_GPL(sdio_release_irq);
5200 +
5201 --- /dev/null
5202 +++ b/drivers/mmc/core/sdio_ops.c
5203 @@ -0,0 +1,175 @@
5204 +/*
5205 + *  linux/drivers/mmc/sdio_ops.c
5206 + *
5207 + *  Copyright 2006-2007 Pierre Ossman
5208 + *
5209 + * This program is free software; you can redistribute it and/or modify
5210 + * it under the terms of the GNU General Public License as published by
5211 + * the Free Software Foundation; either version 2 of the License, or (at
5212 + * your option) any later version.
5213 + */
5214 +
5215 +#include <linux/scatterlist.h>
5216 +
5217 +#include <linux/mmc/host.h>
5218 +#include <linux/mmc/card.h>
5219 +#include <linux/mmc/mmc.h>
5220 +#include <linux/mmc/sdio.h>
5221 +
5222 +#include "core.h"
5223 +
5224 +int mmc_send_io_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
5225 +{
5226 +       struct mmc_command cmd;
5227 +       int i, err = 0;
5228 +
5229 +       BUG_ON(!host);
5230 +
5231 +       memset(&cmd, 0, sizeof(struct mmc_command));
5232 +
5233 +       cmd.opcode = SD_IO_SEND_OP_COND;
5234 +       cmd.arg = ocr;
5235 +       cmd.flags = MMC_RSP_SPI_R4 | MMC_RSP_R4 | MMC_CMD_BCR;
5236 +
5237 +       for (i = 100; i; i--) {
5238 +               err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
5239 +               if (err)
5240 +                       break;
5241 +
5242 +               /* if we're just probing, do a single pass */
5243 +               if (ocr == 0)
5244 +                       break;
5245 +
5246 +               /* otherwise wait until reset completes */
5247 +               if (mmc_host_is_spi(host)) {
5248 +                       /*
5249 +                        * Both R1_SPI_IDLE and MMC_CARD_BUSY indicate
5250 +                        * an initialized card under SPI, but some cards
5251 +                        * (Marvell's) only behave when looking at this
5252 +                        * one.
5253 +                        */
5254 +                       if (cmd.resp[1] & MMC_CARD_BUSY)
5255 +                               break;
5256 +               } else {
5257 +                       if (cmd.resp[0] & MMC_CARD_BUSY)
5258 +                               break;
5259 +               }
5260 +
5261 +               err = -ETIMEDOUT;
5262 +
5263 +               mmc_delay(10);
5264 +       }
5265 +
5266 +       if (rocr)
5267 +               *rocr = cmd.resp[mmc_host_is_spi(host) ? 1 : 0];
5268 +
5269 +       return err;
5270 +}
5271 +
5272 +int mmc_io_rw_direct(struct mmc_card *card, int write, unsigned fn,
5273 +       unsigned addr, u8 in, u8* out)
5274 +{
5275 +       struct mmc_command cmd;
5276 +       int err;
5277 +
5278 +       BUG_ON(!card);
5279 +       BUG_ON(fn > 7);
5280 +
5281 +       memset(&cmd, 0, sizeof(struct mmc_command));
5282 +
5283 +       cmd.opcode = SD_IO_RW_DIRECT;
5284 +       cmd.arg = write ? 0x80000000 : 0x00000000;
5285 +       cmd.arg |= fn << 28;
5286 +       cmd.arg |= (write && out) ? 0x08000000 : 0x00000000;
5287 +       cmd.arg |= addr << 9;
5288 +       cmd.arg |= in;
5289 +       cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_AC;
5290 +
5291 +       err = mmc_wait_for_cmd(card->host, &cmd, 0);
5292 +       if (err)
5293 +               return err;
5294 +
5295 +       if (mmc_host_is_spi(card->host)) {
5296 +               /* host driver already reported errors */
5297 +       } else {
5298 +               if (cmd.resp[0] & R5_ERROR)
5299 +                       return -EIO;
5300 +               if (cmd.resp[0] & R5_FUNCTION_NUMBER)
5301 +                       return -EINVAL;
5302 +               if (cmd.resp[0] & R5_OUT_OF_RANGE)
5303 +                       return -ERANGE;
5304 +       }
5305 +
5306 +       if (out) {
5307 +               if (mmc_host_is_spi(card->host))
5308 +                       *out = (cmd.resp[0] >> 8) & 0xFF;
5309 +               else
5310 +                       *out = cmd.resp[0] & 0xFF;
5311 +       }
5312 +
5313 +       return 0;
5314 +}
5315 +
5316 +int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn,
5317 +       unsigned addr, int incr_addr, u8 *buf, unsigned blocks, unsigned blksz)
5318 +{
5319 +       struct mmc_request mrq;
5320 +       struct mmc_command cmd;
5321 +       struct mmc_data data;
5322 +       struct scatterlist sg;
5323 +
5324 +       BUG_ON(!card);
5325 +       BUG_ON(fn > 7);
5326 +       BUG_ON(blocks == 1 && blksz > 512);
5327 +       WARN_ON(blocks == 0);
5328 +       WARN_ON(blksz == 0);
5329 +
5330 +       memset(&mrq, 0, sizeof(struct mmc_request));
5331 +       memset(&cmd, 0, sizeof(struct mmc_command));
5332 +       memset(&data, 0, sizeof(struct mmc_data));
5333 +
5334 +       mrq.cmd = &cmd;
5335 +       mrq.data = &data;
5336 +
5337 +       cmd.opcode = SD_IO_RW_EXTENDED;
5338 +       cmd.arg = write ? 0x80000000 : 0x00000000;
5339 +       cmd.arg |= fn << 28;
5340 +       cmd.arg |= incr_addr ? 0x04000000 : 0x00000000;
5341 +       cmd.arg |= addr << 9;
5342 +       if (blocks == 1 && blksz <= 512)
5343 +               cmd.arg |= (blksz == 512) ? 0 : blksz;  /* byte mode */
5344 +       else
5345 +               cmd.arg |= 0x08000000 | blocks;         /* block mode */
5346 +       cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_ADTC;
5347 +
5348 +       data.blksz = blksz;
5349 +       data.blocks = blocks;
5350 +       data.flags = write ? MMC_DATA_WRITE : MMC_DATA_READ;
5351 +       data.sg = &sg;
5352 +       data.sg_len = 1;
5353 +
5354 +       sg_init_one(&sg, buf, blksz * blocks);
5355 +
5356 +       mmc_set_data_timeout(&data, card);
5357 +
5358 +       mmc_wait_for_req(card->host, &mrq);
5359 +
5360 +       if (cmd.error)
5361 +               return cmd.error;
5362 +       if (data.error)
5363 +               return data.error;
5364 +
5365 +       if (mmc_host_is_spi(card->host)) {
5366 +               /* host driver already reported errors */
5367 +       } else {
5368 +               if (cmd.resp[0] & R5_ERROR)
5369 +                       return -EIO;
5370 +               if (cmd.resp[0] & R5_FUNCTION_NUMBER)
5371 +                       return -EINVAL;
5372 +               if (cmd.resp[0] & R5_OUT_OF_RANGE)
5373 +                       return -ERANGE;
5374 +       }
5375 +
5376 +       return 0;
5377 +}
5378 +
5379 --- /dev/null
5380 +++ b/drivers/mmc/core/sdio_ops.h
5381 @@ -0,0 +1,22 @@
5382 +/*
5383 + *  linux/drivers/mmc/sdio_ops.c
5384 + *
5385 + *  Copyright 2006-2007 Pierre Ossman
5386 + *
5387 + * This program is free software; you can redistribute it and/or modify
5388 + * it under the terms of the GNU General Public License as published by
5389 + * the Free Software Foundation; either version 2 of the License, or (at
5390 + * your option) any later version.
5391 + */
5392 +
5393 +#ifndef _MMC_SDIO_OPS_H
5394 +#define _MMC_SDIO_OPS_H
5395 +
5396 +int mmc_send_io_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr);
5397 +int mmc_io_rw_direct(struct mmc_card *card, int write, unsigned fn,
5398 +       unsigned addr, u8 in, u8* out);
5399 +int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn,
5400 +       unsigned addr, int incr_addr, u8 *buf, unsigned blocks, unsigned blksz);
5401 +
5402 +#endif
5403 +
5404 --- a/include/linux/mmc/card.h
5405 +++ b/include/linux/mmc/card.h
5406 @@ -55,7 +55,28 @@
5407         unsigned int            hs_max_dtr;
5408  };
5409  
5410 +struct sdio_cccr {
5411 +       unsigned int            sdio_vsn;
5412 +       unsigned int            sd_vsn;
5413 +       unsigned int            multi_block:1,
5414 +                               low_speed:1,
5415 +                               wide_bus:1,
5416 +                               high_power:1,
5417 +                               high_speed:1;
5418 +};
5419 +
5420 +struct sdio_cis {
5421 +       unsigned short          vendor;
5422 +       unsigned short          device;
5423 +       unsigned short          blksize;
5424 +       unsigned int            max_dtr;
5425 +};
5426 +
5427  struct mmc_host;
5428 +struct sdio_func;
5429 +struct sdio_func_tuple;
5430 +
5431 +#define SDIO_MAX_FUNCS         7
5432  
5433  /*
5434   * MMC device
5435 @@ -67,11 +88,13 @@
5436         unsigned int            type;           /* card type */
5437  #define MMC_TYPE_MMC           0               /* MMC card */
5438  #define MMC_TYPE_SD            1               /* SD card */
5439 +#define MMC_TYPE_SDIO          2               /* SDIO card */
5440         unsigned int            state;          /* (our) card state */
5441  #define MMC_STATE_PRESENT      (1<<0)          /* present in sysfs */
5442  #define MMC_STATE_READONLY     (1<<1)          /* card is read-only */
5443  #define MMC_STATE_HIGHSPEED    (1<<2)          /* card is in high speed mode */
5444  #define MMC_STATE_BLOCKADDR    (1<<3)          /* card uses block-addressing */
5445 +
5446         u32                     raw_cid[4];     /* raw card CID */
5447         u32                     raw_csd[4];     /* raw card CSD */
5448         u32                     raw_scr[2];     /* raw card SCR */
5449 @@ -80,10 +103,19 @@
5450         struct mmc_ext_csd      ext_csd;        /* mmc v4 extended card specific */
5451         struct sd_scr           scr;            /* extra SD information */
5452         struct sd_switch_caps   sw_caps;        /* switch (CMD6) caps */
5453 +
5454 +       unsigned int            sdio_funcs;     /* number of SDIO functions */
5455 +       struct sdio_cccr        cccr;           /* common card info */
5456 +       struct sdio_cis         cis;            /* common tuple info */
5457 +       struct sdio_func        *sdio_func[SDIO_MAX_FUNCS]; /* SDIO functions (devices) */
5458 +       unsigned                num_info;       /* number of info strings */
5459 +       const char              **info;         /* info strings */
5460 +       struct sdio_func_tuple  *tuples;        /* unknown common tuples */
5461  };
5462  
5463  #define mmc_card_mmc(c)                ((c)->type == MMC_TYPE_MMC)
5464  #define mmc_card_sd(c)         ((c)->type == MMC_TYPE_SD)
5465 +#define mmc_card_sdio(c)       ((c)->type == MMC_TYPE_SDIO)
5466  
5467  #define mmc_card_present(c)    ((c)->state & MMC_STATE_PRESENT)
5468  #define mmc_card_readonly(c)   ((c)->state & MMC_STATE_READONLY)
5469 --- a/include/linux/mmc/core.h
5470 +++ b/include/linux/mmc/core.h
5471 @@ -25,14 +25,20 @@
5472  #define MMC_RSP_CRC    (1 << 2)                /* expect valid crc */
5473  #define MMC_RSP_BUSY   (1 << 3)                /* card may send busy */
5474  #define MMC_RSP_OPCODE (1 << 4)                /* response contains opcode */
5475 -#define MMC_CMD_MASK   (3 << 5)                /* command type */
5476 +
5477 +#define MMC_CMD_MASK   (3 << 5)                /* non-SPI command type */
5478  #define MMC_CMD_AC     (0 << 5)
5479  #define MMC_CMD_ADTC   (1 << 5)
5480  #define MMC_CMD_BC     (2 << 5)
5481  #define MMC_CMD_BCR    (3 << 5)
5482  
5483 +#define MMC_RSP_SPI_S1 (1 << 7)                /* one status byte */
5484 +#define MMC_RSP_SPI_S2 (1 << 8)                /* second byte */
5485 +#define MMC_RSP_SPI_B4 (1 << 9)                /* four data bytes */
5486 +#define MMC_RSP_SPI_BUSY (1 << 10)             /* card may send busy */
5487 +
5488  /*
5489 - * These are the response types, and correspond to valid bit
5490 + * These are the native response types, and correspond to valid bit
5491   * patterns of the above flags.  One additional valid pattern
5492   * is all zeros, which means we don't expect a response.
5493   */
5494 @@ -41,12 +47,30 @@
5495  #define MMC_RSP_R1B    (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
5496  #define MMC_RSP_R2     (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
5497  #define MMC_RSP_R3     (MMC_RSP_PRESENT)
5498 +#define MMC_RSP_R4     (MMC_RSP_PRESENT)
5499 +#define MMC_RSP_R5     (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
5500  #define MMC_RSP_R6     (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
5501  #define MMC_RSP_R7     (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
5502  
5503  #define mmc_resp_type(cmd)     ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE))
5504  
5505  /*
5506 + * These are the SPI response types for MMC, SD, and SDIO cards.
5507 + * Commands return R1, with maybe more info.  Zero is an error type;
5508 + * callers must always provide the appropriate MMC_RSP_SPI_Rx flags.
5509 + */
5510 +#define MMC_RSP_SPI_R1 (MMC_RSP_SPI_S1)
5511 +#define MMC_RSP_SPI_R1B        (MMC_RSP_SPI_S1|MMC_RSP_SPI_BUSY)
5512 +#define MMC_RSP_SPI_R2 (MMC_RSP_SPI_S1|MMC_RSP_SPI_S2)
5513 +#define MMC_RSP_SPI_R3 (MMC_RSP_SPI_S1|MMC_RSP_SPI_B4)
5514 +#define MMC_RSP_SPI_R4 (MMC_RSP_SPI_S1|MMC_RSP_SPI_B4)
5515 +#define MMC_RSP_SPI_R5 (MMC_RSP_SPI_S1|MMC_RSP_SPI_S2)
5516 +#define MMC_RSP_SPI_R7 (MMC_RSP_SPI_S1|MMC_RSP_SPI_B4)
5517 +
5518 +#define mmc_spi_resp_type(cmd) ((cmd)->flags & \
5519 +               (MMC_RSP_SPI_S1|MMC_RSP_SPI_BUSY|MMC_RSP_SPI_S2|MMC_RSP_SPI_B4))
5520 +
5521 +/*
5522   * These are the command types.
5523   */
5524  #define mmc_cmd_type(cmd)      ((cmd)->flags & MMC_CMD_MASK)
5525 @@ -54,12 +78,19 @@
5526         unsigned int            retries;        /* max number of retries */
5527         unsigned int            error;          /* command error */
5528  
5529 -#define MMC_ERR_NONE   0
5530 -#define MMC_ERR_TIMEOUT        1
5531 -#define MMC_ERR_BADCRC 2
5532 -#define MMC_ERR_FIFO   3
5533 -#define MMC_ERR_FAILED 4
5534 -#define MMC_ERR_INVALID        5
5535 +/*
5536 + * Standard errno values are used for errors, but some have specific
5537 + * meaning in the MMC layer:
5538 + *
5539 + * ETIMEDOUT    Card took too long to respond
5540 + * EILSEQ       Basic format problem with the received or sent data
5541 + *              (e.g. CRC check failed, incorrect opcode in response
5542 + *              or bad end bit)
5543 + * EINVAL       Request cannot be performed because of restrictions
5544 + *              in hardware and/or the driver
5545 + * ENOMEDIUM    Host can determine that the slot is empty and is
5546 + *              actively failing requests
5547 + */
5548  
5549         struct mmc_data         *data;          /* data segment associated with cmd */
5550         struct mmc_request      *mrq;           /* associated request */
5551 @@ -76,7 +107,6 @@
5552  #define MMC_DATA_WRITE (1 << 8)
5553  #define MMC_DATA_READ  (1 << 9)
5554  #define MMC_DATA_STREAM        (1 << 10)
5555 -#define MMC_DATA_MULTI (1 << 11)
5556  
5557         unsigned int            bytes_xfered;
5558  
5559 @@ -104,9 +134,20 @@
5560  extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *,
5561         struct mmc_command *, int);
5562  
5563 -extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *, int);
5564 +extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *);
5565  
5566 -extern void mmc_claim_host(struct mmc_host *host);
5567 +extern int __mmc_claim_host(struct mmc_host *host, atomic_t *abort);
5568  extern void mmc_release_host(struct mmc_host *host);
5569  
5570 +/**
5571 + *     mmc_claim_host - exclusively claim a host
5572 + *     @host: mmc host to claim
5573 + *
5574 + *     Claim a host for a set of operations.
5575 + */
5576 +static inline void mmc_claim_host(struct mmc_host *host)
5577 +{
5578 +       __mmc_claim_host(host, NULL);
5579 +}
5580 +
5581  #endif
5582 --- a/include/linux/mmc/host.h
5583 +++ b/include/linux/mmc/host.h
5584 @@ -10,6 +10,8 @@
5585  #ifndef LINUX_MMC_HOST_H
5586  #define LINUX_MMC_HOST_H
5587  
5588 +#include <linux/leds.h>
5589 +
5590  #include <linux/mmc/core.h>
5591  
5592  struct mmc_ios {
5593 @@ -51,6 +53,7 @@
5594         void    (*request)(struct mmc_host *host, struct mmc_request *req);
5595         void    (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
5596         int     (*get_ro)(struct mmc_host *host);
5597 +       void    (*enable_sdio_irq)(struct mmc_host *host, int enable);
5598  };
5599  
5600  struct mmc_card;
5601 @@ -87,9 +90,10 @@
5602  
5603  #define MMC_CAP_4_BIT_DATA     (1 << 0)        /* Can the host do 4 bit transfers */
5604  #define MMC_CAP_MULTIWRITE     (1 << 1)        /* Can accurately report bytes sent to card on error */
5605 -#define MMC_CAP_BYTEBLOCK      (1 << 2)        /* Can do non-log2 block sizes */
5606 -#define MMC_CAP_MMC_HIGHSPEED  (1 << 3)        /* Can do MMC high-speed timing */
5607 -#define MMC_CAP_SD_HIGHSPEED   (1 << 4)        /* Can do SD high-speed timing */
5608 +#define MMC_CAP_MMC_HIGHSPEED  (1 << 2)        /* Can do MMC high-speed timing */
5609 +#define MMC_CAP_SD_HIGHSPEED   (1 << 3)        /* Can do SD high-speed timing */
5610 +#define MMC_CAP_SDIO_IRQ       (1 << 4)        /* Can signal pending SDIO IRQs */
5611 +#define MMC_CAP_SPI            (1 << 5)        /* Talks only SPI protocols */
5612  
5613         /* host specific block data */
5614         unsigned int            max_seg_size;   /* see blk_queue_max_segment_size */
5615 @@ -106,23 +110,30 @@
5616         struct mmc_ios          ios;            /* current io bus settings */
5617         u32                     ocr;            /* the current OCR setting */
5618  
5619 -       unsigned int            mode;           /* current card mode of host */
5620 -#define MMC_MODE_MMC           0
5621 -#define MMC_MODE_SD            1
5622 +       /* group bitfields together to minimize padding */
5623 +       unsigned int            use_spi_crc:1;
5624 +       unsigned int            claimed:1;      /* host exclusively claimed */
5625 +       unsigned int            bus_dead:1;     /* bus has been released */
5626 +#ifdef CONFIG_MMC_DEBUG
5627 +       unsigned int            removed:1;      /* host is being removed */
5628 +#endif
5629  
5630         struct mmc_card         *card;          /* device attached to this host */
5631  
5632         wait_queue_head_t       wq;
5633 -       unsigned int            claimed:1;      /* host exclusively claimed */
5634  
5635         struct delayed_work     detect;
5636 -#ifdef CONFIG_MMC_DEBUG
5637 -       unsigned int            removed:1;      /* host is being removed */
5638 -#endif
5639  
5640         const struct mmc_bus_ops *bus_ops;      /* current bus driver */
5641         unsigned int            bus_refs;       /* reference counter */
5642 -       unsigned int            bus_dead:1;     /* bus has been released */
5643 +
5644 +       unsigned int            sdio_irqs;
5645 +       struct task_struct      *sdio_irq_thread;
5646 +       atomic_t                sdio_irq_thread_abort;
5647 +
5648 +#ifdef CONFIG_LEDS_TRIGGERS
5649 +       struct led_trigger      *led;           /* activity led */
5650 +#endif
5651  
5652         unsigned long           private[0] ____cacheline_aligned;
5653  };
5654 @@ -137,6 +148,8 @@
5655         return (void *)host->private;
5656  }
5657  
5658 +#define mmc_host_is_spi(host)  ((host)->caps & MMC_CAP_SPI)
5659 +
5660  #define mmc_dev(x)     ((x)->parent)
5661  #define mmc_classdev(x)        (&(x)->class_dev)
5662  #define mmc_hostname(x)        ((x)->class_dev.bus_id)
5663 @@ -147,5 +160,11 @@
5664  extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
5665  extern void mmc_request_done(struct mmc_host *, struct mmc_request *);
5666  
5667 +static inline void mmc_signal_sdio_irq(struct mmc_host *host)
5668 +{
5669 +       host->ops->enable_sdio_irq(host, 0);
5670 +       wake_up_process(host->sdio_irq_thread);
5671 +}
5672 +
5673  #endif
5674  
5675 --- a/include/linux/mmc/mmc.h
5676 +++ b/include/linux/mmc/mmc.h
5677 @@ -27,7 +27,7 @@
5678  
5679  /* Standard MMC commands (4.1)           type  argument     response */
5680     /* class 1 */
5681 -#define        MMC_GO_IDLE_STATE         0   /* bc                          */
5682 +#define MMC_GO_IDLE_STATE         0   /* bc                          */
5683  #define MMC_SEND_OP_COND          1   /* bcr  [31:0] OCR         R3  */
5684  #define MMC_ALL_SEND_CID          2   /* bcr                     R2  */
5685  #define MMC_SET_RELATIVE_ADDR     3   /* ac   [31:16] RCA        R1  */
5686 @@ -39,8 +39,10 @@
5687  #define MMC_SEND_CID             10   /* ac   [31:16] RCA        R2  */
5688  #define MMC_READ_DAT_UNTIL_STOP  11   /* adtc [31:0] dadr        R1  */
5689  #define MMC_STOP_TRANSMISSION    12   /* ac                      R1b */
5690 -#define MMC_SEND_STATUS                 13   /* ac   [31:16] RCA        R1  */
5691 +#define MMC_SEND_STATUS          13   /* ac   [31:16] RCA        R1  */
5692  #define MMC_GO_INACTIVE_STATE    15   /* ac   [31:16] RCA            */
5693 +#define MMC_SPI_READ_OCR         58   /* spi                  spi_R3 */
5694 +#define MMC_SPI_CRC_ON_OFF       59   /* spi  [0:0] flag      spi_R1 */
5695  
5696    /* class 2 */
5697  #define MMC_SET_BLOCKLEN         16   /* ac   [31:0] block len   R1  */
5698 @@ -90,15 +92,15 @@
5699   */
5700  
5701  /*
5702 -  MMC status in R1
5703 +  MMC status in R1, for native mode (SPI bits are different)
5704    Type
5705 -       e : error bit
5706 +       e : error bit
5707         s : status bit
5708         r : detected and set for the actual command response
5709         x : detected and set during command execution. the host must poll
5710              the card by sending status command in order to read these bits.
5711    Clear condition
5712 -       a : according to the card state
5713 +       a : according to the card state
5714         b : always related to the previous command. Reception of
5715              a valid command will clear it (with a delay of one command)
5716         c : clear by read
5717 @@ -124,10 +126,33 @@
5718  #define R1_CARD_ECC_DISABLED   (1 << 14)       /* sx, a */
5719  #define R1_ERASE_RESET         (1 << 13)       /* sr, c */
5720  #define R1_STATUS(x)            (x & 0xFFFFE000)
5721 -#define R1_CURRENT_STATE(x)            ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */
5722 +#define R1_CURRENT_STATE(x)    ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */
5723  #define R1_READY_FOR_DATA      (1 << 8)        /* sx, a */
5724  #define R1_APP_CMD             (1 << 5)        /* sr, c */
5725  
5726 +/*
5727 + * MMC/SD in SPI mode reports R1 status always, and R2 for SEND_STATUS
5728 + * R1 is the low order byte; R2 is the next highest byte, when present.
5729 + */
5730 +#define R1_SPI_IDLE            (1 << 0)
5731 +#define R1_SPI_ERASE_RESET     (1 << 1)
5732 +#define R1_SPI_ILLEGAL_COMMAND (1 << 2)
5733 +#define R1_SPI_COM_CRC         (1 << 3)
5734 +#define R1_SPI_ERASE_SEQ       (1 << 4)
5735 +#define R1_SPI_ADDRESS         (1 << 5)
5736 +#define R1_SPI_PARAMETER       (1 << 6)
5737 +/* R1 bit 7 is always zero */
5738 +#define R2_SPI_CARD_LOCKED     (1 << 8)
5739 +#define R2_SPI_WP_ERASE_SKIP   (1 << 9)        /* or lock/unlock fail */
5740 +#define R2_SPI_LOCK_UNLOCK_FAIL        R2_SPI_WP_ERASE_SKIP
5741 +#define R2_SPI_ERROR           (1 << 10)
5742 +#define R2_SPI_CC_ERROR                (1 << 11)
5743 +#define R2_SPI_CARD_ECC_ERROR  (1 << 12)
5744 +#define R2_SPI_WP_VIOLATION    (1 << 13)
5745 +#define R2_SPI_ERASE_PARAM     (1 << 14)
5746 +#define R2_SPI_OUT_OF_RANGE    (1 << 15)       /* or CSD overwrite */
5747 +#define R2_SPI_CSD_OVERWRITE   R2_SPI_OUT_OF_RANGE
5748 +
5749  /* These are unpacked versions of the actual responses */
5750  
5751  struct _mmc_csd {
5752 @@ -182,6 +207,7 @@
5753   */
5754  #define CCC_BASIC              (1<<0)  /* (0) Basic protocol functions */
5755                                         /* (CMD0,1,2,3,4,7,9,10,12,13,15) */
5756 +                                       /* (and for SPI, CMD58,59) */
5757  #define CCC_STREAM_READ                (1<<1)  /* (1) Stream read commands */
5758                                         /* (CMD11) */
5759  #define CCC_BLOCK_READ         (1<<2)  /* (2) Block read commands */
5760 @@ -227,6 +253,7 @@
5761  #define EXT_CSD_BUS_WIDTH      183     /* R/W */
5762  #define EXT_CSD_HS_TIMING      185     /* R/W */
5763  #define EXT_CSD_CARD_TYPE      196     /* RO */
5764 +#define EXT_CSD_REV            192     /* RO */
5765  #define EXT_CSD_SEC_CNT                212     /* RO, 4 bytes */
5766  
5767  /*
5768 --- /dev/null
5769 +++ b/include/linux/mmc/sdio.h
5770 @@ -0,0 +1,159 @@
5771 +/*
5772 + *  include/linux/mmc/sdio.h
5773 + *
5774 + *  Copyright 2006-2007 Pierre Ossman
5775 + *
5776 + * This program is free software; you can redistribute it and/or modify
5777 + * it under the terms of the GNU General Public License as published by
5778 + * the Free Software Foundation; either version 2 of the License, or (at
5779 + * your option) any later version.
5780 + */
5781 +
5782 +#ifndef MMC_SDIO_H
5783 +#define MMC_SDIO_H
5784 +
5785 +/* SDIO commands                         type  argument     response */
5786 +#define SD_IO_SEND_OP_COND          5 /* bcr  [23:0] OCR         R4  */
5787 +#define SD_IO_RW_DIRECT            52 /* ac   [31:0] See below   R5  */
5788 +#define SD_IO_RW_EXTENDED          53 /* adtc [31:0] See below   R5  */
5789 +
5790 +/*
5791 + * SD_IO_RW_DIRECT argument format:
5792 + *
5793 + *      [31] R/W flag
5794 + *      [30:28] Function number
5795 + *      [27] RAW flag
5796 + *      [25:9] Register address
5797 + *      [7:0] Data
5798 + */
5799 +
5800 +/*
5801 + * SD_IO_RW_EXTENDED argument format:
5802 + *
5803 + *      [31] R/W flag
5804 + *      [30:28] Function number
5805 + *      [27] Block mode
5806 + *      [26] Increment address
5807 + *      [25:9] Register address
5808 + *      [8:0] Byte/block count
5809 + */
5810 +
5811 +/*
5812 +  SDIO status in R5
5813 +  Type
5814 +       e : error bit
5815 +       s : status bit
5816 +       r : detected and set for the actual command response
5817 +       x : detected and set during command execution. the host must poll
5818 +            the card by sending status command in order to read these bits.
5819 +  Clear condition
5820 +       a : according to the card state
5821 +       b : always related to the previous command. Reception of
5822 +            a valid command will clear it (with a delay of one command)
5823 +       c : clear by read
5824 + */
5825 +
5826 +#define R5_COM_CRC_ERROR       (1 << 15)       /* er, b */
5827 +#define R5_ILLEGAL_COMMAND     (1 << 14)       /* er, b */
5828 +#define R5_ERROR               (1 << 11)       /* erx, c */
5829 +#define R5_FUNCTION_NUMBER     (1 << 9)        /* er, c */
5830 +#define R5_OUT_OF_RANGE                (1 << 8)        /* er, c */
5831 +#define R5_STATUS(x)           (x & 0xCB00)
5832 +#define R5_IO_CURRENT_STATE(x) ((x & 0x3000) >> 12) /* s, b */
5833 +
5834 +/*
5835 + * Card Common Control Registers (CCCR)
5836 + */
5837 +
5838 +#define SDIO_CCCR_CCCR         0x00
5839 +
5840 +#define  SDIO_CCCR_REV_1_00    0       /* CCCR/FBR Version 1.00 */
5841 +#define  SDIO_CCCR_REV_1_10    1       /* CCCR/FBR Version 1.10 */
5842 +#define  SDIO_CCCR_REV_1_20    2       /* CCCR/FBR Version 1.20 */
5843 +
5844 +#define  SDIO_SDIO_REV_1_00    0       /* SDIO Spec Version 1.00 */
5845 +#define  SDIO_SDIO_REV_1_10    1       /* SDIO Spec Version 1.10 */
5846 +#define  SDIO_SDIO_REV_1_20    2       /* SDIO Spec Version 1.20 */
5847 +#define  SDIO_SDIO_REV_2_00    3       /* SDIO Spec Version 2.00 */
5848 +
5849 +#define SDIO_CCCR_SD           0x01
5850 +
5851 +#define  SDIO_SD_REV_1_01      0       /* SD Physical Spec Version 1.01 */
5852 +#define  SDIO_SD_REV_1_10      1       /* SD Physical Spec Version 1.10 */
5853 +#define  SDIO_SD_REV_2_00      2       /* SD Physical Spec Version 2.00 */
5854 +
5855 +#define SDIO_CCCR_IOEx         0x02
5856 +#define SDIO_CCCR_IORx         0x03
5857 +
5858 +#define SDIO_CCCR_IENx         0x04    /* Function/Master Interrupt Enable */
5859 +#define SDIO_CCCR_INTx         0x05    /* Function Interrupt Pending */
5860 +
5861 +#define SDIO_CCCR_ABORT                0x06    /* function abort/card reset */
5862 +
5863 +#define SDIO_CCCR_IF           0x07    /* bus interface controls */
5864 +
5865 +#define  SDIO_BUS_WIDTH_1BIT   0x00
5866 +#define  SDIO_BUS_WIDTH_4BIT   0x02
5867 +
5868 +#define  SDIO_BUS_CD_DISABLE     0x80  /* disable pull-up on DAT3 (pin 1) */
5869 +
5870 +#define SDIO_CCCR_CAPS         0x08
5871 +
5872 +#define  SDIO_CCCR_CAP_SDC     0x01    /* can do CMD52 while data transfer */
5873 +#define  SDIO_CCCR_CAP_SMB     0x02    /* can do multi-block xfers (CMD53) */
5874 +#define  SDIO_CCCR_CAP_SRW     0x04    /* supports read-wait protocol */
5875 +#define  SDIO_CCCR_CAP_SBS     0x08    /* supports suspend/resume */
5876 +#define  SDIO_CCCR_CAP_S4MI    0x10    /* interrupt during 4-bit CMD53 */
5877 +#define  SDIO_CCCR_CAP_E4MI    0x20    /* enable ints during 4-bit CMD53 */
5878 +#define  SDIO_CCCR_CAP_LSC     0x40    /* low speed card */
5879 +#define  SDIO_CCCR_CAP_4BLS    0x80    /* 4 bit low speed card */
5880 +
5881 +#define SDIO_CCCR_CIS          0x09    /* common CIS pointer (3 bytes) */
5882 +
5883 +/* Following 4 regs are valid only if SBS is set */
5884 +#define SDIO_CCCR_SUSPEND      0x0c
5885 +#define SDIO_CCCR_SELx         0x0d
5886 +#define SDIO_CCCR_EXECx                0x0e
5887 +#define SDIO_CCCR_READYx       0x0f
5888 +
5889 +#define SDIO_CCCR_BLKSIZE      0x10
5890 +
5891 +#define SDIO_CCCR_POWER                0x12
5892 +
5893 +#define  SDIO_POWER_SMPC       0x01    /* Supports Master Power Control */
5894 +#define  SDIO_POWER_EMPC       0x02    /* Enable Master Power Control */
5895 +
5896 +#define SDIO_CCCR_SPEED                0x13
5897 +
5898 +#define  SDIO_SPEED_SHS                0x01    /* Supports High-Speed mode */
5899 +#define  SDIO_SPEED_EHS                0x02    /* Enable High-Speed mode */
5900 +
5901 +/*
5902 + * Function Basic Registers (FBR)
5903 + */
5904 +
5905 +#define SDIO_FBR_BASE(f)       ((f) * 0x100) /* base of function f's FBRs */
5906 +
5907 +#define SDIO_FBR_STD_IF                0x00
5908 +
5909 +#define  SDIO_FBR_SUPPORTS_CSA 0x40    /* supports Code Storage Area */
5910 +#define  SDIO_FBR_ENABLE_CSA   0x80    /* enable Code Storage Area */
5911 +
5912 +#define SDIO_FBR_STD_IF_EXT    0x01
5913 +
5914 +#define SDIO_FBR_POWER         0x02
5915 +
5916 +#define  SDIO_FBR_POWER_SPS    0x01    /* Supports Power Selection */
5917 +#define  SDIO_FBR_POWER_EPS    0x02    /* Enable (low) Power Selection */
5918 +
5919 +#define SDIO_FBR_CIS           0x09    /* CIS pointer (3 bytes) */
5920 +
5921 +
5922 +#define SDIO_FBR_CSA           0x0C    /* CSA pointer (3 bytes) */
5923 +
5924 +#define SDIO_FBR_CSA_DATA      0x0F
5925 +
5926 +#define SDIO_FBR_BLKSIZE       0x10    /* block size (2 bytes) */
5927 +
5928 +#endif
5929 +
5930 --- /dev/null
5931 +++ b/include/linux/mmc/sdio_func.h
5932 @@ -0,0 +1,153 @@
5933 +/*
5934 + *  include/linux/mmc/sdio_func.h
5935 + *
5936 + *  Copyright 2007 Pierre Ossman
5937 + *
5938 + * This program is free software; you can redistribute it and/or modify
5939 + * it under the terms of the GNU General Public License as published by
5940 + * the Free Software Foundation; either version 2 of the License, or (at
5941 + * your option) any later version.
5942 + */
5943 +
5944 +#ifndef MMC_SDIO_FUNC_H
5945 +#define MMC_SDIO_FUNC_H
5946 +
5947 +#include <linux/device.h>
5948 +#include <linux/mod_devicetable.h>
5949 +
5950 +struct mmc_card;
5951 +struct sdio_func;
5952 +
5953 +typedef void (sdio_irq_handler_t)(struct sdio_func *);
5954 +
5955 +/*
5956 + * SDIO function CIS tuple (unknown to the core)
5957 + */
5958 +struct sdio_func_tuple {
5959 +       struct sdio_func_tuple *next;
5960 +       unsigned char code;
5961 +       unsigned char size;
5962 +       unsigned char data[0];
5963 +};
5964 +
5965 +/*
5966 + * SDIO function devices
5967 + */
5968 +struct sdio_func {
5969 +       struct mmc_card         *card;          /* the card this device belongs to */
5970 +       struct device           dev;            /* the device */
5971 +       sdio_irq_handler_t      *irq_handler;   /* IRQ callback */
5972 +       unsigned int            num;            /* function number */
5973 +
5974 +       unsigned char           class;          /* standard interface class */
5975 +       unsigned short          vendor;         /* vendor id */
5976 +       unsigned short          device;         /* device id */
5977 +
5978 +       unsigned                max_blksize;    /* maximum block size */
5979 +       unsigned                cur_blksize;    /* current block size */
5980 +
5981 +       unsigned int            state;          /* function state */
5982 +#define SDIO_STATE_PRESENT     (1<<0)          /* present in sysfs */
5983 +
5984 +       u8                      tmpbuf[4];      /* DMA:able scratch buffer */
5985 +
5986 +       unsigned                num_info;       /* number of info strings */
5987 +       const char              **info;         /* info strings */
5988 +
5989 +       struct sdio_func_tuple *tuples;
5990 +};
5991 +
5992 +#define sdio_func_present(f)   ((f)->state & SDIO_STATE_PRESENT)
5993 +
5994 +#define sdio_func_set_present(f) ((f)->state |= SDIO_STATE_PRESENT)
5995 +
5996 +#define sdio_func_id(f)                ((f)->dev.bus_id)
5997 +
5998 +#define sdio_get_drvdata(f)    dev_get_drvdata(&(f)->dev)
5999 +#define sdio_set_drvdata(f,d)  dev_set_drvdata(&(f)->dev, d)
6000 +
6001 +/*
6002 + * SDIO function device driver
6003 + */
6004 +struct sdio_driver {
6005 +       char *name;
6006 +       const struct sdio_device_id *id_table;
6007 +
6008 +       int (*probe)(struct sdio_func *, const struct sdio_device_id *);
6009 +       void (*remove)(struct sdio_func *);
6010 +
6011 +       struct device_driver drv;
6012 +};
6013 +
6014 +/**
6015 + * SDIO_DEVICE - macro used to describe a specific SDIO device
6016 + * @vend: the 16 bit manufacturer code
6017 + * @dev: the 16 bit function id
6018 + *
6019 + * This macro is used to create a struct sdio_device_id that matches a
6020 + * specific device. The class field will be set to SDIO_ANY_ID.
6021 + */
6022 +#define SDIO_DEVICE(vend,dev) \
6023 +       .class = SDIO_ANY_ID, \
6024 +       .vendor = (vend), .device = (dev)
6025 +
6026 +/**
6027 + * SDIO_DEVICE_CLASS - macro used to describe a specific SDIO device class
6028 + * @dev_class: the 8 bit standard interface code
6029 + *
6030 + * This macro is used to create a struct sdio_device_id that matches a
6031 + * specific standard SDIO function type.  The vendor and device fields will
6032 + * be set to SDIO_ANY_ID.
6033 + */
6034 +#define SDIO_DEVICE_CLASS(dev_class) \
6035 +       .class = (dev_class), \
6036 +       .vendor = SDIO_ANY_ID, .device = SDIO_ANY_ID
6037 +
6038 +extern int sdio_register_driver(struct sdio_driver *);
6039 +extern void sdio_unregister_driver(struct sdio_driver *);
6040 +
6041 +/*
6042 + * SDIO I/O operations
6043 + */
6044 +extern void sdio_claim_host(struct sdio_func *func);
6045 +extern void sdio_release_host(struct sdio_func *func);
6046 +
6047 +extern int sdio_enable_func(struct sdio_func *func);
6048 +extern int sdio_disable_func(struct sdio_func *func);
6049 +
6050 +extern int sdio_set_block_size(struct sdio_func *func, unsigned blksz);
6051 +
6052 +extern int sdio_claim_irq(struct sdio_func *func, sdio_irq_handler_t *handler);
6053 +extern int sdio_release_irq(struct sdio_func *func);
6054 +
6055 +extern unsigned char sdio_readb(struct sdio_func *func,
6056 +       unsigned int addr, int *err_ret);
6057 +extern unsigned short sdio_readw(struct sdio_func *func,
6058 +       unsigned int addr, int *err_ret);
6059 +extern unsigned long sdio_readl(struct sdio_func *func,
6060 +       unsigned int addr, int *err_ret);
6061 +
6062 +extern int sdio_memcpy_fromio(struct sdio_func *func, void *dst,
6063 +       unsigned int addr, int count);
6064 +extern int sdio_readsb(struct sdio_func *func, void *dst,
6065 +       unsigned int addr, int count);
6066 +
6067 +extern void sdio_writeb(struct sdio_func *func, unsigned char b,
6068 +       unsigned int addr, int *err_ret);
6069 +extern void sdio_writew(struct sdio_func *func, unsigned short b,
6070 +       unsigned int addr, int *err_ret);
6071 +extern void sdio_writel(struct sdio_func *func, unsigned long b,
6072 +       unsigned int addr, int *err_ret);
6073 +
6074 +extern int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr,
6075 +       void *src, int count);
6076 +extern int sdio_writesb(struct sdio_func *func, unsigned int addr,
6077 +       void *src, int count);
6078 +
6079 +extern unsigned char sdio_f0_readb(struct sdio_func *func,
6080 +       unsigned int addr, int *err_ret);
6081 +extern void sdio_f0_writeb(struct sdio_func *func, unsigned char b,
6082 +       unsigned int addr, int *err_ret);
6083 +
6084 +#endif
6085 +
6086 --- /dev/null
6087 +++ b/include/linux/mmc/sdio_ids.h
6088 @@ -0,0 +1,29 @@
6089 +/*
6090 + * SDIO Classes, Interface Types, Manufacturer IDs, etc.
6091 + */
6092 +
6093 +#ifndef MMC_SDIO_IDS_H
6094 +#define MMC_SDIO_IDS_H
6095 +
6096 +/*
6097 + * Standard SDIO Function Interfaces
6098 + */
6099 +
6100 +#define SDIO_CLASS_NONE                0x00    /* Not a SDIO standard interface */
6101 +#define SDIO_CLASS_UART                0x01    /* standard UART interface */
6102 +#define SDIO_CLASS_BT_A                0x02    /* Type-A BlueTooth std interface */
6103 +#define SDIO_CLASS_BT_B                0x03    /* Type-B BlueTooth std interface */
6104 +#define SDIO_CLASS_GPS         0x04    /* GPS standard interface */
6105 +#define SDIO_CLASS_CAMERA      0x05    /* Camera standard interface */
6106 +#define SDIO_CLASS_PHS         0x06    /* PHS standard interface */
6107 +#define SDIO_CLASS_WLAN                0x07    /* WLAN interface */
6108 +#define SDIO_CLASS_ATA         0x08    /* Embedded SDIO-ATA std interface */
6109 +
6110 +/*
6111 + * Vendors and devices.  Sort key: vendor first, device next.
6112 + */
6113 +
6114 +#define SDIO_VENDOR_ID_MARVELL                 0x02df
6115 +#define SDIO_DEVICE_ID_MARVELL_LIBERTAS                0x9103
6116 +
6117 +#endif
6118 --- a/include/linux/mod_devicetable.h
6119 +++ b/include/linux/mod_devicetable.h
6120 @@ -22,6 +22,18 @@
6121  };
6122  
6123  
6124 +/* SDIO */
6125 +
6126 +#define SDIO_ANY_ID (~0)
6127 +
6128 +struct sdio_device_id {
6129 +       __u8    class;                  /* Standard interface or SDIO_ANY_ID */
6130 +       __u16   vendor;                 /* Vendor or SDIO_ANY_ID */
6131 +       __u16   device;                 /* Device ID or SDIO_ANY_ID */
6132 +       kernel_ulong_t driver_data;     /* Data private to the driver */
6133 +};
6134 +
6135 +
6136  #define IEEE1394_MATCH_VENDOR_ID       0x0001
6137  #define IEEE1394_MATCH_MODEL_ID                0x0002
6138  #define IEEE1394_MATCH_SPECIFIER_ID    0x0004
6139 --- a/drivers/mmc/card/Kconfig
6140 +++ b/drivers/mmc/card/Kconfig
6141 @@ -32,3 +32,10 @@
6142  
6143           If unsure, say Y here.
6144  
6145 +config SDIO_UART
6146 +       tristate "SDIO UART/GPS class support"
6147 +       depends on MMC
6148 +       help
6149 +         SDIO function driver for SDIO cards that implements the UART
6150 +         class, as well as the GPS class which appears like a UART.
6151 +
6152 --- a/drivers/mmc/card/Makefile
6153 +++ b/drivers/mmc/card/Makefile
6154 @@ -9,3 +9,5 @@
6155  obj-$(CONFIG_MMC_BLOCK)                += mmc_block.o
6156  mmc_block-objs                 := block.o queue.o
6157  
6158 +obj-$(CONFIG_SDIO_UART)                += sdio_uart.o
6159 +
6160 --- a/drivers/mmc/card/block.c
6161 +++ b/drivers/mmc/card/block.c
6162 @@ -44,6 +44,9 @@
6163   * max 8 partitions per card
6164   */
6165  #define MMC_SHIFT      3
6166 +#define MMC_NUM_MINORS (256 >> MMC_SHIFT)
6167 +
6168 +static unsigned long dev_use[MMC_NUM_MINORS/(8*sizeof(unsigned long))];
6169  
6170  /*
6171   * There is one mmc_blk_data per slot.
6172 @@ -80,6 +83,9 @@
6173         mutex_lock(&open_lock);
6174         md->usage--;
6175         if (md->usage == 0) {
6176 +               int devidx = md->disk->first_minor >> MMC_SHIFT;
6177 +               __clear_bit(devidx, dev_use);
6178 +
6179                 put_disk(md->disk);
6180                 kfree(md);
6181         }
6182 @@ -151,17 +157,19 @@
6183  
6184         cmd.opcode = MMC_APP_CMD;
6185         cmd.arg = card->rca << 16;
6186 -       cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
6187 +       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
6188  
6189         err = mmc_wait_for_cmd(card->host, &cmd, 0);
6190 -       if ((err != MMC_ERR_NONE) || !(cmd.resp[0] & R1_APP_CMD))
6191 +       if (err)
6192 +               return (u32)-1;
6193 +       if (!mmc_host_is_spi(card->host) && !(cmd.resp[0] & R1_APP_CMD))
6194                 return (u32)-1;
6195  
6196         memset(&cmd, 0, sizeof(struct mmc_command));
6197  
6198         cmd.opcode = SD_APP_SEND_NUM_WR_BLKS;
6199         cmd.arg = 0;
6200 -       cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
6201 +       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
6202  
6203         memset(&data, 0, sizeof(struct mmc_data));
6204  
6205 @@ -192,7 +200,7 @@
6206  
6207         mmc_wait_for_req(card->host, &mrq);
6208  
6209 -       if (cmd.error != MMC_ERR_NONE || data.error != MMC_ERR_NONE)
6210 +       if (cmd.error || data.error)
6211                 return (u32)-1;
6212  
6213         blocks = ntohl(blocks);
6214 @@ -220,17 +228,15 @@
6215                 brq.cmd.arg = req->sector;
6216                 if (!mmc_card_blockaddr(card))
6217                         brq.cmd.arg <<= 9;
6218 -               brq.cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
6219 +               brq.cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
6220                 brq.data.blksz = 1 << md->block_bits;
6221                 brq.stop.opcode = MMC_STOP_TRANSMISSION;
6222                 brq.stop.arg = 0;
6223 -               brq.stop.flags = MMC_RSP_R1B | MMC_CMD_AC;
6224 +               brq.stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
6225                 brq.data.blocks = req->nr_sectors >> (md->block_bits - 9);
6226                 if (brq.data.blocks > card->host->max_blk_count)
6227                         brq.data.blocks = card->host->max_blk_count;
6228  
6229 -               mmc_set_data_timeout(&brq.data, card, rq_data_dir(req) != READ);
6230 -
6231                 /*
6232                  * If the host doesn't support multiple block writes, force
6233                  * block writes to single block. SD cards are excepted from
6234 @@ -243,8 +249,12 @@
6235                         brq.data.blocks = 1;
6236  
6237                 if (brq.data.blocks > 1) {
6238 -                       brq.data.flags |= MMC_DATA_MULTI;
6239 -                       brq.mrq.stop = &brq.stop;
6240 +                       /* SPI multiblock writes terminate using a special
6241 +                        * token, not a STOP_TRANSMISSION request.
6242 +                        */
6243 +                       if (!mmc_host_is_spi(card->host)
6244 +                                       || rq_data_dir(req) == READ)
6245 +                               brq.mrq.stop = &brq.stop;
6246                         readcmd = MMC_READ_MULTIPLE_BLOCK;
6247                         writecmd = MMC_WRITE_MULTIPLE_BLOCK;
6248                 } else {
6249 @@ -261,6 +271,8 @@
6250                         brq.data.flags |= MMC_DATA_WRITE;
6251                 }
6252  
6253 +               mmc_set_data_timeout(&brq.data, card);
6254 +
6255                 brq.data.sg = mq->sg;
6256                 brq.data.sg_len = mmc_queue_map_sg(mq);
6257  
6258 @@ -302,7 +314,7 @@
6259                         goto cmd_err;
6260                 }
6261  
6262 -               if (rq_data_dir(req) != READ) {
6263 +               if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ) {
6264                         do {
6265                                 int err;
6266  
6267 @@ -315,7 +327,13 @@
6268                                                req->rq_disk->disk_name, err);
6269                                         goto cmd_err;
6270                                 }
6271 -                       } while (!(cmd.resp[0] & R1_READY_FOR_DATA));
6272 +                               /*
6273 +                                * Some cards mishandle the status bits,
6274 +                                * so make sure to check both the busy
6275 +                                * indication and the card state.
6276 +                                */
6277 +                       } while (!(cmd.resp[0] & R1_READY_FOR_DATA) ||
6278 +                               (R1_CURRENT_STATE(cmd.resp[0]) == 7));
6279  
6280  #if 0
6281                         if (cmd.resp[0] & ~0x00000900)
6282 @@ -394,9 +412,6 @@
6283         return 0;
6284  }
6285  
6286 -#define MMC_NUM_MINORS (256 >> MMC_SHIFT)
6287 -
6288 -static unsigned long dev_use[MMC_NUM_MINORS/(8*sizeof(unsigned long))];
6289  
6290  static inline int mmc_blk_readonly(struct mmc_card *card)
6291  {
6292 @@ -510,7 +525,7 @@
6293         mmc_claim_host(card->host);
6294         cmd.opcode = MMC_SET_BLOCKLEN;
6295         cmd.arg = 1 << md->block_bits;
6296 -       cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
6297 +       cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
6298         err = mmc_wait_for_cmd(card->host, &cmd, 5);
6299         mmc_release_host(card->host);
6300  
6301 @@ -562,17 +577,12 @@
6302         struct mmc_blk_data *md = mmc_get_drvdata(card);
6303  
6304         if (md) {
6305 -               int devidx;
6306 -
6307                 /* Stop new requests from getting into the queue */
6308                 del_gendisk(md->disk);
6309  
6310                 /* Then flush out any already in there */
6311                 mmc_cleanup_queue(&md->queue);
6312  
6313 -               devidx = md->disk->first_minor >> MMC_SHIFT;
6314 -               __clear_bit(devidx, dev_use);
6315 -
6316                 mmc_blk_put(md);
6317         }
6318         mmc_set_drvdata(card, NULL);
6319 --- a/drivers/mmc/card/queue.c
6320 +++ b/drivers/mmc/card/queue.c
6321 @@ -13,6 +13,7 @@
6322  #include <linux/blkdev.h>
6323  #include <linux/freezer.h>
6324  #include <linux/kthread.h>
6325 +#include <linux/scatterlist.h>
6326  
6327  #include <linux/mmc/card.h>
6328  #include <linux/mmc/host.h>
6329 @@ -22,6 +23,12 @@
6330  
6331  #define MMC_QUEUE_SUSPENDED    (1 << 0)
6332  
6333 +#define sg_init_table(sg, n) do { \
6334 +       memset(sg, 0, sizeof(*(sg)) * (n)); \
6335 +} while (0)
6336 +
6337 +#define sg_virt(sg)    (page_address((sg)->page) + (sg)->offset)
6338 +
6339  /*
6340   * Prepare a MMC request. This just filters out odd stuff.
6341   */
6342 @@ -159,6 +166,7 @@
6343                                 ret = -ENOMEM;
6344                                 goto cleanup_queue;
6345                         }
6346 +                       sg_init_table(mq->sg, 1);
6347  
6348                         mq->bounce_sg = kmalloc(sizeof(struct scatterlist) *
6349                                 bouncesz / 512, GFP_KERNEL);
6350 @@ -166,6 +174,7 @@
6351                                 ret = -ENOMEM;
6352                                 goto cleanup_queue;
6353                         }
6354 +                       sg_init_table(mq->bounce_sg, bouncesz / 512);
6355                 }
6356         }
6357  #endif
6358 @@ -183,6 +192,7 @@
6359                         ret = -ENOMEM;
6360                         goto cleanup_queue;
6361                 }
6362 +               sg_init_table(mq->sg, host->max_phys_segs);
6363         }
6364  
6365         init_MUTEX(&mq->thread_sem);
6366 @@ -302,12 +312,12 @@
6367                 BUG_ON(dst_len == 0);
6368  
6369                 if (dst_size == 0) {
6370 -                       dst_buf = page_address(dst->page) + dst->offset;
6371 +                       dst_buf = sg_virt(dst);
6372                         dst_size = dst->length;
6373                 }
6374  
6375                 if (src_size == 0) {
6376 -                       src_buf = page_address(src->page) + src->offset;
6377 +                       src_buf = sg_virt(src);
6378                         src_size = src->length;
6379                 }
6380  
6381 @@ -353,9 +363,7 @@
6382                 return 1;
6383         }
6384  
6385 -       mq->sg[0].page = virt_to_page(mq->bounce_buf);
6386 -       mq->sg[0].offset = offset_in_page(mq->bounce_buf);
6387 -       mq->sg[0].length = 0;
6388 +       sg_init_one(mq->sg, mq->bounce_buf, 0);
6389  
6390         while (sg_len) {
6391                 mq->sg[0].length += mq->bounce_sg[sg_len - 1].length;
6392 --- /dev/null
6393 +++ b/drivers/mmc/card/sdio_uart.c
6394 @@ -0,0 +1,1158 @@
6395 +/*
6396 + * linux/drivers/mmc/card/sdio_uart.c - SDIO UART/GPS driver
6397 + *
6398 + * Based on drivers/serial/8250.c and drivers/serial/serial_core.c
6399 + * by Russell King.
6400 + *
6401 + * Author:     Nicolas Pitre
6402 + * Created:    June 15, 2007
6403 + * Copyright:  MontaVista Software, Inc.
6404 + *
6405 + * This program is free software; you can redistribute it and/or modify
6406 + * it under the terms of the GNU General Public License as published by
6407 + * the Free Software Foundation; either version 2 of the License, or (at
6408 + * your option) any later version.
6409 + */
6410 +
6411 +/*
6412 + * Note: Although this driver assumes a 16550A-like UART implementation,
6413 + * it is not possible to leverage the common 8250/16550 driver, nor the
6414 + * core UART infrastructure, as they assumes direct access to the hardware
6415 + * registers, often under a spinlock.  This is not possible in the SDIO
6416 + * context as SDIO access functions must be able to sleep.
6417 + *
6418 + * Because we need to lock the SDIO host to ensure an exclusive access to
6419 + * the card, we simply rely on that lock to also prevent and serialize
6420 + * concurrent access to the same port.
6421 + */
6422 +
6423 +#include <linux/module.h>
6424 +#include <linux/init.h>
6425 +#include <linux/kernel.h>
6426 +#include <linux/mutex.h>
6427 +#include <linux/serial_reg.h>
6428 +#include <linux/circ_buf.h>
6429 +#include <linux/gfp.h>
6430 +#include <linux/tty.h>
6431 +#include <linux/tty_flip.h>
6432 +
6433 +#include <linux/mmc/core.h>
6434 +#include <linux/mmc/card.h>
6435 +#include <linux/mmc/sdio_func.h>
6436 +#include <linux/mmc/sdio_ids.h>
6437 +
6438 +
6439 +#define UART_NR                8       /* Number of UARTs this driver can handle */
6440 +
6441 +
6442 +#define UART_XMIT_SIZE PAGE_SIZE
6443 +#define WAKEUP_CHARS   256
6444 +
6445 +#define circ_empty(circ)       ((circ)->head == (circ)->tail)
6446 +#define circ_clear(circ)       ((circ)->head = (circ)->tail = 0)
6447 +
6448 +#define circ_chars_pending(circ) \
6449 +               (CIRC_CNT((circ)->head, (circ)->tail, UART_XMIT_SIZE))
6450 +
6451 +#define circ_chars_free(circ) \
6452 +               (CIRC_SPACE((circ)->head, (circ)->tail, UART_XMIT_SIZE))
6453 +
6454 +
6455 +struct uart_icount {
6456 +       __u32   cts;
6457 +       __u32   dsr;
6458 +       __u32   rng;
6459 +       __u32   dcd;
6460 +       __u32   rx;
6461 +       __u32   tx;
6462 +       __u32   frame;
6463 +       __u32   overrun;
6464 +       __u32   parity;
6465 +       __u32   brk;
6466 +};
6467 +
6468 +struct sdio_uart_port {
6469 +       struct kref             kref;
6470 +       struct tty_struct       *tty;
6471 +       unsigned int            index;
6472 +       unsigned int            opened;
6473 +       struct mutex            open_lock;
6474 +       struct sdio_func        *func;
6475 +       struct mutex            func_lock;
6476 +       struct task_struct      *in_sdio_uart_irq;
6477 +       unsigned int            regs_offset;
6478 +       struct circ_buf         xmit;
6479 +       spinlock_t              write_lock;
6480 +       struct uart_icount      icount;
6481 +       unsigned int            uartclk;
6482 +       unsigned int            mctrl;
6483 +       unsigned int            read_status_mask;
6484 +       unsigned int            ignore_status_mask;
6485 +       unsigned char           x_char;
6486 +       unsigned char           ier;
6487 +       unsigned char           lcr;
6488 +};
6489 +
6490 +static struct sdio_uart_port *sdio_uart_table[UART_NR];
6491 +static DEFINE_SPINLOCK(sdio_uart_table_lock);
6492 +
6493 +static int sdio_uart_add_port(struct sdio_uart_port *port)
6494 +{
6495 +       int index, ret = -EBUSY;
6496 +
6497 +       kref_init(&port->kref);
6498 +       mutex_init(&port->open_lock);
6499 +       mutex_init(&port->func_lock);
6500 +       spin_lock_init(&port->write_lock);
6501 +
6502 +       spin_lock(&sdio_uart_table_lock);
6503 +       for (index = 0; index < UART_NR; index++) {
6504 +               if (!sdio_uart_table[index]) {
6505 +                       port->index = index;
6506 +                       sdio_uart_table[index] = port;
6507 +                       ret = 0;
6508 +                       break;
6509 +               }
6510 +       }
6511 +       spin_unlock(&sdio_uart_table_lock);
6512 +
6513 +       return ret;
6514 +}
6515 +
6516 +static struct sdio_uart_port *sdio_uart_port_get(unsigned index)
6517 +{
6518 +       struct sdio_uart_port *port;
6519 +
6520 +       if (index >= UART_NR)
6521 +               return NULL;
6522 +
6523 +       spin_lock(&sdio_uart_table_lock);
6524 +       port = sdio_uart_table[index];
6525 +       if (port)
6526 +               kref_get(&port->kref);
6527 +       spin_unlock(&sdio_uart_table_lock);
6528 +
6529 +       return port;
6530 +}
6531 +
6532 +static void sdio_uart_port_destroy(struct kref *kref)
6533 +{
6534 +       struct sdio_uart_port *port =
6535 +               container_of(kref, struct sdio_uart_port, kref);
6536 +       kfree(port);
6537 +}
6538 +
6539 +static void sdio_uart_port_put(struct sdio_uart_port *port)
6540 +{
6541 +       kref_put(&port->kref, sdio_uart_port_destroy);
6542 +}
6543 +
6544 +static void sdio_uart_port_remove(struct sdio_uart_port *port)
6545 +{
6546 +       struct sdio_func *func;
6547 +
6548 +       BUG_ON(sdio_uart_table[port->index] != port);
6549 +
6550 +       spin_lock(&sdio_uart_table_lock);
6551 +       sdio_uart_table[port->index] = NULL;
6552 +       spin_unlock(&sdio_uart_table_lock);
6553 +
6554 +       /*
6555 +        * We're killing a port that potentially still is in use by
6556 +        * the tty layer. Be careful to prevent any further access
6557 +        * to the SDIO function and arrange for the tty layer to
6558 +        * give up on that port ASAP.
6559 +        * Beware: the lock ordering is critical.
6560 +        */
6561 +       mutex_lock(&port->open_lock);
6562 +       mutex_lock(&port->func_lock);
6563 +       func = port->func;
6564 +       sdio_claim_host(func);
6565 +       port->func = NULL;
6566 +       mutex_unlock(&port->func_lock);
6567 +       if (port->opened)
6568 +               tty_hangup(port->tty);
6569 +       mutex_unlock(&port->open_lock);
6570 +       sdio_release_irq(func);
6571 +       sdio_disable_func(func);
6572 +       sdio_release_host(func);
6573 +
6574 +       sdio_uart_port_put(port);
6575 +}
6576 +
6577 +static int sdio_uart_claim_func(struct sdio_uart_port *port)
6578 +{
6579 +       mutex_lock(&port->func_lock);
6580 +       if (unlikely(!port->func)) {
6581 +               mutex_unlock(&port->func_lock);
6582 +               return -ENODEV;
6583 +       }
6584 +       if (likely(port->in_sdio_uart_irq != current))
6585 +               sdio_claim_host(port->func);
6586 +       mutex_unlock(&port->func_lock);
6587 +       return 0;
6588 +}
6589 +
6590 +static inline void sdio_uart_release_func(struct sdio_uart_port *port)
6591 +{
6592 +       if (likely(port->in_sdio_uart_irq != current))
6593 +               sdio_release_host(port->func);
6594 +}
6595 +
6596 +static inline unsigned int sdio_in(struct sdio_uart_port *port, int offset)
6597 +{
6598 +       unsigned char c;
6599 +       c = sdio_readb(port->func, port->regs_offset + offset, NULL);
6600 +       return c;
6601 +}
6602 +
6603 +static inline void sdio_out(struct sdio_uart_port *port, int offset, int value)
6604 +{
6605 +       sdio_writeb(port->func, value, port->regs_offset + offset, NULL);
6606 +}
6607 +
6608 +static unsigned int sdio_uart_get_mctrl(struct sdio_uart_port *port)
6609 +{
6610 +       unsigned char status;
6611 +       unsigned int ret;
6612 +
6613 +       status = sdio_in(port, UART_MSR);
6614 +
6615 +       ret = 0;
6616 +       if (status & UART_MSR_DCD)
6617 +               ret |= TIOCM_CAR;
6618 +       if (status & UART_MSR_RI)
6619 +               ret |= TIOCM_RNG;
6620 +       if (status & UART_MSR_DSR)
6621 +               ret |= TIOCM_DSR;
6622 +       if (status & UART_MSR_CTS)
6623 +               ret |= TIOCM_CTS;
6624 +       return ret;
6625 +}
6626 +
6627 +static void sdio_uart_write_mctrl(struct sdio_uart_port *port, unsigned int mctrl)
6628 +{
6629 +       unsigned char mcr = 0;
6630 +
6631 +       if (mctrl & TIOCM_RTS)
6632 +               mcr |= UART_MCR_RTS;
6633 +       if (mctrl & TIOCM_DTR)
6634 +               mcr |= UART_MCR_DTR;
6635 +       if (mctrl & TIOCM_OUT1)
6636 +               mcr |= UART_MCR_OUT1;
6637 +       if (mctrl & TIOCM_OUT2)
6638 +               mcr |= UART_MCR_OUT2;
6639 +       if (mctrl & TIOCM_LOOP)
6640 +               mcr |= UART_MCR_LOOP;
6641 +
6642 +       sdio_out(port, UART_MCR, mcr);
6643 +}
6644 +
6645 +static inline void sdio_uart_update_mctrl(struct sdio_uart_port *port,
6646 +                                         unsigned int set, unsigned int clear)
6647 +{
6648 +       unsigned int old;
6649 +
6650 +       old = port->mctrl;
6651 +       port->mctrl = (old & ~clear) | set;
6652 +       if (old != port->mctrl)
6653 +               sdio_uart_write_mctrl(port, port->mctrl);
6654 +}
6655 +
6656 +#define sdio_uart_set_mctrl(port, x)   sdio_uart_update_mctrl(port, x, 0)
6657 +#define sdio_uart_clear_mctrl(port, x) sdio_uart_update_mctrl(port, 0, x)
6658 +
6659 +static void sdio_uart_change_speed(struct sdio_uart_port *port,
6660 +                                  struct ktermios *termios,
6661 +                                  struct ktermios *old)
6662 +{
6663 +       unsigned char cval, fcr = 0;
6664 +       unsigned int baud, quot;
6665 +
6666 +       switch (termios->c_cflag & CSIZE) {
6667 +       case CS5:
6668 +               cval = UART_LCR_WLEN5;
6669 +               break;
6670 +       case CS6:
6671 +               cval = UART_LCR_WLEN6;
6672 +               break;
6673 +       case CS7:
6674 +               cval = UART_LCR_WLEN7;
6675 +               break;
6676 +       default:
6677 +       case CS8:
6678 +               cval = UART_LCR_WLEN8;
6679 +               break;
6680 +       }
6681 +
6682 +       if (termios->c_cflag & CSTOPB)
6683 +               cval |= UART_LCR_STOP;
6684 +       if (termios->c_cflag & PARENB)
6685 +               cval |= UART_LCR_PARITY;
6686 +       if (!(termios->c_cflag & PARODD))
6687 +               cval |= UART_LCR_EPAR;
6688 +
6689 +       for (;;) {
6690 +               baud = tty_termios_baud_rate(termios);
6691 +               if (baud == 0)
6692 +                       baud = 9600;  /* Special case: B0 rate. */
6693 +               if (baud <= port->uartclk)
6694 +                       break;
6695 +               /*
6696 +                * Oops, the quotient was zero.  Try again with the old
6697 +                * baud rate if possible, otherwise default to 9600.
6698 +                */
6699 +               termios->c_cflag &= ~CBAUD;
6700 +               if (old) {
6701 +                       termios->c_cflag |= old->c_cflag & CBAUD;
6702 +                       old = NULL;
6703 +               } else
6704 +                       termios->c_cflag |= B9600;
6705 +       }
6706 +       quot = (2 * port->uartclk + baud) / (2 * baud);
6707 +
6708 +       if (baud < 2400)
6709 +               fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1;
6710 +       else
6711 +               fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10;
6712 +
6713 +       port->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
6714 +       if (termios->c_iflag & INPCK)
6715 +               port->read_status_mask |= UART_LSR_FE | UART_LSR_PE;
6716 +       if (termios->c_iflag & (BRKINT | PARMRK))
6717 +               port->read_status_mask |= UART_LSR_BI;
6718 +
6719 +       /*
6720 +        * Characters to ignore
6721 +        */
6722 +       port->ignore_status_mask = 0;
6723 +       if (termios->c_iflag & IGNPAR)
6724 +               port->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
6725 +       if (termios->c_iflag & IGNBRK) {
6726 +               port->ignore_status_mask |= UART_LSR_BI;
6727 +               /*
6728 +                * If we're ignoring parity and break indicators,
6729 +                * ignore overruns too (for real raw support).
6730 +                */
6731 +               if (termios->c_iflag & IGNPAR)
6732 +                       port->ignore_status_mask |= UART_LSR_OE;
6733 +       }
6734 +
6735 +       /*
6736 +        * ignore all characters if CREAD is not set
6737 +        */
6738 +       if ((termios->c_cflag & CREAD) == 0)
6739 +               port->ignore_status_mask |= UART_LSR_DR;
6740 +
6741 +       /*
6742 +        * CTS flow control flag and modem status interrupts
6743 +        */
6744 +       port->ier &= ~UART_IER_MSI;
6745 +       if ((termios->c_cflag & CRTSCTS) || !(termios->c_cflag & CLOCAL))
6746 +               port->ier |= UART_IER_MSI;
6747 +
6748 +       port->lcr = cval;
6749 +
6750 +       sdio_out(port, UART_IER, port->ier);
6751 +       sdio_out(port, UART_LCR, cval | UART_LCR_DLAB);
6752 +       sdio_out(port, UART_DLL, quot & 0xff);
6753 +       sdio_out(port, UART_DLM, quot >> 8);
6754 +       sdio_out(port, UART_LCR, cval);
6755 +       sdio_out(port, UART_FCR, fcr);
6756 +
6757 +       sdio_uart_write_mctrl(port, port->mctrl);
6758 +}
6759 +
6760 +static void sdio_uart_start_tx(struct sdio_uart_port *port)
6761 +{
6762 +       if (!(port->ier & UART_IER_THRI)) {
6763 +               port->ier |= UART_IER_THRI;
6764 +               sdio_out(port, UART_IER, port->ier);
6765 +       }
6766 +}
6767 +
6768 +static void sdio_uart_stop_tx(struct sdio_uart_port *port)
6769 +{
6770 +       if (port->ier & UART_IER_THRI) {
6771 +               port->ier &= ~UART_IER_THRI;
6772 +               sdio_out(port, UART_IER, port->ier);
6773 +       }
6774 +}
6775 +
6776 +static void sdio_uart_stop_rx(struct sdio_uart_port *port)
6777 +{
6778 +       port->ier &= ~UART_IER_RLSI;
6779 +       port->read_status_mask &= ~UART_LSR_DR;
6780 +       sdio_out(port, UART_IER, port->ier);
6781 +}
6782 +
6783 +static void sdio_uart_receive_chars(struct sdio_uart_port *port, unsigned int *status)
6784 +{
6785 +       struct tty_struct *tty = port->tty;
6786 +       unsigned int ch, flag;
6787 +       int max_count = 256;
6788 +
6789 +       do {
6790 +               ch = sdio_in(port, UART_RX);
6791 +               flag = TTY_NORMAL;
6792 +               port->icount.rx++;
6793 +
6794 +               if (unlikely(*status & (UART_LSR_BI | UART_LSR_PE |
6795 +                                       UART_LSR_FE | UART_LSR_OE))) {
6796 +                       /*
6797 +                        * For statistics only
6798 +                        */
6799 +                       if (*status & UART_LSR_BI) {
6800 +                               *status &= ~(UART_LSR_FE | UART_LSR_PE);
6801 +                               port->icount.brk++;
6802 +                       } else if (*status & UART_LSR_PE)
6803 +                               port->icount.parity++;
6804 +                       else if (*status & UART_LSR_FE)
6805 +                               port->icount.frame++;
6806 +                       if (*status & UART_LSR_OE)
6807 +                               port->icount.overrun++;
6808 +
6809 +                       /*
6810 +                        * Mask off conditions which should be ignored.
6811 +                        */
6812 +                       *status &= port->read_status_mask;
6813 +                       if (*status & UART_LSR_BI) {
6814 +                               flag = TTY_BREAK;
6815 +                       } else if (*status & UART_LSR_PE)
6816 +                               flag = TTY_PARITY;
6817 +                       else if (*status & UART_LSR_FE)
6818 +                               flag = TTY_FRAME;
6819 +               }
6820 +
6821 +               if ((*status & port->ignore_status_mask & ~UART_LSR_OE) == 0)
6822 +                       tty_insert_flip_char(tty, ch, flag);
6823 +
6824 +               /*
6825 +                * Overrun is special.  Since it's reported immediately,
6826 +                * it doesn't affect the current character.
6827 +                */
6828 +               if (*status & ~port->ignore_status_mask & UART_LSR_OE)
6829 +                       tty_insert_flip_char(tty, 0, TTY_OVERRUN);
6830 +
6831 +               *status = sdio_in(port, UART_LSR);
6832 +       } while ((*status & UART_LSR_DR) && (max_count-- > 0));
6833 +       tty_flip_buffer_push(tty);
6834 +}
6835 +
6836 +static void sdio_uart_transmit_chars(struct sdio_uart_port *port)
6837 +{
6838 +       struct circ_buf *xmit = &port->xmit;
6839 +       int count;
6840 +
6841 +       if (port->x_char) {
6842 +               sdio_out(port, UART_TX, port->x_char);
6843 +               port->icount.tx++;
6844 +               port->x_char = 0;
6845 +               return;
6846 +       }
6847 +       if (circ_empty(xmit) || port->tty->stopped || port->tty->hw_stopped) {
6848 +               sdio_uart_stop_tx(port);
6849 +               return;
6850 +       }
6851 +
6852 +       count = 16;
6853 +       do {
6854 +               sdio_out(port, UART_TX, xmit->buf[xmit->tail]);
6855 +               xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
6856 +               port->icount.tx++;
6857 +               if (circ_empty(xmit))
6858 +                       break;
6859 +       } while (--count > 0);
6860 +
6861 +       if (circ_chars_pending(xmit) < WAKEUP_CHARS)
6862 +               tty_wakeup(port->tty);
6863 +
6864 +       if (circ_empty(xmit))
6865 +               sdio_uart_stop_tx(port);
6866 +}
6867 +
6868 +static void sdio_uart_check_modem_status(struct sdio_uart_port *port)
6869 +{
6870 +       int status;
6871 +
6872 +       status = sdio_in(port, UART_MSR);
6873 +
6874 +       if ((status & UART_MSR_ANY_DELTA) == 0)
6875 +               return;
6876 +
6877 +       if (status & UART_MSR_TERI)
6878 +               port->icount.rng++;
6879 +       if (status & UART_MSR_DDSR)
6880 +               port->icount.dsr++;
6881 +       if (status & UART_MSR_DDCD)
6882 +               port->icount.dcd++;
6883 +       if (status & UART_MSR_DCTS) {
6884 +               port->icount.cts++;
6885 +               if (port->tty->termios->c_cflag & CRTSCTS) {
6886 +                       int cts = (status & UART_MSR_CTS);
6887 +                       if (port->tty->hw_stopped) {
6888 +                               if (cts) {
6889 +                                       port->tty->hw_stopped = 0;
6890 +                                       sdio_uart_start_tx(port);
6891 +                                       tty_wakeup(port->tty);
6892 +                               }
6893 +                       } else {
6894 +                               if (!cts) {
6895 +                                       port->tty->hw_stopped = 1;
6896 +                                       sdio_uart_stop_tx(port);
6897 +                               }
6898 +                       }
6899 +               }
6900 +       }
6901 +}
6902 +
6903 +/*
6904 + * This handles the interrupt from one port.
6905 + */
6906 +static void sdio_uart_irq(struct sdio_func *func)
6907 +{
6908 +       struct sdio_uart_port *port = sdio_get_drvdata(func);
6909 +       unsigned int iir, lsr;
6910 +
6911 +       /*
6912 +        * In a few places sdio_uart_irq() is called directly instead of
6913 +        * waiting for the actual interrupt to be raised and the SDIO IRQ
6914 +        * thread scheduled in order to reduce latency.  However, some
6915 +        * interaction with the tty core may end up calling us back
6916 +        * (serial echo, flow control, etc.) through those same places
6917 +        * causing undesirable effects.  Let's stop the recursion here.
6918 +        */
6919 +       if (unlikely(port->in_sdio_uart_irq == current))
6920 +               return;
6921 +
6922 +       iir = sdio_in(port, UART_IIR);
6923 +       if (iir & UART_IIR_NO_INT)
6924 +               return;
6925 +
6926 +       port->in_sdio_uart_irq = current;
6927 +       lsr = sdio_in(port, UART_LSR);
6928 +       if (lsr & UART_LSR_DR)
6929 +               sdio_uart_receive_chars(port, &lsr);
6930 +       sdio_uart_check_modem_status(port);
6931 +       if (lsr & UART_LSR_THRE)
6932 +               sdio_uart_transmit_chars(port);
6933 +       port->in_sdio_uart_irq = NULL;
6934 +}
6935 +
6936 +static int sdio_uart_startup(struct sdio_uart_port *port)
6937 +{
6938 +       unsigned long page;
6939 +       int ret;
6940 +
6941 +       /*
6942 +        * Set the TTY IO error marker - we will only clear this
6943 +        * once we have successfully opened the port.
6944 +        */
6945 +       set_bit(TTY_IO_ERROR, &port->tty->flags);
6946 +
6947 +       /* Initialise and allocate the transmit buffer. */
6948 +       page = __get_free_page(GFP_KERNEL);
6949 +       if (!page)
6950 +               return -ENOMEM;
6951 +       port->xmit.buf = (unsigned char *)page;
6952 +       circ_clear(&port->xmit);
6953 +
6954 +       ret = sdio_uart_claim_func(port);
6955 +       if (ret)
6956 +               goto err1;
6957 +       ret = sdio_enable_func(port->func);
6958 +       if (ret)
6959 +               goto err2;
6960 +       ret = sdio_claim_irq(port->func, sdio_uart_irq);
6961 +       if (ret)
6962 +               goto err3;
6963 +
6964 +       /*
6965 +        * Clear the FIFO buffers and disable them.
6966 +        * (they will be reenabled in sdio_change_speed())
6967 +        */
6968 +       sdio_out(port, UART_FCR, UART_FCR_ENABLE_FIFO);
6969 +       sdio_out(port, UART_FCR, UART_FCR_ENABLE_FIFO |
6970 +                       UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
6971 +       sdio_out(port, UART_FCR, 0);
6972 +
6973 +       /*
6974 +        * Clear the interrupt registers.
6975 +        */
6976 +       (void) sdio_in(port, UART_LSR);
6977 +       (void) sdio_in(port, UART_RX);
6978 +       (void) sdio_in(port, UART_IIR);
6979 +       (void) sdio_in(port, UART_MSR);
6980 +
6981 +       /*
6982 +        * Now, initialize the UART
6983 +        */
6984 +       sdio_out(port, UART_LCR, UART_LCR_WLEN8);
6985 +
6986 +       port->ier = UART_IER_RLSI | UART_IER_RDI | UART_IER_RTOIE | UART_IER_UUE;
6987 +       port->mctrl = TIOCM_OUT2;
6988 +
6989 +       sdio_uart_change_speed(port, port->tty->termios, NULL);
6990 +
6991 +       if (port->tty->termios->c_cflag & CBAUD)
6992 +               sdio_uart_set_mctrl(port, TIOCM_RTS | TIOCM_DTR);
6993 +
6994 +       if (port->tty->termios->c_cflag & CRTSCTS)
6995 +               if (!(sdio_uart_get_mctrl(port) & TIOCM_CTS))
6996 +                       port->tty->hw_stopped = 1;
6997 +
6998 +       clear_bit(TTY_IO_ERROR, &port->tty->flags);
6999 +
7000 +       /* Kick the IRQ handler once while we're still holding the host lock */
7001 +       sdio_uart_irq(port->func);
7002 +
7003 +       sdio_uart_release_func(port);
7004 +       return 0;
7005 +
7006 +err3:
7007 +       sdio_disable_func(port->func);
7008 +err2:
7009 +       sdio_uart_release_func(port);
7010 +err1:
7011 +       free_page((unsigned long)port->xmit.buf);
7012 +       return ret;
7013 +}
7014 +
7015 +static void sdio_uart_shutdown(struct sdio_uart_port *port)
7016 +{
7017 +       int ret;
7018 +
7019 +       ret = sdio_uart_claim_func(port);
7020 +       if (ret)
7021 +               goto skip;
7022 +
7023 +       sdio_uart_stop_rx(port);
7024 +
7025 +       /* TODO: wait here for TX FIFO to drain */
7026 +
7027 +       /* Turn off DTR and RTS early. */
7028 +       if (port->tty->termios->c_cflag & HUPCL)
7029 +               sdio_uart_clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
7030 +
7031 +        /* Disable interrupts from this port */
7032 +       sdio_release_irq(port->func);
7033 +       port->ier = 0;
7034 +       sdio_out(port, UART_IER, 0);
7035 +
7036 +       sdio_uart_clear_mctrl(port, TIOCM_OUT2);
7037 +
7038 +       /* Disable break condition and FIFOs. */
7039 +       port->lcr &= ~UART_LCR_SBC;
7040 +       sdio_out(port, UART_LCR, port->lcr);
7041 +       sdio_out(port, UART_FCR, UART_FCR_ENABLE_FIFO |
7042 +                                UART_FCR_CLEAR_RCVR |
7043 +                                UART_FCR_CLEAR_XMIT);
7044 +       sdio_out(port, UART_FCR, 0);
7045 +
7046 +       sdio_disable_func(port->func);
7047 +
7048 +       sdio_uart_release_func(port);
7049 +
7050 +skip:
7051 +       /* Free the transmit buffer page. */
7052 +       free_page((unsigned long)port->xmit.buf);
7053 +}
7054 +
7055 +static int sdio_uart_open (struct tty_struct *tty, struct file * filp)
7056 +{
7057 +       struct sdio_uart_port *port;
7058 +       int ret;
7059 +
7060 +       port = sdio_uart_port_get(tty->index);
7061 +       if (!port)
7062 +               return -ENODEV;
7063 +
7064 +       mutex_lock(&port->open_lock);
7065 +
7066 +       /*
7067 +        * Make sure not to mess up with a dead port
7068 +        * which has not been closed yet.
7069 +        */
7070 +       if (tty->driver_data && tty->driver_data != port) {
7071 +               mutex_unlock(&port->open_lock);
7072 +               sdio_uart_port_put(port);
7073 +               return -EBUSY;
7074 +       }
7075 +
7076 +       if (!port->opened) {
7077 +               tty->driver_data = port;
7078 +               port->tty = tty;
7079 +               ret = sdio_uart_startup(port);
7080 +               if (ret) {
7081 +                       tty->driver_data = NULL;
7082 +                       port->tty = NULL;
7083 +                       mutex_unlock(&port->open_lock);
7084 +                       sdio_uart_port_put(port);
7085 +                       return ret;
7086 +               }
7087 +       }
7088 +       port->opened++;
7089 +       mutex_unlock(&port->open_lock);
7090 +       return 0;
7091 +}
7092 +
7093 +static void sdio_uart_close(struct tty_struct *tty, struct file * filp)
7094 +{
7095 +       struct sdio_uart_port *port = tty->driver_data;
7096 +
7097 +       if (!port)
7098 +               return;
7099 +
7100 +       mutex_lock(&port->open_lock);
7101 +       BUG_ON(!port->opened);
7102 +
7103 +       /*
7104 +        * This is messy.  The tty layer calls us even when open()
7105 +        * returned an error.  Ignore this close request if tty->count
7106 +        * is larger than port->count.
7107 +        */
7108 +       if (tty->count > port->opened) {
7109 +               mutex_unlock(&port->open_lock);
7110 +               return;
7111 +       }
7112 +
7113 +       if (--port->opened == 0) {
7114 +               tty->closing = 1;
7115 +               sdio_uart_shutdown(port);
7116 +               tty_ldisc_flush(tty);
7117 +               port->tty = NULL;
7118 +               tty->driver_data = NULL;
7119 +               tty->closing = 0;
7120 +       }
7121 +       mutex_unlock(&port->open_lock);
7122 +       sdio_uart_port_put(port);
7123 +}
7124 +
7125 +static int sdio_uart_write(struct tty_struct * tty, const unsigned char *buf,
7126 +                          int count)
7127 +{
7128 +       struct sdio_uart_port *port = tty->driver_data;
7129 +       struct circ_buf *circ = &port->xmit;
7130 +       int c, ret = 0;
7131 +
7132 +       if (!port->func)
7133 +               return -ENODEV;
7134 +
7135 +       spin_lock(&port->write_lock);
7136 +       while (1) {
7137 +               c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE);
7138 +               if (count < c)
7139 +                       c = count;
7140 +               if (c <= 0)
7141 +                       break;
7142 +               memcpy(circ->buf + circ->head, buf, c);
7143 +               circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1);
7144 +               buf += c;
7145 +               count -= c;
7146 +               ret += c;
7147 +       }
7148 +       spin_unlock(&port->write_lock);
7149 +
7150 +       if ( !(port->ier & UART_IER_THRI)) {
7151 +               int err = sdio_uart_claim_func(port);
7152 +               if (!err) {
7153 +                       sdio_uart_start_tx(port);
7154 +                       sdio_uart_irq(port->func);
7155 +                       sdio_uart_release_func(port);
7156 +               } else
7157 +                       ret = err;
7158 +       }
7159 +
7160 +       return ret;
7161 +}
7162 +
7163 +static int sdio_uart_write_room(struct tty_struct *tty)
7164 +{
7165 +       struct sdio_uart_port *port = tty->driver_data;
7166 +       return port ? circ_chars_free(&port->xmit) : 0;
7167 +}
7168 +
7169 +static int sdio_uart_chars_in_buffer(struct tty_struct *tty)
7170 +{
7171 +       struct sdio_uart_port *port = tty->driver_data;
7172 +       return port ? circ_chars_pending(&port->xmit) : 0;
7173 +}
7174 +
7175 +static void sdio_uart_send_xchar(struct tty_struct *tty, char ch)
7176 +{
7177 +       struct sdio_uart_port *port = tty->driver_data;
7178 +
7179 +       port->x_char = ch;
7180 +       if (ch && !(port->ier & UART_IER_THRI)) {
7181 +               if (sdio_uart_claim_func(port) != 0)
7182 +                       return;
7183 +               sdio_uart_start_tx(port);
7184 +               sdio_uart_irq(port->func);
7185 +               sdio_uart_release_func(port);
7186 +       }
7187 +}
7188 +
7189 +static void sdio_uart_throttle(struct tty_struct *tty)
7190 +{
7191 +       struct sdio_uart_port *port = tty->driver_data;
7192 +
7193 +       if (!I_IXOFF(tty) && !(tty->termios->c_cflag & CRTSCTS))
7194 +               return;
7195 +
7196 +       if (sdio_uart_claim_func(port) != 0)
7197 +               return;
7198 +
7199 +       if (I_IXOFF(tty)) {
7200 +               port->x_char = STOP_CHAR(tty);
7201 +               sdio_uart_start_tx(port);
7202 +       }
7203 +
7204 +       if (tty->termios->c_cflag & CRTSCTS)
7205 +               sdio_uart_clear_mctrl(port, TIOCM_RTS);
7206 +
7207 +       sdio_uart_irq(port->func);
7208 +       sdio_uart_release_func(port);
7209 +}
7210 +
7211 +static void sdio_uart_unthrottle(struct tty_struct *tty)
7212 +{
7213 +       struct sdio_uart_port *port = tty->driver_data;
7214 +
7215 +       if (!I_IXOFF(tty) && !(tty->termios->c_cflag & CRTSCTS))
7216 +               return;
7217 +
7218 +       if (sdio_uart_claim_func(port) != 0)
7219 +               return;
7220 +
7221 +       if (I_IXOFF(tty)) {
7222 +               if (port->x_char) {
7223 +                       port->x_char = 0;
7224 +               } else {
7225 +                       port->x_char = START_CHAR(tty);
7226 +                       sdio_uart_start_tx(port);
7227 +               }
7228 +       }
7229 +
7230 +       if (tty->termios->c_cflag & CRTSCTS)
7231 +               sdio_uart_set_mctrl(port, TIOCM_RTS);
7232 +
7233 +       sdio_uart_irq(port->func);
7234 +       sdio_uart_release_func(port);
7235 +}
7236 +
7237 +static void sdio_uart_set_termios(struct tty_struct *tty, struct ktermios *old_termios)
7238 +{
7239 +       struct sdio_uart_port *port = tty->driver_data;
7240 +       unsigned int cflag = tty->termios->c_cflag;
7241 +
7242 +#define RELEVANT_IFLAG(iflag)   ((iflag) & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
7243 +
7244 +       if ((cflag ^ old_termios->c_cflag) == 0 &&
7245 +           RELEVANT_IFLAG(tty->termios->c_iflag ^ old_termios->c_iflag) == 0)
7246 +               return;
7247 +
7248 +       if (sdio_uart_claim_func(port) != 0)
7249 +               return;
7250 +
7251 +       sdio_uart_change_speed(port, tty->termios, old_termios);
7252 +
7253 +       /* Handle transition to B0 status */
7254 +       if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD))
7255 +               sdio_uart_clear_mctrl(port, TIOCM_RTS | TIOCM_DTR);
7256 +
7257 +       /* Handle transition away from B0 status */
7258 +       if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) {
7259 +               unsigned int mask = TIOCM_DTR;
7260 +               if (!(cflag & CRTSCTS) || !test_bit(TTY_THROTTLED, &tty->flags))
7261 +                       mask |= TIOCM_RTS;
7262 +               sdio_uart_set_mctrl(port, mask);
7263 +       }
7264 +
7265 +       /* Handle turning off CRTSCTS */
7266 +       if ((old_termios->c_cflag & CRTSCTS) && !(cflag & CRTSCTS)) {
7267 +               tty->hw_stopped = 0;
7268 +               sdio_uart_start_tx(port);
7269 +       }
7270 +
7271 +       /* Handle turning on CRTSCTS */
7272 +       if (!(old_termios->c_cflag & CRTSCTS) && (cflag & CRTSCTS)) {
7273 +               if (!(sdio_uart_get_mctrl(port) & TIOCM_CTS)) {
7274 +                       tty->hw_stopped = 1;
7275 +                       sdio_uart_stop_tx(port);
7276 +               }
7277 +       }
7278 +
7279 +       sdio_uart_release_func(port);
7280 +}
7281 +
7282 +static void sdio_uart_break_ctl(struct tty_struct *tty, int break_state)
7283 +{
7284 +       struct sdio_uart_port *port = tty->driver_data;
7285 +
7286 +       if (sdio_uart_claim_func(port) != 0)
7287 +               return;
7288 +
7289 +       if (break_state == -1)
7290 +               port->lcr |= UART_LCR_SBC;
7291 +       else
7292 +               port->lcr &= ~UART_LCR_SBC;
7293 +       sdio_out(port, UART_LCR, port->lcr);
7294 +
7295 +       sdio_uart_release_func(port);
7296 +}
7297 +
7298 +static int sdio_uart_tiocmget(struct tty_struct *tty, struct file *file)
7299 +{
7300 +       struct sdio_uart_port *port = tty->driver_data;
7301 +       int result;
7302 +
7303 +       result = sdio_uart_claim_func(port);
7304 +       if (!result) {
7305 +               result = port->mctrl | sdio_uart_get_mctrl(port);
7306 +               sdio_uart_release_func(port);
7307 +       }
7308 +
7309 +       return result;
7310 +}
7311 +
7312 +static int sdio_uart_tiocmset(struct tty_struct *tty, struct file *file,
7313 +                             unsigned int set, unsigned int clear)
7314 +{
7315 +       struct sdio_uart_port *port = tty->driver_data;
7316 +       int result;
7317 +
7318 +       result =sdio_uart_claim_func(port);
7319 +       if(!result) {
7320 +               sdio_uart_update_mctrl(port, set, clear);
7321 +               sdio_uart_release_func(port);
7322 +       }
7323 +
7324 +       return result;
7325 +}
7326 +
7327 +static int sdio_uart_read_proc(char *page, char **start, off_t off,
7328 +                              int count, int *eof, void *data)
7329 +{
7330 +       int i, len = 0;
7331 +       off_t begin = 0;
7332 +
7333 +       len += sprintf(page, "serinfo:1.0 driver%s%s revision:%s\n",
7334 +                      "", "", "");
7335 +       for (i = 0; i < UART_NR && len < PAGE_SIZE - 96; i++) {
7336 +               struct sdio_uart_port *port = sdio_uart_port_get(i);
7337 +               if (port) {
7338 +                       len += sprintf(page+len, "%d: uart:SDIO", i);
7339 +                       if(capable(CAP_SYS_ADMIN)) {
7340 +                               len += sprintf(page + len, " tx:%d rx:%d",
7341 +                                              port->icount.tx, port->icount.rx);
7342 +                               if (port->icount.frame)
7343 +                                       len += sprintf(page + len, " fe:%d",
7344 +                                                      port->icount.frame);
7345 +                               if (port->icount.parity)
7346 +                                       len += sprintf(page + len, " pe:%d",
7347 +                                                      port->icount.parity);
7348 +                               if (port->icount.brk)
7349 +                                       len += sprintf(page + len, " brk:%d",
7350 +                                                      port->icount.brk);
7351 +                               if (port->icount.overrun)
7352 +                                       len += sprintf(page + len, " oe:%d",
7353 +                                                      port->icount.overrun);
7354 +                               if (port->icount.cts)
7355 +                                       len += sprintf(page + len, " cts:%d",
7356 +                                                      port->icount.cts);
7357 +                               if (port->icount.dsr)
7358 +                                       len += sprintf(page + len, " dsr:%d",
7359 +                                                      port->icount.dsr);
7360 +                               if (port->icount.rng)
7361 +                                       len += sprintf(page + len, " rng:%d",
7362 +                                                      port->icount.rng);
7363 +                               if (port->icount.dcd)
7364 +                                       len += sprintf(page + len, " dcd:%d",
7365 +                                                      port->icount.dcd);
7366 +                       }
7367 +                       strcat(page, "\n");
7368 +                       len++;
7369 +                       sdio_uart_port_put(port);
7370 +               }
7371 +
7372 +               if (len + begin > off + count)
7373 +                       goto done;
7374 +               if (len + begin < off) {
7375 +                       begin += len;
7376 +                       len = 0;
7377 +               }
7378 +       }
7379 +       *eof = 1;
7380 +
7381 +done:
7382 +       if (off >= len + begin)
7383 +               return 0;
7384 +       *start = page + (off - begin);
7385 +       return (count < begin + len - off) ? count : (begin + len - off);
7386 +}
7387 +
7388 +static const struct tty_operations sdio_uart_ops = {
7389 +       .open                   = sdio_uart_open,
7390 +       .close                  = sdio_uart_close,
7391 +       .write                  = sdio_uart_write,
7392 +       .write_room             = sdio_uart_write_room,
7393 +       .chars_in_buffer        = sdio_uart_chars_in_buffer,
7394 +       .send_xchar             = sdio_uart_send_xchar,
7395 +       .throttle               = sdio_uart_throttle,
7396 +       .unthrottle             = sdio_uart_unthrottle,
7397 +       .set_termios            = sdio_uart_set_termios,
7398 +       .break_ctl              = sdio_uart_break_ctl,
7399 +       .tiocmget               = sdio_uart_tiocmget,
7400 +       .tiocmset               = sdio_uart_tiocmset,
7401 +       .read_proc              = sdio_uart_read_proc,
7402 +};
7403 +
7404 +static struct tty_driver *sdio_uart_tty_driver;
7405 +
7406 +static int sdio_uart_probe(struct sdio_func *func,
7407 +                          const struct sdio_device_id *id)
7408 +{
7409 +       struct sdio_uart_port *port;
7410 +       int ret;
7411 +
7412 +       port = kzalloc(sizeof(struct sdio_uart_port), GFP_KERNEL);
7413 +       if (!port)
7414 +               return -ENOMEM;
7415 +
7416 +       if (func->class == SDIO_CLASS_UART) {
7417 +               printk(KERN_WARNING "%s: need info on UART class basic setup\n",
7418 +                      sdio_func_id(func));
7419 +               kfree(port);
7420 +               return -ENOSYS;
7421 +       } else if (func->class == SDIO_CLASS_GPS) {
7422 +               /*
7423 +                * We need tuple 0x91.  It contains SUBTPL_SIOREG
7424 +                * and SUBTPL_RCVCAPS.
7425 +                */
7426 +               struct sdio_func_tuple *tpl;
7427 +               for (tpl = func->tuples; tpl; tpl = tpl->next) {
7428 +                       if (tpl->code != 0x91)
7429 +                               continue;
7430 +                       if (tpl->size < 10)
7431 +                               continue;
7432 +                       if (tpl->data[1] == 0)  /* SUBTPL_SIOREG */
7433 +                               break;
7434 +               }
7435 +               if (!tpl) {
7436 +                       printk(KERN_WARNING
7437 +                              "%s: can't find tuple 0x91 subtuple 0 (SUBTPL_SIOREG) for GPS class\n",
7438 +                              sdio_func_id(func));
7439 +                       kfree(port);
7440 +                       return -EINVAL;
7441 +               }
7442 +               printk(KERN_DEBUG "%s: Register ID = 0x%02x, Exp ID = 0x%02x\n",
7443 +                      sdio_func_id(func), tpl->data[2], tpl->data[3]);
7444 +               port->regs_offset = (tpl->data[4] << 0) |
7445 +                                   (tpl->data[5] << 8) |
7446 +                                   (tpl->data[6] << 16);
7447 +               printk(KERN_DEBUG "%s: regs offset = 0x%x\n",
7448 +                      sdio_func_id(func), port->regs_offset);
7449 +               port->uartclk = tpl->data[7] * 115200;
7450 +               if (port->uartclk == 0)
7451 +                       port->uartclk = 115200;
7452 +               printk(KERN_DEBUG "%s: clk %d baudcode %u 4800-div %u\n",
7453 +                      sdio_func_id(func), port->uartclk,
7454 +                      tpl->data[7], tpl->data[8] | (tpl->data[9] << 8));
7455 +       } else {
7456 +               kfree(port);
7457 +               return -EINVAL;
7458 +       }
7459 +
7460 +       port->func = func;
7461 +       sdio_set_drvdata(func, port);
7462 +
7463 +       ret = sdio_uart_add_port(port);
7464 +       if (ret) {
7465 +               kfree(port);
7466 +       } else {
7467 +               struct device *dev;
7468 +               dev = tty_register_device(sdio_uart_tty_driver, port->index, &func->dev);
7469 +               if (IS_ERR(dev)) {
7470 +                       sdio_uart_port_remove(port);
7471 +                       ret = PTR_ERR(dev);
7472 +               }
7473 +       }
7474 +
7475 +       return ret;
7476 +}
7477 +
7478 +static void sdio_uart_remove(struct sdio_func *func)
7479 +{
7480 +       struct sdio_uart_port *port = sdio_get_drvdata(func);
7481 +
7482 +       tty_unregister_device(sdio_uart_tty_driver, port->index);
7483 +       sdio_uart_port_remove(port);
7484 +}
7485 +
7486 +static const struct sdio_device_id sdio_uart_ids[] = {
7487 +       { SDIO_DEVICE_CLASS(SDIO_CLASS_UART)            },
7488 +       { SDIO_DEVICE_CLASS(SDIO_CLASS_GPS)             },
7489 +       { /* end: all zeroes */                         },
7490 +};
7491 +
7492 +MODULE_DEVICE_TABLE(sdio, sdio_uart_ids);
7493 +
7494 +static struct sdio_driver sdio_uart_driver = {
7495 +       .probe          = sdio_uart_probe,
7496 +       .remove         = sdio_uart_remove,
7497 +       .name           = "sdio_uart",
7498 +       .id_table       = sdio_uart_ids,
7499 +};
7500 +
7501 +static int __init sdio_uart_init(void)
7502 +{
7503 +       int ret;
7504 +       struct tty_driver *tty_drv;
7505 +
7506 +       sdio_uart_tty_driver = tty_drv = alloc_tty_driver(UART_NR);
7507 +       if (!tty_drv)
7508 +               return -ENOMEM;
7509 +
7510 +       tty_drv->owner = THIS_MODULE;
7511 +       tty_drv->driver_name = "sdio_uart";
7512 +       tty_drv->name =   "ttySDIO";
7513 +       tty_drv->major = 0;  /* dynamically allocated */
7514 +       tty_drv->minor_start = 0;
7515 +       tty_drv->type = TTY_DRIVER_TYPE_SERIAL;
7516 +       tty_drv->subtype = SERIAL_TYPE_NORMAL;
7517 +       tty_drv->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
7518 +       tty_drv->init_termios = tty_std_termios;
7519 +       tty_drv->init_termios.c_cflag = B4800 | CS8 | CREAD | HUPCL | CLOCAL;
7520 +       tty_drv->init_termios.c_ispeed = 4800;
7521 +       tty_drv->init_termios.c_ospeed = 4800;
7522 +       tty_set_operations(tty_drv, &sdio_uart_ops);
7523 +
7524 +       ret = tty_register_driver(tty_drv);
7525 +       if (ret)
7526 +               goto err1;
7527 +
7528 +       ret = sdio_register_driver(&sdio_uart_driver);
7529 +       if (ret)
7530 +               goto err2;
7531 +
7532 +       return 0;
7533 +
7534 +err2:
7535 +       tty_unregister_driver(tty_drv);
7536 +err1:
7537 +       put_tty_driver(tty_drv);
7538 +       return ret;
7539 +}
7540 +
7541 +static void __exit sdio_uart_exit(void)
7542 +{
7543 +       sdio_unregister_driver(&sdio_uart_driver);
7544 +       tty_unregister_driver(sdio_uart_tty_driver);
7545 +       put_tty_driver(sdio_uart_tty_driver);
7546 +}
7547 +
7548 +module_init(sdio_uart_init);
7549 +module_exit(sdio_uart_exit);
7550 +
7551 +MODULE_AUTHOR("Nicolas Pitre");
7552 +MODULE_LICENSE("GPL");
7553 --- a/drivers/mmc/core/Makefile
7554 +++ b/drivers/mmc/core/Makefile
7555 @@ -8,5 +8,7 @@
7556  
7557  obj-$(CONFIG_MMC)              += mmc_core.o
7558  mmc_core-y                     := core.o sysfs.o bus.o host.o \
7559 -                                  mmc.o mmc_ops.o sd.o sd_ops.o
7560 +                                  mmc.o mmc_ops.o sd.o sd_ops.o \
7561 +                                  sdio.o sdio_ops.o sdio_bus.o \
7562 +                                  sdio_cis.o sdio_io.o sdio_irq.o
7563