|
@@ -29,13 +29,15 @@
|
|
#include <asm/mach-types.h>
|
|
#include <asm/mach-types.h>
|
|
|
|
|
|
struct sharpsl_nand {
|
|
struct sharpsl_nand {
|
|
- struct mtd_info mtd;
|
|
|
|
struct nand_chip chip;
|
|
struct nand_chip chip;
|
|
|
|
|
|
void __iomem *io;
|
|
void __iomem *io;
|
|
};
|
|
};
|
|
|
|
|
|
-#define mtd_to_sharpsl(_mtd) container_of(_mtd, struct sharpsl_nand, mtd)
|
|
|
|
|
|
+static inline struct sharpsl_nand *mtd_to_sharpsl(struct mtd_info *mtd)
|
|
|
|
+{
|
|
|
|
+ return container_of(mtd_to_nand(mtd), struct sharpsl_nand, chip);
|
|
|
|
+}
|
|
|
|
|
|
/* register offset */
|
|
/* register offset */
|
|
#define ECCLPLB 0x00 /* line parity 7 - 0 bit */
|
|
#define ECCLPLB 0x00 /* line parity 7 - 0 bit */
|
|
@@ -109,6 +111,7 @@ static int sharpsl_nand_calculate_ecc(struct mtd_info *mtd, const u_char * dat,
|
|
static int sharpsl_nand_probe(struct platform_device *pdev)
|
|
static int sharpsl_nand_probe(struct platform_device *pdev)
|
|
{
|
|
{
|
|
struct nand_chip *this;
|
|
struct nand_chip *this;
|
|
|
|
+ struct mtd_info *mtd;
|
|
struct resource *r;
|
|
struct resource *r;
|
|
int err = 0;
|
|
int err = 0;
|
|
struct sharpsl_nand *sharpsl;
|
|
struct sharpsl_nand *sharpsl;
|
|
@@ -143,8 +146,9 @@ static int sharpsl_nand_probe(struct platform_device *pdev)
|
|
this = (struct nand_chip *)(&sharpsl->chip);
|
|
this = (struct nand_chip *)(&sharpsl->chip);
|
|
|
|
|
|
/* Link the private data with the MTD structure */
|
|
/* Link the private data with the MTD structure */
|
|
- sharpsl->mtd.priv = this;
|
|
|
|
- sharpsl->mtd.dev.parent = &pdev->dev;
|
|
|
|
|
|
+ mtd = nand_to_mtd(this);
|
|
|
|
+ mtd->priv = this;
|
|
|
|
+ mtd->dev.parent = &pdev->dev;
|
|
|
|
|
|
platform_set_drvdata(pdev, sharpsl);
|
|
platform_set_drvdata(pdev, sharpsl);
|
|
|
|
|
|
@@ -173,14 +177,14 @@ static int sharpsl_nand_probe(struct platform_device *pdev)
|
|
this->ecc.correct = nand_correct_data;
|
|
this->ecc.correct = nand_correct_data;
|
|
|
|
|
|
/* Scan to find existence of the device */
|
|
/* Scan to find existence of the device */
|
|
- err = nand_scan(&sharpsl->mtd, 1);
|
|
|
|
|
|
+ err = nand_scan(mtd, 1);
|
|
if (err)
|
|
if (err)
|
|
goto err_scan;
|
|
goto err_scan;
|
|
|
|
|
|
/* Register the partitions */
|
|
/* Register the partitions */
|
|
- sharpsl->mtd.name = "sharpsl-nand";
|
|
|
|
|
|
+ mtd->name = "sharpsl-nand";
|
|
|
|
|
|
- err = mtd_device_parse_register(&sharpsl->mtd, NULL, NULL,
|
|
|
|
|
|
+ err = mtd_device_parse_register(mtd, NULL, NULL,
|
|
data->partitions, data->nr_partitions);
|
|
data->partitions, data->nr_partitions);
|
|
if (err)
|
|
if (err)
|
|
goto err_add;
|
|
goto err_add;
|
|
@@ -189,7 +193,7 @@ static int sharpsl_nand_probe(struct platform_device *pdev)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
err_add:
|
|
err_add:
|
|
- nand_release(&sharpsl->mtd);
|
|
|
|
|
|
+ nand_release(mtd);
|
|
|
|
|
|
err_scan:
|
|
err_scan:
|
|
iounmap(sharpsl->io);
|
|
iounmap(sharpsl->io);
|
|
@@ -207,7 +211,7 @@ static int sharpsl_nand_remove(struct platform_device *pdev)
|
|
struct sharpsl_nand *sharpsl = platform_get_drvdata(pdev);
|
|
struct sharpsl_nand *sharpsl = platform_get_drvdata(pdev);
|
|
|
|
|
|
/* Release resources, unregister device */
|
|
/* Release resources, unregister device */
|
|
- nand_release(&sharpsl->mtd);
|
|
|
|
|
|
+ nand_release(nand_to_mtd(&sharpsl->chip));
|
|
|
|
|
|
iounmap(sharpsl->io);
|
|
iounmap(sharpsl->io);
|
|
|
|
|