|
@@ -915,20 +915,19 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info,
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * s3c2410_nand_update_chip - post probe update
|
|
|
- * @info: The controller instance.
|
|
|
- * @nmtd: The driver version of the MTD instance.
|
|
|
+ * s3c2410_nand_attach_chip - Init the ECC engine after NAND scan
|
|
|
+ * @chip: The NAND chip
|
|
|
*
|
|
|
- * This routine is called after the chip probe has successfully completed
|
|
|
- * and the relevant per-chip information updated. This call ensure that
|
|
|
+ * This hook is called by the core after the identification of the NAND chip,
|
|
|
+ * once the relevant per-chip information is up to date.. This call ensure that
|
|
|
* we update the internal state accordingly.
|
|
|
*
|
|
|
* The internal state is currently limited to the ECC state information.
|
|
|
*/
|
|
|
-static int s3c2410_nand_update_chip(struct s3c2410_nand_info *info,
|
|
|
- struct s3c2410_nand_mtd *nmtd)
|
|
|
+static int s3c2410_nand_attach_chip(struct nand_chip *chip)
|
|
|
{
|
|
|
- struct nand_chip *chip = &nmtd->chip;
|
|
|
+ struct mtd_info *mtd = nand_to_mtd(chip);
|
|
|
+ struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd);
|
|
|
|
|
|
switch (chip->ecc.mode) {
|
|
|
|
|
@@ -998,6 +997,10 @@ static int s3c2410_nand_update_chip(struct s3c2410_nand_info *info,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static const struct nand_controller_ops s3c24xx_nand_controller_ops = {
|
|
|
+ .attach_chip = s3c2410_nand_attach_chip,
|
|
|
+};
|
|
|
+
|
|
|
static const struct of_device_id s3c24xx_nand_dt_ids[] = {
|
|
|
{
|
|
|
.compatible = "samsung,s3c2410-nand",
|
|
@@ -1095,6 +1098,7 @@ static int s3c24xx_nand_probe(struct platform_device *pdev)
|
|
|
platform_set_drvdata(pdev, info);
|
|
|
|
|
|
nand_controller_init(&info->controller);
|
|
|
+ info->controller.ops = &s3c24xx_nand_controller_ops;
|
|
|
|
|
|
/* get the clock source and enable it */
|
|
|
|
|
@@ -1166,15 +1170,7 @@ static int s3c24xx_nand_probe(struct platform_device *pdev)
|
|
|
mtd->dev.parent = &pdev->dev;
|
|
|
s3c2410_nand_init_chip(info, nmtd, sets);
|
|
|
|
|
|
- err = nand_scan_ident(mtd, (sets) ? sets->nr_chips : 1, NULL);
|
|
|
- if (err)
|
|
|
- goto exit_error;
|
|
|
-
|
|
|
- err = s3c2410_nand_update_chip(info, nmtd);
|
|
|
- if (err < 0)
|
|
|
- goto exit_error;
|
|
|
-
|
|
|
- err = nand_scan_tail(mtd);
|
|
|
+ err = nand_scan(mtd, sets ? sets->nr_chips : 1);
|
|
|
if (err)
|
|
|
goto exit_error;
|
|
|
|