//#include "api_flash.h"\r
#include "rknand_base.h"\r
\r
-\r
+#ifdef CONFIG_ARCH_RK30\r
#define DRIVER_NAME "rk30xxnand"\r
+#endif\r
+\r
+#ifdef CONFIG_ARCH_RK29\r
+#define DRIVER_NAME "rk29xxnand"\r
+#endif\r
+\r
const char rknand_base_version[] = "rknand_base.c version: 4.32 20120103";\r
#define NAND_DEBUG_LEVEL0 0\r
#define NAND_DEBUG_LEVEL1 1\r
struct mtd_partition *rknand_parts;\r
struct rknand_info * gpNandInfo;\r
\r
-#ifdef CONFIG_MTD_NAND_RK29XX_DEBUG\r
-static int s_debug = CONFIG_MTD_NAND_RK29XX_DEBUG_VERBOSE;\r
+#ifdef CONFIG_MTD_NAND_RK_DEBUG\r
+static int s_debug = CONFIG_MTD_NAND_RK_DEBUG_VERBOSE;\r
#undef NAND_DEBUG\r
#define NAND_DEBUG(n, format, arg...) \\r
if (n <= s_debug) { \\r
return buf - page < count ? buf - page : count;\r
}\r
\r
-static void rk28nand_create_procfs(void)\r
+static void rknand_create_procfs(void)\r
{\r
/* Install the proc_fs entry */\r
- my_proc_entry = create_proc_entry("rk29xxnand",\r
+ my_proc_entry = create_proc_entry("rknand",\r
S_IRUGO | S_IFREG,\r
NANDPROC_ROOT);\r
\r
}\r
}\r
\r
-static int rk28xxnand_read(struct mtd_info *mtd, loff_t from, size_t len,\r
+static int rknand_read(struct mtd_info *mtd, loff_t from, size_t len,\r
size_t *retlen, u_char *buf)\r
{\r
int ret = 0;\r
return 0;//ret;\r
}\r
\r
-static int rk28xxnand_write(struct mtd_info *mtd, loff_t from, size_t len,\r
+static int rknand_write(struct mtd_info *mtd, loff_t from, size_t len,\r
size_t *retlen, const u_char *buf)\r
{\r
int ret = 0;\r
return 0;\r
}\r
\r
-static int rk28xxnand_erase(struct mtd_info *mtd, struct erase_info *instr)\r
+static int rknand_erase(struct mtd_info *mtd, struct erase_info *instr)\r
{\r
int ret = 0;\r
if (instr->callback)\r
return ret;\r
}\r
\r
-static void rk28xxnand_sync(struct mtd_info *mtd)\r
+static void rknand_sync(struct mtd_info *mtd)\r
{\r
- NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk30xxnand_sync: \n");\r
+ NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk_nand_sync: \n");\r
if(gpNandInfo->ftl_sync)\r
gpNandInfo->ftl_sync();\r
}\r
\r
extern void FtlWriteCacheEn(int);\r
-static int rk28xxnand_panic_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)\r
+static int rknand_panic_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)\r
{\r
int sector = len >> 9;\r
int LBA = (int)(to >> 9);\r
}\r
\r
\r
-static int rk28xxnand_block_isbad(struct mtd_info *mtd, loff_t ofs)\r
+static int rknand_block_isbad(struct mtd_info *mtd, loff_t ofs)\r
{\r
return 0;\r
}\r
\r
-static int rk28xxnand_block_markbad(struct mtd_info *mtd, loff_t ofs)\r
+static int rknand_block_markbad(struct mtd_info *mtd, loff_t ofs)\r
{\r
return 0;\r
}\r
\r
-static int rk28xxnand_init(struct rknand_info *nand_info)\r
+static int rknand_info_init(struct rknand_info *nand_info)\r
{\r
struct mtd_info *mtd = &rknand_mtd;\r
struct rknand_chip *rknand = &nand_info->rknand; \r
// Fill in remaining MTD driver data \r
mtd->type = MTD_NANDFLASH;\r
mtd->flags = (MTD_WRITEABLE|MTD_NO_ERASE);//\r
- mtd->erase = rk28xxnand_erase;\r
+ mtd->erase = rknand_erase;\r
mtd->point = NULL;\r
mtd->unpoint = NULL;\r
- mtd->read = rk28xxnand_read;\r
- mtd->write = rk28xxnand_write;\r
+ mtd->read = rknand_read;\r
+ mtd->write = rknand_write;\r
mtd->read_oob = NULL;\r
mtd->write_oob = NULL;\r
- mtd->panic_write = rk28xxnand_panic_write;\r
+ mtd->panic_write = rknand_panic_write;\r
\r
- mtd->sync = rk28xxnand_sync;\r
+ mtd->sync = rknand_sync;\r
mtd->lock = NULL;\r
mtd->unlock = NULL;\r
mtd->suspend = NULL;\r
mtd->resume = NULL;\r
- mtd->block_isbad = rk28xxnand_block_isbad;\r
- mtd->block_markbad = rk28xxnand_block_markbad;\r
+ mtd->block_isbad = rknand_block_isbad;\r
+ mtd->block_markbad = rknand_block_markbad;\r
mtd->owner = THIS_MODULE;\r
return 0;\r
}\r
#ifdef CONFIG_MTD_CMDLINE_PARTS\r
const char *part_probes[] = { "cmdlinepart", NULL }; \r
#endif \r
-static struct mtd_partition rk30_partition_info[] = {\r
- { \r
- name: "misc",\r
- offset: 0x2000*0x200,\r
- size: 0x2000*0x200,//100MB\r
- },\r
-\r
- { \r
- name: "kernel",\r
- offset: 0x4000*0x200,\r
- size: 0x4000*0x200,//200MB\r
- },\r
\r
- { \r
- name: "boot",\r
- offset: 0x8000*0x200,\r
- size: 0x8000*0x200,//200MB\r
- },\r
- \r
- { \r
- name: "recovery",\r
- offset: 0x10000*0x200,\r
- size: 0x8000*0x200,//200MB\r
- },\r
- \r
- { \r
- name: "backup",\r
- offset: 0x00018000*0x200,\r
- size: 0x000C0000*0x200,//200MB\r
- },\r
- \r
- { \r
- name: "cache",\r
- offset: 0x000D8000*0x200,\r
- size: 0x00040000*0x200,//200MB\r
- },\r
- \r
- { \r
- name: "userdata",\r
- offset: 0x00118000*0x200,\r
- size: 0x00100000*0x200,//200MB\r
- },\r
- \r
- { \r
- name: "kpanic",\r
- offset: 0x00218000*0x200,\r
- size: 0x00002000*0x200,//200MB\r
- },\r
- \r
- { \r
- name: "system",\r
- offset: 0x0021A000*0x200,\r
- size: 0x000A0000*0x200,//200MB\r
- },\r
- \r
- { \r
- name: "user",\r
- offset: 0x002BA000*0x200,\r
- size: 0x000A0000*0x200,//200MB\r
- },\r
-};\r
-\r
-\r
-static int rk29xxnand_add_partitions(struct rknand_info *nand_info)\r
+static int rknand_add_partitions(struct rknand_info *nand_info)\r
{\r
#ifdef CONFIG_MTD_CMDLINE_PARTS\r
int num_partitions = 0; \r
#endif\r
} \r
#endif \r
- g_num_partitions = 10;\r
- rknand_parts = rk30_partition_info;\r
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0))\r
- return mtd_device_register(&rknand_mtd, rknand_parts, g_num_partitions);\r
-#else\r
- return add_mtd_partitions(&(rknand_mtd), rknand_parts, g_num_partitions);\r
-#endif\r
-\r
+ g_num_partitions = 0;\r
return 0;\r
}\r
\r
\r
rknand_mtd.size = (uint64_t)gpNandInfo->nandCapacity*0x200;\r
\r
- rk29xxnand_add_partitions(prknand_Info);\r
+ rknand_add_partitions(prknand_Info);\r
\r
parts = rknand_parts;\r
+ SysImageWriteEndAdd = 0;\r
for(i=0;i<g_num_partitions;i++)\r
{\r
//printk(">>> part[%d]: name=%s offset=0x%012llx\n", i, parts[i].name, parts[i].offset);\r
break;\r
}\r
}\r
-\r
- gpNandInfo->SysImageWriteEndAdd = SysImageWriteEndAdd;\r
+ if(SysImageWriteEndAdd)\r
+ gpNandInfo->SysImageWriteEndAdd = SysImageWriteEndAdd;\r
\r
//if(gpNandInfo->nand_timing_config)\r
// gpNandInfo->nand_timing_config(100*1000);\r
{\r
struct rknand_info *nand_info;\r
int err = 0;\r
- printk("nand init...\n");\r
- NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk30xxnand_probe: \n");\r
+ NAND_DEBUG(NAND_DEBUG_LEVEL0,"rk_nand_probe: \n");\r
gpNandInfo = kzalloc(sizeof(struct rknand_info), GFP_KERNEL);\r
if (!gpNandInfo)\r
return -ENOMEM;\r
rknand_mtd.priv = &nand_info->rknand;\r
rknand_mtd.owner = THIS_MODULE;\r
\r
- if(rk28xxnand_init(nand_info))\r
+ if(rknand_info_init(nand_info))\r
{\r
err = -ENXIO;\r
goto exit_free;\r
nand_info->add_rknand_device = add_rknand_device;\r
nand_info->get_rknand_device = get_rknand_device;\r
\r
- rk28nand_create_procfs();\r
+ rknand_create_procfs();\r
return 0;\r
\r
exit_free:\r