Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6] / drivers / mmc / host / tmio_mmc.c
1 /*
2  *  linux/drivers/mmc/tmio_mmc.c
3  *
4  *  Copyright (C) 2004 Ian Molton
5  *  Copyright (C) 2007 Ian Molton
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * Driver for the MMC / SD / SDIO cell found in:
12  *
13  * TC6393XB TC6391XB TC6387XB T7L66XB
14  *
15  * This driver draws mainly on scattered spec sheets, Reverse engineering
16  * of the toshiba e800  SD driver and some parts of the 2.4 ASIC3 driver (4 bit
17  * support). (Further 4 bit support from a later datasheet).
18  *
19  * TODO:
20  *   Investigate using a workqueue for PIO transfers
21  *   Eliminate FIXMEs
22  *   SDIO support
23  *   Better Power management
24  *   Handle MMC errors better
25  *   double buffer support
26  *
27  */
28 #include <linux/module.h>
29 #include <linux/irq.h>
30 #include <linux/device.h>
31 #include <linux/delay.h>
32 #include <linux/mmc/host.h>
33 #include <linux/mfd/core.h>
34 #include <linux/mfd/tmio.h>
35
36 #include "tmio_mmc.h"
37
38 /*
39  * Fixme - documentation conflicts on what the clock values are for the
40  * various dividers.
41  * One document I have says that its a divisor of a 24MHz clock, another 33.
42  * This probably depends on HCLK for a given platform, so we may need to
43  * require HCLK be passed to us from the MFD core.
44  *
45  */
46
47 static void tmio_mmc_set_clock(struct tmio_mmc_host *host, int new_clock)
48 {
49         void __iomem *cnf = host->cnf;
50         void __iomem *ctl = host->ctl;
51         u32 clk = 0, clock;
52
53         if (new_clock) {
54                 for (clock = 46875, clk = 0x100; new_clock >= (clock<<1); ) {
55                         clock <<= 1;
56                         clk >>= 1;
57                 }
58                 if (clk & 0x1)
59                         clk = 0x20000;
60
61                 clk >>= 2;
62                 tmio_iowrite8((clk & 0x8000) ? 0 : 1, cnf + CNF_SD_CLK_MODE);
63                 clk |= 0x100;
64         }
65
66         tmio_iowrite16(clk, ctl + CTL_SD_CARD_CLK_CTL);
67 }
68
69 static void tmio_mmc_clk_stop(struct tmio_mmc_host *host)
70 {
71         void __iomem *ctl = host->ctl;
72
73         tmio_iowrite16(0x0000, ctl + CTL_CLK_AND_WAIT_CTL);
74         msleep(10);
75         tmio_iowrite16(tmio_ioread16(ctl + CTL_SD_CARD_CLK_CTL) & ~0x0100,
76                ctl + CTL_SD_CARD_CLK_CTL);
77         msleep(10);
78 }
79
80 static void tmio_mmc_clk_start(struct tmio_mmc_host *host)
81 {
82         void __iomem *ctl = host->ctl;
83
84         tmio_iowrite16(tmio_ioread16(ctl + CTL_SD_CARD_CLK_CTL) | 0x0100,
85                ctl + CTL_SD_CARD_CLK_CTL);
86         msleep(10);
87         tmio_iowrite16(0x0100, ctl + CTL_CLK_AND_WAIT_CTL);
88         msleep(10);
89 }
90
91 static void reset(struct tmio_mmc_host *host)
92 {
93         void __iomem *ctl = host->ctl;
94
95         /* FIXME - should we set stop clock reg here */
96         tmio_iowrite16(0x0000, ctl + CTL_RESET_SD);
97         tmio_iowrite16(0x0000, ctl + CTL_RESET_SDIO);
98         msleep(10);
99         tmio_iowrite16(0x0001, ctl + CTL_RESET_SD);
100         tmio_iowrite16(0x0001, ctl + CTL_RESET_SDIO);
101         msleep(10);
102 }
103
104 static void
105 tmio_mmc_finish_request(struct tmio_mmc_host *host)
106 {
107         struct mmc_request *mrq = host->mrq;
108
109         host->mrq = NULL;
110         host->cmd = NULL;
111         host->data = NULL;
112
113         mmc_request_done(host->mmc, mrq);
114 }
115
116 /* These are the bitmasks the tmio chip requires to implement the MMC response
117  * types. Note that R1 and R6 are the same in this scheme. */
118 #define APP_CMD        0x0040
119 #define RESP_NONE      0x0300
120 #define RESP_R1        0x0400
121 #define RESP_R1B       0x0500
122 #define RESP_R2        0x0600
123 #define RESP_R3        0x0700
124 #define DATA_PRESENT   0x0800
125 #define TRANSFER_READ  0x1000
126 #define TRANSFER_MULTI 0x2000
127 #define SECURITY_CMD   0x4000
128
129 static int
130 tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command *cmd)
131 {
132         void __iomem *ctl = host->ctl;
133         struct mmc_data *data = host->data;
134         int c = cmd->opcode;
135
136         /* Command 12 is handled by hardware */
137         if (cmd->opcode == 12 && !cmd->arg) {
138                 tmio_iowrite16(0x001, ctl + CTL_STOP_INTERNAL_ACTION);
139                 return 0;
140         }
141
142         switch (mmc_resp_type(cmd)) {
143         case MMC_RSP_NONE: c |= RESP_NONE; break;
144         case MMC_RSP_R1:   c |= RESP_R1;   break;
145         case MMC_RSP_R1B:  c |= RESP_R1B;  break;
146         case MMC_RSP_R2:   c |= RESP_R2;   break;
147         case MMC_RSP_R3:   c |= RESP_R3;   break;
148         default:
149                 pr_debug("Unknown response type %d\n", mmc_resp_type(cmd));
150                 return -EINVAL;
151         }
152
153         host->cmd = cmd;
154
155 /* FIXME - this seems to be ok comented out but the spec suggest this bit should
156  *         be set when issuing app commands.
157  *      if(cmd->flags & MMC_FLAG_ACMD)
158  *              c |= APP_CMD;
159  */
160         if (data) {
161                 c |= DATA_PRESENT;
162                 if (data->blocks > 1) {
163                         tmio_iowrite16(0x100, ctl + CTL_STOP_INTERNAL_ACTION);
164                         c |= TRANSFER_MULTI;
165                 }
166                 if (data->flags & MMC_DATA_READ)
167                         c |= TRANSFER_READ;
168         }
169
170         enable_mmc_irqs(ctl, TMIO_MASK_CMD);
171
172         /* Fire off the command */
173         tmio_iowrite32(cmd->arg, ctl + CTL_ARG_REG);
174         tmio_iowrite16(c, ctl + CTL_SD_CMD);
175
176         return 0;
177 }
178
179 /* This chip always returns (at least?) as much data as you ask for.
180  * I'm unsure what happens if you ask for less than a block. This should be
181  * looked into to ensure that a funny length read doesnt hose the controller.
182  *
183  */
184 static inline void tmio_mmc_pio_irq(struct tmio_mmc_host *host)
185 {
186         void __iomem *ctl = host->ctl;
187         struct mmc_data *data = host->data;
188         unsigned short *buf;
189         unsigned int count;
190         unsigned long flags;
191
192         if (!data) {
193                 pr_debug("Spurious PIO IRQ\n");
194                 return;
195         }
196
197         buf = (unsigned short *)(tmio_mmc_kmap_atomic(host, &flags) +
198               host->sg_off);
199
200         count = host->sg_ptr->length - host->sg_off;
201         if (count > data->blksz)
202                 count = data->blksz;
203
204         pr_debug("count: %08x offset: %08x flags %08x\n",
205             count, host->sg_off, data->flags);
206
207         /* Transfer the data */
208         if (data->flags & MMC_DATA_READ)
209                 tmio_ioread16_rep(ctl + CTL_SD_DATA_PORT, buf, count >> 1);
210         else
211                 tmio_iowrite16_rep(ctl + CTL_SD_DATA_PORT, buf, count >> 1);
212
213         host->sg_off += count;
214
215         tmio_mmc_kunmap_atomic(host, &flags);
216
217         if (host->sg_off == host->sg_ptr->length)
218                 tmio_mmc_next_sg(host);
219
220         return;
221 }
222
223 static inline void tmio_mmc_data_irq(struct tmio_mmc_host *host)
224 {
225         void __iomem *ctl = host->ctl;
226         struct mmc_data *data = host->data;
227         struct mmc_command *stop = data->stop;
228
229         host->data = NULL;
230
231         if (!data) {
232                 pr_debug("Spurious data end IRQ\n");
233                 return;
234         }
235
236         /* FIXME - return correct transfer count on errors */
237         if (!data->error)
238                 data->bytes_xfered = data->blocks * data->blksz;
239         else
240                 data->bytes_xfered = 0;
241
242         pr_debug("Completed data request\n");
243
244         /*FIXME - other drivers allow an optional stop command of any given type
245          *        which we dont do, as the chip can auto generate them.
246          *        Perhaps we can be smarter about when to use auto CMD12 and
247          *        only issue the auto request when we know this is the desired
248          *        stop command, allowing fallback to the stop command the
249          *        upper layers expect. For now, we do what works.
250          */
251
252         if (data->flags & MMC_DATA_READ)
253                 disable_mmc_irqs(ctl, TMIO_MASK_READOP);
254         else
255                 disable_mmc_irqs(ctl, TMIO_MASK_WRITEOP);
256
257         if (stop) {
258                 if (stop->opcode == 12 && !stop->arg)
259                         tmio_iowrite16(0x000, ctl + CTL_STOP_INTERNAL_ACTION);
260                 else
261                         BUG();
262         }
263
264         tmio_mmc_finish_request(host);
265 }
266
267 static inline void tmio_mmc_cmd_irq(struct tmio_mmc_host *host,
268         unsigned int stat)
269 {
270         void __iomem *ctl = host->ctl, *addr;
271         struct mmc_command *cmd = host->cmd;
272         int i;
273
274         if (!host->cmd) {
275                 pr_debug("Spurious CMD irq\n");
276                 return;
277         }
278
279         host->cmd = NULL;
280
281         /* This controller is sicker than the PXA one. Not only do we need to
282          * drop the top 8 bits of the first response word, we also need to
283          * modify the order of the response for short response command types.
284          */
285
286         for (i = 3, addr = ctl + CTL_RESPONSE ; i >= 0 ; i--, addr += 4)
287                 cmd->resp[i] = tmio_ioread32(addr);
288
289         if (cmd->flags &  MMC_RSP_136) {
290                 cmd->resp[0] = (cmd->resp[0] << 8) | (cmd->resp[1] >> 24);
291                 cmd->resp[1] = (cmd->resp[1] << 8) | (cmd->resp[2] >> 24);
292                 cmd->resp[2] = (cmd->resp[2] << 8) | (cmd->resp[3] >> 24);
293                 cmd->resp[3] <<= 8;
294         } else if (cmd->flags & MMC_RSP_R3) {
295                 cmd->resp[0] = cmd->resp[3];
296         }
297
298         if (stat & TMIO_STAT_CMDTIMEOUT)
299                 cmd->error = -ETIMEDOUT;
300         else if (stat & TMIO_STAT_CRCFAIL && cmd->flags & MMC_RSP_CRC)
301                 cmd->error = -EILSEQ;
302
303         /* If there is data to handle we enable data IRQs here, and
304          * we will ultimatley finish the request in the data_end handler.
305          * If theres no data or we encountered an error, finish now.
306          */
307         if (host->data && !cmd->error) {
308                 if (host->data->flags & MMC_DATA_READ)
309                         enable_mmc_irqs(ctl, TMIO_MASK_READOP);
310                 else
311                         enable_mmc_irqs(ctl, TMIO_MASK_WRITEOP);
312         } else {
313                 tmio_mmc_finish_request(host);
314         }
315
316         return;
317 }
318
319
320 static irqreturn_t tmio_mmc_irq(int irq, void *devid)
321 {
322         struct tmio_mmc_host *host = devid;
323         void __iomem *ctl = host->ctl;
324         unsigned int ireg, irq_mask, status;
325
326         pr_debug("MMC IRQ begin\n");
327
328         status = tmio_ioread32(ctl + CTL_STATUS);
329         irq_mask = tmio_ioread32(ctl + CTL_IRQ_MASK);
330         ireg = status & TMIO_MASK_IRQ & ~irq_mask;
331
332         pr_debug_status(status);
333         pr_debug_status(ireg);
334
335         if (!ireg) {
336                 disable_mmc_irqs(ctl, status & ~irq_mask);
337
338                 pr_debug("tmio_mmc: Spurious irq, disabling! "
339                         "0x%08x 0x%08x 0x%08x\n", status, irq_mask, ireg);
340                 pr_debug_status(status);
341
342                 goto out;
343         }
344
345         while (ireg) {
346                 /* Card insert / remove attempts */
347                 if (ireg & (TMIO_STAT_CARD_INSERT | TMIO_STAT_CARD_REMOVE)) {
348                         ack_mmc_irqs(ctl, TMIO_STAT_CARD_INSERT |
349                                 TMIO_STAT_CARD_REMOVE);
350                         mmc_detect_change(host->mmc, 0);
351                 }
352
353                 /* CRC and other errors */
354 /*              if (ireg & TMIO_STAT_ERR_IRQ)
355  *                      handled |= tmio_error_irq(host, irq, stat);
356  */
357
358                 /* Command completion */
359                 if (ireg & TMIO_MASK_CMD) {
360                         ack_mmc_irqs(ctl, TMIO_MASK_CMD);
361                         tmio_mmc_cmd_irq(host, status);
362                 }
363
364                 /* Data transfer */
365                 if (ireg & (TMIO_STAT_RXRDY | TMIO_STAT_TXRQ)) {
366                         ack_mmc_irqs(ctl, TMIO_STAT_RXRDY | TMIO_STAT_TXRQ);
367                         tmio_mmc_pio_irq(host);
368                 }
369
370                 /* Data transfer completion */
371                 if (ireg & TMIO_STAT_DATAEND) {
372                         ack_mmc_irqs(ctl, TMIO_STAT_DATAEND);
373                         tmio_mmc_data_irq(host);
374                 }
375
376                 /* Check status - keep going until we've handled it all */
377                 status = tmio_ioread32(ctl + CTL_STATUS);
378                 irq_mask = tmio_ioread32(ctl + CTL_IRQ_MASK);
379                 ireg = status & TMIO_MASK_IRQ & ~irq_mask;
380
381                 pr_debug("Status at end of loop: %08x\n", status);
382                 pr_debug_status(status);
383         }
384         pr_debug("MMC IRQ end\n");
385
386 out:
387         return IRQ_HANDLED;
388 }
389
390 static int tmio_mmc_start_data(struct tmio_mmc_host *host,
391         struct mmc_data *data)
392 {
393         void __iomem *ctl = host->ctl;
394
395         pr_debug("setup data transfer: blocksize %08x  nr_blocks %d\n",
396             data->blksz, data->blocks);
397
398         /* Hardware cannot perform 1 and 2 byte requests in 4 bit mode */
399         if (data->blksz < 4 && host->mmc->ios.bus_width == MMC_BUS_WIDTH_4) {
400                 printk(KERN_ERR "%s: %d byte block unsupported in 4 bit mode\n",
401                         mmc_hostname(host->mmc), data->blksz);
402                 return -EINVAL;
403         }
404
405         tmio_mmc_init_sg(host, data);
406         host->data = data;
407
408         /* Set transfer length / blocksize */
409         tmio_iowrite16(data->blksz,  ctl + CTL_SD_XFER_LEN);
410         tmio_iowrite16(data->blocks, ctl + CTL_XFER_BLK_COUNT);
411
412         return 0;
413 }
414
415 /* Process requests from the MMC layer */
416 static void tmio_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
417 {
418         struct tmio_mmc_host *host = mmc_priv(mmc);
419         int ret;
420
421         if (host->mrq)
422                 pr_debug("request not null\n");
423
424         host->mrq = mrq;
425
426         if (mrq->data) {
427                 ret = tmio_mmc_start_data(host, mrq->data);
428                 if (ret)
429                         goto fail;
430         }
431
432         ret = tmio_mmc_start_command(host, mrq->cmd);
433
434         if (!ret)
435                 return;
436
437 fail:
438         mrq->cmd->error = ret;
439         mmc_request_done(mmc, mrq);
440 }
441
442 /* Set MMC clock / power.
443  * Note: This controller uses a simple divider scheme therefore it cannot
444  * run a MMC card at full speed (20MHz). The max clock is 24MHz on SD, but as
445  * MMC wont run that fast, it has to be clocked at 12MHz which is the next
446  * slowest setting.
447  */
448 static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
449 {
450         struct tmio_mmc_host *host = mmc_priv(mmc);
451         void __iomem *cnf = host->cnf;
452         void __iomem *ctl = host->ctl;
453
454         if (ios->clock)
455                 tmio_mmc_set_clock(host, ios->clock);
456
457         /* Power sequence - OFF -> ON -> UP */
458         switch (ios->power_mode) {
459         case MMC_POWER_OFF: /* power down SD bus */
460                 tmio_iowrite8(0x00, cnf + CNF_PWR_CTL_2);
461                 tmio_mmc_clk_stop(host);
462                 break;
463         case MMC_POWER_ON: /* power up SD bus */
464
465                 tmio_iowrite8(0x02, cnf + CNF_PWR_CTL_2);
466                 break;
467         case MMC_POWER_UP: /* start bus clock */
468                 tmio_mmc_clk_start(host);
469                 break;
470         }
471
472         switch (ios->bus_width) {
473         case MMC_BUS_WIDTH_1:
474                 tmio_iowrite16(0x80e0, ctl + CTL_SD_MEM_CARD_OPT);
475         break;
476         case MMC_BUS_WIDTH_4:
477                 tmio_iowrite16(0x00e0, ctl + CTL_SD_MEM_CARD_OPT);
478         break;
479         }
480
481         /* Let things settle. delay taken from winCE driver */
482         udelay(140);
483 }
484
485 static int tmio_mmc_get_ro(struct mmc_host *mmc)
486 {
487         struct tmio_mmc_host *host = mmc_priv(mmc);
488         void __iomem *ctl = host->ctl;
489
490         return (tmio_ioread16(ctl + CTL_STATUS) & TMIO_STAT_WRPROTECT) ? 0 : 1;
491 }
492
493 static struct mmc_host_ops tmio_mmc_ops = {
494         .request        = tmio_mmc_request,
495         .set_ios        = tmio_mmc_set_ios,
496         .get_ro         = tmio_mmc_get_ro,
497 };
498
499 #ifdef CONFIG_PM
500 static int tmio_mmc_suspend(struct platform_device *dev, pm_message_t state)
501 {
502         struct mfd_cell *cell = (struct mfd_cell *)dev->dev.platform_data;
503         struct mmc_host *mmc = platform_get_drvdata(dev);
504         int ret;
505
506         ret = mmc_suspend_host(mmc, state);
507
508         /* Tell MFD core it can disable us now.*/
509         if (!ret && cell->disable)
510                 cell->disable(dev);
511
512         return ret;
513 }
514
515 static int tmio_mmc_resume(struct platform_device *dev)
516 {
517         struct mfd_cell *cell = (struct mfd_cell *)dev->dev.platform_data;
518         struct mmc_host *mmc = platform_get_drvdata(dev);
519         struct tmio_mmc_host *host = mmc_priv(mmc);
520         void __iomem *cnf = host->cnf;
521         int ret = 0;
522
523         /* Enable the MMC/SD Control registers */
524         tmio_iowrite16(SDCREN, cnf + CNF_CMD);
525         tmio_iowrite32(dev->resource[0].start & 0xfffe, cnf + CNF_CTL_BASE);
526
527         /* Tell the MFD core we are ready to be enabled */
528         if (cell->enable) {
529                 ret = cell->enable(dev);
530                 if (ret)
531                         goto out;
532         }
533
534         mmc_resume_host(mmc);
535
536 out:
537         return ret;
538 }
539 #else
540 #define tmio_mmc_suspend NULL
541 #define tmio_mmc_resume NULL
542 #endif
543
544 static int __devinit tmio_mmc_probe(struct platform_device *dev)
545 {
546         struct mfd_cell *cell = (struct mfd_cell *)dev->dev.platform_data;
547         struct resource *res_ctl, *res_cnf;
548         struct tmio_mmc_host *host;
549         struct mmc_host *mmc;
550         int ret = -ENOMEM;
551
552         if (dev->num_resources != 3)
553                 goto out;
554
555         res_ctl = platform_get_resource(dev, IORESOURCE_MEM, 0);
556         res_cnf = platform_get_resource(dev, IORESOURCE_MEM, 1);
557         if (!res_ctl || !res_cnf) {
558                 ret = -EINVAL;
559                 goto out;
560         }
561
562         mmc = mmc_alloc_host(sizeof(struct tmio_mmc_host), &dev->dev);
563         if (!mmc)
564                 goto out;
565
566         host = mmc_priv(mmc);
567         host->mmc = mmc;
568         platform_set_drvdata(dev, mmc);
569
570         host->ctl = ioremap(res_ctl->start, res_ctl->end - res_ctl->start);
571         if (!host->ctl)
572                 goto host_free;
573
574         host->cnf = ioremap(res_cnf->start, res_cnf->end - res_cnf->start);
575         if (!host->cnf)
576                 goto unmap_ctl;
577
578         mmc->ops = &tmio_mmc_ops;
579         mmc->caps = MMC_CAP_4_BIT_DATA;
580         mmc->f_min = 46875; /* 24000000 / 512 */
581         mmc->f_max = 24000000;
582         mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
583
584         /* Enable the MMC/SD Control registers */
585         tmio_iowrite16(SDCREN, host->cnf + CNF_CMD);
586         tmio_iowrite32(dev->resource[0].start & 0xfffe,
587                 host->cnf + CNF_CTL_BASE);
588
589         /* Tell the MFD core we are ready to be enabled */
590         if (cell->enable) {
591                 ret = cell->enable(dev);
592                 if (ret)
593                         goto unmap_cnf;
594         }
595
596         /* Disable SD power during suspend */
597         tmio_iowrite8(0x01, host->cnf + CNF_PWR_CTL_3);
598
599         /* The below is required but why? FIXME */
600         tmio_iowrite8(0x1f, host->cnf + CNF_STOP_CLK_CTL);
601
602         /* Power down SD bus*/
603         tmio_iowrite8(0x0,  host->cnf + CNF_PWR_CTL_2);
604
605         tmio_mmc_clk_stop(host);
606         reset(host);
607
608         ret = platform_get_irq(dev, 0);
609         if (ret >= 0)
610                 host->irq = ret;
611         else
612                 goto unmap_cnf;
613
614         disable_mmc_irqs(host->ctl, TMIO_MASK_ALL);
615
616         ret = request_irq(host->irq, tmio_mmc_irq, IRQF_DISABLED, "tmio-mmc",
617                 host);
618         if (ret)
619                 goto unmap_cnf;
620
621         set_irq_type(host->irq, IRQ_TYPE_EDGE_FALLING);
622
623         mmc_add_host(mmc);
624
625         printk(KERN_INFO "%s at 0x%08lx irq %d\n", mmc_hostname(host->mmc),
626                (unsigned long)host->ctl, host->irq);
627
628         /* Unmask the IRQs we want to know about */
629         enable_mmc_irqs(host->ctl,  TMIO_MASK_IRQ);
630
631         return 0;
632
633 unmap_cnf:
634         iounmap(host->cnf);
635 unmap_ctl:
636         iounmap(host->ctl);
637 host_free:
638         mmc_free_host(mmc);
639 out:
640         return ret;
641 }
642
643 static int __devexit tmio_mmc_remove(struct platform_device *dev)
644 {
645         struct mmc_host *mmc = platform_get_drvdata(dev);
646
647         platform_set_drvdata(dev, NULL);
648
649         if (mmc) {
650                 struct tmio_mmc_host *host = mmc_priv(mmc);
651                 mmc_remove_host(mmc);
652                 mmc_free_host(mmc);
653                 free_irq(host->irq, host);
654                 iounmap(host->ctl);
655                 iounmap(host->cnf);
656         }
657
658         return 0;
659 }
660
661 /* ------------------- device registration ----------------------- */
662
663 static struct platform_driver tmio_mmc_driver = {
664         .driver = {
665                 .name = "tmio-mmc",
666                 .owner = THIS_MODULE,
667         },
668         .probe = tmio_mmc_probe,
669         .remove = __devexit_p(tmio_mmc_remove),
670         .suspend = tmio_mmc_suspend,
671         .resume = tmio_mmc_resume,
672 };
673
674
675 static int __init tmio_mmc_init(void)
676 {
677         return platform_driver_register(&tmio_mmc_driver);
678 }
679
680 static void __exit tmio_mmc_exit(void)
681 {
682         platform_driver_unregister(&tmio_mmc_driver);
683 }
684
685 module_init(tmio_mmc_init);
686 module_exit(tmio_mmc_exit);
687
688 MODULE_DESCRIPTION("Toshiba TMIO SD/MMC driver");
689 MODULE_AUTHOR("Ian Molton <spyro@f2s.com>");
690 MODULE_LICENSE("GPL v2");
691 MODULE_ALIAS("platform:tmio-mmc");