|
@@ -72,6 +72,13 @@ static int __devinit plat_nand_probe(struct platform_device *pdev)
|
|
|
|
|
|
platform_set_drvdata(pdev, data);
|
|
|
|
|
|
+ /* Handle any platform specific setup */
|
|
|
+ if (pdata->ctrl.probe) {
|
|
|
+ res = pdata->ctrl.probe(pdev);
|
|
|
+ if (res)
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
/* Scan to find existance of the device */
|
|
|
if (nand_scan(&data->mtd, 1)) {
|
|
|
res = -ENXIO;
|
|
@@ -101,6 +108,8 @@ static int __devinit plat_nand_probe(struct platform_device *pdev)
|
|
|
|
|
|
nand_release(&data->mtd);
|
|
|
out:
|
|
|
+ if (pdata->ctrl.remove)
|
|
|
+ pdata->ctrl.remove(pdev);
|
|
|
platform_set_drvdata(pdev, NULL);
|
|
|
iounmap(data->io_base);
|
|
|
kfree(data);
|
|
@@ -113,15 +122,15 @@ out:
|
|
|
static int __devexit plat_nand_remove(struct platform_device *pdev)
|
|
|
{
|
|
|
struct plat_nand_data *data = platform_get_drvdata(pdev);
|
|
|
-#ifdef CONFIG_MTD_PARTITIONS
|
|
|
struct platform_nand_data *pdata = pdev->dev.platform_data;
|
|
|
-#endif
|
|
|
|
|
|
nand_release(&data->mtd);
|
|
|
#ifdef CONFIG_MTD_PARTITIONS
|
|
|
if (data->parts && data->parts != pdata->chip.partitions)
|
|
|
kfree(data->parts);
|
|
|
#endif
|
|
|
+ if (pdata->ctrl.remove)
|
|
|
+ pdata->ctrl.remove(pdev);
|
|
|
iounmap(data->io_base);
|
|
|
kfree(data);
|
|
|
|