diff -urN ./lubbock-2.4.19-rmk7-pxa1/drivers/mtd/maps/lubbock.c ./lubbock-2.4.19-rmk7-pxa1-flash/drivers/mtd/maps/lubbock.c --- ./lubbock-2.4.19-rmk7-pxa1/drivers/mtd/maps/lubbock.c Mon May 12 02:25:48 2003 +++ ./lubbock-2.4.19-rmk7-pxa1-flash/drivers/mtd/maps/lubbock.c Thu May 15 14:14:59 2003 @@ -18,7 +18,10 @@ #include #include #include - +#ifdef CONFIG_PM +#include +static struct pm_dev *mtd_pm_dev = NULL; +#endif #define WINDOW_ADDR 0 //#define WINDOW_ADDR 0x04000000 @@ -101,12 +104,34 @@ extern int parse_redboot_partitions(struct mtd_info *master, struct mtd_partition **pparts); +#ifdef CONFIG_PM +static int mtd_pm_callback(struct pm_dev *dev,pm_request_t rqst,void *data) +{ + int i; + + if (rqst == PM_RESUME ) { + /* Unlock the flash device. */ + if( mymtd->unlock ) { + for (i=0; inumeraseregions;i++) { + int j; + for(j=0;jeraseregions[i].numblocks;j++) { + mymtd->unlock(mymtd,mymtd->eraseregions[i].offset + j * mymtd->eraseregions[i].erasesize, + mymtd->eraseregions[i].erasesize); + } + } + } + } + return 0; +} +#endif + static int __init init_lubbock(void) { struct mtd_partition *parts; int nb_parts = 0; int parsed_nr_parts = 0; char *part_type = "static"; + int i=0; lubbock_map.buswidth = (BOOT_DEF & 1) ? 2 : 4; printk( "Probing Lubbock flash at physical address 0x%08x (%d-bit buswidth)\n", @@ -122,6 +147,16 @@ return -ENXIO; } mymtd->module = THIS_MODULE; + /* Unlock the flash device. */ + if( mymtd->unlock ) { + for (i=0; inumeraseregions;i++) { + int j; + for(j=0;jeraseregions[i].numblocks;j++) { + mymtd->unlock(mymtd,mymtd->eraseregions[i].offset + j * mymtd->eraseregions[i].erasesize, + mymtd->eraseregions[i].erasesize); + } + } + } #ifdef CONFIG_MTD_REDBOOT_PARTS if (parsed_nr_parts == 0) { @@ -147,6 +182,12 @@ } else { add_mtd_device(mymtd); } +#ifdef CONFIG_PM + mtd_pm_dev = pm_register(PM_SYS_DEV, PM_SYS_UNKNOWN, mtd_pm_callback); + if( mtd_pm_dev == NULL ) { + printk(KERN_INFO "MTD pm register fialed.\n"); + } +#endif return 0; } @@ -160,6 +201,10 @@ } if (lubbock_map.map_priv_1) iounmap((void *)lubbock_map.map_priv_1); +#ifdef CONFIG_PM + if( mtd_pm_dev ) + pm_unregister(mtd_pm_dev); +#endif return 0; }