diff options
| -rw-r--r-- | drivers/mtd/nand/mxc_nand.c | 43 | ||||
| -rw-r--r-- | fs/jffs2/erase.c | 7 |
2 files changed, 23 insertions, 27 deletions
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c index f3548d048014..40c26080ecda 100644 --- a/drivers/mtd/nand/mxc_nand.c +++ b/drivers/mtd/nand/mxc_nand.c | |||
| @@ -831,6 +831,7 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command, | |||
| 831 | break; | 831 | break; |
| 832 | 832 | ||
| 833 | case NAND_CMD_READID: | 833 | case NAND_CMD_READID: |
| 834 | host->col_addr = 0; | ||
| 834 | send_read_id(host); | 835 | send_read_id(host); |
| 835 | break; | 836 | break; |
| 836 | 837 | ||
| @@ -867,6 +868,7 @@ static int __init mxcnd_probe(struct platform_device *pdev) | |||
| 867 | mtd->priv = this; | 868 | mtd->priv = this; |
| 868 | mtd->owner = THIS_MODULE; | 869 | mtd->owner = THIS_MODULE; |
| 869 | mtd->dev.parent = &pdev->dev; | 870 | mtd->dev.parent = &pdev->dev; |
| 871 | mtd->name = "mxc_nand"; | ||
| 870 | 872 | ||
| 871 | /* 50 us command delay time */ | 873 | /* 50 us command delay time */ |
| 872 | this->chip_delay = 5; | 874 | this->chip_delay = 5; |
| @@ -882,8 +884,10 @@ static int __init mxcnd_probe(struct platform_device *pdev) | |||
| 882 | this->verify_buf = mxc_nand_verify_buf; | 884 | this->verify_buf = mxc_nand_verify_buf; |
| 883 | 885 | ||
| 884 | host->clk = clk_get(&pdev->dev, "nfc"); | 886 | host->clk = clk_get(&pdev->dev, "nfc"); |
| 885 | if (IS_ERR(host->clk)) | 887 | if (IS_ERR(host->clk)) { |
| 888 | err = PTR_ERR(host->clk); | ||
| 886 | goto eclk; | 889 | goto eclk; |
| 890 | } | ||
| 887 | 891 | ||
| 888 | clk_enable(host->clk); | 892 | clk_enable(host->clk); |
| 889 | host->clk_act = 1; | 893 | host->clk_act = 1; |
| @@ -896,7 +900,7 @@ static int __init mxcnd_probe(struct platform_device *pdev) | |||
| 896 | 900 | ||
| 897 | host->regs = ioremap(res->start, res->end - res->start + 1); | 901 | host->regs = ioremap(res->start, res->end - res->start + 1); |
| 898 | if (!host->regs) { | 902 | if (!host->regs) { |
| 899 | err = -EIO; | 903 | err = -ENOMEM; |
| 900 | goto eres; | 904 | goto eres; |
| 901 | } | 905 | } |
| 902 | 906 | ||
| @@ -1011,30 +1015,35 @@ static int __devexit mxcnd_remove(struct platform_device *pdev) | |||
| 1011 | #ifdef CONFIG_PM | 1015 | #ifdef CONFIG_PM |
| 1012 | static int mxcnd_suspend(struct platform_device *pdev, pm_message_t state) | 1016 | static int mxcnd_suspend(struct platform_device *pdev, pm_message_t state) |
| 1013 | { | 1017 | { |
| 1014 | struct mtd_info *info = platform_get_drvdata(pdev); | 1018 | struct mtd_info *mtd = platform_get_drvdata(pdev); |
| 1019 | struct nand_chip *nand_chip = mtd->priv; | ||
| 1020 | struct mxc_nand_host *host = nand_chip->priv; | ||
| 1015 | int ret = 0; | 1021 | int ret = 0; |
| 1016 | 1022 | ||
| 1017 | DEBUG(MTD_DEBUG_LEVEL0, "MXC_ND : NAND suspend\n"); | 1023 | DEBUG(MTD_DEBUG_LEVEL0, "MXC_ND : NAND suspend\n"); |
| 1018 | if (info) | 1024 | if (mtd) { |
| 1019 | ret = info->suspend(info); | 1025 | ret = mtd->suspend(mtd); |
| 1020 | 1026 | /* Disable the NFC clock */ | |
| 1021 | /* Disable the NFC clock */ | 1027 | clk_disable(host->clk); |
| 1022 | clk_disable(nfc_clk); /* FIXME */ | 1028 | } |
| 1023 | 1029 | ||
| 1024 | return ret; | 1030 | return ret; |
| 1025 | } | 1031 | } |
| 1026 | 1032 | ||
| 1027 | static int mxcnd_resume(struct platform_device *pdev) | 1033 | static int mxcnd_resume(struct platform_device *pdev) |
| 1028 | { | 1034 | { |
| 1029 | struct mtd_info *info = platform_get_drvdata(pdev); | 1035 | struct mtd_info *mtd = platform_get_drvdata(pdev); |
| 1036 | struct nand_chip *nand_chip = mtd->priv; | ||
| 1037 | struct mxc_nand_host *host = nand_chip->priv; | ||
| 1030 | int ret = 0; | 1038 | int ret = 0; |
| 1031 | 1039 | ||
| 1032 | DEBUG(MTD_DEBUG_LEVEL0, "MXC_ND : NAND resume\n"); | 1040 | DEBUG(MTD_DEBUG_LEVEL0, "MXC_ND : NAND resume\n"); |
| 1033 | /* Enable the NFC clock */ | ||
| 1034 | clk_enable(nfc_clk); /* FIXME */ | ||
| 1035 | 1041 | ||
| 1036 | if (info) | 1042 | if (mtd) { |
| 1037 | info->resume(info); | 1043 | /* Enable the NFC clock */ |
| 1044 | clk_enable(host->clk); | ||
| 1045 | mtd->resume(mtd); | ||
| 1046 | } | ||
| 1038 | 1047 | ||
| 1039 | return ret; | 1048 | return ret; |
| 1040 | } | 1049 | } |
| @@ -1055,13 +1064,7 @@ static struct platform_driver mxcnd_driver = { | |||
| 1055 | 1064 | ||
| 1056 | static int __init mxc_nd_init(void) | 1065 | static int __init mxc_nd_init(void) |
| 1057 | { | 1066 | { |
| 1058 | /* Register the device driver structure. */ | 1067 | return platform_driver_probe(&mxcnd_driver, mxcnd_probe); |
| 1059 | pr_info("MXC MTD nand Driver\n"); | ||
| 1060 | if (platform_driver_probe(&mxcnd_driver, mxcnd_probe) != 0) { | ||
| 1061 | printk(KERN_ERR "Driver register failed for mxcnd_driver\n"); | ||
| 1062 | return -ENODEV; | ||
| 1063 | } | ||
| 1064 | return 0; | ||
| 1065 | } | 1068 | } |
| 1066 | 1069 | ||
| 1067 | static void __exit mxc_nd_cleanup(void) | 1070 | static void __exit mxc_nd_cleanup(void) |
diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c index c32b4a1ad6cf..a0244740b75a 100644 --- a/fs/jffs2/erase.c +++ b/fs/jffs2/erase.c | |||
| @@ -480,13 +480,6 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb | |||
| 480 | return; | 480 | return; |
| 481 | 481 | ||
| 482 | filebad: | 482 | filebad: |
| 483 | mutex_lock(&c->erase_free_sem); | ||
| 484 | spin_lock(&c->erase_completion_lock); | ||
| 485 | /* Stick it on a list (any list) so erase_failed can take it | ||
| 486 | right off again. Silly, but shouldn't happen often. */ | ||
| 487 | list_move(&jeb->list, &c->erasing_list); | ||
| 488 | spin_unlock(&c->erase_completion_lock); | ||
| 489 | mutex_unlock(&c->erase_free_sem); | ||
| 490 | jffs2_erase_failed(c, jeb, bad_offset); | 483 | jffs2_erase_failed(c, jeb, bad_offset); |
| 491 | return; | 484 | return; |
| 492 | 485 | ||
