Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
mtd
maps
h720x-flash.c
Go to the documentation of this file.
1
/*
2
* Flash memory access on Hynix GMS30C7201/HMS30C7202 based
3
* evaluation boards
4
*
5
* (C) 2002 Jungjun Kim <
[email protected]
>
6
* 2003 Thomas Gleixner <
[email protected]
>
7
*/
8
9
#include <linux/module.h>
10
#include <linux/types.h>
11
#include <linux/kernel.h>
12
#include <
linux/init.h
>
13
#include <linux/errno.h>
14
#include <linux/slab.h>
15
16
#include <
linux/mtd/mtd.h
>
17
#include <
linux/mtd/map.h
>
18
#include <
linux/mtd/partitions.h
>
19
#include <mach/hardware.h>
20
#include <asm/io.h>
21
22
static
struct
mtd_info
*mymtd;
23
24
static
struct
map_info
h720x_map = {
25
.name =
"H720X"
,
26
.bankwidth = 4,
27
.size = H720X_FLASH_SIZE,
28
.phys = H720X_FLASH_PHYS,
29
};
30
31
static
struct
mtd_partition
h720x_partitions[] = {
32
{
33
.name =
"ArMon"
,
34
.size = 0x00080000,
35
.offset = 0,
36
.mask_flags =
MTD_WRITEABLE
37
},{
38
.name =
"Env"
,
39
.size = 0x00040000,
40
.offset = 0x00080000,
41
.mask_flags =
MTD_WRITEABLE
42
},{
43
.name =
"Kernel"
,
44
.size = 0x00180000,
45
.offset = 0x000c0000,
46
.mask_flags =
MTD_WRITEABLE
47
},{
48
.name =
"Ramdisk"
,
49
.size = 0x00400000,
50
.offset = 0x00240000,
51
.mask_flags =
MTD_WRITEABLE
52
},{
53
.name =
"jffs2"
,
54
.size =
MTDPART_SIZ_FULL
,
55
.offset =
MTDPART_OFS_APPEND
56
}
57
};
58
59
#define NUM_PARTITIONS ARRAY_SIZE(h720x_partitions)
60
61
/*
62
* Initialize FLASH support
63
*/
64
static
int
__init
h720x_mtd_init(
void
)
65
{
66
h720x_map.
virt
=
ioremap
(h720x_map.
phys
, h720x_map.
size
);
67
68
if
(!h720x_map.
virt
) {
69
printk
(
KERN_ERR
"H720x-MTD: ioremap failed\n"
);
70
return
-
EIO
;
71
}
72
73
simple_map_init
(&h720x_map);
74
75
// Probe for flash bankwidth 4
76
printk
(
KERN_INFO
"H720x-MTD probing 32bit FLASH\n"
);
77
mymtd =
do_map_probe
(
"cfi_probe"
, &h720x_map);
78
if
(!mymtd) {
79
printk
(
KERN_INFO
"H720x-MTD probing 16bit FLASH\n"
);
80
// Probe for bankwidth 2
81
h720x_map.
bankwidth
= 2;
82
mymtd =
do_map_probe
(
"cfi_probe"
, &h720x_map);
83
}
84
85
if
(mymtd) {
86
mymtd->
owner
=
THIS_MODULE
;
87
88
mtd_device_parse_register
(mymtd,
NULL
,
NULL
,
89
h720x_partitions,
NUM_PARTITIONS
);
90
return
0;
91
}
92
93
iounmap
((
void
*)h720x_map.
virt
);
94
return
-
ENXIO
;
95
}
96
97
/*
98
* Cleanup
99
*/
100
static
void
__exit
h720x_mtd_cleanup(
void
)
101
{
102
103
if
(mymtd) {
104
mtd_device_unregister
(mymtd);
105
map_destroy
(mymtd);
106
}
107
108
if
(h720x_map.
virt
) {
109
iounmap
((
void
*)h720x_map.
virt
);
110
h720x_map.
virt
= 0;
111
}
112
}
113
114
115
module_init
(h720x_mtd_init);
116
module_exit
(h720x_mtd_cleanup);
117
118
MODULE_LICENSE
(
"GPL"
);
119
MODULE_AUTHOR
(
"Thomas Gleixner <
[email protected]
>"
);
120
MODULE_DESCRIPTION
(
"MTD map driver for Hynix evaluation boards"
);
Generated on Thu Jan 10 2013 13:56:27 for Linux Kernel by
1.8.2