diff options
Diffstat (limited to 'drivers/mtd/nand/plat_nand.c')
-rw-r--r-- | drivers/mtd/nand/plat_nand.c | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/drivers/mtd/nand/plat_nand.c b/drivers/mtd/nand/plat_nand.c index 633c04bf76f6..ea8e1234e0e2 100644 --- a/drivers/mtd/nand/plat_nand.c +++ b/drivers/mtd/nand/plat_nand.c | |||
@@ -21,8 +21,6 @@ struct plat_nand_data { | |||
21 | struct nand_chip chip; | 21 | struct nand_chip chip; |
22 | struct mtd_info mtd; | 22 | struct mtd_info mtd; |
23 | void __iomem *io_base; | 23 | void __iomem *io_base; |
24 | int nr_parts; | ||
25 | struct mtd_partition *parts; | ||
26 | }; | 24 | }; |
27 | 25 | ||
28 | /* | 26 | /* |
@@ -79,6 +77,7 @@ static int __devinit plat_nand_probe(struct platform_device *pdev) | |||
79 | data->chip.read_buf = pdata->ctrl.read_buf; | 77 | data->chip.read_buf = pdata->ctrl.read_buf; |
80 | data->chip.chip_delay = pdata->chip.chip_delay; | 78 | data->chip.chip_delay = pdata->chip.chip_delay; |
81 | data->chip.options |= pdata->chip.options; | 79 | data->chip.options |= pdata->chip.options; |
80 | data->chip.bbt_options |= pdata->chip.bbt_options; | ||
82 | 81 | ||
83 | data->chip.ecc.hwctl = pdata->ctrl.hwcontrol; | 82 | data->chip.ecc.hwctl = pdata->ctrl.hwcontrol; |
84 | data->chip.ecc.layout = pdata->chip.ecclayout; | 83 | data->chip.ecc.layout = pdata->chip.ecclayout; |
@@ -99,23 +98,9 @@ static int __devinit plat_nand_probe(struct platform_device *pdev) | |||
99 | goto out; | 98 | goto out; |
100 | } | 99 | } |
101 | 100 | ||
102 | if (pdata->chip.part_probe_types) { | 101 | err = mtd_device_parse_register(&data->mtd, |
103 | err = parse_mtd_partitions(&data->mtd, | 102 | pdata->chip.part_probe_types, 0, |
104 | pdata->chip.part_probe_types, | 103 | pdata->chip.partitions, pdata->chip.nr_partitions); |
105 | &data->parts, 0); | ||
106 | if (err > 0) { | ||
107 | mtd_device_register(&data->mtd, data->parts, err); | ||
108 | return 0; | ||
109 | } | ||
110 | } | ||
111 | if (pdata->chip.set_parts) | ||
112 | pdata->chip.set_parts(data->mtd.size, &pdata->chip); | ||
113 | if (pdata->chip.partitions) { | ||
114 | data->parts = pdata->chip.partitions; | ||
115 | err = mtd_device_register(&data->mtd, data->parts, | ||
116 | pdata->chip.nr_partitions); | ||
117 | } else | ||
118 | err = mtd_device_register(&data->mtd, NULL, 0); | ||
119 | 104 | ||
120 | if (!err) | 105 | if (!err) |
121 | return err; | 106 | return err; |
@@ -145,8 +130,6 @@ static int __devexit plat_nand_remove(struct platform_device *pdev) | |||
145 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 130 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
146 | 131 | ||
147 | nand_release(&data->mtd); | 132 | nand_release(&data->mtd); |
148 | if (data->parts && data->parts != pdata->chip.partitions) | ||
149 | kfree(data->parts); | ||
150 | if (pdata->ctrl.remove) | 133 | if (pdata->ctrl.remove) |
151 | pdata->ctrl.remove(pdev); | 134 | pdata->ctrl.remove(pdev); |
152 | iounmap(data->io_base); | 135 | iounmap(data->io_base); |