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)
 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_to_nand(mtd);
+       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;
 
 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;
 {
        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);
 {
        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;
 {
        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;
 {
        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;
 
 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_to_nand(mtd);
+       struct nand_chip *chip = &this->nand;
        struct nand_ecc_ctrl *ecc = &chip->ecc;
        struct bch_geometry *bch_geo = &this->bch_geometry;
        int ret;
 
 static int gpmi_nand_init(struct gpmi_nand_data *this)
 {
-       struct mtd_info  *mtd = &this->mtd;
        struct nand_chip *chip = &this->nand;
+       struct mtd_info  *mtd = nand_to_mtd(chip);
        int ret;
 
        /* init current chip */