Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * ts5500_flash.c -- MTD map driver for Technology Systems TS-5500 board | |
3 | * | |
4 | * Copyright (C) 2004 Sean Young <sean@mess.org> | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | * GNU General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License | |
17 | * along with this program; if not, write to the Free Software | |
18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | |
19 | * | |
20 | * Note: | |
21 | * - In order for detection to work, jumper 3 must be set. | |
69f34c98 TG |
22 | * - Drive A and B use the resident flash disk (RFD) flash translation layer. |
23 | * - If you have created your own jffs file system and the bios overwrites | |
1da177e4 | 24 | * it during boot, try disabling Drive A: and B: in the boot order. |
1da177e4 LT |
25 | */ |
26 | ||
28f46230 | 27 | #include <linux/init.h> |
1da177e4 | 28 | #include <linux/module.h> |
1da177e4 | 29 | #include <linux/kernel.h> |
1da177e4 | 30 | #include <linux/mtd/map.h> |
28f46230 | 31 | #include <linux/mtd/mtd.h> |
1da177e4 | 32 | #include <linux/mtd/partitions.h> |
28f46230 SY |
33 | #include <linux/types.h> |
34 | ||
1da177e4 LT |
35 | |
36 | #define WINDOW_ADDR 0x09400000 | |
37 | #define WINDOW_SIZE 0x00200000 | |
38 | ||
39 | static struct map_info ts5500_map = { | |
40 | .name = "TS-5500 Flash", | |
41 | .size = WINDOW_SIZE, | |
42 | .bankwidth = 1, | |
43 | .phys = WINDOW_ADDR | |
44 | }; | |
45 | ||
1da177e4 LT |
46 | static struct mtd_partition ts5500_partitions[] = { |
47 | { | |
48 | .name = "Drive A", | |
49 | .offset = 0, | |
50 | .size = 0x0e0000 | |
51 | }, | |
52 | { | |
53 | .name = "BIOS", | |
54 | .offset = 0x0e0000, | |
55 | .size = 0x020000, | |
56 | }, | |
57 | { | |
58 | .name = "Drive B", | |
59 | .offset = 0x100000, | |
60 | .size = 0x100000 | |
61 | } | |
62 | }; | |
63 | ||
87d10f3c | 64 | #define NUM_PARTITIONS ARRAY_SIZE(ts5500_partitions) |
1da177e4 | 65 | |
1da177e4 LT |
66 | static struct mtd_info *mymtd; |
67 | ||
68 | static int __init init_ts5500_map(void) | |
69 | { | |
70 | int rc = 0; | |
71 | ||
72 | ts5500_map.virt = ioremap_nocache(ts5500_map.phys, ts5500_map.size); | |
73 | ||
28f46230 | 74 | if (!ts5500_map.virt) { |
1da177e4 LT |
75 | printk(KERN_ERR "Failed to ioremap_nocache\n"); |
76 | rc = -EIO; | |
28f46230 | 77 | goto err2; |
1da177e4 LT |
78 | } |
79 | ||
80 | simple_map_init(&ts5500_map); | |
81 | ||
82 | mymtd = do_map_probe("jedec_probe", &ts5500_map); | |
28f46230 | 83 | if (!mymtd) |
1da177e4 LT |
84 | mymtd = do_map_probe("map_rom", &ts5500_map); |
85 | ||
28f46230 | 86 | if (!mymtd) { |
1da177e4 | 87 | rc = -ENXIO; |
28f46230 | 88 | goto err1; |
1da177e4 LT |
89 | } |
90 | ||
91 | mymtd->owner = THIS_MODULE; | |
ee0e87b1 | 92 | mtd_device_register(mymtd, ts5500_partitions, NUM_PARTITIONS); |
1da177e4 LT |
93 | |
94 | return 0; | |
95 | ||
28f46230 | 96 | err1: |
1da177e4 | 97 | iounmap(ts5500_map.virt); |
28f46230 | 98 | err2: |
1da177e4 LT |
99 | return rc; |
100 | } | |
101 | ||
102 | static void __exit cleanup_ts5500_map(void) | |
103 | { | |
104 | if (mymtd) { | |
ee0e87b1 | 105 | mtd_device_unregister(mymtd); |
1da177e4 LT |
106 | map_destroy(mymtd); |
107 | } | |
108 | ||
109 | if (ts5500_map.virt) { | |
110 | iounmap(ts5500_map.virt); | |
111 | ts5500_map.virt = NULL; | |
112 | } | |
113 | } | |
114 | ||
115 | module_init(init_ts5500_map); | |
116 | module_exit(cleanup_ts5500_map); | |
117 | ||
118 | MODULE_LICENSE("GPL"); | |
119 | MODULE_AUTHOR("Sean Young <sean@mess.org>"); | |
9cd5196e | 120 | MODULE_DESCRIPTION("MTD map driver for Technology Systems TS-5500 board"); |
1da177e4 | 121 |