int tag;\r
int enable;\r
int clk_rate[2];\r
- int reserved0[8];\r
+ int nand_suspend_state;\r
+ int nand_shutdown_state;\r
+ int reserved0[6];\r
\r
void (*rknand_suspend)(void);\r
void (*rknand_resume)(void);\r
gpNandInfo = kzalloc(sizeof(struct rknand_info), GFP_KERNEL);\r
if (!gpNandInfo)\r
return -ENOMEM;\r
+ gpNandInfo->nand_suspend_state = 0;\r
+ gpNandInfo->nand_shutdown_state = 0;\r
}\r
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);\r
membase = devm_request_and_ioremap(&pdev->dev, mem);\r
\r
static int rknand_suspend(struct platform_device *pdev, pm_message_t state)\r
{\r
- if(gpNandInfo->rknand_suspend)\r
- {\r
+ if(gpNandInfo->rknand_suspend && gpNandInfo->nand_suspend_state == 0){\r
+ gpNandInfo->nand_suspend_state = 1;\r
gpNandInfo->rknand_suspend();\r
//TODO:nandc clk disable\r
}\r
\r
static int rknand_resume(struct platform_device *pdev)\r
{\r
- if(gpNandInfo->rknand_resume)\r
- {\r
+ if(gpNandInfo->rknand_resume && gpNandInfo->nand_suspend_state == 1){\r
+ gpNandInfo->nand_suspend_state = 0;\r
//TODO:nandc clk enable\r
gpNandInfo->rknand_resume(); \r
}\r
\r
static void rknand_shutdown(struct platform_device *pdev)\r
{\r
- if(gpNandInfo->rknand_buffer_shutdown)\r
- gpNandInfo->rknand_buffer_shutdown(); \r
+ if(gpNandInfo->rknand_buffer_shutdown && gpNandInfo->nand_shutdown_state == 0){\r
+ gpNandInfo->nand_shutdown_state = 1;\r
+ gpNandInfo->rknand_buffer_shutdown();\r
+ }\r
}\r
\r
void rknand_dev_cache_flush(void)\r