ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / ide / arm / rapide.c
1 /*
2  * linux/drivers/ide/arm/rapide.c
3  *
4  * Copyright (c) 1996-2002 Russell King.
5  */
6
7 #include <linux/module.h>
8 #include <linux/slab.h>
9 #include <linux/blkdev.h>
10 #include <linux/errno.h>
11 #include <linux/ide.h>
12 #include <linux/init.h>
13
14 #include <asm/ecard.h>
15
16 static int __devinit
17 rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
18 {
19         unsigned long port = ecard_address (ec, ECARD_MEMC, 0);
20         hw_regs_t hw;
21         int i, ret;
22
23         memset(&hw, 0, sizeof(hw));
24
25         for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
26                 hw.io_ports[i] = port;
27                 port += 1 << 4;
28         }
29         hw.io_ports[IDE_CONTROL_OFFSET] = port + 0x206;
30         hw.irq = ec->irq;
31
32         ret = ide_register_hw(&hw, NULL);
33
34         if (ret)
35                 ecard_release(ec);
36         return ret;
37 }
38
39 static void __devexit rapide_remove(struct expansion_card *ec)
40 {
41         /* need to do more */
42 }
43
44 static struct ecard_id rapide_ids[] = {
45         { MANU_YELLOWSTONE, PROD_YELLOWSTONE_RAPIDE32 },
46         { 0xffff, 0xffff }
47 };
48
49 static struct ecard_driver rapide_driver = {
50         .probe          = rapide_probe,
51         .remove         = __devexit_p(rapide_remove),
52         .id_table       = rapide_ids,
53         .drv = {
54                 .name   = "rapide",
55         },
56 };
57
58 static int __init rapide_init(void)
59 {
60         return ecard_register_driver(&rapide_driver);
61 }
62
63 MODULE_LICENSE("GPL");
64 MODULE_DESCRIPTION("Yellowstone RAPIDE driver");
65
66 module_init(rapide_init);