mtd: nand: gpmi: use the mtd instance embedded in struct nand_chip
[deliverable/linux.git] / drivers / mtd / nand / gpmi-nand / gpmi-nand.c
index 1b8f3500e6d22613b7046e71af5ddb5c64717f65..38b07c7aa1e44fb565926ad88f2fd7a16b325561 100644 (file)
@@ -107,7 +107,7 @@ static irqreturn_t bch_irq(int irq, void *cookie)
 static inline int get_ecc_strength(struct gpmi_nand_data *this)
 {
        struct bch_geometry *geo = &this->bch_geometry;
-       struct mtd_info *mtd = &this->mtd;
+       struct mtd_info *mtd = nand_to_mtd(&this->nand);
        int ecc_strength;
 
        ecc_strength = ((mtd->oobsize - geo->metadata_size) * 8)
@@ -139,8 +139,8 @@ static inline bool gpmi_check_ecc(struct gpmi_nand_data *this)
 static bool set_geometry_by_ecc_info(struct gpmi_nand_data *this)
 {
        struct bch_geometry *geo = &this->bch_geometry;
-       struct mtd_info *mtd = &this->mtd;
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = &this->nand;
+       struct mtd_info *mtd = nand_to_mtd(chip);
        struct nand_oobfree *of = gpmi_hw_ecclayout.oobfree;
        unsigned int block_mark_bit_offset;
 
@@ -257,7 +257,7 @@ static bool set_geometry_by_ecc_info(struct gpmi_nand_data *this)
 static int legacy_set_geometry(struct gpmi_nand_data *this)
 {
        struct bch_geometry *geo = &this->bch_geometry;
-       struct mtd_info *mtd = &this->mtd;
+       struct mtd_info *mtd = nand_to_mtd(&this->nand);
        unsigned int metadata_size;
        unsigned int status_size;
        unsigned int block_mark_bit_offset;
@@ -804,7 +804,7 @@ static int gpmi_alloc_dma_buffer(struct gpmi_nand_data *this)
 {
        struct bch_geometry *geo = &this->bch_geometry;
        struct device *dev = this->dev;
-       struct mtd_info *mtd = &this->mtd;
+       struct mtd_info *mtd = nand_to_mtd(&this->nand);
 
        /* [1] Allocate a command buffer. PAGE_SIZE is enough. */
        this->cmd_buffer = kzalloc(PAGE_SIZE, GFP_DMA | GFP_KERNEL);
@@ -856,7 +856,7 @@ error_alloc:
 
 static void gpmi_cmd_ctrl(struct mtd_info *mtd, int data, unsigned int ctrl)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        struct gpmi_nand_data *this = chip->priv;
        int ret;
 
@@ -890,7 +890,7 @@ static void gpmi_cmd_ctrl(struct mtd_info *mtd, int data, unsigned int ctrl)
 
 static int gpmi_dev_ready(struct mtd_info *mtd)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        struct gpmi_nand_data *this = chip->priv;
 
        return gpmi_is_ready(this, this->current_chip);
@@ -898,7 +898,7 @@ static int gpmi_dev_ready(struct mtd_info *mtd)
 
 static void gpmi_select_chip(struct mtd_info *mtd, int chipnr)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        struct gpmi_nand_data *this = chip->priv;
 
        if ((this->current_chip < 0) && (chipnr >= 0))
@@ -911,7 +911,7 @@ static void gpmi_select_chip(struct mtd_info *mtd, int chipnr)
 
 static void gpmi_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        struct gpmi_nand_data *this = chip->priv;
 
        dev_dbg(this->dev, "len is %d\n", len);
@@ -923,7 +923,7 @@ static void gpmi_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
 
 static void gpmi_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        struct gpmi_nand_data *this = chip->priv;
 
        dev_dbg(this->dev, "len is %d\n", len);
@@ -935,7 +935,7 @@ static void gpmi_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
 
 static uint8_t gpmi_read_byte(struct mtd_info *mtd)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        struct gpmi_nand_data *this = chip->priv;
        uint8_t *buf = this->data_buffer_dma;
 
@@ -1160,7 +1160,7 @@ static int gpmi_ecc_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,
 }
 
 static int gpmi_ecc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
-                               const uint8_t *buf, int oob_required)
+                               const uint8_t *buf, int oob_required, int page)
 {
        struct gpmi_nand_data *this = chip->priv;
        struct bch_geometry *nfc_geo = &this->bch_geometry;
@@ -1446,7 +1446,7 @@ static int gpmi_ecc_read_page_raw(struct mtd_info *mtd,
 static int gpmi_ecc_write_page_raw(struct mtd_info *mtd,
                                   struct nand_chip *chip,
                                   const uint8_t *buf,
-                                  int oob_required)
+                                  int oob_required, int page)
 {
        struct gpmi_nand_data *this = chip->priv;
        struct bch_geometry *nfc_geo = &this->bch_geometry;
@@ -1533,12 +1533,12 @@ static int gpmi_ecc_write_oob_raw(struct mtd_info *mtd, struct nand_chip *chip,
 {
        chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0, page);
 
-       return gpmi_ecc_write_page_raw(mtd, chip, NULL, 1);
+       return gpmi_ecc_write_page_raw(mtd, chip, NULL, 1, page);
 }
 
 static int gpmi_block_markbad(struct mtd_info *mtd, loff_t ofs)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        struct gpmi_nand_data *this = chip->priv;
        int ret = 0;
        uint8_t *block_mark;
@@ -1600,8 +1600,8 @@ static int mx23_check_transcription_stamp(struct gpmi_nand_data *this)
 {
        struct boot_rom_geometry *rom_geo = &this->rom_geometry;
        struct device *dev = this->dev;
-       struct mtd_info *mtd = &this->mtd;
        struct nand_chip *chip = &this->nand;
+       struct mtd_info *mtd = nand_to_mtd(chip);
        unsigned int search_area_size_in_strides;
        unsigned int stride;
        unsigned int page;
@@ -1655,8 +1655,8 @@ static int mx23_write_transcription_stamp(struct gpmi_nand_data *this)
 {
        struct device *dev = this->dev;
        struct boot_rom_geometry *rom_geo = &this->rom_geometry;
-       struct mtd_info *mtd = &this->mtd;
        struct nand_chip *chip = &this->nand;
+       struct mtd_info *mtd = nand_to_mtd(chip);
        unsigned int block_size_in_pages;
        unsigned int search_area_size_in_strides;
        unsigned int search_area_size_in_pages;
@@ -1717,7 +1717,7 @@ static int mx23_write_transcription_stamp(struct gpmi_nand_data *this)
                /* Write the first page of the current stride. */
                dev_dbg(dev, "Writing an NCB fingerprint in page 0x%x\n", page);
                chip->cmdfunc(mtd, NAND_CMD_SEQIN, 0x00, page);
-               chip->ecc.write_page_raw(mtd, chip, buffer, 0);
+               chip->ecc.write_page_raw(mtd, chip, buffer, 0, page);
                chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
 
                /* Wait for the write to finish. */
@@ -1735,7 +1735,7 @@ static int mx23_boot_init(struct gpmi_nand_data  *this)
 {
        struct device *dev = this->dev;
        struct nand_chip *chip = &this->nand;
-       struct mtd_info *mtd = &this->mtd;
+       struct mtd_info *mtd = nand_to_mtd(chip);
        unsigned int block_count;
        unsigned int block;
        int     chipnr;
@@ -1831,14 +1831,13 @@ static int gpmi_set_geometry(struct gpmi_nand_data *this)
 
 static void gpmi_nand_exit(struct gpmi_nand_data *this)
 {
-       nand_release(&this->mtd);
+       nand_release(nand_to_mtd(&this->nand));
        gpmi_free_dma_buffer(this);
 }
 
 static int gpmi_init_last(struct gpmi_nand_data *this)
 {
-       struct mtd_info *mtd = &this->mtd;
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = &this->nand;
        struct nand_ecc_ctrl *ecc = &chip->ecc;
        struct bch_geometry *bch_geo = &this->bch_geometry;
        int ret;
@@ -1886,9 +1885,8 @@ static int gpmi_init_last(struct gpmi_nand_data *this)
 
 static int gpmi_nand_init(struct gpmi_nand_data *this)
 {
-       struct mtd_info  *mtd = &this->mtd;
        struct nand_chip *chip = &this->nand;
-       struct mtd_part_parser_data ppdata = {};
+       struct mtd_info  *mtd = nand_to_mtd(chip);
        int ret;
 
        /* init current chip */
@@ -1897,10 +1895,11 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
        /* init the MTD data structures */
        mtd->priv               = chip;
        mtd->name               = "gpmi-nand";
-       mtd->owner              = THIS_MODULE;
+       mtd->dev.parent         = this->dev;
 
        /* init the nand_chip{}, we don't support a 16-bit NAND Flash bus. */
        chip->priv              = this;
+       nand_set_flash_node(chip, this->pdev->dev.of_node);
        chip->select_chip       = gpmi_select_chip;
        chip->cmd_ctrl          = gpmi_cmd_ctrl;
        chip->dev_ready         = gpmi_dev_ready;
@@ -1954,8 +1953,7 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
        if (ret)
                goto err_out;
 
-       ppdata.of_node = this->pdev->dev.of_node;
-       ret = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
+       ret = mtd_device_register(mtd, NULL, 0);
        if (ret)
                goto err_out;
        return 0;
This page took 0.029434 seconds and 5 git commands to generate.